@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,97 @@
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectionStrategy, Component, inject, Input } 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 } from 'rxjs';
7
+ import { DropdownComponentModule, ToggleComponentModule } 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 { PanelComponent } from '../panel/panel.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 ConfigurationsComponent = class ConfigurationsComponent {
18
+ fb = inject(FormBuilder);
19
+ configurationsService = inject(ConfigurationsService);
20
+ StorageCodingService = inject(StorageCodingService);
21
+ libCodingTestService = inject(LibCodingTestService);
22
+ translations;
23
+ companyColor;
24
+ applicationTheme;
25
+ formattingOptions = this.configurationsService.getFormattingOptions();
26
+ codingAssistanceOptions = this.configurationsService.getCodingAssistanceOptions();
27
+ initialConfig = this.StorageCodingService.getSavedConfig();
28
+ language$ = this.libCodingTestService.currentLanguage$;
29
+ configForm;
30
+ formObject = {};
31
+ configurationsPanelOpen$ = this.configurationsService.configurationsPanelOpen$;
32
+ ngOnInit() {
33
+ if (!this.initialConfig) {
34
+ this.initialConfig = this.configurationsService.getInitialConfig();
35
+ }
36
+ this.addConfigControls(this.formattingOptions);
37
+ this.addConfigControls(this.codingAssistanceOptions);
38
+ this.configForm = this.fb.group(this.formObject);
39
+ this.configForm.valueChanges.pipe(distinctUntilChanged(), untilDestroyed(this)).subscribe((value) => {
40
+ this.configurationsService.setConfig(value);
41
+ });
42
+ }
43
+ trackConfigChange(controlName) {
44
+ const controlValue = this.configForm.value[controlName];
45
+ this.configurationsService.trackConfigChanged({
46
+ [controlName]: controlValue,
47
+ });
48
+ }
49
+ closeConfigPanel() {
50
+ this.configurationsService.closeConfigPanel();
51
+ }
52
+ addConfigControls(configObject) {
53
+ // eslint-disable-next-line guard-for-in
54
+ for (const option in configObject) {
55
+ this.formObject[option] = this.initialConfig[option];
56
+ }
57
+ }
58
+ getFormattedOptions(configurationOptions) {
59
+ return configurationOptions.map(({ value, label }) => ({
60
+ value,
61
+ displayValue: label,
62
+ }));
63
+ }
64
+ isValidRow([language, editorOption]) {
65
+ if (language !== "javascript" /* CodeEditorLanguages.Javascript */ &&
66
+ language !== "typescript" /* CodeEditorLanguages.Typescript */ &&
67
+ (editorOption === "Auto-complete" /* CodingAssistanceOptions.AutoComplete */ ||
68
+ editorOption === "Error highlighting" /* CodingAssistanceOptions.ErrorHighlighting */)) {
69
+ return false;
70
+ }
71
+ return true;
72
+ }
73
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfigurationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
74
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ConfigurationsComponent, isStandalone: true, selector: "tgo-code-configurations", inputs: { translations: "translations", companyColor: "companyColor", applicationTheme: "applicationTheme" }, ngImport: i0, template: "<tgo-code-panel\n [openPanel]=\"configurationsPanelOpen$ | async\"\n [heading]=\"translations['HEADINGS']['CONFIGURATIONS']\"\n (closeEvent)=\"closeConfigPanel()\"\n>\n <form [formGroup]=\"configForm\" class=\"configs\">\n <div id=\"formatting\" *ngIf=\"formattingOptions\">\n <h3>{{ translations['HEADINGS']['FORMATTING'] }}</h3>\n <ng-container\n [ngTemplateOutlet]=\"config\"\n [ngTemplateOutletContext]=\"{ data: formattingOptions, inputType: 'dropdown' }\"\n ></ng-container>\n </div>\n <div id=\"codingAssistance\" *ngIf=\"codingAssistanceOptions\">\n <h3>{{ translations['HEADINGS']['CODING_ASSISTANCE'] }}</h3>\n <ng-container\n [ngTemplateOutlet]=\"config\"\n [ngTemplateOutletContext]=\"{\n data: codingAssistanceOptions,\n inputType: 'toggle'\n }\"\n ></ng-container>\n </div>\n <ng-template #config let-configData=\"data\" let-inputType=\"inputType\">\n <ng-container *ngIf=\"language$ | async as language\">\n <ng-container *ngFor=\"let row of configData | keyvalue\">\n <div\n class=\"config-row\"\n *ngIf=\"[language, row.key] | memoizeFunc: isValidRow\"\n [class.config-row-toggle]=\"inputType === 'toggle'\"\n >\n <p class=\"config-name\">{{ row.key }}</p>\n <ui-dropdown\n *ngIf=\"inputType === 'dropdown'\"\n class=\"config-dropdown\"\n [formControlName]=\"row.key\"\n [valueList]=\"row.value | memoizeFunc: getFormattedOptions\"\n [allowClear]=\"false\"\n [applicationTheme]=\"applicationTheme\"\n [showBottomContent]=\"false\"\n (change)=\"trackConfigChange(row.key)\"\n ></ui-dropdown>\n <ui-toggle\n *ngIf=\"inputType === 'toggle'\"\n [applicationTheme]=\"applicationTheme\"\n [formControlName]=\"row.key\"\n (toggle)=\"trackConfigChange(row.key)\"\n class=\"config-toggle\"\n [class.config-toggle-company-colored]=\"!!companyColor\"\n [style.--toggle-checked-color]=\"companyColor\"\n ></ui-toggle>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </form>\n</tgo-code-panel>\n", styles: [".configs{display:flex;flex-direction:column;color:var(--main-text-color)}.configs .config-row{display:flex;justify-content:space-between;align-items:center}.configs .config-row.config-row-toggle{margin-bottom:32px}.configs .config-row.config-row-toggle .config-name{margin:0;padding:0}.configs .config-row.config-row-toggle .config-toggle.config-toggle-company-colored ::ng-deep .toggle-container.active{background-color:var(--toggle-checked-color)}.configs .config-row .config-dropdown{width:100%;max-width:320px}@media screen and (max-width: 599px){.configs .config-row .config-dropdown{flex:0 0 55%}}.config-name,.config-dropdown{margin:.25em 0;padding-bottom:1.5em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { 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: 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: ToggleComponentModule }, { kind: "component", type: i3.ToggleComponent, selector: "ui-toggle", inputs: ["selected", "disabled", "label", "message", "maxWidth", "applicationTheme", "ariaLabel", "ariaRequired", "preventClick", "loading", "ariaDescribedby"], outputs: ["toggle"] }, { kind: "pipe", type: MemoizeFuncPipe, name: "memoizeFunc" }, { kind: "component", type: PanelComponent, selector: "tgo-code-panel", inputs: ["heading", "openPanel"], outputs: ["closeEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
75
+ };
76
+ ConfigurationsComponent = __decorate([
77
+ UntilDestroy()
78
+ ], ConfigurationsComponent);
79
+ export { ConfigurationsComponent };
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfigurationsComponent, decorators: [{
81
+ type: Component,
82
+ args: [{ standalone: true, selector: 'tgo-code-configurations', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
83
+ CommonModule,
84
+ ReactiveFormsModule,
85
+ DropdownComponentModule,
86
+ ToggleComponentModule,
87
+ MemoizeFuncPipe,
88
+ PanelComponent,
89
+ ], template: "<tgo-code-panel\n [openPanel]=\"configurationsPanelOpen$ | async\"\n [heading]=\"translations['HEADINGS']['CONFIGURATIONS']\"\n (closeEvent)=\"closeConfigPanel()\"\n>\n <form [formGroup]=\"configForm\" class=\"configs\">\n <div id=\"formatting\" *ngIf=\"formattingOptions\">\n <h3>{{ translations['HEADINGS']['FORMATTING'] }}</h3>\n <ng-container\n [ngTemplateOutlet]=\"config\"\n [ngTemplateOutletContext]=\"{ data: formattingOptions, inputType: 'dropdown' }\"\n ></ng-container>\n </div>\n <div id=\"codingAssistance\" *ngIf=\"codingAssistanceOptions\">\n <h3>{{ translations['HEADINGS']['CODING_ASSISTANCE'] }}</h3>\n <ng-container\n [ngTemplateOutlet]=\"config\"\n [ngTemplateOutletContext]=\"{\n data: codingAssistanceOptions,\n inputType: 'toggle'\n }\"\n ></ng-container>\n </div>\n <ng-template #config let-configData=\"data\" let-inputType=\"inputType\">\n <ng-container *ngIf=\"language$ | async as language\">\n <ng-container *ngFor=\"let row of configData | keyvalue\">\n <div\n class=\"config-row\"\n *ngIf=\"[language, row.key] | memoizeFunc: isValidRow\"\n [class.config-row-toggle]=\"inputType === 'toggle'\"\n >\n <p class=\"config-name\">{{ row.key }}</p>\n <ui-dropdown\n *ngIf=\"inputType === 'dropdown'\"\n class=\"config-dropdown\"\n [formControlName]=\"row.key\"\n [valueList]=\"row.value | memoizeFunc: getFormattedOptions\"\n [allowClear]=\"false\"\n [applicationTheme]=\"applicationTheme\"\n [showBottomContent]=\"false\"\n (change)=\"trackConfigChange(row.key)\"\n ></ui-dropdown>\n <ui-toggle\n *ngIf=\"inputType === 'toggle'\"\n [applicationTheme]=\"applicationTheme\"\n [formControlName]=\"row.key\"\n (toggle)=\"trackConfigChange(row.key)\"\n class=\"config-toggle\"\n [class.config-toggle-company-colored]=\"!!companyColor\"\n [style.--toggle-checked-color]=\"companyColor\"\n ></ui-toggle>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </form>\n</tgo-code-panel>\n", styles: [".configs{display:flex;flex-direction:column;color:var(--main-text-color)}.configs .config-row{display:flex;justify-content:space-between;align-items:center}.configs .config-row.config-row-toggle{margin-bottom:32px}.configs .config-row.config-row-toggle .config-name{margin:0;padding:0}.configs .config-row.config-row-toggle .config-toggle.config-toggle-company-colored ::ng-deep .toggle-container.active{background-color:var(--toggle-checked-color)}.configs .config-row .config-dropdown{width:100%;max-width:320px}@media screen and (max-width: 599px){.configs .config-row .config-dropdown{flex:0 0 55%}}.config-name,.config-dropdown{margin:.25em 0;padding-bottom:1.5em}\n"] }]
90
+ }], propDecorators: { translations: [{
91
+ type: Input
92
+ }], companyColor: [{
93
+ type: Input
94
+ }], applicationTheme: [{
95
+ type: Input
96
+ }] } });
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9ucy9jb25maWd1cmF0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQWdDLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7QUFrQm5ELElBQU0sdUJBQXVCLEdBQTdCLE1BQU0sdUJBQXVCO0lBQ2pCLEVBQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekIscUJBQXFCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDdEQsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDcEQsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFNUQsWUFBWSxDQUEwQjtJQUN0QyxZQUFZLENBQVM7SUFDckIsZ0JBQWdCLENBQW1CO0lBRTVDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ3RFLHVCQUF1QixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ2xGLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0QsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQztJQUV2RCxVQUFVLENBQVk7SUFDdEIsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNoQix3QkFBd0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsd0JBQXdCLENBQUM7SUFFL0UsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUMxRyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLFdBQW1CO1FBQ25DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQztZQUM1QyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFlBQVk7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxZQUFvQjtRQUM1Qyx3Q0FBd0M7UUFDeEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxvQkFBcUQ7UUFDdkUsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRCxLQUFLO1lBQ0wsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBaUQ7UUFDakYsSUFDRSxRQUFRLHNEQUFtQztZQUMzQyxRQUFRLHNEQUFtQztZQUMzQyxDQUFDLFlBQVksK0RBQXlDO2dCQUNwRCxZQUFZLHlFQUE4QyxDQUFDLEVBQzdELENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7d0dBbEVVLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLGlNQzlCcEMscXpFQXlEQSx3dEJEbkNJLFlBQVksc2hCQUNaLG1CQUFtQiw0ckJBQ25CLHVCQUF1Qiw2Y0FDdkIscUJBQXFCLHdSQUNyQixlQUFlLG9EQUNmLGNBQWM7O0FBR0wsdUJBQXVCO0lBaEJuQyxZQUFZLEVBQUU7R0FnQkYsdUJBQXVCLENBbUVuQzs7NEZBbkVZLHVCQUF1QjtrQkFmbkMsU0FBUztpQ0FDSSxJQUFJLFlBQ04seUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLHFCQUFxQjt3QkFDckIsZUFBZTt3QkFDZixjQUFjO3FCQUNmOzhCQVFRLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UaGVtZSwgT3B0aW9uVHlwZSwgRHJvcGRvd25Db21wb25lbnRNb2R1bGUsIFRvZ2dsZUNvbXBvbmVudE1vZHVsZSB9IGZyb20gJ0B0ZXN0Z29yaWxsYS90Z28tdWknO1xuaW1wb3J0IHsgQ29kaW5nQXNzaXN0YW5jZU9wdGlvbnMsIENvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscy9jb25maWdzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGliQ29kaW5nVGVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saWItY29kaW5nLXRlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBTdG9yYWdlQ29kaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb2RlRWRpdG9yTGFuZ3VhZ2VzIH0gZnJvbSAnLi4vY29kZS1lZGl0b3IvaGVscGVycy9jb2RlLWVkaXRvci1oZWxwZXIubW9kZWwnO1xuaW1wb3J0IHsgTWVtb2l6ZUZ1bmNQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbWVtb2l6ZS1mdW5jLnBpcGUnO1xuaW1wb3J0IHsgUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9wYW5lbC9wYW5lbC5jb21wb25lbnQnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3Rnby1jb2RlLWNvbmZpZ3VyYXRpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICdjb25maWd1cmF0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydjb25maWd1cmF0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIERyb3Bkb3duQ29tcG9uZW50TW9kdWxlLFxuICAgIFRvZ2dsZUNvbXBvbmVudE1vZHVsZSxcbiAgICBNZW1vaXplRnVuY1BpcGUsXG4gICAgUGFuZWxDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlndXJhdGlvbnNTZXJ2aWNlID0gaW5qZWN0KENvbmZpZ3VyYXRpb25zU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgU3RvcmFnZUNvZGluZ1NlcnZpY2UgPSBpbmplY3QoU3RvcmFnZUNvZGluZ1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpYkNvZGluZ1Rlc3RTZXJ2aWNlID0gaW5qZWN0KExpYkNvZGluZ1Rlc3RTZXJ2aWNlKTtcblxuICBASW5wdXQoKSB0cmFuc2xhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBASW5wdXQoKSBjb21wYW55Q29sb3I6IHN0cmluZztcbiAgQElucHV0KCkgYXBwbGljYXRpb25UaGVtZTogQXBwbGljYXRpb25UaGVtZTtcblxuICBmb3JtYXR0aW5nT3B0aW9ucyA9IHRoaXMuY29uZmlndXJhdGlvbnNTZXJ2aWNlLmdldEZvcm1hdHRpbmdPcHRpb25zKCk7XG4gIGNvZGluZ0Fzc2lzdGFuY2VPcHRpb25zID0gdGhpcy5jb25maWd1cmF0aW9uc1NlcnZpY2UuZ2V0Q29kaW5nQXNzaXN0YW5jZU9wdGlvbnMoKTtcbiAgaW5pdGlhbENvbmZpZyA9IHRoaXMuU3RvcmFnZUNvZGluZ1NlcnZpY2UuZ2V0U2F2ZWRDb25maWcoKTtcbiAgbGFuZ3VhZ2UkID0gdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5jdXJyZW50TGFuZ3VhZ2UkO1xuXG4gIGNvbmZpZ0Zvcm06IEZvcm1Hcm91cDtcbiAgZm9ybU9iamVjdCA9IHt9O1xuICBjb25maWd1cmF0aW9uc1BhbmVsT3BlbiQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zU2VydmljZS5jb25maWd1cmF0aW9uc1BhbmVsT3BlbiQ7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxDb25maWcpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbmZpZyA9IHRoaXMuY29uZmlndXJhdGlvbnNTZXJ2aWNlLmdldEluaXRpYWxDb25maWcoKTtcbiAgICB9XG4gICAgdGhpcy5hZGRDb25maWdDb250cm9scyh0aGlzLmZvcm1hdHRpbmdPcHRpb25zKTtcbiAgICB0aGlzLmFkZENvbmZpZ0NvbnRyb2xzKHRoaXMuY29kaW5nQXNzaXN0YW5jZU9wdGlvbnMpO1xuICAgIHRoaXMuY29uZmlnRm9ybSA9IHRoaXMuZmIuZ3JvdXAodGhpcy5mb3JtT2JqZWN0KTtcbiAgICB0aGlzLmNvbmZpZ0Zvcm0udmFsdWVDaGFuZ2VzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgodmFsdWU6IENvbmZpZykgPT4ge1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uc1NlcnZpY2Uuc2V0Q29uZmlnKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRyYWNrQ29uZmlnQ2hhbmdlKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLmNvbmZpZ0Zvcm0udmFsdWVbY29udHJvbE5hbWVdO1xuICAgIHRoaXMuY29uZmlndXJhdGlvbnNTZXJ2aWNlLnRyYWNrQ29uZmlnQ2hhbmdlZCh7XG4gICAgICBbY29udHJvbE5hbWVdOiBjb250cm9sVmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICBjbG9zZUNvbmZpZ1BhbmVsKCkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbnNTZXJ2aWNlLmNsb3NlQ29uZmlnUGFuZWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29uZmlnQ29udHJvbHMoY29uZmlnT2JqZWN0OiBvYmplY3QpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluXG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gY29uZmlnT2JqZWN0KSB7XG4gICAgICB0aGlzLmZvcm1PYmplY3Rbb3B0aW9uXSA9IHRoaXMuaW5pdGlhbENvbmZpZ1tvcHRpb25dO1xuICAgIH1cbiAgfVxuXG4gIGdldEZvcm1hdHRlZE9wdGlvbnMoY29uZmlndXJhdGlvbk9wdGlvbnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IGFueSB9W10pOiBPcHRpb25UeXBlW10ge1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uT3B0aW9ucy5tYXAoKHsgdmFsdWUsIGxhYmVsIH0pID0+ICh7XG4gICAgICB2YWx1ZSxcbiAgICAgIGRpc3BsYXlWYWx1ZTogbGFiZWwsXG4gICAgfSkpO1xuICB9XG5cbiAgaXNWYWxpZFJvdyhbbGFuZ3VhZ2UsIGVkaXRvck9wdGlvbl06IFtDb2RlRWRpdG9yTGFuZ3VhZ2VzLCBDb2RpbmdBc3Npc3RhbmNlT3B0aW9uc10pIHtcbiAgICBpZiAoXG4gICAgICBsYW5ndWFnZSAhPT0gQ29kZUVkaXRvckxhbmd1YWdlcy5KYXZhc2NyaXB0ICYmXG4gICAgICBsYW5ndWFnZSAhPT0gQ29kZUVkaXRvckxhbmd1YWdlcy5UeXBlc2NyaXB0ICYmXG4gICAgICAoZWRpdG9yT3B0aW9uID09PSBDb2RpbmdBc3Npc3RhbmNlT3B0aW9ucy5BdXRvQ29tcGxldGUgfHxcbiAgICAgICAgZWRpdG9yT3B0aW9uID09PSBDb2RpbmdBc3Npc3RhbmNlT3B0aW9ucy5FcnJvckhpZ2hsaWdodGluZylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiIsIjx0Z28tY29kZS1wYW5lbFxuICBbb3BlblBhbmVsXT1cImNvbmZpZ3VyYXRpb25zUGFuZWxPcGVuJCB8IGFzeW5jXCJcbiAgW2hlYWRpbmddPVwidHJhbnNsYXRpb25zWydIRUFESU5HUyddWydDT05GSUdVUkFUSU9OUyddXCJcbiAgKGNsb3NlRXZlbnQpPVwiY2xvc2VDb25maWdQYW5lbCgpXCJcbj5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjb25maWdGb3JtXCIgY2xhc3M9XCJjb25maWdzXCI+XG4gICAgPGRpdiBpZD1cImZvcm1hdHRpbmdcIiAqbmdJZj1cImZvcm1hdHRpbmdPcHRpb25zXCI+XG4gICAgICA8aDM+e3sgdHJhbnNsYXRpb25zWydIRUFESU5HUyddWydGT1JNQVRUSU5HJ10gfX08L2gzPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb25maWdcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBkYXRhOiBmb3JtYXR0aW5nT3B0aW9ucywgaW5wdXRUeXBlOiAnZHJvcGRvd24nIH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJjb2RpbmdBc3Npc3RhbmNlXCIgKm5nSWY9XCJjb2RpbmdBc3Npc3RhbmNlT3B0aW9uc1wiPlxuICAgICAgPGgzPnt7IHRyYW5zbGF0aW9uc1snSEVBRElOR1MnXVsnQ09ESU5HX0FTU0lTVEFOQ0UnXSB9fTwvaDM+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbmZpZ1wiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgZGF0YTogY29kaW5nQXNzaXN0YW5jZU9wdGlvbnMsXG4gICAgICAgICAgaW5wdXRUeXBlOiAndG9nZ2xlJ1xuICAgICAgICB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI2NvbmZpZyBsZXQtY29uZmlnRGF0YT1cImRhdGFcIiBsZXQtaW5wdXRUeXBlPVwiaW5wdXRUeXBlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGFuZ3VhZ2UkIHwgYXN5bmMgYXMgbGFuZ3VhZ2VcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIGNvbmZpZ0RhdGEgfCBrZXl2YWx1ZVwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY29uZmlnLXJvd1wiXG4gICAgICAgICAgICAqbmdJZj1cIltsYW5ndWFnZSwgcm93LmtleV0gfCBtZW1vaXplRnVuYzogaXNWYWxpZFJvd1wiXG4gICAgICAgICAgICBbY2xhc3MuY29uZmlnLXJvdy10b2dnbGVdPVwiaW5wdXRUeXBlID09PSAndG9nZ2xlJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjb25maWctbmFtZVwiPnt7IHJvdy5rZXkgfX08L3A+XG4gICAgICAgICAgICA8dWktZHJvcGRvd25cbiAgICAgICAgICAgICAgKm5nSWY9XCJpbnB1dFR5cGUgPT09ICdkcm9wZG93bidcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvbmZpZy1kcm9wZG93blwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicm93LmtleVwiXG4gICAgICAgICAgICAgIFt2YWx1ZUxpc3RdPVwicm93LnZhbHVlIHwgbWVtb2l6ZUZ1bmM6IGdldEZvcm1hdHRlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICBbYWxsb3dDbGVhcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFthcHBsaWNhdGlvblRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWVcIlxuICAgICAgICAgICAgICBbc2hvd0JvdHRvbUNvbnRlbnRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRyYWNrQ29uZmlnQ2hhbmdlKHJvdy5rZXkpXCJcbiAgICAgICAgICAgID48L3VpLWRyb3Bkb3duPlxuICAgICAgICAgICAgPHVpLXRvZ2dsZVxuICAgICAgICAgICAgICAqbmdJZj1cImlucHV0VHlwZSA9PT0gJ3RvZ2dsZSdcIlxuICAgICAgICAgICAgICBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJyb3cua2V5XCJcbiAgICAgICAgICAgICAgKHRvZ2dsZSk9XCJ0cmFja0NvbmZpZ0NoYW5nZShyb3cua2V5KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29uZmlnLXRvZ2dsZVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5jb25maWctdG9nZ2xlLWNvbXBhbnktY29sb3JlZF09XCIhIWNvbXBhbnlDb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS4tLXRvZ2dsZS1jaGVja2VkLWNvbG9yXT1cImNvbXBhbnlDb2xvclwiXG4gICAgICAgICAgICA+PC91aS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mb3JtPlxuPC90Z28tY29kZS1wYW5lbD5cbiJdfQ==
@@ -0,0 +1,139 @@
1
+ import { Component, ElementRef, inject, Input, ViewChild } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import Quill from 'quill';
4
+ import { TableCell, TableContainer, TableRow } from 'quill/formats/table';
5
+ import { asyncScheduler, observeOn, of, take } from 'rxjs';
6
+ import { QuillModule } from 'ngx-quill';
7
+ import { TooltipComponentModule, IconComponentModule, DividerComponentModule } from '@testgorilla/tgo-ui';
8
+ import { LibCodingTestService } from '../../services/lib-coding-test.service';
9
+ import { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/common";
12
+ import * as i2 from "ngx-quill";
13
+ import * as i3 from "@testgorilla/tgo-ui";
14
+ class TGOTableCell extends TableCell {
15
+ static className = 'td-q';
16
+ }
17
+ class TGOTableRow extends TableRow {
18
+ static className = 'tr-q';
19
+ }
20
+ class TGOTableContainer extends TableContainer {
21
+ static className = 'table-q';
22
+ }
23
+ export class InstructionsComponent {
24
+ libCodingTestService = inject(LibCodingTestService);
25
+ PreviewMode = "preview" /* Modes.Preview */;
26
+ RunningMode = "running" /* Modes.Running */;
27
+ NonAssessmentPreview = "non-assessment-preview" /* Modes.NonAssessmentPreview */;
28
+ mode = "preview" /* Modes.Preview */;
29
+ questionText;
30
+ translations;
31
+ isDarkTheme;
32
+ isLAT = false;
33
+ language$ = this.libCodingTestService.currentLanguage$;
34
+ set QuillElement(quill) {
35
+ if (!quill) {
36
+ return;
37
+ }
38
+ this.manualHighlight(quill.nativeElement);
39
+ }
40
+ languages = {
41
+ c: 'C GCC',
42
+ 'c#': 'C# SDK',
43
+ 'c#_legacy': 'C# SDK',
44
+ 'c++': 'C++ G++',
45
+ java: 'Java OpenJDK',
46
+ python: 'Python',
47
+ javascript: 'JavaScript Node',
48
+ php: 'PHP',
49
+ sql: 'SQL SQLite',
50
+ typescript: 'Typescript',
51
+ ruby: 'Ruby',
52
+ go: 'Go',
53
+ r: 'R',
54
+ kotlin: 'Kotlin',
55
+ elixir: 'Elixir',
56
+ rust: 'Rust',
57
+ dart: 'Dart',
58
+ erlang: 'Erlang',
59
+ julia: 'Julia',
60
+ perl: 'Perl',
61
+ swift: 'Swift',
62
+ scala: 'Scala',
63
+ };
64
+ languagesVersion = {
65
+ c: '10',
66
+ 'c#': '3.1.300',
67
+ 'c#_legacy': '3.1.300',
68
+ 'c++': '10',
69
+ java: '12',
70
+ python: '3.8',
71
+ javascript: '13',
72
+ php: '7.4',
73
+ sql: '3.31.1',
74
+ typescript: '4.3.4',
75
+ ruby: '3',
76
+ go: '1.16',
77
+ r: '4.1.0',
78
+ kotlin: '',
79
+ elixir: '',
80
+ rust: '',
81
+ dart: '',
82
+ erlang: '',
83
+ julia: '',
84
+ perl: '',
85
+ swift: '',
86
+ scala: '2.11',
87
+ };
88
+ manualHighlight(quillElement) {
89
+ const codeElements = quillElement.getElementsByTagName('pre');
90
+ if (!codeElements.length) {
91
+ return;
92
+ }
93
+ of(Array.from(codeElements))
94
+ .pipe(observeOn(asyncScheduler), take(1))
95
+ .subscribe((codeElements) => {
96
+ if (!window.hljs) {
97
+ return;
98
+ }
99
+ codeElements.forEach(el => {
100
+ window.hljs.highlightBlock(el);
101
+ });
102
+ });
103
+ }
104
+ ngOnInit() {
105
+ Quill.register(TGOTableCell, true);
106
+ Quill.register(TGOTableRow, true);
107
+ Quill.register(TGOTableContainer, true);
108
+ }
109
+ getVersion([isLAT, key]) {
110
+ return isLAT ? this.libCodingTestService.getVersion() : this.languagesVersion[key];
111
+ }
112
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InstructionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
113
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: InstructionsComponent, isStandalone: true, selector: "tgo-code-instructions", inputs: { mode: "mode", questionText: "questionText", translations: "translations", isDarkTheme: "isDarkTheme", isLAT: "isLAT" }, viewQueries: [{ propertyName: "QuillElement", first: true, predicate: ["quill"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ng-container *ngIf=\"language$ | async as language\">\n <section *ngIf=\"questionText\" class=\"question\" id=\"question-section\">\n <header class=\"question-header\">\n <h2 class=\"question-heading\">{{ translations['HEADINGS']['INSTRUCTIONS'] }}</h2>\n </header>\n <div class=\"question-content\">\n <ng-container *ngIf=\"mode === PreviewMode\">\n <div class=\"tips\">\n <ui-tooltip [message]=\"translations['PRACTICE_QUESTIONS_STAGE']['INFO']\" class=\"tips-icon\">\n <ui-icon [name]=\"'Info'\" [size]=\"'24'\"></ui-icon>\n </ui-tooltip>\n <p class=\"tips-panel-text\">\n {{ translations['PRACTICE_QUESTIONS_STAGE']['QUESTIONS_INDEXING_AS_LAST'] }}\n </p>\n </div>\n <p class=\"tips-text\" [innerHTML]=\"translations['CODE_QUESTION']['PRACTICE_INTRODUCTION']\"></p>\n <ui-divider class=\"divider\" [size]=\"'small'\"></ui-divider>\n </ng-container>\n\n <quill-view\n #quill\n class=\"disable-text-selection question-text\"\n [class.question-text-dark]=\"isDarkTheme\"\n theme=\"snow\"\n [content]=\"questionText\"\n ></quill-view>\n <div [ngSwitch]=\"language\">\n <span class=\"mr-4\">{{ translations['CODE_QUESTION']['LANGUAGE_USING'] }}&nbsp;</span>\n <ng-container *ngFor=\"let item of languages | keyvalue\">\n <span *ngSwitchCase=\"item.key\">\n <span class=\"bold mr-4\">{{ item.value + ' ' + ([isLAT, item.key] | memoizeFunc: getVersion : this) }}</span>\n </span>\n </ng-container>\n <span *ngIf=\"mode === RunningMode || mode === NonAssessmentPreview\">\n <br />\n <span>{{ translations['CODE_QUESTION']['ADD_COMMENTS'] }}</span>\n </span>\n </div>\n </div>\n </section>\n</ng-container>\n", styles: [".tips{border-radius:5px;display:flex;flex-direction:row;place-content:center flex-start;align-items:center;margin-bottom:16px;padding:16px;background-color:var(--info-panel-color)}.tips-panel-text{color:#000}.tips-panel-text,.tips-text{font-size:16px}.tips-icon{margin-right:8px}.testgorilla-petrol-light{background:#c8d7de}.question-text{display:block;margin-bottom:32px}.question-text-dark ::ng-deep .ql-snow .ql-editor *[style]{color:var(--main-text-color)!important;background-color:inherit!important}.disable-text-selection{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.question{display:flex;flex-direction:column;height:100%}@media screen and (max-width: 959px){.question{height:auto}}.question.long_answer_list{padding-bottom:0}.question ::ng-deep .ql-editor,.question ::ng-deep .ql-container{max-height:100%}.question-content{padding:16px 40px 30px;height:100%;overflow-y:auto}.question-content .divider{display:block;margin:12px 0}.question-header{padding:18px 0 18px 40px;border-bottom:1px solid #E0E0E0}.question-header .question-heading{margin:0}:host{display:block;height:100%;overflow:hidden}@media screen and (max-width: 959px){:host{height:auto;flex:1 0 auto}}:host ::ng-deep p{margin:0;position:relative}:host ::ng-deep img{border-radius:5px}:host .bold{font-weight:700}:host .medium-size{font-size:medium}:host .image{border-radius:6px;overflow:hidden;transform:translateZ(0)}:host .image img{width:100%}::ng-deep .ql-editor{height:auto}::ng-deep .ql-editor .table-q{width:100%;border-collapse:collapse;border-radius:5px;table-layout:fixed;overflow:hidden;white-space:nowrap}::ng-deep .ql-editor .table-q .tr-q:first-of-type{background-color:var(--main-text-color)!important;color:#fff}::ng-deep .ql-editor .table-q .tr-q:nth-of-type(2n){background-color:var(--tertiary-background-color)}::ng-deep .ql-editor .table-q .tr-q:nth-of-type(odd){background-color:var(--grey-background)}::ng-deep .ql-editor .table-q .td-q{border:4px solid var(--secondary-border-color);border-radius:10px;padding:2px 5px;height:25px;vertical-align:top;text-align:center;white-space:normal}::ng-deep .ql-editor.ql-blank:before{color:var(--secondary-text-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: QuillModule }, { kind: "component", type: i2.QuillViewComponent, selector: "quill-view", inputs: ["format", "theme", "modules", "debug", "formats", "sanitize", "beforeRender", "strict", "content", "customModules", "customOptions"], outputs: ["onEditorCreated"] }, { kind: "ngmodule", type: TooltipComponentModule }, { kind: "component", type: i3.TooltipComponent, selector: "ui-tooltip", inputs: ["position", "disabled", "message", "applicationTheme", "labelForDefinition", "definitionTooltipSize", "variant"] }, { kind: "ngmodule", type: IconComponentModule }, { kind: "component", type: i3.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "ngmodule", type: DividerComponentModule }, { kind: "component", type: i3.DividerComponent, selector: "ui-divider", inputs: ["size", "companyColor", "applicationTheme", "label"] }, { kind: "pipe", type: MemoizeFuncPipe, name: "memoizeFunc" }] });
114
+ }
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InstructionsComponent, decorators: [{
116
+ type: Component,
117
+ args: [{ standalone: true, selector: 'tgo-code-instructions', imports: [
118
+ CommonModule,
119
+ QuillModule,
120
+ TooltipComponentModule,
121
+ IconComponentModule,
122
+ DividerComponentModule,
123
+ MemoizeFuncPipe,
124
+ ], template: "<ng-container *ngIf=\"language$ | async as language\">\n <section *ngIf=\"questionText\" class=\"question\" id=\"question-section\">\n <header class=\"question-header\">\n <h2 class=\"question-heading\">{{ translations['HEADINGS']['INSTRUCTIONS'] }}</h2>\n </header>\n <div class=\"question-content\">\n <ng-container *ngIf=\"mode === PreviewMode\">\n <div class=\"tips\">\n <ui-tooltip [message]=\"translations['PRACTICE_QUESTIONS_STAGE']['INFO']\" class=\"tips-icon\">\n <ui-icon [name]=\"'Info'\" [size]=\"'24'\"></ui-icon>\n </ui-tooltip>\n <p class=\"tips-panel-text\">\n {{ translations['PRACTICE_QUESTIONS_STAGE']['QUESTIONS_INDEXING_AS_LAST'] }}\n </p>\n </div>\n <p class=\"tips-text\" [innerHTML]=\"translations['CODE_QUESTION']['PRACTICE_INTRODUCTION']\"></p>\n <ui-divider class=\"divider\" [size]=\"'small'\"></ui-divider>\n </ng-container>\n\n <quill-view\n #quill\n class=\"disable-text-selection question-text\"\n [class.question-text-dark]=\"isDarkTheme\"\n theme=\"snow\"\n [content]=\"questionText\"\n ></quill-view>\n <div [ngSwitch]=\"language\">\n <span class=\"mr-4\">{{ translations['CODE_QUESTION']['LANGUAGE_USING'] }}&nbsp;</span>\n <ng-container *ngFor=\"let item of languages | keyvalue\">\n <span *ngSwitchCase=\"item.key\">\n <span class=\"bold mr-4\">{{ item.value + ' ' + ([isLAT, item.key] | memoizeFunc: getVersion : this) }}</span>\n </span>\n </ng-container>\n <span *ngIf=\"mode === RunningMode || mode === NonAssessmentPreview\">\n <br />\n <span>{{ translations['CODE_QUESTION']['ADD_COMMENTS'] }}</span>\n </span>\n </div>\n </div>\n </section>\n</ng-container>\n", styles: [".tips{border-radius:5px;display:flex;flex-direction:row;place-content:center flex-start;align-items:center;margin-bottom:16px;padding:16px;background-color:var(--info-panel-color)}.tips-panel-text{color:#000}.tips-panel-text,.tips-text{font-size:16px}.tips-icon{margin-right:8px}.testgorilla-petrol-light{background:#c8d7de}.question-text{display:block;margin-bottom:32px}.question-text-dark ::ng-deep .ql-snow .ql-editor *[style]{color:var(--main-text-color)!important;background-color:inherit!important}.disable-text-selection{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.question{display:flex;flex-direction:column;height:100%}@media screen and (max-width: 959px){.question{height:auto}}.question.long_answer_list{padding-bottom:0}.question ::ng-deep .ql-editor,.question ::ng-deep .ql-container{max-height:100%}.question-content{padding:16px 40px 30px;height:100%;overflow-y:auto}.question-content .divider{display:block;margin:12px 0}.question-header{padding:18px 0 18px 40px;border-bottom:1px solid #E0E0E0}.question-header .question-heading{margin:0}:host{display:block;height:100%;overflow:hidden}@media screen and (max-width: 959px){:host{height:auto;flex:1 0 auto}}:host ::ng-deep p{margin:0;position:relative}:host ::ng-deep img{border-radius:5px}:host .bold{font-weight:700}:host .medium-size{font-size:medium}:host .image{border-radius:6px;overflow:hidden;transform:translateZ(0)}:host .image img{width:100%}::ng-deep .ql-editor{height:auto}::ng-deep .ql-editor .table-q{width:100%;border-collapse:collapse;border-radius:5px;table-layout:fixed;overflow:hidden;white-space:nowrap}::ng-deep .ql-editor .table-q .tr-q:first-of-type{background-color:var(--main-text-color)!important;color:#fff}::ng-deep .ql-editor .table-q .tr-q:nth-of-type(2n){background-color:var(--tertiary-background-color)}::ng-deep .ql-editor .table-q .tr-q:nth-of-type(odd){background-color:var(--grey-background)}::ng-deep .ql-editor .table-q .td-q{border:4px solid var(--secondary-border-color);border-radius:10px;padding:2px 5px;height:25px;vertical-align:top;text-align:center;white-space:normal}::ng-deep .ql-editor.ql-blank:before{color:var(--secondary-text-color)}\n"] }]
125
+ }], propDecorators: { mode: [{
126
+ type: Input
127
+ }], questionText: [{
128
+ type: Input
129
+ }], translations: [{
130
+ type: Input
131
+ }], isDarkTheme: [{
132
+ type: Input
133
+ }], isLAT: [{
134
+ type: Input
135
+ }], QuillElement: [{
136
+ type: ViewChild,
137
+ args: ['quill', { read: ElementRef }]
138
+ }] } });
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvbGliL2NvbXBvbmVudHMvaW5zdHJ1Y3Rpb25zL2luc3RydWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL2luc3RydWN0aW9ucy9pbnN0cnVjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHMUcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7OztBQUVoRSxNQUFNLFlBQWEsU0FBUSxTQUFTO0lBQzNCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDOztBQUduQyxNQUFNLFdBQVksU0FBUSxRQUFRO0lBQ3pCLE1B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QUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IFF1aWxsIGZyb20gJ3F1aWxsJztcbmltcG9ydCB7IFRhYmxlQ2VsbCwgVGFibGVDb250YWluZXIsIFRhYmxlUm93IH0gZnJvbSAncXVpbGwvZm9ybWF0cy90YWJsZSc7XG5pbXBvcnQgeyBhc3luY1NjaGVkdWxlciwgb2JzZXJ2ZU9uLCBvZiwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUXVpbGxNb2R1bGUgfSBmcm9tICduZ3gtcXVpbGwnO1xuaW1wb3J0IHsgVG9vbHRpcENvbXBvbmVudE1vZHVsZSwgSWNvbkNvbXBvbmVudE1vZHVsZSwgRGl2aWRlckNvbXBvbmVudE1vZHVsZSB9IGZyb20gJ0B0ZXN0Z29yaWxsYS90Z28tdWknO1xuXG5pbXBvcnQgeyBNb2RlcyB9IGZyb20gJy4uLy4uL21vZGVscy9tb2RlJztcbmltcG9ydCB7IExpYkNvZGluZ1Rlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGliLWNvZGluZy10ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWVtb2l6ZUZ1bmNQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbWVtb2l6ZS1mdW5jLnBpcGUnO1xuXG5jbGFzcyBUR09UYWJsZUNlbGwgZXh0ZW5kcyBUYWJsZUNlbGwge1xuICBwdWJsaWMgc3RhdGljIGNsYXNzTmFtZSA9ICd0ZC1xJztcbn1cblxuY2xhc3MgVEdPVGFibGVSb3cgZXh0ZW5kcyBUYWJsZVJvdyB7XG4gIHB1YmxpYyBzdGF0aWMgY2xhc3NOYW1lID0gJ3RyLXEnO1xufVxuXG5jbGFzcyBUR09UYWJsZUNvbnRhaW5lciBleHRlbmRzIFRhYmxlQ29udGFpbmVyIHtcbiAgcHVibGljIHN0YXRpYyBjbGFzc05hbWUgPSAndGFibGUtcSc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3Rnby1jb2RlLWluc3RydWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnaW5zdHJ1Y3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2luc3RydWN0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFF1aWxsTW9kdWxlLFxuICAgIFRvb2x0aXBDb21wb25lbnRNb2R1bGUsXG4gICAgSWNvbkNvbXBvbmVudE1vZHVsZSxcbiAgICBEaXZpZGVyQ29tcG9uZW50TW9kdWxlLFxuICAgIE1lbW9pemVGdW5jUGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW5zdHJ1Y3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBsaWJDb2RpbmdUZXN0U2VydmljZSA9IGluamVjdChMaWJDb2RpbmdUZXN0U2VydmljZSk7XG5cbiAgcmVhZG9ubHkgUHJldmlld01vZGUgPSBNb2Rlcy5QcmV2aWV3O1xuICByZWFkb25seSBSdW5uaW5nTW9kZSA9IE1vZGVzLlJ1bm5pbmc7XG4gIHJlYWRvbmx5IE5vbkFzc2Vzc21lbnRQcmV2aWV3ID0gTW9kZXMuTm9uQXNzZXNzbWVudFByZXZpZXc7XG4gIEBJbnB1dCgpIG1vZGUgPSBNb2Rlcy5QcmV2aWV3O1xuICBASW5wdXQoKSBxdWVzdGlvblRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgdHJhbnNsYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgQElucHV0KCkgaXNEYXJrVGhlbWU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzTEFUID0gZmFsc2U7XG4gIGxhbmd1YWdlJCA9IHRoaXMubGliQ29kaW5nVGVzdFNlcnZpY2UuY3VycmVudExhbmd1YWdlJDtcblxuICBAVmlld0NoaWxkKCdxdWlsbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBzZXQgUXVpbGxFbGVtZW50KHF1aWxsOiBFbGVtZW50UmVmKSB7XG4gICAgaWYgKCFxdWlsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWFudWFsSGlnaGxpZ2h0KHF1aWxsLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbGFuZ3VhZ2VzID0ge1xuICAgIGM6ICdDIEdDQycsXG4gICAgJ2MjJzogJ0MjIFNESycsXG4gICAgJ2MjX2xlZ2FjeSc6ICdDIyBTREsnLFxuICAgICdjKysnOiAnQysrIEcrKycsXG4gICAgamF2YTogJ0phdmEgT3BlbkpESycsXG4gICAgcHl0aG9uOiAnUHl0aG9uJyxcbiAgICBqYXZhc2NyaXB0OiAnSmF2YVNjcmlwdCBOb2RlJyxcbiAgICBwaHA6ICdQSFAnLFxuICAgIHNxbDogJ1NRTCBTUUxpdGUnLFxuICAgIHR5cGVzY3JpcHQ6ICdUeXBlc2NyaXB0JyxcbiAgICBydWJ5OiAnUnVieScsXG4gICAgZ286ICdHbycsXG4gICAgcjogJ1InLFxuICAgIGtvdGxpbjogJ0tvdGxpbicsXG4gICAgZWxpeGlyOiAnRWxpeGlyJyxcbiAgICBydXN0OiAnUnVzdCcsXG4gICAgZGFydDogJ0RhcnQnLFxuICAgIGVybGFuZzogJ0VybGFuZycsXG4gICAganVsaWE6ICdKdWxpYScsXG4gICAgcGVybDogJ1BlcmwnLFxuICAgIHN3aWZ0OiAnU3dpZnQnLFxuICAgIHNjYWxhOiAnU2NhbGEnLFxuICB9O1xuICBsYW5ndWFnZXNWZXJzaW9uOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIGM6ICcxMCcsXG4gICAgJ2MjJzogJzMuMS4zMDAnLFxuICAgICdjI19sZWdhY3knOiAnMy4xLjMwMCcsXG4gICAgJ2MrKyc6ICcxMCcsXG4gICAgamF2YTogJzEyJyxcbiAgICBweXRob246ICczLjgnLFxuICAgIGphdmFzY3JpcHQ6ICcxMycsXG4gICAgcGhwOiAnNy40JyxcbiAgICBzcWw6ICczLjMxLjEnLFxuICAgIHR5cGVzY3JpcHQ6ICc0LjMuNCcsXG4gICAgcnVieTogJzMnLFxuICAgIGdvOiAnMS4xNicsXG4gICAgcjogJzQuMS4wJyxcbiAgICBrb3RsaW46ICcnLFxuICAgIGVsaXhpcjogJycsXG4gICAgcnVzdDogJycsXG4gICAgZGFydDogJycsXG4gICAgZXJsYW5nOiAnJyxcbiAgICBqdWxpYTogJycsXG4gICAgcGVybDogJycsXG4gICAgc3dpZnQ6ICcnLFxuICAgIHNjYWxhOiAnMi4xMScsXG4gIH07XG5cbiAgcHJpdmF0ZSBtYW51YWxIaWdobGlnaHQocXVpbGxFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNvZGVFbGVtZW50cyA9IHF1aWxsRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncHJlJyk7XG5cbiAgICBpZiAoIWNvZGVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvZihBcnJheS5mcm9tKGNvZGVFbGVtZW50cykpXG4gICAgICAucGlwZShvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpLCB0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoY29kZUVsZW1lbnRzOiBIVE1MUHJlRWxlbWVudFtdKSA9PiB7XG4gICAgICAgIGlmICghd2luZG93LmhsanMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb2RlRWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgd2luZG93LmhsanMuaGlnaGxpZ2h0QmxvY2soZWwpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgUXVpbGwucmVnaXN0ZXIoVEdPVGFibGVDZWxsLCB0cnVlKTtcbiAgICBRdWlsbC5yZWdpc3RlcihUR09UYWJsZVJvdywgdHJ1ZSk7XG4gICAgUXVpbGwucmVnaXN0ZXIoVEdPVGFibGVDb250YWluZXIsIHRydWUpO1xuICB9XG5cbiAgZ2V0VmVyc2lvbihbaXNMQVQsIGtleV06IFtib29sZWFuLCBzdHJpbmddKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXNMQVQgPyB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLmdldFZlcnNpb24oKSA6IHRoaXMubGFuZ3VhZ2VzVmVyc2lvbltrZXldO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibGFuZ3VhZ2UkIHwgYXN5bmMgYXMgbGFuZ3VhZ2VcIj5cbiAgPHNlY3Rpb24gKm5nSWY9XCJxdWVzdGlvblRleHRcIiBjbGFzcz1cInF1ZXN0aW9uXCIgaWQ9XCJxdWVzdGlvbi1zZWN0aW9uXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cInF1ZXN0aW9uLWhlYWRlclwiPlxuICAgICAgPGgyIGNsYXNzPVwicXVlc3Rpb24taGVhZGluZ1wiPnt7IHRyYW5zbGF0aW9uc1snSEVBRElOR1MnXVsnSU5TVFJVQ1RJT05TJ10gfX08L2gyPlxuICAgIDwvaGVhZGVyPlxuICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbi1jb250ZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gUHJldmlld01vZGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpcHNcIj5cbiAgICAgICAgICA8dWktdG9vbHRpcCBbbWVzc2FnZV09XCJ0cmFuc2xhdGlvbnNbJ1BSQUNUSUNFX1FVRVNUSU9OU19TVEFHRSddWydJTkZPJ11cIiBjbGFzcz1cInRpcHMtaWNvblwiPlxuICAgICAgICAgICAgPHVpLWljb24gW25hbWVdPVwiJ0luZm8nXCIgW3NpemVdPVwiJzI0J1wiPjwvdWktaWNvbj5cbiAgICAgICAgICA8L3VpLXRvb2x0aXA+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0aXBzLXBhbmVsLXRleHRcIj5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0aW9uc1snUFJBQ1RJQ0VfUVVFU1RJT05TX1NUQUdFJ11bJ1FVRVNUSU9OU19JTkRFWElOR19BU19MQVNUJ10gfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCBjbGFzcz1cInRpcHMtdGV4dFwiIFtpbm5lckhUTUxdPVwidHJhbnNsYXRpb25zWydDT0RFX1FVRVNUSU9OJ11bJ1BSQUNUSUNFX0lOVFJPRFVDVElPTiddXCI+PC9wPlxuICAgICAgICA8dWktZGl2aWRlciBjbGFzcz1cImRpdmlkZXJcIiBbc2l6ZV09XCInc21hbGwnXCI+PC91aS1kaXZpZGVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxxdWlsbC12aWV3XG4gICAgICAgICNxdWlsbFxuICAgICAgICBjbGFzcz1cImRpc2FibGUtdGV4dC1zZWxlY3Rpb24gcXVlc3Rpb24tdGV4dFwiXG4gICAgICAgIFtjbGFzcy5xdWVzdGlvbi10ZXh0LWRhcmtdPVwiaXNEYXJrVGhlbWVcIlxuICAgICAgICB0aGVtZT1cInNub3dcIlxuICAgICAgICBbY29udGVudF09XCJxdWVzdGlvblRleHRcIlxuICAgICAgPjwvcXVpbGwtdmlldz5cbiAgICAgIDxkaXYgW25nU3dpdGNoXT1cImxhbmd1YWdlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibXItNFwiPnt7IHRyYW5zbGF0aW9uc1snQ09ERV9RVUVTVElPTiddWydMQU5HVUFHRV9VU0lORyddIH19Jm5ic3A7PC9zcGFuPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxhbmd1YWdlcyB8IGtleXZhbHVlXCI+XG4gICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIml0ZW0ua2V5XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvbGQgbXItNFwiPnt7IGl0ZW0udmFsdWUgKyAnICcgKyAoW2lzTEFULCBpdGVtLmtleV0gfCBtZW1vaXplRnVuYzogZ2V0VmVyc2lvbiA6IHRoaXMpIH19PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwibW9kZSA9PT0gUnVubmluZ01vZGUgfHwgbW9kZSA9PT0gTm9uQXNzZXNzbWVudFByZXZpZXdcIj5cbiAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICA8c3Bhbj57eyB0cmFuc2xhdGlvbnNbJ0NPREVfUVVFU1RJT04nXVsnQUREX0NPTU1FTlRTJ10gfX08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
+ import { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';
3
+ import { CommonModule } from '@angular/common';
4
+ import { ButtonComponentModule } from '@testgorilla/tgo-ui';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/material/sidenav";
7
+ import * as i2 from "@testgorilla/tgo-ui";
8
+ export class PanelComponent {
9
+ heading;
10
+ openPanel;
11
+ closeEvent = new EventEmitter();
12
+ sidenav;
13
+ ngOnChanges(changes) {
14
+ if (changes.openPanel.currentValue) {
15
+ this.sidenav.open();
16
+ }
17
+ }
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PanelComponent, isStandalone: true, selector: "tgo-code-panel", inputs: { heading: "heading", openPanel: "openPanel" }, outputs: { closeEvent: "closeEvent" }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: ["sidenav"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<mat-sidenav-container class=\"sidenav-container\">\n <mat-sidenav #sidenav position=\"end\" (closedStart)=\"closeEvent.emit(true)\">\n <div class=\"container\">\n <div class=\"header\">\n <h2 class=\"heading\">{{ heading }}</h2>\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [tooltip]=\"'Close'\"\n (buttonClickEvent)=\"sidenav.close()\"\n class=\"themed-button\"\n ></ui-button>\n </div>\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n </mat-sidenav>\n</mat-sidenav-container>\n", styles: [".container{display:flex;flex-direction:column;padding:24px 32px}.container .header{display:flex;justify-content:space-between;align-items:center;padding:16px 0}.container .heading{margin:0}.close-icon{fill:var(--icon-bg-color)}.sidenav-container{z-index:36}.sidenav-container mat-sidenav{width:100%;max-width:600px;background-color:var(--drawer-bg-color)!important}.sidenav-container .mat-sidenav.mat-drawer-opened{position:fixed}.sidenav-container ::ng-deep .mat-drawer-backdrop.mat-drawer-shown{background-color:transparent;position:fixed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i1.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i1.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "ngmodule", type: ButtonComponentModule }, { kind: "component", type: i2.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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PanelComponent, decorators: [{
22
+ type: Component,
23
+ args: [{ standalone: true, selector: 'tgo-code-panel', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, MatSidenavModule, ButtonComponentModule], template: "<mat-sidenav-container class=\"sidenav-container\">\n <mat-sidenav #sidenav position=\"end\" (closedStart)=\"closeEvent.emit(true)\">\n <div class=\"container\">\n <div class=\"header\">\n <h2 class=\"heading\">{{ heading }}</h2>\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [tooltip]=\"'Close'\"\n (buttonClickEvent)=\"sidenav.close()\"\n class=\"themed-button\"\n ></ui-button>\n </div>\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n </mat-sidenav>\n</mat-sidenav-container>\n", styles: [".container{display:flex;flex-direction:column;padding:24px 32px}.container .header{display:flex;justify-content:space-between;align-items:center;padding:16px 0}.container .heading{margin:0}.close-icon{fill:var(--icon-bg-color)}.sidenav-container{z-index:36}.sidenav-container mat-sidenav{width:100%;max-width:600px;background-color:var(--drawer-bg-color)!important}.sidenav-container .mat-sidenav.mat-drawer-opened{position:fixed}.sidenav-container ::ng-deep .mat-drawer-backdrop.mat-drawer-shown{background-color:transparent;position:fixed}\n"] }]
24
+ }], propDecorators: { heading: [{
25
+ type: Input
26
+ }], openPanel: [{
27
+ type: Input
28
+ }], closeEvent: [{
29
+ type: Output
30
+ }], sidenav: [{
31
+ type: ViewChild,
32
+ args: ['sidenav', { static: true }]
33
+ }] } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9saWIvY29tcG9uZW50cy9wYW5lbC9wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL3BhbmVsL3BhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBVTVELE1BQU0sT0FBTyxjQUFjO0lBQ2hCLE9BQU8sQ0FBUztJQUNoQixTQUFTLENBQVU7SUFDbEIsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7SUFDWCxPQUFPLENBQWE7SUFFNUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO3dHQVZVLGNBQWM7NEZBQWQsY0FBYyxnVEN0QjNCLHVtQkFtQkEsd2xCRENZLFlBQVksOEJBQUUsZ0JBQWdCLHNUQUFFLHFCQUFxQjs7NEZBRXBELGNBQWM7a0JBUjFCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDOzhCQUd2RCxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNpQyxPQUFPO3NCQUE5QyxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNpZGVuYXYsIE1hdFNpZGVuYXZNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnRNb2R1bGUgfSBmcm9tICdAdGVzdGdvcmlsbGEvdGdvLXVpJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndGdvLWNvZGUtcGFuZWwnLFxuICB0ZW1wbGF0ZVVybDogJ3BhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3BhbmVsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRTaWRlbmF2TW9kdWxlLCBCdXR0b25Db21wb25lbnRNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGhlYWRpbmc6IHN0cmluZztcbiAgQElucHV0KCkgb3BlblBhbmVsOiBib29sZWFuO1xuICBAT3V0cHV0KCkgY2xvc2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQFZpZXdDaGlsZCgnc2lkZW5hdicsIHsgc3RhdGljOiB0cnVlIH0pIHNpZGVuYXY6IE1hdFNpZGVuYXY7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm9wZW5QYW5lbC5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuc2lkZW5hdi5vcGVuKCk7XG4gICAgfVxuICB9XG59XG4iLCI8bWF0LXNpZGVuYXYtY29udGFpbmVyIGNsYXNzPVwic2lkZW5hdi1jb250YWluZXJcIj5cbiAgPG1hdC1zaWRlbmF2ICNzaWRlbmF2IHBvc2l0aW9uPVwiZW5kXCIgKGNsb3NlZFN0YXJ0KT1cImNsb3NlRXZlbnQuZW1pdCh0cnVlKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZ1wiPnt7IGhlYWRpbmcgfX08L2gyPlxuICAgICAgICA8dWktYnV0dG9uXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ2ljb24tYnV0dG9uJ1wiXG4gICAgICAgICAgW2ljb25OYW1lXT1cIidDbG9zZSdcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidDbG9zZSdcIlxuICAgICAgICAgIChidXR0b25DbGlja0V2ZW50KT1cInNpZGVuYXYuY2xvc2UoKVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aGVtZWQtYnV0dG9uXCJcbiAgICAgICAgPjwvdWktYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtc2lkZW5hdj5cbjwvbWF0LXNpZGVuYXYtY29udGFpbmVyPlxuIl19
@@ -0,0 +1,169 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
5
+ import { animationFrameScheduler, concat, debounceTime, distinctUntilChanged, map, observeOn, of, } from 'rxjs';
6
+ import { AngularSplitModule } from 'angular-split';
7
+ import { resizeElement } from '../../utils/resize-element';
8
+ import { CodingSectionComponent } from '../coding-section/coding-section.component';
9
+ import { ConfigurationsComponent } from '../configurations/configurations.component';
10
+ import { TestResultsComponent } from '../tests/test-results.component';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/common";
13
+ import * as i2 from "angular-split";
14
+ let RunnableEditorComponent = class RunnableEditorComponent {
15
+ changeDetectorRef;
16
+ initCode;
17
+ functionParams;
18
+ functionName;
19
+ returnType;
20
+ isFullViewMode;
21
+ isLAT;
22
+ isSQL;
23
+ canAddCustomTestCases;
24
+ hideTestCases;
25
+ languages;
26
+ shouldGenerateInitCode;
27
+ autoHeight;
28
+ translations;
29
+ questionText;
30
+ companyColor;
31
+ testCasesStatus;
32
+ loading;
33
+ runTestResponse = [];
34
+ exampleTestCases;
35
+ isRunnableWithLangSelector;
36
+ applicationTheme;
37
+ pasteEvent = new EventEmitter();
38
+ codeChange = new EventEmitter();
39
+ runTestClick = new EventEmitter();
40
+ languageChange = new EventEmitter();
41
+ codingTestsSplitRef;
42
+ testsSplitAreaRef;
43
+ minTestsSplitHeight;
44
+ currentIdeSplitHeight = 55;
45
+ currentTestsSplitHeight = 45;
46
+ MIN_TESTS_HEIGHT_PX = 119;
47
+ MIN_LAT_TESTS_HEIGHT_PX = 202;
48
+ GUTTER_SIZE = 1;
49
+ isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
50
+ constructor(changeDetectorRef) {
51
+ this.changeDetectorRef = changeDetectorRef;
52
+ }
53
+ ngAfterViewInit() {
54
+ if (this.isMobile) {
55
+ return;
56
+ }
57
+ if (this.isFullViewMode) {
58
+ this.setCodingSplitListener();
59
+ }
60
+ else {
61
+ const { offsetHeight: height } = this.codingTestsSplitRef.nativeElement;
62
+ this.minTestsSplitHeight = this.getMinTestsPercentHeight(height);
63
+ }
64
+ }
65
+ /* listens to area height changes and calculates the maximum % size of coding window area */
66
+ setCodingSplitListener() {
67
+ concat(this.getInitialMaxHeight$(), resizeElement(this.codingTestsSplitRef.nativeElement))
68
+ .pipe(observeOn(animationFrameScheduler), debounceTime(300), map(({ contentRect: { height } }) => height), distinctUntilChanged(), untilDestroyed(this))
69
+ .subscribe(height => {
70
+ this.calculateCurrentHeights(height);
71
+ this.changeDetectorRef.detectChanges();
72
+ });
73
+ }
74
+ calculateCurrentHeights(fullHeight) {
75
+ const { offsetHeight: testsSplitHeight } = this.testsSplitAreaRef.nativeElement;
76
+ this.minTestsSplitHeight = this.getMinTestsPercentHeight(fullHeight);
77
+ let testsPercentHeight = this.getPercentHeightFromWhole(fullHeight, testsSplitHeight);
78
+ if (testsPercentHeight < this.minTestsSplitHeight) {
79
+ testsPercentHeight = this.minTestsSplitHeight;
80
+ }
81
+ this.currentTestsSplitHeight = testsPercentHeight;
82
+ this.currentIdeSplitHeight = 100 - this.currentTestsSplitHeight;
83
+ }
84
+ getInitialMaxHeight$() {
85
+ const { offsetHeight: height } = this.codingTestsSplitRef.nativeElement;
86
+ return of({ contentRect: { height: this.getMinTestsPercentHeight(height) } });
87
+ }
88
+ getPercentHeightFromWhole(fullHeight, areaHeight) {
89
+ return (areaHeight * 100) / (fullHeight - this.GUTTER_SIZE * 2);
90
+ }
91
+ getMinTestsPercentHeight(height) {
92
+ const minTestsHeightPx = this.isLAT ? this.MIN_LAT_TESTS_HEIGHT_PX : this.MIN_TESTS_HEIGHT_PX;
93
+ return (minTestsHeightPx * 100) / height;
94
+ }
95
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RunnableEditorComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
96
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RunnableEditorComponent, isStandalone: true, selector: "tgo-runnable-editor", inputs: { initCode: "initCode", functionParams: "functionParams", functionName: "functionName", returnType: "returnType", isFullViewMode: "isFullViewMode", isLAT: "isLAT", isSQL: "isSQL", canAddCustomTestCases: "canAddCustomTestCases", hideTestCases: "hideTestCases", languages: "languages", shouldGenerateInitCode: "shouldGenerateInitCode", autoHeight: "autoHeight", translations: "translations", questionText: "questionText", companyColor: "companyColor", testCasesStatus: "testCasesStatus", loading: "loading", runTestResponse: "runTestResponse", exampleTestCases: "exampleTestCases", isRunnableWithLangSelector: "isRunnableWithLangSelector", applicationTheme: "applicationTheme" }, outputs: { pasteEvent: "pasteEvent", codeChange: "codeChange", runTestClick: "runTestClick", languageChange: "languageChange" }, viewQueries: [{ propertyName: "codingTestsSplitRef", first: true, predicate: ["codingTestsSplit"], descendants: true, read: ElementRef }, { propertyName: "testsSplitAreaRef", first: true, predicate: ["testsSplitArea"], descendants: true, read: ElementRef }], ngImport: i0, template: "<as-split\n *ngIf=\"!isMobile; else mobileTpl\"\n #codingTestsSplit\n class=\"as-split\"\n direction=\"vertical\"\n restrictMove=\"true\"\n [gutterSize]=\"GUTTER_SIZE\"\n>\n <as-split-area class=\"ide-split-area\" [size]=\"currentIdeSplitHeight\">\n <ng-container [ngTemplateOutlet]=\"ide\"></ng-container>\n </as-split-area>\n <as-split-area #testsSplitArea [size]=\"currentTestsSplitHeight\" [minSize]=\"minTestsSplitHeight\">\n <ng-container [ngTemplateOutlet]=\"tests\"></ng-container>\n </as-split-area>\n</as-split>\n\n<ng-template #mobileTpl>\n <div class=\"container-mobile\">\n <ng-container [ngTemplateOutlet]=\"ide\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"tests\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #ide>\n <div class=\"ide-container\">\n <tgo-coding-section\n class=\"coding-section\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [isFullViewMode]=\"isFullViewMode\"\n [isRunnableWithLangSelector]=\"isRunnableWithLangSelector\"\n [shouldGenerateInitCode]=\"shouldGenerateInitCode\"\n [isLAT]=\"isLAT\"\n [languages]=\"languages\"\n [autoHeight]=\"autoHeight\"\n [translations]=\"translations\"\n [isMobile]=\"isMobile\"\n [applicationTheme]=\"applicationTheme\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n ></tgo-coding-section>\n\n <tgo-code-configurations\n *ngIf=\"isFullViewMode\"\n [translations]=\"translations\"\n [companyColor]=\"companyColor\"\n [applicationTheme]=\"applicationTheme\"\n >\n </tgo-code-configurations>\n </div>\n</ng-template>\n\n<ng-template #tests>\n <div class=\"tests\" [class.tests-lat]=\"isLAT\">\n <tgo-code-test-results\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [runTestResponse]=\"runTestResponse\"\n [translations]=\"translations\"\n [exampleTestCases]=\"exampleTestCases\"\n [canChangeProgrammingLang]=\"languages?.length > 1\"\n [showTestCases]=\"isLAT || (isSQL && !hideTestCases)\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [applicationTheme]=\"applicationTheme\"\n (runTestClick)=\"runTestClick.emit($event)\"\n >\n </tgo-code-test-results>\n </div>\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%}@media screen and (max-width: 959px){:host{flex:1 0 600px;height:auto}}.ide-split-area{min-height:65px}.ide-container,.tests{height:100%}.tests-lat{overflow:hidden}@media screen and (max-width: 959px){.tests-lat{flex:1 0 60vh}}.coding-section{display:block;height:100%}.container-mobile{height:100%;display:flex;flex-direction:column}.container-mobile .ide-container,.container-mobile .tests{max-height:60vh}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AngularSplitModule }, { kind: "component", type: i2.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: i2.SplitAreaComponent, selector: "as-split-area", inputs: ["size", "minSize", "maxSize", "lockSize", "visible"], exportAs: ["asSplitArea"] }, { kind: "component", type: CodingSectionComponent, selector: "tgo-coding-section", inputs: ["initCode", "functionParams", "functionName", "returnType", "isLAT", "languages", "isFullViewMode", "shouldGenerateInitCode", "isRunnableWithLangSelector", "autoHeight", "translations", "isMobile", "applicationTheme"], outputs: ["pasteEvent", "codeChange", "languageChange"] }, { kind: "component", type: ConfigurationsComponent, selector: "tgo-code-configurations", inputs: ["translations", "companyColor", "applicationTheme"] }, { kind: "component", type: TestResultsComponent, selector: "tgo-code-test-results", inputs: ["companyColor", "testCasesStatus", "loading", "runTestResponse", "translations", "isLAT", "isSQL", "exampleTestCases", "canChangeProgrammingLang", "showTestCases", "canAddCustomTestCases", "applicationTheme"], outputs: ["runTestClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
97
+ };
98
+ RunnableEditorComponent = __decorate([
99
+ UntilDestroy(),
100
+ __metadata("design:paramtypes", [ChangeDetectorRef])
101
+ ], RunnableEditorComponent);
102
+ export { RunnableEditorComponent };
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RunnableEditorComponent, decorators: [{
104
+ type: Component,
105
+ args: [{ standalone: true, selector: 'tgo-runnable-editor', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
106
+ CommonModule,
107
+ AngularSplitModule,
108
+ CodingSectionComponent,
109
+ ConfigurationsComponent,
110
+ TestResultsComponent,
111
+ ], template: "<as-split\n *ngIf=\"!isMobile; else mobileTpl\"\n #codingTestsSplit\n class=\"as-split\"\n direction=\"vertical\"\n restrictMove=\"true\"\n [gutterSize]=\"GUTTER_SIZE\"\n>\n <as-split-area class=\"ide-split-area\" [size]=\"currentIdeSplitHeight\">\n <ng-container [ngTemplateOutlet]=\"ide\"></ng-container>\n </as-split-area>\n <as-split-area #testsSplitArea [size]=\"currentTestsSplitHeight\" [minSize]=\"minTestsSplitHeight\">\n <ng-container [ngTemplateOutlet]=\"tests\"></ng-container>\n </as-split-area>\n</as-split>\n\n<ng-template #mobileTpl>\n <div class=\"container-mobile\">\n <ng-container [ngTemplateOutlet]=\"ide\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"tests\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #ide>\n <div class=\"ide-container\">\n <tgo-coding-section\n class=\"coding-section\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [isFullViewMode]=\"isFullViewMode\"\n [isRunnableWithLangSelector]=\"isRunnableWithLangSelector\"\n [shouldGenerateInitCode]=\"shouldGenerateInitCode\"\n [isLAT]=\"isLAT\"\n [languages]=\"languages\"\n [autoHeight]=\"autoHeight\"\n [translations]=\"translations\"\n [isMobile]=\"isMobile\"\n [applicationTheme]=\"applicationTheme\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n ></tgo-coding-section>\n\n <tgo-code-configurations\n *ngIf=\"isFullViewMode\"\n [translations]=\"translations\"\n [companyColor]=\"companyColor\"\n [applicationTheme]=\"applicationTheme\"\n >\n </tgo-code-configurations>\n </div>\n</ng-template>\n\n<ng-template #tests>\n <div class=\"tests\" [class.tests-lat]=\"isLAT\">\n <tgo-code-test-results\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [runTestResponse]=\"runTestResponse\"\n [translations]=\"translations\"\n [exampleTestCases]=\"exampleTestCases\"\n [canChangeProgrammingLang]=\"languages?.length > 1\"\n [showTestCases]=\"isLAT || (isSQL && !hideTestCases)\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [applicationTheme]=\"applicationTheme\"\n (runTestClick)=\"runTestClick.emit($event)\"\n >\n </tgo-code-test-results>\n </div>\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%}@media screen and (max-width: 959px){:host{flex:1 0 600px;height:auto}}.ide-split-area{min-height:65px}.ide-container,.tests{height:100%}.tests-lat{overflow:hidden}@media screen and (max-width: 959px){.tests-lat{flex:1 0 60vh}}.coding-section{display:block;height:100%}.container-mobile{height:100%;display:flex;flex-direction:column}.container-mobile .ide-container,.container-mobile .tests{max-height:60vh}\n"] }]
112
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { initCode: [{
113
+ type: Input
114
+ }], functionParams: [{
115
+ type: Input
116
+ }], functionName: [{
117
+ type: Input
118
+ }], returnType: [{
119
+ type: Input
120
+ }], isFullViewMode: [{
121
+ type: Input
122
+ }], isLAT: [{
123
+ type: Input
124
+ }], isSQL: [{
125
+ type: Input
126
+ }], canAddCustomTestCases: [{
127
+ type: Input
128
+ }], hideTestCases: [{
129
+ type: Input
130
+ }], languages: [{
131
+ type: Input
132
+ }], shouldGenerateInitCode: [{
133
+ type: Input
134
+ }], autoHeight: [{
135
+ type: Input
136
+ }], translations: [{
137
+ type: Input
138
+ }], questionText: [{
139
+ type: Input
140
+ }], companyColor: [{
141
+ type: Input
142
+ }], testCasesStatus: [{
143
+ type: Input
144
+ }], loading: [{
145
+ type: Input
146
+ }], runTestResponse: [{
147
+ type: Input
148
+ }], exampleTestCases: [{
149
+ type: Input
150
+ }], isRunnableWithLangSelector: [{
151
+ type: Input
152
+ }], applicationTheme: [{
153
+ type: Input
154
+ }], pasteEvent: [{
155
+ type: Output
156
+ }], codeChange: [{
157
+ type: Output
158
+ }], runTestClick: [{
159
+ type: Output
160
+ }], languageChange: [{
161
+ type: Output
162
+ }], codingTestsSplitRef: [{
163
+ type: ViewChild,
164
+ args: ['codingTestsSplit', { read: ElementRef }]
165
+ }], testsSplitAreaRef: [{
166
+ type: ViewChild,
167
+ args: ['testsSplitArea', { read: ElementRef }]
168
+ }] } });
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmFibGUtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvbGliL2NvbXBvbmVudHMvcnVubmFibGUtZWRpdG9yL3J1bm5hYmxlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL3J1bm5hYmxlLWVkaXRvci9ydW5uYWJsZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsTUFBTSxFQUNOLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUVILFNBQVMsRUFDVCxFQUFFLEdBQ0gsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBTzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBaUJoRSxJQUFNLHVCQUF1QixHQUE3QixNQUFN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bkUsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHtcbiAgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsXG4gIGNvbmNhdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvYnNlcnZlT24sXG4gIG9mLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFuZ3VsYXJTcGxpdE1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3BsaXQnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UaGVtZSB9IGZyb20gJ0B0ZXN0Z29yaWxsYS90Z28tdWknO1xuXG5pbXBvcnQgeyBMQVRMYW5ndWFnZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvbGF0LWxhbmd1YWdlcyc7XG5pbXBvcnQgeyBFeGFtcGxlVGVzdENhc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGVzdC1jYXNlcyc7XG5pbXBvcnQgeyByZXNpemVFbGVtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVzaXplLWVsZW1lbnQnO1xuaW1wb3J0IHtcbiAgQ29kZUVkaXRvckZ1bmNQYXJhbSxcbiAgQ29kZUVkaXRvckxhbmd1YWdlcyxcbiAgQ29kZUVkaXRvclR5cGVzTWFwLFxufSBmcm9tICcuLi9jb2RlLWVkaXRvci9oZWxwZXJzL2NvZGUtZWRpdG9yLWhlbHBlci5tb2RlbCc7XG5pbXBvcnQgeyBQYXN0ZURhdGEgfSBmcm9tICcuLi9jb2RlLWVkaXRvci9tb2RlbHMvY29kZS1lZGl0b3IubW9kZWwnO1xuaW1wb3J0IHsgQ29kaW5nU2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvZGluZy1zZWN0aW9uL2NvZGluZy1zZWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXN0UmVzdWx0c0NvbXBvbmVudCB9IGZyb20gJy4uL3Rlc3RzL3Rlc3QtcmVzdWx0cy5jb21wb25lbnQnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3Rnby1ydW5uYWJsZS1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vcnVubmFibGUtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcnVubmFibGUtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFuZ3VsYXJTcGxpdE1vZHVsZSxcbiAgICBDb2RpbmdTZWN0aW9uQ29tcG9uZW50LFxuICAgIENvbmZpZ3VyYXRpb25zQ29tcG9uZW50LFxuICAgIFRlc3RSZXN1bHRzQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBSdW5uYWJsZUVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBpbml0Q29kZTogc3RyaW5nO1xuICBASW5wdXQoKSBmdW5jdGlvblBhcmFtczogQ29kZUVkaXRvckZ1bmNQYXJhbVtdO1xuICBASW5wdXQoKSBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgcmV0dXJuVHlwZToga2V5b2YgQ29kZUVkaXRvclR5cGVzTWFwO1xuICBASW5wdXQoKSBpc0Z1bGxWaWV3TW9kZTogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNMQVQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzU1FMOiBib29sZWFuO1xuICBASW5wdXQoKSBjYW5BZGRDdXN0b21UZXN0Q2FzZXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhpZGVUZXN0Q2FzZXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGxhbmd1YWdlczogTEFUTGFuZ3VhZ2VzO1xuICBASW5wdXQoKSBzaG91bGRHZW5lcmF0ZUluaXRDb2RlOiBib29sZWFuO1xuICBASW5wdXQoKSBhdXRvSGVpZ2h0OiBib29sZWFuO1xuICBASW5wdXQoKSB0cmFuc2xhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBASW5wdXQoKSBxdWVzdGlvblRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgY29tcGFueUNvbG9yOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRlc3RDYXNlc1N0YXR1czogYW55O1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBydW5UZXN0UmVzcG9uc2UgPSBbXTtcbiAgQElucHV0KCkgZXhhbXBsZVRlc3RDYXNlczogRXhhbXBsZVRlc3RDYXNlW107XG4gIEBJbnB1dCgpIGlzUnVubmFibGVXaXRoTGFuZ1NlbGVjdG9yOiBib29sZWFuO1xuICBASW5wdXQoKSBhcHBsaWNhdGlvblRoZW1lOiBBcHBsaWNhdGlvblRoZW1lO1xuXG4gIEBPdXRwdXQoKSBwYXN0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQYXN0ZURhdGE+KCk7XG4gIEBPdXRwdXQoKSBjb2RlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBydW5UZXN0Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBsYW5ndWFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29kZUVkaXRvckxhbmd1YWdlcz4oKTtcblxuICBAVmlld0NoaWxkKCdjb2RpbmdUZXN0c1NwbGl0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNvZGluZ1Rlc3RzU3BsaXRSZWY6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3Rlc3RzU3BsaXRBcmVhJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHRlc3RzU3BsaXRBcmVhUmVmOiBFbGVtZW50UmVmO1xuXG4gIG1pblRlc3RzU3BsaXRIZWlnaHQ6IG51bWJlcjtcbiAgY3VycmVudElkZVNwbGl0SGVpZ2h0ID0gNTU7XG4gIGN1cnJlbnRUZXN0c1NwbGl0SGVpZ2h0ID0gNDU7XG5cbiAgTUlOX1RFU1RTX0hFSUdIVF9QWCA9IDExOTtcbiAgTUlOX0xBVF9URVNUU19IRUlHSFRfUFggPSAyMDI7XG4gIEdVVFRFUl9TSVpFID0gMTtcblxuICBpc01vYmlsZSA9IC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNNb2JpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Z1bGxWaWV3TW9kZSkge1xuICAgICAgdGhpcy5zZXRDb2RpbmdTcGxpdExpc3RlbmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgb2Zmc2V0SGVpZ2h0OiBoZWlnaHQgfSA9IHRoaXMuY29kaW5nVGVzdHNTcGxpdFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgdGhpcy5taW5UZXN0c1NwbGl0SGVpZ2h0ID0gdGhpcy5nZXRNaW5UZXN0c1BlcmNlbnRIZWlnaHQoaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKiBsaXN0ZW5zIHRvIGFyZWEgaGVpZ2h0IGNoYW5nZXMgYW5kIGNhbGN1bGF0ZXMgdGhlIG1heGltdW0gJSBzaXplIG9mIGNvZGluZyB3aW5kb3cgYXJlYSAqL1xuICBwcml2YXRlIHNldENvZGluZ1NwbGl0TGlzdGVuZXIoKTogdm9pZCB7XG4gICAgY29uY2F0KHRoaXMuZ2V0SW5pdGlhbE1heEhlaWdodCQoKSwgcmVzaXplRWxlbWVudCh0aGlzLmNvZGluZ1Rlc3RzU3BsaXRSZWYubmF0aXZlRWxlbWVudCkpXG4gICAgICAucGlwZShcbiAgICAgICAgb2JzZXJ2ZU9uKGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIG1hcCgoeyBjb250ZW50UmVjdDogeyBoZWlnaHQgfSB9KSA9PiBoZWlnaHQpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShoZWlnaHQgPT4ge1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUN1cnJlbnRIZWlnaHRzKGhlaWdodCk7XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlQ3VycmVudEhlaWdodHMoZnVsbEhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyBvZmZzZXRIZWlnaHQ6IHRlc3RzU3BsaXRIZWlnaHQgfSA9IHRoaXMudGVzdHNTcGxpdEFyZWFSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLm1pblRlc3RzU3BsaXRIZWlnaHQgPSB0aGlzLmdldE1pblRlc3RzUGVyY2VudEhlaWdodChmdWxsSGVpZ2h0KTtcblxuICAgIGxldCB0ZXN0c1BlcmNlbnRIZWlnaHQgPSB0aGlzLmdldFBlcmNlbnRIZWlnaHRGcm9tV2hvbGUoZnVsbEhlaWdodCwgdGVzdHNTcGxpdEhlaWdodCk7XG5cbiAgICBpZiAodGVzdHNQZXJjZW50SGVpZ2h0IDwgdGhpcy5taW5UZXN0c1NwbGl0SGVpZ2h0KSB7XG4gICAgICB0ZXN0c1BlcmNlbnRIZWlnaHQgPSB0aGlzLm1pblRlc3RzU3BsaXRIZWlnaHQ7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50VGVzdHNTcGxpdEhlaWdodCA9IHRlc3RzUGVyY2VudEhlaWdodDtcbiAgICB0aGlzLmN1cnJlbnRJZGVTcGxpdEhlaWdodCA9IDEwMCAtIHRoaXMuY3VycmVudFRlc3RzU3BsaXRIZWlnaHQ7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxNYXhIZWlnaHQkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgeyBvZmZzZXRIZWlnaHQ6IGhlaWdodCB9ID0gdGhpcy5jb2RpbmdUZXN0c1NwbGl0UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIG9mKHsgY29udGVudFJlY3Q6IHsgaGVpZ2h0OiB0aGlzLmdldE1pblRlc3RzUGVyY2VudEhlaWdodChoZWlnaHQpIH0gfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcmNlbnRIZWlnaHRGcm9tV2hvbGUoZnVsbEhlaWdodDogbnVtYmVyLCBhcmVhSGVpZ2h0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAoYXJlYUhlaWdodCAqIDEwMCkgLyAoZnVsbEhlaWdodCAtIHRoaXMuR1VUVEVSX1NJWkUgKiAyKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWluVGVzdHNQZXJjZW50SGVpZ2h0KGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBtaW5UZXN0c0hlaWdodFB4ID0gdGhpcy5pc0xBVCA/IHRoaXMuTUlOX0xBVF9URVNUU19IRUlHSFRfUFggOiB0aGlzLk1JTl9URVNUU19IRUlHSFRfUFg7XG4gICAgcmV0dXJuIChtaW5UZXN0c0hlaWdodFB4ICogMTAwKSAvIGhlaWdodDtcbiAgfVxufVxuIiwiPGFzLXNwbGl0XG4gICpuZ0lmPVwiIWlzTW9iaWxlOyBlbHNlIG1vYmlsZVRwbFwiXG4gICNjb2RpbmdUZXN0c1NwbGl0XG4gIGNsYXNzPVwiYXMtc3BsaXRcIlxuICBkaXJlY3Rpb249XCJ2ZXJ0aWNhbFwiXG4gIHJlc3RyaWN0TW92ZT1cInRydWVcIlxuICBbZ3V0dGVyU2l6ZV09XCJHVVRURVJfU0laRVwiXG4+XG4gIDxhcy1zcGxpdC1hcmVhIGNsYXNzPVwiaWRlLXNwbGl0LWFyZWFcIiBbc2l6ZV09XCJjdXJyZW50SWRlU3BsaXRIZWlnaHRcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImlkZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2FzLXNwbGl0LWFyZWE+XG4gIDxhcy1zcGxpdC1hcmVhICN0ZXN0c1NwbGl0QXJlYSBbc2l6ZV09XCJjdXJyZW50VGVzdHNTcGxpdEhlaWdodFwiIFttaW5TaXplXT1cIm1pblRlc3RzU3BsaXRIZWlnaHRcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlc3RzXCI+PC9uZy1jb250YWluZXI+XG4gIDwvYXMtc3BsaXQtYXJlYT5cbjwvYXMtc3BsaXQ+XG5cbjxuZy10ZW1wbGF0ZSAjbW9iaWxlVHBsPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLW1vYmlsZVwiPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaWRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZXN0c1wiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaWRlPlxuICA8ZGl2IGNsYXNzPVwiaWRlLWNvbnRhaW5lclwiPlxuICAgIDx0Z28tY29kaW5nLXNlY3Rpb25cbiAgICAgIGNsYXNzPVwiY29kaW5nLXNlY3Rpb25cIlxuICAgICAgW2luaXRDb2RlXT1cImluaXRDb2RlXCJcbiAgICAgIFtmdW5jdGlvblBhcmFtc109XCJmdW5jdGlvblBhcmFtc1wiXG4gICAgICBbZnVuY3Rpb25OYW1lXT1cImZ1bmN0aW9uTmFtZVwiXG4gICAgICBbcmV0dXJuVHlwZV09XCJyZXR1cm5UeXBlXCJcbiAgICAgIFtpc0Z1bGxWaWV3TW9kZV09XCJpc0Z1bGxWaWV3TW9kZVwiXG4gICAgICBbaXNSdW5uYWJsZVdpdGhMYW5nU2VsZWN0b3JdPVwiaXNSdW5uYWJsZVdpdGhMYW5nU2VsZWN0b3JcIlxuICAgICAgW3Nob3VsZEdlbmVyYXRlSW5pdENvZGVdPVwic2hvdWxkR2VuZXJhdGVJbml0Q29kZVwiXG4gICAgICBbaXNMQVRdPVwiaXNMQVRcIlxuICAgICAgW2xhbmd1YWdlc109XCJsYW5ndWFnZXNcIlxuICAgICAgW2F1dG9IZWlnaHRdPVwiYXV0b0hlaWdodFwiXG4gICAgICBbdHJhbnNsYXRpb25zXT1cInRyYW5zbGF0aW9uc1wiXG4gICAgICBbaXNNb2JpbGVdPVwiaXNNb2JpbGVcIlxuICAgICAgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiXG4gICAgICAocGFzdGVFdmVudCk9XCJwYXN0ZUV2ZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAoY29kZUNoYW5nZSk9XCJjb2RlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAobGFuZ3VhZ2VDaGFuZ2UpPVwibGFuZ3VhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICA+PC90Z28tY29kaW5nLXNlY3Rpb24+XG5cbiAgICA8dGdvLWNvZGUtY29uZmlndXJhdGlvbnNcbiAgICAgICpuZ0lmPVwiaXNGdWxsVmlld01vZGVcIlxuICAgICAgW3RyYW5zbGF0aW9uc109XCJ0cmFuc2xhdGlvbnNcIlxuICAgICAgW2NvbXBhbnlDb2xvcl09XCJjb21wYW55Q29sb3JcIlxuICAgICAgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiXG4gICAgPlxuICAgIDwvdGdvLWNvZGUtY29uZmlndXJhdGlvbnM+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0ZXN0cz5cbiAgPGRpdiBjbGFzcz1cInRlc3RzXCIgW2NsYXNzLnRlc3RzLWxhdF09XCJpc0xBVFwiPlxuICAgIDx0Z28tY29kZS10ZXN0LXJlc3VsdHNcbiAgICAgIFtjb21wYW55Q29sb3JdPVwiY29tcGFueUNvbG9yXCJcbiAgICAgIFt0ZXN0Q2FzZXNTdGF0dXNdPVwidGVzdENhc2VzU3RhdHVzXCJcbiAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgW2lzTEFUXT1cImlzTEFUXCJcbiAgICAgIFtpc1NRTF09XCJpc1NRTFwiXG4gICAgICBbcnVuVGVzdFJlc3BvbnNlXT1cInJ1blRlc3RSZXNwb25zZVwiXG4gICAgICBbdHJhbnNsYXRpb25zXT1cInRyYW5zbGF0aW9uc1wiXG4gICAgICBbZXhhbXBsZVRlc3RDYXNlc109XCJleGFtcGxlVGVzdENhc2VzXCJcbiAgICAgIFtjYW5DaGFuZ2VQcm9ncmFtbWluZ0xhbmddPVwibGFuZ3VhZ2VzPy5sZW5ndGggPiAxXCJcbiAgICAgIFtzaG93VGVzdENhc2VzXT1cImlzTEFUIHx8IChpc1NRTCAmJiAhaGlkZVRlc3RDYXNlcylcIlxuICAgICAgW2NhbkFkZEN1c3RvbVRlc3RDYXNlc109XCJjYW5BZGRDdXN0b21UZXN0Q2FzZXNcIlxuICAgICAgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiXG4gICAgICAocnVuVGVzdENsaWNrKT1cInJ1blRlc3RDbGljay5lbWl0KCRldmVudClcIlxuICAgID5cbiAgICA8L3Rnby1jb2RlLXRlc3QtcmVzdWx0cz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19