@testgorilla/tgo-coding-test 0.0.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/README.md +49 -2
  2. package/esm2022/index.mjs +12 -0
  3. package/esm2022/lib/components/code-editor/code-editor.component.mjs +335 -0
  4. package/esm2022/lib/components/code-editor/code-editor.service.mjs +72 -0
  5. package/esm2022/lib/components/code-editor/helpers/c-helper.mjs +40 -0
  6. package/esm2022/lib/components/code-editor/helpers/code-editor-helper.base.mjs +11 -0
  7. package/esm2022/lib/components/code-editor/helpers/code-editor-helper.model.mjs +2 -0
  8. package/esm2022/lib/components/code-editor/helpers/cpp-helper.mjs +41 -0
  9. package/esm2022/lib/components/code-editor/helpers/csharp-helper.mjs +42 -0
  10. package/esm2022/lib/components/code-editor/helpers/go-helper.mjs +42 -0
  11. package/esm2022/lib/components/code-editor/helpers/index.mjs +16 -0
  12. package/esm2022/lib/components/code-editor/helpers/java-helper.mjs +42 -0
  13. package/esm2022/lib/components/code-editor/helpers/javascript-helper.mjs +26 -0
  14. package/esm2022/lib/components/code-editor/helpers/kotlin-helper.mjs +42 -0
  15. package/esm2022/lib/components/code-editor/helpers/php-helper.mjs +26 -0
  16. package/esm2022/lib/components/code-editor/helpers/python-helper.mjs +26 -0
  17. package/esm2022/lib/components/code-editor/helpers/r-helper.mjs +26 -0
  18. package/esm2022/lib/components/code-editor/helpers/ruby-helper.mjs +26 -0
  19. package/esm2022/lib/components/code-editor/helpers/scala-helper.mjs +41 -0
  20. package/esm2022/lib/components/code-editor/helpers/sql-helper.mjs +34 -0
  21. package/esm2022/lib/components/code-editor/helpers/swift-helper.mjs +40 -0
  22. package/esm2022/lib/components/code-editor/helpers/typescript-helper.mjs +41 -0
  23. package/esm2022/lib/components/code-editor/models/code-editor.model.mjs +2 -0
  24. package/esm2022/lib/components/code-editor/models/coding-snapshot.model.mjs +2 -0
  25. package/esm2022/lib/components/coding-question/coding-question.component.mjs +126 -0
  26. package/esm2022/lib/components/coding-section/coding-section.component.mjs +188 -0
  27. package/esm2022/lib/components/common/truncated-text/truncated-text.component.mjs +38 -0
  28. package/esm2022/lib/components/configurations/configurations.component.mjs +97 -0
  29. package/esm2022/lib/components/instructions/instructions.component.mjs +139 -0
  30. package/esm2022/lib/components/panel/panel.component.mjs +34 -0
  31. package/esm2022/lib/components/runnable-editor/runnable-editor.component.mjs +169 -0
  32. package/esm2022/lib/components/tests/test-cases/test-cases.component.mjs +198 -0
  33. package/esm2022/lib/components/tests/test-cases-content/test-cases-content.component.mjs +96 -0
  34. package/esm2022/lib/components/tests/test-cases-status/test-cases-status.component.mjs +21 -0
  35. package/esm2022/lib/components/tests/test-results.component.mjs +127 -0
  36. package/esm2022/lib/components/tgo-coding-test/tgo-coding-test.component.mjs +280 -0
  37. package/esm2022/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.mjs +476 -0
  38. package/esm2022/lib/config/index.mjs +2 -0
  39. package/esm2022/lib/config/tgo-coding-test.config.mjs +2 -0
  40. package/esm2022/lib/config/tgo-coding-test.provider.mjs +34 -0
  41. package/esm2022/lib/config/tgo-coding-test.token.mjs +14 -0
  42. package/esm2022/lib/models/auto-saved-data.mjs +2 -0
  43. package/esm2022/lib/models/code-event.mjs +2 -0
  44. package/esm2022/lib/models/coderunner-execution-results.mjs +2 -0
  45. package/esm2022/lib/models/configs.mjs +2 -0
  46. package/esm2022/lib/models/language-change-action.mjs +2 -0
  47. package/esm2022/lib/models/lat-languages.mjs +3 -0
  48. package/esm2022/lib/models/mixpanel-events.mjs +2 -0
  49. package/esm2022/lib/models/mode.mjs +2 -0
  50. package/esm2022/lib/models/paste-data.mjs +2 -0
  51. package/esm2022/lib/models/programming-language.mjs +2 -0
  52. package/esm2022/lib/models/test-cases.mjs +7 -0
  53. package/esm2022/lib/models/theme.mjs +2 -0
  54. package/esm2022/lib/models/translations.mjs +2 -0
  55. package/esm2022/lib/models/view-mode.mjs +8 -0
  56. package/esm2022/lib/pipes/memoize-func.pipe.mjs +39 -0
  57. package/esm2022/lib/services/candidate-coding-test-services/candidature-api.service.mjs +19 -0
  58. package/esm2022/lib/services/candidate-coding-test-services/coderunner-api.service.mjs +58 -0
  59. package/esm2022/lib/services/candidate-coding-test-services/coding-test-tour.service.mjs +89 -0
  60. package/esm2022/lib/services/candidate-coding-test-services/coding-test.service.mjs +490 -0
  61. package/esm2022/lib/services/candidate-coding-test-services/index.mjs +5 -0
  62. package/esm2022/lib/services/coding-test-config.service.mjs +51 -0
  63. package/esm2022/lib/services/configurations.service.mjs +89 -0
  64. package/esm2022/lib/services/lib-coding-test.service.mjs +106 -0
  65. package/esm2022/lib/services/storage.service.mjs +624 -0
  66. package/esm2022/lib/services/test-cases.service.mjs +30 -0
  67. package/esm2022/lib/services/theme.service.mjs +36 -0
  68. package/esm2022/lib/utils/additional-languages/erlang.mjs +103 -0
  69. package/esm2022/lib/utils/resize-element.mjs +13 -0
  70. package/esm2022/lib/utils/time-to-ms.util.mjs +11 -0
  71. package/esm2022/shared/index.mjs +5 -0
  72. package/esm2022/shared/lib/components/audio-animation/audio-animation.component.mjs +114 -0
  73. package/esm2022/shared/lib/components/audio-animation/index.mjs +2 -0
  74. package/esm2022/shared/lib/components/index.mjs +3 -0
  75. package/esm2022/shared/lib/components/vimeo-video/index.mjs +2 -0
  76. package/esm2022/shared/lib/components/vimeo-video/vimeo-video.component.mjs +101 -0
  77. package/esm2022/shared/lib/models/answer.mjs +2 -0
  78. package/esm2022/shared/lib/models/assessment.mjs +2 -0
  79. package/esm2022/shared/lib/models/environment.mjs +2 -0
  80. package/esm2022/shared/lib/models/index.mjs +9 -0
  81. package/esm2022/shared/lib/models/question-component.mjs +2 -0
  82. package/esm2022/shared/lib/models/question.mjs +2 -0
  83. package/esm2022/shared/lib/models/test.mjs +2 -0
  84. package/esm2022/shared/lib/models/translations.mjs +2 -0
  85. package/esm2022/shared/lib/models/window.mjs +2 -0
  86. package/esm2022/shared/lib/services/api/api.service.mjs +97 -0
  87. package/esm2022/shared/lib/services/api/mocked-api.service.mjs +131 -0
  88. package/esm2022/shared/lib/services/environment/environment.service.mjs +13 -0
  89. package/esm2022/shared/lib/services/index.mjs +10 -0
  90. package/esm2022/shared/lib/services/localization/languages.model.mjs +19 -0
  91. package/esm2022/shared/lib/services/localization/transloco-lazy-module-utils.mjs +27 -0
  92. package/esm2022/shared/lib/services/localization/transloco-testing.module.mjs +11 -0
  93. package/esm2022/shared/lib/services/media/media.service.mjs +129 -0
  94. package/esm2022/shared/lib/services/mixpanel/mixpanel.service.mjs +30 -0
  95. package/esm2022/shared/lib/services/theme/theme.service.mjs +24 -0
  96. package/esm2022/shared/test-mocks/assessment-test.mock.mjs +112 -0
  97. package/esm2022/shared/test-mocks/index.mjs +3 -0
  98. package/esm2022/shared/test-mocks/tgo-ui.mock.mjs +39 -0
  99. package/esm2022/testgorilla-tgo-coding-test.mjs +5 -0
  100. package/fesm2022/testgorilla-tgo-coding-test.mjs +4526 -0
  101. package/fesm2022/testgorilla-tgo-coding-test.mjs.map +1 -0
  102. package/{src/index.ts → index.d.ts} +2 -19
  103. package/lib/components/code-editor/code-editor.component.d.ts +54 -0
  104. package/lib/components/code-editor/code-editor.service.d.ts +12 -0
  105. package/lib/components/code-editor/helpers/c-helper.d.ts +11 -0
  106. package/lib/components/code-editor/helpers/code-editor-helper.base.d.ts +8 -0
  107. package/lib/components/code-editor/helpers/code-editor-helper.model.d.ts +62 -0
  108. package/lib/components/code-editor/helpers/cpp-helper.d.ts +11 -0
  109. package/lib/components/code-editor/helpers/csharp-helper.d.ts +12 -0
  110. package/lib/components/code-editor/helpers/go-helper.d.ts +12 -0
  111. package/lib/components/code-editor/helpers/java-helper.d.ts +12 -0
  112. package/lib/components/code-editor/helpers/javascript-helper.d.ts +10 -0
  113. package/lib/components/code-editor/helpers/kotlin-helper.d.ts +12 -0
  114. package/lib/components/code-editor/helpers/php-helper.d.ts +10 -0
  115. package/lib/components/code-editor/helpers/python-helper.d.ts +10 -0
  116. package/lib/components/code-editor/helpers/r-helper.d.ts +10 -0
  117. package/lib/components/code-editor/helpers/ruby-helper.d.ts +10 -0
  118. package/lib/components/code-editor/helpers/scala-helper.d.ts +12 -0
  119. package/lib/components/code-editor/helpers/sql-helper.d.ts +10 -0
  120. package/lib/components/code-editor/helpers/swift-helper.d.ts +11 -0
  121. package/lib/components/code-editor/helpers/typescript-helper.d.ts +11 -0
  122. package/lib/components/code-editor/models/code-editor.model.d.ts +8 -0
  123. package/lib/components/code-editor/models/coding-snapshot.model.d.ts +4 -0
  124. package/lib/components/coding-question/coding-question.component.d.ts +45 -0
  125. package/lib/components/coding-section/coding-section.component.d.ts +52 -0
  126. package/lib/components/common/truncated-text/truncated-text.component.d.ts +13 -0
  127. package/lib/components/configurations/configurations.component.d.ts +40 -0
  128. package/lib/components/instructions/instructions.component.d.ts +48 -0
  129. package/lib/components/panel/panel.component.d.ts +12 -0
  130. package/lib/components/runnable-editor/runnable-editor.component.d.ts +53 -0
  131. package/lib/components/tests/test-cases/test-cases.component.d.ts +46 -0
  132. package/lib/components/tests/test-cases-content/test-cases-content.component.d.ts +26 -0
  133. package/lib/components/tests/test-cases-status/test-cases-status.component.d.ts +9 -0
  134. package/lib/components/tests/test-results.component.d.ts +33 -0
  135. package/lib/components/tgo-coding-test/tgo-coding-test.component.d.ts +69 -0
  136. package/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.d.ts +101 -0
  137. package/{src/lib/config/index.ts → lib/config/index.d.ts} +0 -1
  138. package/lib/config/tgo-coding-test.config.d.ts +24 -0
  139. package/{src/lib/config/tgo-coding-test.provider.ts → lib/config/tgo-coding-test.provider.d.ts} +6 -18
  140. package/lib/config/tgo-coding-test.token.d.ts +9 -0
  141. package/lib/models/auto-saved-data.d.ts +42 -0
  142. package/lib/models/code-event.d.ts +15 -0
  143. package/lib/models/coderunner-execution-results.d.ts +51 -0
  144. package/lib/models/configs.d.ts +15 -0
  145. package/lib/models/language-change-action.d.ts +4 -0
  146. package/lib/models/lat-languages.d.ts +8 -0
  147. package/lib/models/mixpanel-events.d.ts +3 -0
  148. package/lib/models/mode.d.ts +5 -0
  149. package/lib/models/paste-data.d.ts +4 -0
  150. package/lib/models/programming-language.d.ts +8 -0
  151. package/lib/models/test-cases.d.ts +67 -0
  152. package/lib/models/theme.d.ts +4 -0
  153. package/lib/models/translations.d.ts +1 -0
  154. package/lib/models/view-mode.d.ts +6 -0
  155. package/{src/lib/pipes/memoize-func.pipe.ts → lib/pipes/memoize-func.pipe.d.ts} +6 -14
  156. package/lib/services/candidate-coding-test-services/candidature-api.service.d.ts +10 -0
  157. package/lib/services/candidate-coding-test-services/coderunner-api.service.d.ts +18 -0
  158. package/lib/services/candidate-coding-test-services/coding-test-tour.service.d.ts +22 -0
  159. package/lib/services/candidate-coding-test-services/coding-test.service.d.ts +68 -0
  160. package/{src/lib/services/candidate-coding-test-services/index.ts → lib/services/candidate-coding-test-services/index.d.ts} +1 -1
  161. package/lib/services/coding-test-config.service.d.ts +38 -0
  162. package/lib/services/configurations.service.d.ts +37 -0
  163. package/lib/services/lib-coding-test.service.d.ts +69 -0
  164. package/lib/services/storage.service.d.ts +83 -0
  165. package/lib/services/test-cases.service.d.ts +12 -0
  166. package/lib/services/theme.service.d.ts +17 -0
  167. package/lib/utils/additional-languages/erlang.d.ts +37 -0
  168. package/lib/utils/resize-element.d.ts +2 -0
  169. package/lib/utils/time-to-ms.util.d.ts +1 -0
  170. package/package.json +18 -7
  171. package/shared/index.d.ts +4 -0
  172. package/shared/lib/components/audio-animation/audio-animation.component.d.ts +27 -0
  173. package/shared/lib/components/audio-animation/index.d.ts +1 -0
  174. package/shared/lib/components/index.d.ts +2 -0
  175. package/shared/lib/components/vimeo-video/index.d.ts +1 -0
  176. package/shared/lib/components/vimeo-video/vimeo-video.component.d.ts +24 -0
  177. package/shared/lib/models/answer.d.ts +17 -0
  178. package/shared/lib/models/assessment.d.ts +80 -0
  179. package/shared/lib/models/environment.d.ts +1 -0
  180. package/shared/lib/models/index.d.ts +8 -0
  181. package/shared/lib/models/question-component.d.ts +54 -0
  182. package/shared/lib/models/question.d.ts +102 -0
  183. package/shared/lib/models/test.d.ts +81 -0
  184. package/shared/lib/models/translations.d.ts +1 -0
  185. package/shared/lib/models/window.d.ts +6 -0
  186. package/shared/lib/services/api/api.service.d.ts +25 -0
  187. package/shared/lib/services/api/mocked-api.service.d.ts +35 -0
  188. package/shared/lib/services/environment/environment.service.d.ts +6 -0
  189. package/shared/lib/services/index.d.ts +9 -0
  190. package/shared/lib/services/localization/languages.model.d.ts +15 -0
  191. package/shared/lib/services/localization/transloco-lazy-module-utils.d.ts +11 -0
  192. package/shared/lib/services/localization/transloco-testing.module.d.ts +2 -0
  193. package/shared/lib/services/media/media.service.d.ts +29 -0
  194. package/shared/lib/services/mixpanel/mixpanel.service.d.ts +10 -0
  195. package/shared/lib/services/theme/theme.service.d.ts +8 -0
  196. package/shared/test-mocks/assessment-test.mock.d.ts +21 -0
  197. package/shared/test-mocks/index.d.ts +2 -0
  198. package/shared/test-mocks/tgo-ui.mock.d.ts +21 -0
  199. package/.eslintrc.json +0 -45
  200. package/jest.config.ts +0 -21
  201. package/ng-package.json +0 -14
  202. package/project.json +0 -36
  203. package/src/lib/components/.gitkeep +0 -0
  204. package/src/lib/components/code-editor/code-editor.component.html +0 -10
  205. package/src/lib/components/code-editor/code-editor.component.scss +0 -21
  206. package/src/lib/components/code-editor/code-editor.component.spec.ts +0 -136
  207. package/src/lib/components/code-editor/code-editor.component.ts +0 -369
  208. package/src/lib/components/code-editor/code-editor.mocks.ts +0 -28
  209. package/src/lib/components/code-editor/code-editor.service.spec.ts +0 -160
  210. package/src/lib/components/code-editor/code-editor.service.ts +0 -94
  211. package/src/lib/components/code-editor/helpers/c-helper.spec.ts +0 -39
  212. package/src/lib/components/code-editor/helpers/c-helper.ts +0 -51
  213. package/src/lib/components/code-editor/helpers/code-editor-helper.base.spec.ts +0 -30
  214. package/src/lib/components/code-editor/helpers/code-editor-helper.base.ts +0 -16
  215. package/src/lib/components/code-editor/helpers/code-editor-helper.mocks.ts +0 -24
  216. package/src/lib/components/code-editor/helpers/code-editor-helper.model.ts +0 -67
  217. package/src/lib/components/code-editor/helpers/cpp-helper.spec.ts +0 -40
  218. package/src/lib/components/code-editor/helpers/cpp-helper.ts +0 -52
  219. package/src/lib/components/code-editor/helpers/csharp-helper.spec.ts +0 -42
  220. package/src/lib/components/code-editor/helpers/csharp-helper.ts +0 -55
  221. package/src/lib/components/code-editor/helpers/go-helper.spec.ts +0 -41
  222. package/src/lib/components/code-editor/helpers/go-helper.ts +0 -54
  223. package/src/lib/components/code-editor/helpers/java-helper.spec.ts +0 -41
  224. package/src/lib/components/code-editor/helpers/java-helper.ts +0 -54
  225. package/src/lib/components/code-editor/helpers/javascript-helper.spec.ts +0 -39
  226. package/src/lib/components/code-editor/helpers/javascript-helper.ts +0 -32
  227. package/src/lib/components/code-editor/helpers/kotlin-helper.spec.ts +0 -41
  228. package/src/lib/components/code-editor/helpers/kotlin-helper.ts +0 -54
  229. package/src/lib/components/code-editor/helpers/php-helper.spec.ts +0 -39
  230. package/src/lib/components/code-editor/helpers/php-helper.ts +0 -32
  231. package/src/lib/components/code-editor/helpers/python-helper.spec.ts +0 -39
  232. package/src/lib/components/code-editor/helpers/python-helper.ts +0 -32
  233. package/src/lib/components/code-editor/helpers/r-helper.spec.ts +0 -39
  234. package/src/lib/components/code-editor/helpers/r-helper.ts +0 -32
  235. package/src/lib/components/code-editor/helpers/ruby-helper.spec.ts +0 -39
  236. package/src/lib/components/code-editor/helpers/ruby-helper.ts +0 -32
  237. package/src/lib/components/code-editor/helpers/scala-helper.spec.ts +0 -41
  238. package/src/lib/components/code-editor/helpers/scala-helper.ts +0 -53
  239. package/src/lib/components/code-editor/helpers/sql-helper.spec.ts +0 -87
  240. package/src/lib/components/code-editor/helpers/sql-helper.ts +0 -44
  241. package/src/lib/components/code-editor/helpers/swift-helper.spec.ts +0 -40
  242. package/src/lib/components/code-editor/helpers/swift-helper.ts +0 -51
  243. package/src/lib/components/code-editor/helpers/typescript-helper.spec.ts +0 -40
  244. package/src/lib/components/code-editor/helpers/typescript-helper.ts +0 -52
  245. package/src/lib/components/code-editor/models/code-editor.model.ts +0 -9
  246. package/src/lib/components/code-editor/models/coding-snapshot.model.ts +0 -4
  247. package/src/lib/components/coding-question/coding-question.component.html +0 -78
  248. package/src/lib/components/coding-question/coding-question.component.scss +0 -76
  249. package/src/lib/components/coding-question/coding-question.component.spec.ts +0 -85
  250. package/src/lib/components/coding-question/coding-question.component.ts +0 -102
  251. package/src/lib/components/coding-section/coding-section.component.html +0 -82
  252. package/src/lib/components/coding-section/coding-section.component.scss +0 -64
  253. package/src/lib/components/coding-section/coding-section.component.spec.ts +0 -257
  254. package/src/lib/components/coding-section/coding-section.component.ts +0 -187
  255. package/src/lib/components/coding-test.module.ts +0 -124
  256. package/src/lib/components/common/truncated-text/truncated-text.component.html +0 -6
  257. package/src/lib/components/common/truncated-text/truncated-text.component.scss +0 -18
  258. package/src/lib/components/common/truncated-text/truncated-text.component.spec.ts +0 -84
  259. package/src/lib/components/common/truncated-text/truncated-text.component.ts +0 -37
  260. package/src/lib/components/configurations/configurations.component.html +0 -57
  261. package/src/lib/components/configurations/configurations.component.scss +0 -42
  262. package/src/lib/components/configurations/configurations.component.spec.ts +0 -186
  263. package/src/lib/components/configurations/configurations.component.ts +0 -98
  264. package/src/lib/components/instructions/instructions.component.html +0 -41
  265. package/src/lib/components/instructions/instructions.component.scss +0 -167
  266. package/src/lib/components/instructions/instructions.component.spec.ts +0 -106
  267. package/src/lib/components/instructions/instructions.component.ts +0 -138
  268. package/src/lib/components/panel/panel.component.html +0 -19
  269. package/src/lib/components/panel/panel.component.scss +0 -41
  270. package/src/lib/components/panel/panel.component.spec.ts +0 -40
  271. package/src/lib/components/panel/panel.component.ts +0 -34
  272. package/src/lib/components/runnable-editor/runnable-editor.component.html +0 -75
  273. package/src/lib/components/runnable-editor/runnable-editor.component.scss +0 -55
  274. package/src/lib/components/runnable-editor/runnable-editor.component.spec.ts +0 -124
  275. package/src/lib/components/runnable-editor/runnable-editor.component.ts +0 -155
  276. package/src/lib/components/tests/test-cases/test-cases.component.html +0 -135
  277. package/src/lib/components/tests/test-cases/test-cases.component.scss +0 -220
  278. package/src/lib/components/tests/test-cases/test-cases.component.spec.ts +0 -401
  279. package/src/lib/components/tests/test-cases/test-cases.component.ts +0 -205
  280. package/src/lib/components/tests/test-cases-content/test-cases-content.component.html +0 -94
  281. package/src/lib/components/tests/test-cases-content/test-cases-content.component.scss +0 -103
  282. package/src/lib/components/tests/test-cases-content/test-cases-content.component.spec.ts +0 -122
  283. package/src/lib/components/tests/test-cases-content/test-cases-content.component.ts +0 -102
  284. package/src/lib/components/tests/test-cases-status/test-cases-status.component.html +0 -16
  285. package/src/lib/components/tests/test-cases-status/test-cases-status.component.scss +0 -49
  286. package/src/lib/components/tests/test-cases-status/test-cases-status.component.spec.ts +0 -22
  287. package/src/lib/components/tests/test-cases-status/test-cases-status.component.ts +0 -18
  288. package/src/lib/components/tests/test-results.component.html +0 -119
  289. package/src/lib/components/tests/test-results.component.scss +0 -189
  290. package/src/lib/components/tests/test-results.component.spec.ts +0 -140
  291. package/src/lib/components/tests/test-results.component.ts +0 -98
  292. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.html +0 -96
  293. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.scss +0 -6
  294. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.spec.ts +0 -599
  295. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts +0 -279
  296. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html +0 -36
  297. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.scss +0 -183
  298. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.spec.ts +0 -883
  299. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts +0 -575
  300. package/src/lib/config/tgo-coding-test.config.ts +0 -26
  301. package/src/lib/config/tgo-coding-test.token.ts +0 -21
  302. package/src/lib/models/.gitkeep +0 -0
  303. package/src/lib/models/auto-saved-data.ts +0 -51
  304. package/src/lib/models/code-event.ts +0 -17
  305. package/src/lib/models/coderunner-execution-results.ts +0 -58
  306. package/src/lib/models/coding-lib.mocks.ts +0 -246
  307. package/src/lib/models/configs.ts +0 -18
  308. package/src/lib/models/language-change-action.ts +0 -4
  309. package/src/lib/models/lat-languages.ts +0 -12
  310. package/src/lib/models/mixpanel-events.ts +0 -3
  311. package/src/lib/models/mode.ts +0 -5
  312. package/src/lib/models/paste-data.ts +0 -4
  313. package/src/lib/models/programming-language.ts +0 -9
  314. package/src/lib/models/test-cases.ts +0 -74
  315. package/src/lib/models/theme.ts +0 -5
  316. package/src/lib/models/translations.ts +0 -1
  317. package/src/lib/models/view-mode.ts +0 -6
  318. package/src/lib/services/.gitkeep +0 -0
  319. package/src/lib/services/candidate-coding-test-services/candidature-api.service.spec.ts +0 -40
  320. package/src/lib/services/candidate-coding-test-services/candidature-api.service.ts +0 -15
  321. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.spec.ts +0 -134
  322. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts +0 -105
  323. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.spec.ts +0 -161
  324. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts +0 -100
  325. package/src/lib/services/candidate-coding-test-services/coding-test.service.spec.ts +0 -1524
  326. package/src/lib/services/candidate-coding-test-services/coding-test.service.ts +0 -843
  327. package/src/lib/services/coding-test-config.service.ts +0 -48
  328. package/src/lib/services/configurations.service.mocks.ts +0 -77
  329. package/src/lib/services/configurations.service.spec.ts +0 -79
  330. package/src/lib/services/configurations.service.ts +0 -111
  331. package/src/lib/services/index.ts +0 -0
  332. package/src/lib/services/lib-coding-test.service.spec.ts +0 -265
  333. package/src/lib/services/lib-coding-test.service.ts +0 -157
  334. package/src/lib/services/local-storage.service.mocks.ts +0 -22
  335. package/src/lib/services/storage.service.spec.ts +0 -1120
  336. package/src/lib/services/storage.service.ts +0 -729
  337. package/src/lib/services/test-cases.service.spec.ts +0 -53
  338. package/src/lib/services/test-cases.service.ts +0 -29
  339. package/src/lib/services/theme.service.spec.ts +0 -76
  340. package/src/lib/services/theme.service.ts +0 -34
  341. package/src/lib/styles/mixins.scss +0 -86
  342. package/src/lib/styles/styles.scss +0 -112
  343. package/src/lib/styles/variables.scss +0 -105
  344. package/src/lib/utils/.gitkeep +0 -0
  345. package/src/lib/utils/additional-languages/erlang.ts +0 -115
  346. package/src/lib/utils/resize-element.ts +0 -15
  347. package/src/lib/utils/time-to-ms.util.ts +0 -10
  348. package/src/test-setup.ts +0 -1
  349. package/tsconfig.json +0 -16
  350. package/tsconfig.lib.json +0 -12
  351. package/tsconfig.lib.prod.json +0 -9
  352. package/tsconfig.spec.json +0 -13
  353. /package/{src/assets → assets}/i18n/en.json +0 -0
  354. /package/{src/lib/components/code-editor/helpers/index.ts → lib/components/code-editor/helpers/index.d.ts} +0 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1lZGl0b3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL2NvZGUtZWRpdG9yL21vZGVscy9jb2RlLWVkaXRvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBQYXN0ZURhdGEge1xuICB0eXBlOiBzdHJpbmc7XG4gIGRhdGE6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gTW9uYWNvQ29sb3JUaGVtZSB7XG4gIExpZ2h0ID0gJ3ZzJyxcbiAgRGFyayA9ICd2cy1kYXJrJyxcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kaW5nLXNuYXBzaG90Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9saWIvY29tcG9uZW50cy9jb2RlLWVkaXRvci9tb2RlbHMvY29kaW5nLXNuYXBzaG90Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIENvZGluZ1NuYXBzaG90IHtcbiAgdGV4dDogc3RyaW5nO1xuICBjb3BpZWRfdGV4dD86IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,126 @@
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, Output, } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
5
+ import { map } from 'rxjs';
6
+ import { MatCardModule } from '@angular/material/card';
7
+ import { AngularSplitModule } from 'angular-split';
8
+ import { ButtonComponentModule } from '@testgorilla/tgo-ui';
9
+ import { ConfigurationsService } from '../../services/configurations.service';
10
+ import { LibCodingTestService } from '../../services/lib-coding-test.service';
11
+ import { InstructionsComponent } from '../instructions/instructions.component';
12
+ import { RunnableEditorComponent } from '../runnable-editor/runnable-editor.component';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/common";
15
+ import * as i2 from "@angular/material/card";
16
+ import * as i3 from "angular-split";
17
+ import * as i4 from "@testgorilla/tgo-ui";
18
+ let CodingQuestionComponent = class CodingQuestionComponent {
19
+ changeDetectorRef = inject(ChangeDetectorRef);
20
+ libCodingTestService = inject(LibCodingTestService);
21
+ configurationsService = inject(ConfigurationsService);
22
+ initCode;
23
+ functionParams;
24
+ functionName;
25
+ returnType;
26
+ isLAT;
27
+ isSQL;
28
+ canAddCustomTestCases;
29
+ languages;
30
+ autoHeight;
31
+ translations;
32
+ questionText;
33
+ mode;
34
+ companyColor;
35
+ testCasesStatus;
36
+ loading;
37
+ hideTestCases;
38
+ runTestResponse = [];
39
+ exampleTestCases;
40
+ applicationTheme;
41
+ pasteEvent = new EventEmitter();
42
+ codeChange = new EventEmitter();
43
+ runTestClick = new EventEmitter();
44
+ languageChange = new EventEmitter();
45
+ isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
46
+ isFullscreenMode;
47
+ GUTTER_SIZE = 1;
48
+ isDarkTheme$ = this.configurationsService.colorTheme$.pipe(map(theme => theme === "theme-dark" /* Themes.Dark */));
49
+ ngOnInit() {
50
+ this.libCodingTestService.isFullscreen$.pipe(untilDestroyed(this)).subscribe(isFullscreen => {
51
+ this.isFullscreenMode = isFullscreen;
52
+ });
53
+ }
54
+ ngOnDestroy() {
55
+ this.configurationsService.setCodeComponentDestroyed(true);
56
+ this.configurationsService.setColorTheme("theme-default" /* Themes.Default */);
57
+ this.configurationsService.closeConfigPanel();
58
+ }
59
+ enableFullScreenMode() {
60
+ this.libCodingTestService.setFullscreen(true);
61
+ }
62
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodingQuestionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
63
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CodingQuestionComponent, isStandalone: true, selector: "tgo-coding-question", inputs: { initCode: "initCode", functionParams: "functionParams", functionName: "functionName", returnType: "returnType", isLAT: "isLAT", isSQL: "isSQL", canAddCustomTestCases: "canAddCustomTestCases", languages: "languages", autoHeight: "autoHeight", translations: "translations", questionText: "questionText", mode: "mode", companyColor: "companyColor", testCasesStatus: "testCasesStatus", loading: "loading", hideTestCases: "hideTestCases", runTestResponse: "runTestResponse", exampleTestCases: "exampleTestCases", applicationTheme: "applicationTheme" }, outputs: { pasteEvent: "pasteEvent", codeChange: "codeChange", runTestClick: "runTestClick", languageChange: "languageChange" }, ngImport: i0, template: "<div\n *ngIf=\"!isMobile; else mobileTpl\"\n class=\"main-container\"\n [ngClass]=\"{ 'main-container-fullscreen': isFullscreenMode }\"\n>\n <mat-card appearance=\"outlined\" class=\"main-card\">\n <as-split class=\"as-split\" direction=\"horizontal\" [useTransition]=\"true\" [gutterSize]=\"GUTTER_SIZE\">\n <as-split-area size=\"38\" minSize=\"24\">\n <ng-container [ngTemplateOutlet]=\"instructions\"></ng-container>\n </as-split-area>\n <as-split-area size=\"62\" minSize=\"30\">\n <ng-container [ngTemplateOutlet]=\"runnableIde\"></ng-container>\n </as-split-area>\n </as-split>\n\n <ui-button\n *ngIf=\"!isFullscreenMode\"\n class=\"fullscreen-btn themed-button\"\n [variant]=\"'secondary'\"\n [iconName]=\"'Full-screen'\"\n [justIcon]=\"true\"\n [size]=\"'big'\"\n [applicationTheme]=\"applicationTheme\"\n [tooltip]=\"translations['TOOLTIPS']['MAXIMISE']\"\n [tooltipPosition]=\"'left'\"\n (buttonClickEvent)=\"enableFullScreenMode()\"\n >\n </ui-button>\n </mat-card>\n</div>\n\n<ng-template #mobileTpl>\n <div class=\"main-container main-container-mobile\">\n <mat-card appearance=\"outlined\" class=\"main-card main-card-mobile\">\n <ng-container [ngTemplateOutlet]=\"instructions\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"runnableIde\"></ng-container>\n </mat-card>\n </div>\n</ng-template>\n\n<ng-template #instructions>\n <tgo-code-instructions\n [mode]=\"mode\"\n [isLAT]=\"isLAT\"\n [questionText]=\"questionText\"\n [translations]=\"translations\"\n [isDarkTheme]=\"isDarkTheme$ | async\"\n ></tgo-code-instructions>\n</ng-template>\n<ng-template #runnableIde>\n <tgo-runnable-editor\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [isFullViewMode]=\"true\"\n [shouldGenerateInitCode]=\"false\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [languages]=\"languages\"\n [autoHeight]=\"autoHeight\"\n [translations]=\"translations\"\n [questionText]=\"questionText\"\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [runTestResponse]=\"runTestResponse\"\n [exampleTestCases]=\"exampleTestCases\"\n [hideTestCases]=\"hideTestCases\"\n [applicationTheme]=\"applicationTheme\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (runTestClick)=\"runTestClick.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n >\n </tgo-runnable-editor>\n</ng-template>\n", styles: [".as-split{min-height:500px}.as-split ::ng-deep .as-split-gutter{position:relative;background-color:#d9d9d9!important;transition:background .2s ease-in-out}.as-split ::ng-deep .as-split-gutter-icon{background-image:none!important;position:absolute;border-radius:5px;background:#d9d9d9;transition:background .2s ease-in-out}.as-split ::ng-deep .as-split-gutter-icon:before,.as-split ::ng-deep .as-split-gutter-icon:after{content:\"\";position:absolute}.as-split ::ng-deep .as-split-gutter:hover,.as-split ::ng-deep .as-split-gutter.as-dragged{background-color:var(--company-color, #46A997)!important}.as-split ::ng-deep .as-split-gutter:hover .as-split-gutter-icon,.as-split ::ng-deep .as-split-gutter.as-dragged .as-split-gutter-icon{background:var(--company-color, #46A997)}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon{height:34px!important;width:12px!important;z-index:1}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:before,.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{top:9px;bottom:9px;background-color:var(--bg-mat-card);width:2px;border-radius:5px}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:before{left:2px}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{right:2px}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon{height:12px!important;width:34px!important}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:before,.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{left:9px;right:9px;background-color:var(--bg-mat-card);height:2px;width:auto;border-radius:5px}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:before{top:2px}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{top:auto;bottom:2px}:host{display:block;height:100%}.main-container{height:100%;padding:32px 50px 40px;display:flex;justify-content:center}.main-container.main-container-fullscreen{padding:0}.main-container.main-container-fullscreen .main-card{max-height:calc(100vh - 80px);max-width:100vw}.main-container-mobile{padding:20px 16px 0}.main-container .main-card{flex:1 0 100%;height:100%;max-height:750px;max-width:1280px;padding:0!important;box-shadow:0 8px 24px 4px #00000014;background-color:var(--bg-mat-card)!important}.main-container .main-card-mobile{display:flex;flex-direction:column;max-width:100%;max-height:100%}.fullscreen-btn{position:absolute;top:0;right:-50px}.fullscreen-btn.themed-button ::ng-deep .mat-mdc-unelevated-button.secondary{background-color:var(--button-bg-color)}@media screen and (min-width: 1400px){.fullscreen-btn{right:-72px}}.fullscreen-btn .fullscreen-icon{width:18px;height:18px;min-width:auto;min-height:auto;font-size:18px}.fullscreen-btn .fullscreen-icon ::ng-deep svg{fill:var(--icon-bg-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "ngmodule", type: AngularSplitModule }, { kind: "component", type: i3.SplitComponent, selector: "as-split", inputs: ["gutterSize", "gutterStep", "disabled", "gutterClickDeltaPx", "direction", "dir", "unit", "gutterAriaLabel", "restrictMove", "useTransition", "gutterDblClickDuration"], outputs: ["gutterClick", "gutterDblClick", "dragStart", "dragEnd", "transitionEnd"], exportAs: ["asSplit"] }, { kind: "component", type: i3.SplitAreaComponent, selector: "as-split-area", inputs: ["size", "minSize", "maxSize", "lockSize", "visible"], exportAs: ["asSplitArea"] }, { kind: "ngmodule", type: ButtonComponentModule }, { kind: "component", type: i4.ButtonComponent, selector: "ui-button", inputs: ["size", "variant", "label", "iconPosition", "justIcon", "iconName", "disabled", "loading", "fullWidth", "url", "urlTarget", "value", "tooltip", "isPremium", "type", "companyColor", "buttonBadgeConfig", "applicationTheme", "disabledScaleOnClick", "ariaLabel", "ariaRequired", "ariaLabelledby", "ariaDescribedby", "preventDefault", "hasBackground", "tooltipPosition", "role", "iconFilled"], outputs: ["buttonClickEvent", "buttonHoverEvent"] }, { kind: "component", type: InstructionsComponent, selector: "tgo-code-instructions", inputs: ["mode", "questionText", "translations", "isDarkTheme", "isLAT"] }, { kind: "component", type: RunnableEditorComponent, selector: "tgo-runnable-editor", inputs: ["initCode", "functionParams", "functionName", "returnType", "isFullViewMode", "isLAT", "isSQL", "canAddCustomTestCases", "hideTestCases", "languages", "shouldGenerateInitCode", "autoHeight", "translations", "questionText", "companyColor", "testCasesStatus", "loading", "runTestResponse", "exampleTestCases", "isRunnableWithLangSelector", "applicationTheme"], outputs: ["pasteEvent", "codeChange", "runTestClick", "languageChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
64
+ };
65
+ CodingQuestionComponent = __decorate([
66
+ UntilDestroy()
67
+ ], CodingQuestionComponent);
68
+ export { CodingQuestionComponent };
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodingQuestionComponent, decorators: [{
70
+ type: Component,
71
+ args: [{ standalone: true, selector: 'tgo-coding-question', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
72
+ CommonModule,
73
+ MatCardModule,
74
+ AngularSplitModule,
75
+ ButtonComponentModule,
76
+ InstructionsComponent,
77
+ RunnableEditorComponent,
78
+ ], template: "<div\n *ngIf=\"!isMobile; else mobileTpl\"\n class=\"main-container\"\n [ngClass]=\"{ 'main-container-fullscreen': isFullscreenMode }\"\n>\n <mat-card appearance=\"outlined\" class=\"main-card\">\n <as-split class=\"as-split\" direction=\"horizontal\" [useTransition]=\"true\" [gutterSize]=\"GUTTER_SIZE\">\n <as-split-area size=\"38\" minSize=\"24\">\n <ng-container [ngTemplateOutlet]=\"instructions\"></ng-container>\n </as-split-area>\n <as-split-area size=\"62\" minSize=\"30\">\n <ng-container [ngTemplateOutlet]=\"runnableIde\"></ng-container>\n </as-split-area>\n </as-split>\n\n <ui-button\n *ngIf=\"!isFullscreenMode\"\n class=\"fullscreen-btn themed-button\"\n [variant]=\"'secondary'\"\n [iconName]=\"'Full-screen'\"\n [justIcon]=\"true\"\n [size]=\"'big'\"\n [applicationTheme]=\"applicationTheme\"\n [tooltip]=\"translations['TOOLTIPS']['MAXIMISE']\"\n [tooltipPosition]=\"'left'\"\n (buttonClickEvent)=\"enableFullScreenMode()\"\n >\n </ui-button>\n </mat-card>\n</div>\n\n<ng-template #mobileTpl>\n <div class=\"main-container main-container-mobile\">\n <mat-card appearance=\"outlined\" class=\"main-card main-card-mobile\">\n <ng-container [ngTemplateOutlet]=\"instructions\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"runnableIde\"></ng-container>\n </mat-card>\n </div>\n</ng-template>\n\n<ng-template #instructions>\n <tgo-code-instructions\n [mode]=\"mode\"\n [isLAT]=\"isLAT\"\n [questionText]=\"questionText\"\n [translations]=\"translations\"\n [isDarkTheme]=\"isDarkTheme$ | async\"\n ></tgo-code-instructions>\n</ng-template>\n<ng-template #runnableIde>\n <tgo-runnable-editor\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [isFullViewMode]=\"true\"\n [shouldGenerateInitCode]=\"false\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [languages]=\"languages\"\n [autoHeight]=\"autoHeight\"\n [translations]=\"translations\"\n [questionText]=\"questionText\"\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [runTestResponse]=\"runTestResponse\"\n [exampleTestCases]=\"exampleTestCases\"\n [hideTestCases]=\"hideTestCases\"\n [applicationTheme]=\"applicationTheme\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (runTestClick)=\"runTestClick.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n >\n </tgo-runnable-editor>\n</ng-template>\n", styles: [".as-split{min-height:500px}.as-split ::ng-deep .as-split-gutter{position:relative;background-color:#d9d9d9!important;transition:background .2s ease-in-out}.as-split ::ng-deep .as-split-gutter-icon{background-image:none!important;position:absolute;border-radius:5px;background:#d9d9d9;transition:background .2s ease-in-out}.as-split ::ng-deep .as-split-gutter-icon:before,.as-split ::ng-deep .as-split-gutter-icon:after{content:\"\";position:absolute}.as-split ::ng-deep .as-split-gutter:hover,.as-split ::ng-deep .as-split-gutter.as-dragged{background-color:var(--company-color, #46A997)!important}.as-split ::ng-deep .as-split-gutter:hover .as-split-gutter-icon,.as-split ::ng-deep .as-split-gutter.as-dragged .as-split-gutter-icon{background:var(--company-color, #46A997)}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon{height:34px!important;width:12px!important;z-index:1}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:before,.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{top:9px;bottom:9px;background-color:var(--bg-mat-card);width:2px;border-radius:5px}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:before{left:2px}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{right:2px}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon{height:12px!important;width:34px!important}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:before,.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{left:9px;right:9px;background-color:var(--bg-mat-card);height:2px;width:auto;border-radius:5px}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:before{top:2px}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{top:auto;bottom:2px}:host{display:block;height:100%}.main-container{height:100%;padding:32px 50px 40px;display:flex;justify-content:center}.main-container.main-container-fullscreen{padding:0}.main-container.main-container-fullscreen .main-card{max-height:calc(100vh - 80px);max-width:100vw}.main-container-mobile{padding:20px 16px 0}.main-container .main-card{flex:1 0 100%;height:100%;max-height:750px;max-width:1280px;padding:0!important;box-shadow:0 8px 24px 4px #00000014;background-color:var(--bg-mat-card)!important}.main-container .main-card-mobile{display:flex;flex-direction:column;max-width:100%;max-height:100%}.fullscreen-btn{position:absolute;top:0;right:-50px}.fullscreen-btn.themed-button ::ng-deep .mat-mdc-unelevated-button.secondary{background-color:var(--button-bg-color)}@media screen and (min-width: 1400px){.fullscreen-btn{right:-72px}}.fullscreen-btn .fullscreen-icon{width:18px;height:18px;min-width:auto;min-height:auto;font-size:18px}.fullscreen-btn .fullscreen-icon ::ng-deep svg{fill:var(--icon-bg-color)}\n"] }]
79
+ }], propDecorators: { initCode: [{
80
+ type: Input
81
+ }], functionParams: [{
82
+ type: Input
83
+ }], functionName: [{
84
+ type: Input
85
+ }], returnType: [{
86
+ type: Input
87
+ }], isLAT: [{
88
+ type: Input
89
+ }], isSQL: [{
90
+ type: Input
91
+ }], canAddCustomTestCases: [{
92
+ type: Input
93
+ }], languages: [{
94
+ type: Input
95
+ }], autoHeight: [{
96
+ type: Input
97
+ }], translations: [{
98
+ type: Input
99
+ }], questionText: [{
100
+ type: Input
101
+ }], mode: [{
102
+ type: Input
103
+ }], companyColor: [{
104
+ type: Input
105
+ }], testCasesStatus: [{
106
+ type: Input
107
+ }], loading: [{
108
+ type: Input
109
+ }], hideTestCases: [{
110
+ type: Input
111
+ }], runTestResponse: [{
112
+ type: Input
113
+ }], exampleTestCases: [{
114
+ type: Input
115
+ }], applicationTheme: [{
116
+ type: Input
117
+ }], pasteEvent: [{
118
+ type: Output
119
+ }], codeChange: [{
120
+ type: Output
121
+ }], runTestClick: [{
122
+ type: Output
123
+ }], languageChange: [{
124
+ type: Output
125
+ }] } });
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kaW5nLXF1ZXN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvbGliL2NvbXBvbmVudHMvY29kaW5nLXF1ZXN0aW9uL2NvZGluZy1xdWVzdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL2NvZGluZy1xdWVzdGlvbi9jb2RpbmctcXVlc3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBb0IscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUs5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQU85RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7O0FBa0JoRixJQUFN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RyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IEFuZ3VsYXJTcGxpdE1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3BsaXQnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UaGVtZSwgQnV0dG9uQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnQHRlc3Rnb3JpbGxhL3Rnby11aSc7XG5pbXBvcnQgeyBMQVRMYW5ndWFnZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvbGF0LWxhbmd1YWdlcyc7XG5pbXBvcnQgeyBNb2RlcyB9IGZyb20gJy4uLy4uL21vZGVscy9tb2RlJztcbmltcG9ydCB7IEV4YW1wbGVUZXN0Q2FzZSB9IGZyb20gJy4uLy4uL21vZGVscy90ZXN0LWNhc2VzJztcbmltcG9ydCB7IFRoZW1lcyB9IGZyb20gJy4uLy4uL21vZGVscy90aGVtZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IExpYkNvZGluZ1Rlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGliLWNvZGluZy10ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ29kZUVkaXRvckZ1bmNQYXJhbSxcbiAgQ29kZUVkaXRvckxhbmd1YWdlcyxcbiAgQ29kZUVkaXRvclR5cGVzTWFwLFxufSBmcm9tICcuLi9jb2RlLWVkaXRvci9oZWxwZXJzL2NvZGUtZWRpdG9yLWhlbHBlci5tb2RlbCc7XG5pbXBvcnQgeyBQYXN0ZURhdGEgfSBmcm9tICcuLi9jb2RlLWVkaXRvci9tb2RlbHMvY29kZS1lZGl0b3IubW9kZWwnO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5zdHJ1Y3Rpb25zL2luc3RydWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUnVubmFibGVFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi9ydW5uYWJsZS1lZGl0b3IvcnVubmFibGUtZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndGdvLWNvZGluZy1xdWVzdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2RpbmctcXVlc3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb2RpbmctcXVlc3Rpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTWF0Q2FyZE1vZHVsZSxcbiAgICBBbmd1bGFyU3BsaXRNb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50TW9kdWxlLFxuICAgIEluc3RydWN0aW9uc0NvbXBvbmVudCxcbiAgICBSdW5uYWJsZUVkaXRvckNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29kaW5nUXVlc3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpYkNvZGluZ1Rlc3RTZXJ2aWNlID0gaW5qZWN0KExpYkNvZGluZ1Rlc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWd1cmF0aW9uc1NlcnZpY2UgPSBpbmplY3QoQ29uZmlndXJhdGlvbnNTZXJ2aWNlKTtcbiAgXG4gIEBJbnB1dCgpIGluaXRDb2RlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZ1bmN0aW9uUGFyYW1zOiBDb2RlRWRpdG9yRnVuY1BhcmFtW107XG4gIEBJbnB1dCgpIGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSByZXR1cm5UeXBlOiBrZXlvZiBDb2RlRWRpdG9yVHlwZXNNYXA7XG4gIEBJbnB1dCgpIGlzTEFUOiBib29sZWFuO1xuICBASW5wdXQoKSBpc1NRTDogYm9vbGVhbjtcbiAgQElucHV0KCkgY2FuQWRkQ3VzdG9tVGVzdENhc2VzOiBib29sZWFuO1xuICBASW5wdXQoKSBsYW5ndWFnZXM6IExBVExhbmd1YWdlcztcbiAgQElucHV0KCkgYXV0b0hlaWdodDogYm9vbGVhbjtcbiAgQElucHV0KCkgdHJhbnNsYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgQElucHV0KCkgcXVlc3Rpb25UZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1vZGU6IE1vZGVzO1xuICBASW5wdXQoKSBjb21wYW55Q29sb3I6IHN0cmluZztcbiAgQElucHV0KCkgdGVzdENhc2VzU3RhdHVzOiBhbnk7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhpZGVUZXN0Q2FzZXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHJ1blRlc3RSZXNwb25zZSA9IFtdO1xuICBASW5wdXQoKSBleGFtcGxlVGVzdENhc2VzOiBFeGFtcGxlVGVzdENhc2VbXTtcbiAgQElucHV0KCkgYXBwbGljYXRpb25UaGVtZTogQXBwbGljYXRpb25UaGVtZTtcblxuICBAT3V0cHV0KCkgcGFzdGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UGFzdGVEYXRhPigpO1xuICBAT3V0cHV0KCkgY29kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcnVuVGVzdENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgbGFuZ3VhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvZGVFZGl0b3JMYW5ndWFnZXM+KCk7XG5cbiAgaXNNb2JpbGUgPSAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbiAgaXNGdWxsc2NyZWVuTW9kZTogYm9vbGVhbjtcblxuICBHVVRURVJfU0laRSA9IDE7XG5cbiAgaXNEYXJrVGhlbWUkID0gdGhpcy5jb25maWd1cmF0aW9uc1NlcnZpY2UuY29sb3JUaGVtZSQucGlwZShtYXAodGhlbWUgPT4gdGhlbWUgPT09IFRoZW1lcy5EYXJrKSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5pc0Z1bGxzY3JlZW4kLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZShpc0Z1bGxzY3JlZW4gPT4ge1xuICAgICAgdGhpcy5pc0Z1bGxzY3JlZW5Nb2RlID0gaXNGdWxsc2NyZWVuO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uc1NlcnZpY2Uuc2V0Q29kZUNvbXBvbmVudERlc3Ryb3llZCh0cnVlKTtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zU2VydmljZS5zZXRDb2xvclRoZW1lKFRoZW1lcy5EZWZhdWx0KTtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zU2VydmljZS5jbG9zZUNvbmZpZ1BhbmVsKCk7XG4gIH1cblxuICBlbmFibGVGdWxsU2NyZWVuTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLnNldEZ1bGxzY3JlZW4odHJ1ZSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgKm5nSWY9XCIhaXNNb2JpbGU7IGVsc2UgbW9iaWxlVHBsXCJcbiAgY2xhc3M9XCJtYWluLWNvbnRhaW5lclwiXG4gIFtuZ0NsYXNzXT1cInsgJ21haW4tY29udGFpbmVyLWZ1bGxzY3JlZW4nOiBpc0Z1bGxzY3JlZW5Nb2RlIH1cIlxuPlxuICA8bWF0LWNhcmQgYXBwZWFyYW5jZT1cIm91dGxpbmVkXCIgY2xhc3M9XCJtYWluLWNhcmRcIj5cbiAgICA8YXMtc3BsaXQgY2xhc3M9XCJhcy1zcGxpdFwiIGRpcmVjdGlvbj1cImhvcml6b250YWxcIiBbdXNlVHJhbnNpdGlvbl09XCJ0cnVlXCIgW2d1dHRlclNpemVdPVwiR1VUVEVSX1NJWkVcIj5cbiAgICAgIDxhcy1zcGxpdC1hcmVhIHNpemU9XCIzOFwiIG1pblNpemU9XCIyNFwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImluc3RydWN0aW9uc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9hcy1zcGxpdC1hcmVhPlxuICAgICAgPGFzLXNwbGl0LWFyZWEgc2l6ZT1cIjYyXCIgbWluU2l6ZT1cIjMwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicnVubmFibGVJZGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvYXMtc3BsaXQtYXJlYT5cbiAgICA8L2FzLXNwbGl0PlxuXG4gICAgPHVpLWJ1dHRvblxuICAgICAgKm5nSWY9XCIhaXNGdWxsc2NyZWVuTW9kZVwiXG4gICAgICBjbGFzcz1cImZ1bGxzY3JlZW4tYnRuIHRoZW1lZC1idXR0b25cIlxuICAgICAgW3ZhcmlhbnRdPVwiJ3NlY29uZGFyeSdcIlxuICAgICAgW2ljb25OYW1lXT1cIidGdWxsLXNjcmVlbidcIlxuICAgICAgW2p1c3RJY29uXT1cInRydWVcIlxuICAgICAgW3NpemVdPVwiJ2JpZydcIlxuICAgICAgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0cmFuc2xhdGlvbnNbJ1RPT0xUSVBTJ11bJ01BWElNSVNFJ11cIlxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxuICAgICAgKGJ1dHRvbkNsaWNrRXZlbnQpPVwiZW5hYmxlRnVsbFNjcmVlbk1vZGUoKVwiXG4gICAgPlxuICAgIDwvdWktYnV0dG9uPlxuICA8L21hdC1jYXJkPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbW9iaWxlVHBsPlxuICA8ZGl2IGNsYXNzPVwibWFpbi1jb250YWluZXIgbWFpbi1jb250YWluZXItbW9iaWxlXCI+XG4gICAgPG1hdC1jYXJkIGFwcGVhcmFuY2U9XCJvdXRsaW5lZFwiIGNsYXNzPVwibWFpbi1jYXJkIG1haW4tY2FyZC1tb2JpbGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW5zdHJ1Y3Rpb25zXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJ1bm5hYmxlSWRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9tYXQtY2FyZD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2luc3RydWN0aW9ucz5cbiAgPHRnby1jb2RlLWluc3RydWN0aW9uc1xuICAgIFttb2RlXT1cIm1vZGVcIlxuICAgIFtpc0xBVF09XCJpc0xBVFwiXG4gICAgW3F1ZXN0aW9uVGV4dF09XCJxdWVzdGlvblRleHRcIlxuICAgIFt0cmFuc2xhdGlvbnNdPVwidHJhbnNsYXRpb25zXCJcbiAgICBbaXNEYXJrVGhlbWVdPVwiaXNEYXJrVGhlbWUkIHwgYXN5bmNcIlxuICA+PC90Z28tY29kZS1pbnN0cnVjdGlvbnM+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNydW5uYWJsZUlkZT5cbiAgPHRnby1ydW5uYWJsZS1lZGl0b3JcbiAgICBbaW5pdENvZGVdPVwiaW5pdENvZGVcIlxuICAgIFtmdW5jdGlvblBhcmFtc109XCJmdW5jdGlvblBhcmFtc1wiXG4gICAgW2Z1bmN0aW9uTmFtZV09XCJmdW5jdGlvbk5hbWVcIlxuICAgIFtyZXR1cm5UeXBlXT1cInJldHVyblR5cGVcIlxuICAgIFtpc0Z1bGxWaWV3TW9kZV09XCJ0cnVlXCJcbiAgICBbc2hvdWxkR2VuZXJhdGVJbml0Q29kZV09XCJmYWxzZVwiXG4gICAgW2lzTEFUXT1cImlzTEFUXCJcbiAgICBbaXNTUUxdPVwiaXNTUUxcIlxuICAgIFtjYW5BZGRDdXN0b21UZXN0Q2FzZXNdPVwiY2FuQWRkQ3VzdG9tVGVzdENhc2VzXCJcbiAgICBbbGFuZ3VhZ2VzXT1cImxhbmd1YWdlc1wiXG4gICAgW2F1dG9IZWlnaHRdPVwiYXV0b0hlaWdodFwiXG4gICAgW3RyYW5zbGF0aW9uc109XCJ0cmFuc2xhdGlvbnNcIlxuICAgIFtxdWVzdGlvblRleHRdPVwicXVlc3Rpb25UZXh0XCJcbiAgICBbY29tcGFueUNvbG9yXT1cImNvbXBhbnlDb2xvclwiXG4gICAgW3Rlc3RDYXNlc1N0YXR1c109XCJ0ZXN0Q2FzZXNTdGF0dXNcIlxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgIFtydW5UZXN0UmVzcG9uc2VdPVwicnVuVGVzdFJlc3BvbnNlXCJcbiAgICBbZXhhbXBsZVRlc3RDYXNlc109XCJleGFtcGxlVGVzdENhc2VzXCJcbiAgICBbaGlkZVRlc3RDYXNlc109XCJoaWRlVGVzdENhc2VzXCJcbiAgICBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lXCJcbiAgICAocGFzdGVFdmVudCk9XCJwYXN0ZUV2ZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgKGNvZGVDaGFuZ2UpPVwiY29kZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgIChydW5UZXN0Q2xpY2spPVwicnVuVGVzdENsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgKGxhbmd1YWdlQ2hhbmdlKT1cImxhbmd1YWdlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gID5cbiAgPC90Z28tcnVubmFibGUtZWRpdG9yPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,188 @@
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, Output } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
5
+ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
6
+ import { distinctUntilChanged, of, take, tap } from 'rxjs';
7
+ import { TooltipComponentModule, DropdownComponentModule, ButtonComponentModule, SpinnerComponentModule, } from '@testgorilla/tgo-ui';
8
+ import { ConfigurationsService } from '../../services/configurations.service';
9
+ import { LibCodingTestService } from '../../services/lib-coding-test.service';
10
+ import { StorageCodingService } from '../../services/storage.service';
11
+ import { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';
12
+ import { CodeEditorComponent } from '../code-editor/code-editor.component';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/common";
15
+ import * as i2 from "@angular/forms";
16
+ import * as i3 from "@testgorilla/tgo-ui";
17
+ let CodingSectionComponent = class CodingSectionComponent {
18
+ configurationsService = inject(ConfigurationsService);
19
+ libCodingTestService = inject(LibCodingTestService);
20
+ StorageCodingService = inject(StorageCodingService);
21
+ fb = inject(FormBuilder);
22
+ initCode;
23
+ functionParams;
24
+ functionName;
25
+ returnType;
26
+ isLAT = false;
27
+ languages;
28
+ isFullViewMode;
29
+ shouldGenerateInitCode;
30
+ isRunnableWithLangSelector;
31
+ autoHeight;
32
+ translations;
33
+ isMobile;
34
+ applicationTheme;
35
+ pasteEvent = new EventEmitter();
36
+ codeChange = new EventEmitter();
37
+ languageChange = new EventEmitter();
38
+ headerForm;
39
+ isFullscreenMode$ = this.libCodingTestService.isFullscreen$;
40
+ previousLanguage;
41
+ code;
42
+ languagesFormattedList;
43
+ ngOnInit() {
44
+ if (this.isLAT) {
45
+ this.createHeaderForm().subscribe(() => {
46
+ this.initializeLanguage();
47
+ this.listenLanguageDropdownChanges();
48
+ this.handleLanguageChangeModal();
49
+ });
50
+ }
51
+ }
52
+ ngOnChanges(changes) {
53
+ if (typeof changes.initCode?.currentValue === 'string') {
54
+ this.codeChange.emit(changes.initCode.currentValue);
55
+ this.libCodingTestService.changeCurrentCode(changes.initCode.currentValue);
56
+ }
57
+ if (changes.languages?.currentValue) {
58
+ this.languagesFormattedList = this.languages.map(({ value, label }) => ({
59
+ value,
60
+ displayValue: label,
61
+ }));
62
+ }
63
+ }
64
+ createHeaderForm() {
65
+ return this.libCodingTestService.currentLanguage$.pipe(take(1), tap(lastLanguage => {
66
+ this.headerForm = this.fb.group({
67
+ language: lastLanguage ? lastLanguage : this.languages[0].value,
68
+ });
69
+ if (this.languages.length === 1) {
70
+ this.language.disable();
71
+ }
72
+ }));
73
+ }
74
+ initializeLanguage() {
75
+ this.previousLanguage = this.language.value;
76
+ }
77
+ listenLanguageDropdownChanges() {
78
+ this.language.valueChanges
79
+ .pipe(untilDestroyed(this), distinctUntilChanged())
80
+ .subscribe((value) => {
81
+ if (value !== this.previousLanguage) {
82
+ this.languageChange.emit(value);
83
+ }
84
+ });
85
+ }
86
+ handleLanguageChangeModal() {
87
+ this.libCodingTestService.languageChange$.pipe(untilDestroyed(this)).subscribe(value => {
88
+ if (value === "cancel" /* LanguageChangeAction.Cancel */) {
89
+ // Revert language to previous selection if user cancels
90
+ this.language.setValue(this.previousLanguage);
91
+ }
92
+ else if (value === "confirm" /* LanguageChangeAction.Confirm */) {
93
+ this.previousLanguage = this.language.value;
94
+ // Update current language if user confirms the new selection
95
+ this.libCodingTestService.changeCurrentLanguage(this.language.value);
96
+ this.setVersion();
97
+ }
98
+ });
99
+ }
100
+ parseCodeChange(code) {
101
+ this.codeChange.emit(code);
102
+ this.libCodingTestService.changeCurrentCode(code);
103
+ this.code = code;
104
+ }
105
+ get hasNoCodeChanges() {
106
+ return this.code === this.libCodingTestService.getInitCode();
107
+ }
108
+ resetCode() {
109
+ this.libCodingTestService.resetCode();
110
+ }
111
+ startGuidedTour() {
112
+ this.libCodingTestService.startGuidedTour();
113
+ }
114
+ disableFullscreen() {
115
+ this.libCodingTestService.setFullscreen(false);
116
+ }
117
+ openConfigPanel() {
118
+ this.configurationsService.openConfigPanel();
119
+ }
120
+ isCodeLoading$(isLAT) {
121
+ if (isLAT) {
122
+ return this.libCodingTestService.isBoilerplateLoading$;
123
+ }
124
+ return of(false);
125
+ }
126
+ get language() {
127
+ return this.headerForm.controls.language;
128
+ }
129
+ setVersion() {
130
+ const version = this.languages.find(x => x.value === this.language.value).version;
131
+ this.libCodingTestService.setVersion(version);
132
+ if (this.isFullViewMode) {
133
+ this.StorageCodingService.updateVersion(version);
134
+ }
135
+ }
136
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodingSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
137
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CodingSectionComponent, isStandalone: true, selector: "tgo-coding-section", inputs: { initCode: "initCode", functionParams: "functionParams", functionName: "functionName", returnType: "returnType", isLAT: "isLAT", languages: "languages", isFullViewMode: "isFullViewMode", shouldGenerateInitCode: "shouldGenerateInitCode", isRunnableWithLangSelector: "isRunnableWithLangSelector", autoHeight: "autoHeight", translations: "translations", isMobile: "isMobile", applicationTheme: "applicationTheme" }, outputs: { pasteEvent: "pasteEvent", codeChange: "codeChange", languageChange: "languageChange" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"section\">\n <header *ngIf=\"isFullViewMode || isRunnableWithLangSelector\" class=\"section-header\">\n <h2 class=\"heading\">{{ translations['HEADINGS']['CODING'] }}</h2>\n <div class=\"header-controls\" [class.is-full-screen]=\"isFullscreenMode$ | async\">\n <form *ngIf=\"isLAT\" [formGroup]=\"headerForm\" class=\"header-form\">\n <ui-tooltip [message]=\"languages.length === 1 ? translations['TOOLTIPS']['DISABLE_LANGUAGE'] : null\">\n <ui-dropdown\n id=\"language-dropdown\"\n class=\"language-dropdown\"\n formControlName=\"language\"\n [valueList]=\"languagesFormattedList\"\n [showBottomContent]=\"false\"\n [allowClear]=\"false\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-dropdown>\n </ui-tooltip>\n </form>\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Reset'\"\n [tooltip]=\"translations['TOOLTIPS']['RESET_CODE']\"\n [disabled]=\"hasNoCodeChanges\"\n [applicationTheme]=\"applicationTheme\"\n (buttonClickEvent)=\"resetCode()\"\n class=\"themed-button\"\n >\n </ui-button>\n <ui-button\n *ngIf=\"isLAT && !isMobile && !isRunnableWithLangSelector\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Help'\"\n [tooltip]=\"translations['TOOLTIPS']['HELP']\"\n [applicationTheme]=\"applicationTheme\"\n (buttonClickEvent)=\"startGuidedTour()\"\n class=\"themed-button\"\n >\n </ui-button>\n <ui-button\n *ngIf=\"!isRunnableWithLangSelector\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Settings'\"\n [tooltip]=\"translations['TOOLTIPS']['CONFIGURATIONS']\"\n [applicationTheme]=\"applicationTheme\"\n id=\"configuration-ide-button\"\n class=\"themed-button\"\n (buttonClickEvent)=\"openConfigPanel()\"\n >\n </ui-button>\n\n <ui-button\n *ngIf=\"(isFullscreenMode$ | async) && !isMobile\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Minimize'\"\n [tooltip]=\"translations['TOOLTIPS']['MINIMIZE']\"\n [tooltipPosition]=\"'left'\"\n [applicationTheme]=\"applicationTheme\"\n class=\"themed-button\"\n (buttonClickEvent)=\"disableFullscreen()\"\n >\n </ui-button>\n </div>\n </header>\n\n <div class=\"ide\" [class.spinner]=\"isLAT | memoizeFunc: isCodeLoading$ : this | async\">\n <tgo-code-editor\n *ngIf=\"(isLAT | memoizeFunc: isCodeLoading$ : this | async) === false; else showSpinner\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [shouldGenerateInitCode]=\"!isFullViewMode && !isRunnableWithLangSelector && shouldGenerateInitCode\"\n [hasCodingConfigPanel]=\"isFullViewMode\"\n [autoHeight]=\"autoHeight\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"parseCodeChange($event)\"\n >\n </tgo-code-editor>\n <ng-template #showSpinner>\n <ui-spinner [isLoader]=\"false\" class=\"code-loading-spinner\"></ui-spinner>\n </ng-template>\n </div>\n</section>\n", styles: [".section{display:flex;flex-direction:column;height:100%;overflow-y:hidden}.section-header{display:flex;justify-content:space-between;align-items:center;padding:8px 16px;border-bottom:1px solid #E0E0E0;max-height:67px}.section-header .header-controls{display:flex;width:100%;max-width:265px;justify-content:flex-end;align-items:center;flex:1 1 auto}.section-header .header-controls .header-form{flex:1;padding-right:1em}.section-header .header-controls.is-full-screen{max-width:305px}.heading{margin:0;padding:10px 8px;flex:0 0 auto}.ide{flex:1 0 auto}@media screen and (max-width: 959px){.ide{flex:1 0 350px}}.ide.spinner{display:flex;align-items:center}.ide.spinner .code-loading-spinner{margin:0 auto}.icon ::ng-deep svg,.icon ::ng-deep path{fill:var(--icon-bg-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TooltipComponentModule }, { kind: "component", type: i3.TooltipComponent, selector: "ui-tooltip", inputs: ["position", "disabled", "message", "applicationTheme", "labelForDefinition", "definitionTooltipSize", "variant"] }, { kind: "ngmodule", type: DropdownComponentModule }, { kind: "component", type: i3.DropdownComponent, selector: "ui-dropdown", inputs: ["label", "labelIcon", "isAIVariant", "name", "placeholder", "id", "value", "errors", "disabled", "valueList", "allowClear", "allowMultipleSelection", "required", "showBottomContent", "applicationTheme", "hideBuiltInErrors", "hideLabelInErrors", "textField", "valueField", "hasError", "companyColor", "panelClass"], outputs: ["closed", "opened"] }, { kind: "ngmodule", type: ButtonComponentModule }, { kind: "component", type: i3.ButtonComponent, selector: "ui-button", inputs: ["size", "variant", "label", "iconPosition", "justIcon", "iconName", "disabled", "loading", "fullWidth", "url", "urlTarget", "value", "tooltip", "isPremium", "type", "companyColor", "buttonBadgeConfig", "applicationTheme", "disabledScaleOnClick", "ariaLabel", "ariaRequired", "ariaLabelledby", "ariaDescribedby", "preventDefault", "hasBackground", "tooltipPosition", "role", "iconFilled"], outputs: ["buttonClickEvent", "buttonHoverEvent"] }, { kind: "ngmodule", type: SpinnerComponentModule }, { kind: "component", type: i3.SpinnerComponent, selector: "ui-spinner", inputs: ["size", "isLoader", "text", "applicationTheme", "iconName", "iconSize"] }, { kind: "pipe", type: MemoizeFuncPipe, name: "memoizeFunc" }, { kind: "component", type: CodeEditorComponent, selector: "tgo-code-editor", inputs: ["initCode", "functionParams", "functionName", "returnType", "hasCodingConfigPanel", "isReadonly", "autoHeight", "shouldGenerateInitCode", "snapshot"], outputs: ["pasteEvent", "codeChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
138
+ };
139
+ CodingSectionComponent = __decorate([
140
+ UntilDestroy()
141
+ ], CodingSectionComponent);
142
+ export { CodingSectionComponent };
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodingSectionComponent, decorators: [{
144
+ type: Component,
145
+ args: [{ standalone: true, selector: 'tgo-coding-section', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
146
+ CommonModule,
147
+ ReactiveFormsModule,
148
+ TooltipComponentModule,
149
+ DropdownComponentModule,
150
+ ButtonComponentModule,
151
+ SpinnerComponentModule,
152
+ MemoizeFuncPipe,
153
+ CodeEditorComponent,
154
+ ], template: "<section class=\"section\">\n <header *ngIf=\"isFullViewMode || isRunnableWithLangSelector\" class=\"section-header\">\n <h2 class=\"heading\">{{ translations['HEADINGS']['CODING'] }}</h2>\n <div class=\"header-controls\" [class.is-full-screen]=\"isFullscreenMode$ | async\">\n <form *ngIf=\"isLAT\" [formGroup]=\"headerForm\" class=\"header-form\">\n <ui-tooltip [message]=\"languages.length === 1 ? translations['TOOLTIPS']['DISABLE_LANGUAGE'] : null\">\n <ui-dropdown\n id=\"language-dropdown\"\n class=\"language-dropdown\"\n formControlName=\"language\"\n [valueList]=\"languagesFormattedList\"\n [showBottomContent]=\"false\"\n [allowClear]=\"false\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-dropdown>\n </ui-tooltip>\n </form>\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Reset'\"\n [tooltip]=\"translations['TOOLTIPS']['RESET_CODE']\"\n [disabled]=\"hasNoCodeChanges\"\n [applicationTheme]=\"applicationTheme\"\n (buttonClickEvent)=\"resetCode()\"\n class=\"themed-button\"\n >\n </ui-button>\n <ui-button\n *ngIf=\"isLAT && !isMobile && !isRunnableWithLangSelector\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Help'\"\n [tooltip]=\"translations['TOOLTIPS']['HELP']\"\n [applicationTheme]=\"applicationTheme\"\n (buttonClickEvent)=\"startGuidedTour()\"\n class=\"themed-button\"\n >\n </ui-button>\n <ui-button\n *ngIf=\"!isRunnableWithLangSelector\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Settings'\"\n [tooltip]=\"translations['TOOLTIPS']['CONFIGURATIONS']\"\n [applicationTheme]=\"applicationTheme\"\n id=\"configuration-ide-button\"\n class=\"themed-button\"\n (buttonClickEvent)=\"openConfigPanel()\"\n >\n </ui-button>\n\n <ui-button\n *ngIf=\"(isFullscreenMode$ | async) && !isMobile\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Minimize'\"\n [tooltip]=\"translations['TOOLTIPS']['MINIMIZE']\"\n [tooltipPosition]=\"'left'\"\n [applicationTheme]=\"applicationTheme\"\n class=\"themed-button\"\n (buttonClickEvent)=\"disableFullscreen()\"\n >\n </ui-button>\n </div>\n </header>\n\n <div class=\"ide\" [class.spinner]=\"isLAT | memoizeFunc: isCodeLoading$ : this | async\">\n <tgo-code-editor\n *ngIf=\"(isLAT | memoizeFunc: isCodeLoading$ : this | async) === false; else showSpinner\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [shouldGenerateInitCode]=\"!isFullViewMode && !isRunnableWithLangSelector && shouldGenerateInitCode\"\n [hasCodingConfigPanel]=\"isFullViewMode\"\n [autoHeight]=\"autoHeight\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"parseCodeChange($event)\"\n >\n </tgo-code-editor>\n <ng-template #showSpinner>\n <ui-spinner [isLoader]=\"false\" class=\"code-loading-spinner\"></ui-spinner>\n </ng-template>\n </div>\n</section>\n", styles: [".section{display:flex;flex-direction:column;height:100%;overflow-y:hidden}.section-header{display:flex;justify-content:space-between;align-items:center;padding:8px 16px;border-bottom:1px solid #E0E0E0;max-height:67px}.section-header .header-controls{display:flex;width:100%;max-width:265px;justify-content:flex-end;align-items:center;flex:1 1 auto}.section-header .header-controls .header-form{flex:1;padding-right:1em}.section-header .header-controls.is-full-screen{max-width:305px}.heading{margin:0;padding:10px 8px;flex:0 0 auto}.ide{flex:1 0 auto}@media screen and (max-width: 959px){.ide{flex:1 0 350px}}.ide.spinner{display:flex;align-items:center}.ide.spinner .code-loading-spinner{margin:0 auto}.icon ::ng-deep svg,.icon ::ng-deep path{fill:var(--icon-bg-color)}\n"] }]
155
+ }], propDecorators: { initCode: [{
156
+ type: Input
157
+ }], functionParams: [{
158
+ type: Input
159
+ }], functionName: [{
160
+ type: Input
161
+ }], returnType: [{
162
+ type: Input
163
+ }], isLAT: [{
164
+ type: Input
165
+ }], languages: [{
166
+ type: Input
167
+ }], isFullViewMode: [{
168
+ type: Input
169
+ }], shouldGenerateInitCode: [{
170
+ type: Input
171
+ }], isRunnableWithLangSelector: [{
172
+ type: Input
173
+ }], autoHeight: [{
174
+ type: Input
175
+ }], translations: [{
176
+ type: Input
177
+ }], isMobile: [{
178
+ type: Input
179
+ }], applicationTheme: [{
180
+ type: Input
181
+ }], pasteEvent: [{
182
+ type: Output
183
+ }], codeChange: [{
184
+ type: Output
185
+ }], languageChange: [{
186
+ type: Output
187
+ }] } });
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kaW5nLXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9saWIvY29tcG9uZW50cy9jb2Rpbmctc2VjdGlvbi9jb2Rpbmctc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL2NvZGluZy1zZWN0aW9uL2NvZGluZy1zZWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQW1CLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFHTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUNyQixzQkFBc0IsR0FDdkIsTUFBTSxxQkFBcUIsQ0FBQztBQUk3QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQU90RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7O0FBb0JwRSxJQUFNLHNCQUFzQixHQUE1QixNQUFNLHNCQUFzQjtJQUNoQixxQkFBcUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN0RCxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNwRCxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNwRCxFQUFFLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRWpDLFFBQVEsQ0FBUztJQUNqQixjQUFjLENBQXdCO0lBQ3RDLFlBQVksQ0FBUztJQUNyQixVQUFVLENBQTJCO0lBQ3JDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxTQUFTLENBQWU7SUFDeEIsY0FBYyxDQUFVO0lBQ3hCLHNCQUFzQixDQUFVO0lBQ2hDLDBCQUEwQixDQUFVO0lBQ3BDLFVBQVUsQ0FBVTtJQUNwQixZQUFZLENBQTBCO0lBQ3RDLFFBQVEsQ0FBVTtJQUNsQixnQkFBZ0IsQ0FBbUI7SUFFbEMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7SUFDM0MsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFDeEMsY0FBYyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO0lBRW5FLFVBQVUsQ0FBWTtJQUN0QixpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDO0lBQzVELGdCQUFnQixDQUFzQjtJQUN0QyxJQUFJLENBQVM7SUFFYixzQkFBc0IsQ0FBZTtJQUVyQyxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEVBQUUsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdEUsS0FBSztnQkFDTCxZQUFZLEVBQUUsS0FBSzthQUNwQixDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDcEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUM5QixRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzthQUNoRSxDQUFDLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUE0QixDQUFDO0lBQ3JFLENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZO2FBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQzthQUNsRCxTQUFTLENBQUMsQ0FBQyxLQUEwQixFQUFFLEVBQUU7WUFDeEMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JGLElBQUksS0FBSywrQ0FBZ0MsRUFBRSxDQUFDO2dCQUMxQyx3REFBd0Q7Z0JBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hELENBQUM7aUJBQU0sSUFBSSxLQUFLLGlEQUFpQyxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQTRCLENBQUM7Z0JBQ25FLDZEQUE2RDtnQkFDN0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBNEIsQ0FBQyxDQUFDO2dCQUM1RixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFZO1FBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWM7UUFDM0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDO1FBQ3pELENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDM0MsQ0FBQztJQUVPLFVBQVU7UUFDaEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQzt3R0EzSVUsc0JBQXNCOzRGQUF0QixzQkFBc0IsNG1CQzlDbkMsMnNHQWtGQSw2ekJEOUNJLFlBQVksdUxBQ1osbUJBQW1CLDRyQkFDbkIsc0JBQXNCLG1PQUN0Qix1QkFBdUIsNmNBQ3ZCLHFCQUFxQix1aUJBQ3JCLHNCQUFzQixzTEFDdEIsZUFBZSxvREFDZixtQkFBbUI7O0FBR1Ysc0JBQXNCO0lBbEJsQyxZQUFZLEVBQUU7R0FrQkYsc0JBQXNCLENBNElsQzs7NEZBNUlZLHNCQUFzQjtrQkFqQmxDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixzQkFBc0I7d0JBQ3RCLHVCQUF1Qjt3QkFDdkIscUJBQXFCO3dCQUNyQixzQkFBc0I7d0JBQ3RCLGVBQWU7d0JBQ2YsbUJBQW1CO3FCQUNwQjs4QkFRUSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBPYnNlcnZhYmxlLCBvZiwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvblRoZW1lLFxuICBPcHRpb25UeXBlLFxuICBUb29sdGlwQ29tcG9uZW50TW9kdWxlLFxuICBEcm9wZG93bkNvbXBvbmVudE1vZHVsZSxcbiAgQnV0dG9uQ29tcG9uZW50TW9kdWxlLFxuICBTcGlubmVyQ29tcG9uZW50TW9kdWxlLFxufSBmcm9tICdAdGVzdGdvcmlsbGEvdGdvLXVpJztcblxuaW1wb3J0IHsgTGFuZ3VhZ2VDaGFuZ2VBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvbGFuZ3VhZ2UtY2hhbmdlLWFjdGlvbic7XG5pbXBvcnQgeyBMQVRMYW5ndWFnZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvbGF0LWxhbmd1YWdlcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IExpYkNvZGluZ1Rlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGliLWNvZGluZy10ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmFnZUNvZGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ29kZUVkaXRvckZ1bmNQYXJhbSxcbiAgQ29kZUVkaXRvckxhbmd1YWdlcyxcbiAgQ29kZUVkaXRvclR5cGVzTWFwLFxufSBmcm9tICcuLi9jb2RlLWVkaXRvci9oZWxwZXJzL2NvZGUtZWRpdG9yLWhlbHBlci5tb2RlbCc7XG5pbXBvcnQgeyBQYXN0ZURhdGEgfSBmcm9tICcuLi9jb2RlLWVkaXRvci9tb2RlbHMvY29kZS1lZGl0b3IubW9kZWwnO1xuaW1wb3J0IHsgTWVtb2l6ZUZ1bmNQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbWVtb2l6ZS1mdW5jLnBpcGUnO1xuaW1wb3J0IHsgQ29kZUVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uL2NvZGUtZWRpdG9yL2NvZGUtZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndGdvLWNvZGluZy1zZWN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvZGluZy1zZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29kaW5nLXNlY3Rpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUb29sdGlwQ29tcG9uZW50TW9kdWxlLFxuICAgIERyb3Bkb3duQ29tcG9uZW50TW9kdWxlLFxuICAgIEJ1dHRvbkNvbXBvbmVudE1vZHVsZSxcbiAgICBTcGlubmVyQ29tcG9uZW50TW9kdWxlLFxuICAgIE1lbW9pemVGdW5jUGlwZSxcbiAgICBDb2RlRWRpdG9yQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb2RpbmdTZWN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25zU2VydmljZSA9IGluamVjdChDb25maWd1cmF0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpYkNvZGluZ1Rlc3RTZXJ2aWNlID0gaW5qZWN0KExpYkNvZGluZ1Rlc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBTdG9yYWdlQ29kaW5nU2VydmljZSA9IGluamVjdChTdG9yYWdlQ29kaW5nU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuXG4gIEBJbnB1dCgpIGluaXRDb2RlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZ1bmN0aW9uUGFyYW1zOiBDb2RlRWRpdG9yRnVuY1BhcmFtW107XG4gIEBJbnB1dCgpIGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSByZXR1cm5UeXBlOiBrZXlvZiBDb2RlRWRpdG9yVHlwZXNNYXA7XG4gIEBJbnB1dCgpIGlzTEFUID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxhbmd1YWdlczogTEFUTGFuZ3VhZ2VzO1xuICBASW5wdXQoKSBpc0Z1bGxWaWV3TW9kZTogYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvdWxkR2VuZXJhdGVJbml0Q29kZTogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNSdW5uYWJsZVdpdGhMYW5nU2VsZWN0b3I6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGF1dG9IZWlnaHQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRyYW5zbGF0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIEBJbnB1dCgpIGlzTW9iaWxlOiBib29sZWFuO1xuICBASW5wdXQoKSBhcHBsaWNhdGlvblRoZW1lOiBBcHBsaWNhdGlvblRoZW1lO1xuXG4gIEBPdXRwdXQoKSBwYXN0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQYXN0ZURhdGE+KCk7XG4gIEBPdXRwdXQoKSBjb2RlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBsYW5ndWFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29kZUVkaXRvckxhbmd1YWdlcz4oKTtcblxuICBoZWFkZXJGb3JtOiBGb3JtR3JvdXA7XG4gIGlzRnVsbHNjcmVlbk1vZGUkID0gdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5pc0Z1bGxzY3JlZW4kO1xuICBwcmV2aW91c0xhbmd1YWdlOiBDb2RlRWRpdG9yTGFuZ3VhZ2VzO1xuICBjb2RlOiBzdHJpbmc7XG5cbiAgbGFuZ3VhZ2VzRm9ybWF0dGVkTGlzdDogT3B0aW9uVHlwZVtdO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmlzTEFUKSB7XG4gICAgICB0aGlzLmNyZWF0ZUhlYWRlckZvcm0oKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVMYW5ndWFnZSgpO1xuICAgICAgICB0aGlzLmxpc3Rlbkxhbmd1YWdlRHJvcGRvd25DaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlTGFuZ3VhZ2VDaGFuZ2VNb2RhbCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY2hhbmdlcy5pbml0Q29kZT8uY3VycmVudFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5jb2RlQ2hhbmdlLmVtaXQoY2hhbmdlcy5pbml0Q29kZS5jdXJyZW50VmFsdWUpO1xuICAgICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5jaGFuZ2VDdXJyZW50Q29kZShjaGFuZ2VzLmluaXRDb2RlLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmxhbmd1YWdlcz8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmxhbmd1YWdlc0Zvcm1hdHRlZExpc3QgPSB0aGlzLmxhbmd1YWdlcy5tYXAoKHsgdmFsdWUsIGxhYmVsIH0pID0+ICh7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBkaXNwbGF5VmFsdWU6IGxhYmVsLFxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSGVhZGVyRm9ybSgpOiBPYnNlcnZhYmxlPENvZGVFZGl0b3JMYW5ndWFnZXM+IHtcbiAgICByZXR1cm4gdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5jdXJyZW50TGFuZ3VhZ2UkLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgdGFwKGxhc3RMYW5ndWFnZSA9PiB7XG4gICAgICAgIHRoaXMuaGVhZGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgIGxhbmd1YWdlOiBsYXN0TGFuZ3VhZ2UgPyBsYXN0TGFuZ3VhZ2UgOiB0aGlzLmxhbmd1YWdlc1swXS52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmxhbmd1YWdlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmxhbmd1YWdlLmRpc2FibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGFuZ3VhZ2UoKSB7XG4gICAgdGhpcy5wcmV2aW91c0xhbmd1YWdlID0gdGhpcy5sYW5ndWFnZS52YWx1ZSBhcyBDb2RlRWRpdG9yTGFuZ3VhZ2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5MYW5ndWFnZURyb3Bkb3duQ2hhbmdlcygpIHtcbiAgICB0aGlzLmxhbmd1YWdlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcyksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogQ29kZUVkaXRvckxhbmd1YWdlcykgPT4ge1xuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMucHJldmlvdXNMYW5ndWFnZSkge1xuICAgICAgICAgIHRoaXMubGFuZ3VhZ2VDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVMYW5ndWFnZUNoYW5nZU1vZGFsKCkge1xuICAgIHRoaXMubGliQ29kaW5nVGVzdFNlcnZpY2UubGFuZ3VhZ2VDaGFuZ2UkLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09IExhbmd1YWdlQ2hhbmdlQWN0aW9uLkNhbmNlbCkge1xuICAgICAgICAvLyBSZXZlcnQgbGFuZ3VhZ2UgdG8gcHJldmlvdXMgc2VsZWN0aW9uIGlmIHVzZXIgY2FuY2Vsc1xuICAgICAgICB0aGlzLmxhbmd1YWdlLnNldFZhbHVlKHRoaXMucHJldmlvdXNMYW5ndWFnZSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBMYW5ndWFnZUNoYW5nZUFjdGlvbi5Db25maXJtKSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNMYW5ndWFnZSA9IHRoaXMubGFuZ3VhZ2UudmFsdWUgYXMgQ29kZUVkaXRvckxhbmd1YWdlcztcbiAgICAgICAgLy8gVXBkYXRlIGN1cnJlbnQgbGFuZ3VhZ2UgaWYgdXNlciBjb25maXJtcyB0aGUgbmV3IHNlbGVjdGlvblxuICAgICAgICB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLmNoYW5nZUN1cnJlbnRMYW5ndWFnZSh0aGlzLmxhbmd1YWdlLnZhbHVlIGFzIENvZGVFZGl0b3JMYW5ndWFnZXMpO1xuICAgICAgICB0aGlzLnNldFZlcnNpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlQ29kZUNoYW5nZShjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNvZGVDaGFuZ2UuZW1pdChjb2RlKTtcbiAgICB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLmNoYW5nZUN1cnJlbnRDb2RlKGNvZGUpO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gIH1cblxuICBnZXQgaGFzTm9Db2RlQ2hhbmdlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2RlID09PSB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLmdldEluaXRDb2RlKCk7XG4gIH1cblxuICByZXNldENvZGUoKTogdm9pZCB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5yZXNldENvZGUoKTtcbiAgfVxuXG4gIHN0YXJ0R3VpZGVkVG91cigpOiB2b2lkIHtcbiAgICB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLnN0YXJ0R3VpZGVkVG91cigpO1xuICB9XG5cbiAgZGlzYWJsZUZ1bGxzY3JlZW4oKTogdm9pZCB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5zZXRGdWxsc2NyZWVuKGZhbHNlKTtcbiAgfVxuXG4gIG9wZW5Db25maWdQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zU2VydmljZS5vcGVuQ29uZmlnUGFuZWwoKTtcbiAgfVxuXG4gIGlzQ29kZUxvYWRpbmckKGlzTEFUOiBib29sZWFuKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKGlzTEFUKSB7XG4gICAgICByZXR1cm4gdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5pc0JvaWxlcnBsYXRlTG9hZGluZyQ7XG4gICAgfVxuICAgIHJldHVybiBvZihmYWxzZSk7XG4gIH1cblxuICBnZXQgbGFuZ3VhZ2UoKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJGb3JtLmNvbnRyb2xzLmxhbmd1YWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRWZXJzaW9uKCkge1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmxhbmd1YWdlcy5maW5kKHggPT4geC52YWx1ZSA9PT0gdGhpcy5sYW5ndWFnZS52YWx1ZSkudmVyc2lvbjtcbiAgICB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLnNldFZlcnNpb24odmVyc2lvbik7XG4gICAgaWYgKHRoaXMuaXNGdWxsVmlld01vZGUpIHtcbiAgICAgIHRoaXMuU3RvcmFnZUNvZGluZ1NlcnZpY2UudXBkYXRlVmVyc2lvbih2ZXJzaW9uKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICA8aGVhZGVyICpuZ0lmPVwiaXNGdWxsVmlld01vZGUgfHwgaXNSdW5uYWJsZVdpdGhMYW5nU2VsZWN0b3JcIiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgPGgyIGNsYXNzPVwiaGVhZGluZ1wiPnt7IHRyYW5zbGF0aW9uc1snSEVBRElOR1MnXVsnQ09ESU5HJ10gfX08L2gyPlxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udHJvbHNcIiBbY2xhc3MuaXMtZnVsbC1zY3JlZW5dPVwiaXNGdWxsc2NyZWVuTW9kZSQgfCBhc3luY1wiPlxuICAgICAgPGZvcm0gKm5nSWY9XCJpc0xBVFwiIFtmb3JtR3JvdXBdPVwiaGVhZGVyRm9ybVwiIGNsYXNzPVwiaGVhZGVyLWZvcm1cIj5cbiAgICAgICAgPHVpLXRvb2x0aXAgW21lc3NhZ2VdPVwibGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMSA/IHRyYW5zbGF0aW9uc1snVE9PTFRJUFMnXVsnRElTQUJMRV9MQU5HVUFHRSddIDogbnVsbFwiPlxuICAgICAgICAgIDx1aS1kcm9wZG93blxuICAgICAgICAgICAgaWQ9XCJsYW5ndWFnZS1kcm9wZG93blwiXG4gICAgICAgICAgICBjbGFzcz1cImxhbmd1YWdlLWRyb3Bkb3duXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxhbmd1YWdlXCJcbiAgICAgICAgICAgIFt2YWx1ZUxpc3RdPVwibGFuZ3VhZ2VzRm9ybWF0dGVkTGlzdFwiXG4gICAgICAgICAgICBbc2hvd0JvdHRvbUNvbnRlbnRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2FsbG93Q2xlYXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiXG4gICAgICAgICAgPjwvdWktZHJvcGRvd24+XG4gICAgICAgIDwvdWktdG9vbHRpcD5cbiAgICAgIDwvZm9ybT5cbiAgICAgIDx1aS1idXR0b25cbiAgICAgICAgW3ZhcmlhbnRdPVwiJ2ljb24tYnV0dG9uJ1wiXG4gICAgICAgIFtpY29uTmFtZV09XCInUmVzZXQnXCJcbiAgICAgICAgW3Rvb2x0aXBdPVwidHJhbnNsYXRpb25zWydUT09MVElQUyddWydSRVNFVF9DT0RFJ11cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaGFzTm9Db2RlQ2hhbmdlc1wiXG4gICAgICAgIFthcHBsaWNhdGlvblRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWVcIlxuICAgICAgICAoYnV0dG9uQ2xpY2tFdmVudCk9XCJyZXNldENvZGUoKVwiXG4gICAgICAgIGNsYXNzPVwidGhlbWVkLWJ1dHRvblwiXG4gICAgICA+XG4gICAgICA8L3VpLWJ1dHRvbj5cbiAgICAgIDx1aS1idXR0b25cbiAgICAgICAgKm5nSWY9XCJpc0xBVCAmJiAhaXNNb2JpbGUgJiYgIWlzUnVubmFibGVXaXRoTGFuZ1NlbGVjdG9yXCJcbiAgICAgICAgW3ZhcmlhbnRdPVwiJ2ljb24tYnV0dG9uJ1wiXG4gICAgICAgIFtpY29uTmFtZV09XCInSGVscCdcIlxuICAgICAgICBbdG9vbHRpcF09XCJ0cmFuc2xhdGlvbnNbJ1RPT0xUSVBTJ11bJ0hFTFAnXVwiXG4gICAgICAgIFthcHBsaWNhdGlvblRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWVcIlxuICAgICAgICAoYnV0dG9uQ2xpY2tFdmVudCk9XCJzdGFydEd1aWRlZFRvdXIoKVwiXG4gICAgICAgIGNsYXNzPVwidGhlbWVkLWJ1dHRvblwiXG4gICAgICA+XG4gICAgICA8L3VpLWJ1dHRvbj5cbiAgICAgIDx1aS1idXR0b25cbiAgICAgICAgKm5nSWY9XCIhaXNSdW5uYWJsZVdpdGhMYW5nU2VsZWN0b3JcIlxuICAgICAgICBbdmFyaWFudF09XCInaWNvbi1idXR0b24nXCJcbiAgICAgICAgW2ljb25OYW1lXT1cIidTZXR0aW5ncydcIlxuICAgICAgICBbdG9vbHRpcF09XCJ0cmFuc2xhdGlvbnNbJ1RPT0xUSVBTJ11bJ0NPTkZJR1VSQVRJT05TJ11cIlxuICAgICAgICBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lXCJcbiAgICAgICAgaWQ9XCJjb25maWd1cmF0aW9uLWlkZS1idXR0b25cIlxuICAgICAgICBjbGFzcz1cInRoZW1lZC1idXR0b25cIlxuICAgICAgICAoYnV0dG9uQ2xpY2tFdmVudCk9XCJvcGVuQ29uZmlnUGFuZWwoKVwiXG4gICAgICA+XG4gICAgICA8L3VpLWJ1dHRvbj5cblxuICAgICAgPHVpLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIihpc0Z1bGxzY3JlZW5Nb2RlJCB8IGFzeW5jKSAmJiAhaXNNb2JpbGVcIlxuICAgICAgICBbdmFyaWFudF09XCInaWNvbi1idXR0b24nXCJcbiAgICAgICAgW2ljb25OYW1lXT1cIidNaW5pbWl6ZSdcIlxuICAgICAgICBbdG9vbHRpcF09XCJ0cmFuc2xhdGlvbnNbJ1RPT0xUSVBTJ11bJ01JTklNSVpFJ11cIlxuICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidsZWZ0J1wiXG4gICAgICAgIFthcHBsaWNhdGlvblRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWVcIlxuICAgICAgICBjbGFzcz1cInRoZW1lZC1idXR0b25cIlxuICAgICAgICAoYnV0dG9uQ2xpY2tFdmVudCk9XCJkaXNhYmxlRnVsbHNjcmVlbigpXCJcbiAgICAgID5cbiAgICAgIDwvdWktYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2hlYWRlcj5cblxuICA8ZGl2IGNsYXNzPVwiaWRlXCIgW2NsYXNzLnNwaW5uZXJdPVwiaXNMQVQgfCBtZW1vaXplRnVuYzogaXNDb2RlTG9hZGluZyQgOiB0aGlzIHwgYXN5bmNcIj5cbiAgICA8dGdvLWNvZGUtZWRpdG9yXG4gICAgICAqbmdJZj1cIihpc0xBVCB8IG1lbW9pemVGdW5jOiBpc0NvZGVMb2FkaW5nJCA6IHRoaXMgfCBhc3luYykgPT09IGZhbHNlOyBlbHNlIHNob3dTcGlubmVyXCJcbiAgICAgIFtpbml0Q29kZV09XCJpbml0Q29kZVwiXG4gICAgICBbZnVuY3Rpb25QYXJhbXNdPVwiZnVuY3Rpb25QYXJhbXNcIlxuICAgICAgW2Z1bmN0aW9uTmFtZV09XCJmdW5jdGlvbk5hbWVcIlxuICAgICAgW3JldHVyblR5cGVdPVwicmV0dXJuVHlwZVwiXG4gICAgICBbc2hvdWxkR2VuZXJhdGVJbml0Q29kZV09XCIhaXNGdWxsVmlld01vZGUgJiYgIWlzUnVubmFibGVXaXRoTGFuZ1NlbGVjdG9yICYmIHNob3VsZEdlbmVyYXRlSW5pdENvZGVcIlxuICAgICAgW2hhc0NvZGluZ0NvbmZpZ1BhbmVsXT1cImlzRnVsbFZpZXdNb2RlXCJcbiAgICAgIFthdXRvSGVpZ2h0XT1cImF1dG9IZWlnaHRcIlxuICAgICAgKHBhc3RlRXZlbnQpPVwicGFzdGVFdmVudC5lbWl0KCRldmVudClcIlxuICAgICAgKGNvZGVDaGFuZ2UpPVwicGFyc2VDb2RlQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICA8L3Rnby1jb2RlLWVkaXRvcj5cbiAgICA8bmctdGVtcGxhdGUgI3Nob3dTcGlubmVyPlxuICAgICAgPHVpLXNwaW5uZXIgW2lzTG9hZGVyXT1cImZhbHNlXCIgY2xhc3M9XCJjb2RlLWxvYWRpbmctc3Bpbm5lclwiPjwvdWktc3Bpbm5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
@@ -0,0 +1,38 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MemoizeFuncPipe } from '../../../pipes/memoize-func.pipe';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ const DEFAULT_MAX_CHARACTERS = 135;
7
+ export class TruncatedTextComponent {
8
+ text = '';
9
+ maxChars = DEFAULT_MAX_CHARACTERS;
10
+ isWordWrap = false;
11
+ isTruncated;
12
+ ngOnChanges({ text }) {
13
+ if (text?.firstChange && text?.currentValue) {
14
+ this.isTruncated = this.text.length > this.maxChars;
15
+ }
16
+ }
17
+ getShownText([isTruncated, fullText]) {
18
+ // todo: add as an improvement:
19
+ // If the first line contains only a few characters, it would be good to truncate the second line to ~55 characters // Anna
20
+ return isTruncated ? `${this.text.slice(0, this.maxChars)}... ` : fullText;
21
+ }
22
+ toggleTruncation() {
23
+ this.isTruncated = !this.isTruncated;
24
+ }
25
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TruncatedTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
26
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TruncatedTextComponent, isStandalone: true, selector: "tgo-truncated-text", inputs: { text: "text", maxChars: "maxChars", isWordWrap: "isWordWrap" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"text-container\" [class.text-container-word-wrap]=\"isWordWrap\">\n <span class=\"text\" [class.expanded]=\"!isTruncated\"\n >{{ [isTruncated, text] | memoizeFunc: getShownText : this\n }}<a class=\"show-more-link\" *ngIf=\"isTruncated\" (click)=\"toggleTruncation()\">Show more</a></span\n >\n</div>\n", styles: [".text-container .text{white-space:pre-wrap}.text-container-word-wrap .text{overflow-wrap:break-word}.text-container .show-more-link{font-size:14px;color:var(--main-text-color);cursor:pointer;text-decoration:underline}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: MemoizeFuncPipe, name: "memoizeFunc" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TruncatedTextComponent, decorators: [{
29
+ type: Component,
30
+ args: [{ standalone: true, selector: 'tgo-truncated-text', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, MemoizeFuncPipe], template: "<div class=\"text-container\" [class.text-container-word-wrap]=\"isWordWrap\">\n <span class=\"text\" [class.expanded]=\"!isTruncated\"\n >{{ [isTruncated, text] | memoizeFunc: getShownText : this\n }}<a class=\"show-more-link\" *ngIf=\"isTruncated\" (click)=\"toggleTruncation()\">Show more</a></span\n >\n</div>\n", styles: [".text-container .text{white-space:pre-wrap}.text-container-word-wrap .text{overflow-wrap:break-word}.text-container .show-more-link{font-size:14px;color:var(--main-text-color);cursor:pointer;text-decoration:underline}\n"] }]
31
+ }], propDecorators: { text: [{
32
+ type: Input
33
+ }], maxChars: [{
34
+ type: Input
35
+ }], isWordWrap: [{
36
+ type: Input
37
+ }] } });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGVkLXRleHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9saWIvY29tcG9uZW50cy9jb21tb24vdHJ1bmNhdGVkLXRleHQvdHJ1bmNhdGVkLXRleHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9saWIvY29tcG9uZW50cy9jb21tb24vdHJ1bmNhdGVkLXRleHQvdHJ1bmNhdGVkLXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7OztBQUVuRSxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQVVuQyxNQUFNLE9BQU8sc0JBQXNCO0lBQ3hCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDVixRQUFRLEdBQUcsc0JBQXNCLENBQUM7SUFDbEMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUU1QixXQUFXLENBQVU7SUFFckIsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFpQjtRQUNqQyxJQUFJLElBQUksRUFBRSxXQUFXLElBQUksSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQW9CO1FBQ3JELCtCQUErQjtRQUMvQiwySEFBMkg7UUFDM0gsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDN0UsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3ZDLENBQUM7d0dBckJVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLDZLQ2RuQyxxVUFNQSxvUkRNWSxZQUFZLDhIQUFFLGVBQWU7OzRGQUU1QixzQkFBc0I7a0JBUmxDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQzs4QkFHL0IsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNZW1vaXplRnVuY1BpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9tZW1vaXplLWZ1bmMucGlwZSc7XG5cbmNvbnN0IERFRkFVTFRfTUFYX0NIQVJBQ1RFUlMgPSAxMzU7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3Rnby10cnVuY2F0ZWQtdGV4dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90cnVuY2F0ZWQtdGV4dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RydW5jYXRlZC10ZXh0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNZW1vaXplRnVuY1BpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBUcnVuY2F0ZWRUZXh0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgdGV4dCA9ICcnO1xuICBASW5wdXQoKSBtYXhDaGFycyA9IERFRkFVTFRfTUFYX0NIQVJBQ1RFUlM7XG4gIEBJbnB1dCgpIGlzV29yZFdyYXAgPSBmYWxzZTtcblxuICBpc1RydW5jYXRlZDogYm9vbGVhbjtcblxuICBuZ09uQ2hhbmdlcyh7IHRleHQgfTogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0ZXh0Py5maXJzdENoYW5nZSAmJiB0ZXh0Py5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuaXNUcnVuY2F0ZWQgPSB0aGlzLnRleHQubGVuZ3RoID4gdGhpcy5tYXhDaGFycztcbiAgICB9XG4gIH1cblxuICBnZXRTaG93blRleHQoW2lzVHJ1bmNhdGVkLCBmdWxsVGV4dF06IFtib29sZWFuLCBzdHJpbmddKTogc3RyaW5nIHtcbiAgICAvLyB0b2RvOiBhZGQgYXMgYW4gaW1wcm92ZW1lbnQ6XG4gICAgLy8gSWYgdGhlIGZpcnN0IGxpbmUgY29udGFpbnMgb25seSBhIGZldyBjaGFyYWN0ZXJzLCBpdCB3b3VsZCBiZSBnb29kIHRvIHRydW5jYXRlIHRoZSBzZWNvbmQgbGluZSB0byB+NTUgY2hhcmFjdGVycyAvLyBBbm5hXG4gICAgcmV0dXJuIGlzVHJ1bmNhdGVkID8gYCR7dGhpcy50ZXh0LnNsaWNlKDAsIHRoaXMubWF4Q2hhcnMpfS4uLiBgIDogZnVsbFRleHQ7XG4gIH1cblxuICB0b2dnbGVUcnVuY2F0aW9uKCkge1xuICAgIHRoaXMuaXNUcnVuY2F0ZWQgPSAhdGhpcy5pc1RydW5jYXRlZDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRleHQtY29udGFpbmVyXCIgW2NsYXNzLnRleHQtY29udGFpbmVyLXdvcmQtd3JhcF09XCJpc1dvcmRXcmFwXCI+XG4gIDxzcGFuIGNsYXNzPVwidGV4dFwiIFtjbGFzcy5leHBhbmRlZF09XCIhaXNUcnVuY2F0ZWRcIlxuICAgID57eyBbaXNUcnVuY2F0ZWQsIHRleHRdIHwgbWVtb2l6ZUZ1bmM6IGdldFNob3duVGV4dCA6IHRoaXNcbiAgICB9fTxhIGNsYXNzPVwic2hvdy1tb3JlLWxpbmtcIiAqbmdJZj1cImlzVHJ1bmNhdGVkXCIgKGNsaWNrKT1cInRvZ2dsZVRydW5jYXRpb24oKVwiPlNob3cgbW9yZTwvYT48L3NwYW5cbiAgPlxuPC9kaXY+XG4iXX0=