@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 { HttpClient } from '@angular/common/http';
2
+ import { Injectable } from '@angular/core';
3
+ import { translate } from '@ngneat/transloco';
4
+ import { SnackbarService } from '@testgorilla/tgo-ui';
5
+ import { EMPTY, throwError } from 'rxjs';
6
+ import { catchError } from 'rxjs/operators';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common/http";
9
+ import * as i2 from "@testgorilla/tgo-ui";
10
+ export class ApiService {
11
+ httpClient;
12
+ snackbarService;
13
+ invitationUUID = '';
14
+ contentLanguage = '';
15
+ ROOT_TRANSLATIONS_SCOPE = '';
16
+ baseUrl = '';
17
+ constructor(httpClient, snackbarService) {
18
+ this.httpClient = httpClient;
19
+ this.snackbarService = snackbarService;
20
+ }
21
+ setParams(invitationUUID, contentLanguage, translationScope, baseUrl) {
22
+ this.invitationUUID = invitationUUID;
23
+ this.contentLanguage = contentLanguage;
24
+ this.ROOT_TRANSLATIONS_SCOPE = translationScope;
25
+ this.baseUrl = baseUrl;
26
+ }
27
+ getInvitationUUID() {
28
+ return this.invitationUUID;
29
+ }
30
+ get(url, options = {}, errorCallback = this.handleError.bind(this)) {
31
+ return this.httpClient
32
+ .get(`${this.baseUrl}${url}`, this.buildHeaders(options))
33
+ .pipe(catchError((error) => errorCallback(error)));
34
+ }
35
+ post(url, data, options = {}, errorCallback = this.handleError.bind(this), isStandaloneUrl = false) {
36
+ return this.httpClient
37
+ .post(isStandaloneUrl ? url : `${this.baseUrl}${url}`, data, this.buildHeaders(options))
38
+ .pipe(catchError((error) => errorCallback(error)));
39
+ }
40
+ put(url, data, options = {}, errorCallback = this.handleError.bind(this)) {
41
+ return this.httpClient
42
+ .put(`${this.baseUrl}${url}`, data, this.buildHeaders(options))
43
+ .pipe(catchError((error) => errorCallback(error)));
44
+ }
45
+ patch(url, data, options = {}, errorCallback = this.handleError.bind(this)) {
46
+ return this.httpClient
47
+ .patch(`${this.baseUrl}${url}`, data, this.buildHeaders(options))
48
+ .pipe(catchError((error) => errorCallback(error)));
49
+ }
50
+ delete(url, errorCallback = this.handleError.bind(this)) {
51
+ return this.httpClient
52
+ .delete(`${this.baseUrl}${url}`, this.buildHeaders({}))
53
+ .pipe(catchError((error) => errorCallback(error)));
54
+ }
55
+ handleError(errorObj) {
56
+ const { error } = errorObj;
57
+ if (error?.errors?.length > 0) {
58
+ return throwError(() => error.errors);
59
+ }
60
+ else {
61
+ console.error(errorObj.message);
62
+ this.snackbarService.error(this.processGenericServerError());
63
+ return EMPTY;
64
+ }
65
+ }
66
+ processGenericServerError() {
67
+ return translate(`${this.ROOT_TRANSLATIONS_SCOPE}.ERRORS.SYSTEM_ERROR`);
68
+ }
69
+ buildHeaders(options) {
70
+ if (typeof window.crypto.randomUUID === 'function') {
71
+ options = {
72
+ ...options,
73
+ 'X-REQUEST-ID': window.crypto.randomUUID(),
74
+ 'X-INVITATION-UUID': this.invitationUUID,
75
+ };
76
+ }
77
+ const passedAuthorizationHeader = options['Authorization'];
78
+ const headers = {
79
+ headers: {
80
+ ...options,
81
+ Authorization: passedAuthorizationHeader
82
+ ? passedAuthorizationHeader
83
+ : `TokenCandidature ${this.invitationUUID?.replace(/-/g, '')}`,
84
+ },
85
+ };
86
+ if (this.contentLanguage) {
87
+ headers.headers['Accept-Language'] = this.contentLanguage;
88
+ }
89
+ return headers;
90
+ }
91
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiService, deps: [{ token: i1.HttpClient }, { token: i2.SnackbarService }], target: i0.ɵɵFactoryTarget.Injectable });
92
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiService });
93
+ }
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiService, decorators: [{
95
+ type: Injectable
96
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SnackbarService }] });
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL3NoYXJlZC9saWIvc2VydmljZXMvYXBpL2FwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxLQUFLLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUc1QyxNQUFNLE9BQU8sVUFBVTtJQU9YO0lBQ0E7SUFQRixjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDckIsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0lBQzdCLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFFckIsWUFDVSxVQUFzQixFQUN0QixlQUFnQztRQURoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUN2QyxDQUFDO0lBRUosU0FBUyxDQUNQLGNBQXNCLEVBQ3RCLGVBQXVCLEVBQ3ZCLGdCQUF3QixFQUN4QixPQUFlO1FBRWYsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLGdCQUFnQixDQUFDO1FBQ2hELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxp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ZSxDQUFDO1FBQzVELENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO3dHQTVJVSxVQUFVOzRHQUFWLFVBQVU7OzRGQUFWLFVBQVU7a0JBRHRCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gJ0BuZ25lYXQvdHJhbnNsb2NvJztcbmltcG9ydCB7IFNuYWNrYmFyU2VydmljZSB9IGZyb20gJ0B0ZXN0Z29yaWxsYS90Z28tdWknO1xuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcGlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBpbnZpdGF0aW9uVVVJRCA9ICcnO1xuICBwcml2YXRlIGNvbnRlbnRMYW5ndWFnZSA9ICcnO1xuICBwcml2YXRlIFJPT1RfVFJBTlNMQVRJT05TX1NDT1BFID0gJyc7XG4gIHByaXZhdGUgYmFzZVVybCA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIHNuYWNrYmFyU2VydmljZTogU25hY2tiYXJTZXJ2aWNlXG4gICkge31cblxuICBzZXRQYXJhbXMoXG4gICAgaW52aXRhdGlvblVVSUQ6IHN0cmluZyxcbiAgICBjb250ZW50TGFuZ3VhZ2U6IHN0cmluZyxcbiAgICB0cmFuc2xhdGlvblNjb3BlOiBzdHJpbmcsXG4gICAgYmFzZVVybDogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHRoaXMuaW52aXRhdGlvblVVSUQgPSBpbnZpdGF0aW9uVVVJRDtcbiAgICB0aGlzLmNvbnRlbnRMYW5ndWFnZSA9IGNvbnRlbnRMYW5ndWFnZTtcbiAgICB0aGlzLlJPT1RfVFJBTlNMQVRJT05TX1NDT1BFID0gdHJhbnNsYXRpb25TY29wZTtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICB9XG5cbiAgZ2V0SW52aXRhdGlvblVVSUQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnZpdGF0aW9uVVVJRDtcbiAgfVxuXG4gIGdldDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zID0ge30sXG4gICAgZXJyb3JDYWxsYmFjayA9IHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKVxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0PFQ+KFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9JHt1cmx9YCxcbiAgICAgICAgdGhpcy5idWlsZEhlYWRlcnMob3B0aW9ucylcbiAgICAgIClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gZXJyb3JDYWxsYmFjayhlcnJvcikpKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9XG5cbiAgcG9zdDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhOiBvYmplY3QsXG4gICAgb3B0aW9ucyA9IHt9LFxuICAgIGVycm9yQ2FsbGJhY2sgPSB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcyksXG4gICAgaXNTdGFuZGFsb25lVXJsID0gZmFsc2VcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3Q8VD4oXG4gICAgICAgIGlzU3RhbmRhbG9uZVVybCA/IHVybCA6IGAke3RoaXMuYmFzZVVybH0ke3VybH1gLFxuICAgICAgICBkYXRhLFxuICAgICAgICB0aGlzLmJ1aWxkSGVhZGVycyhvcHRpb25zKVxuICAgICAgKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBlcnJvckNhbGxiYWNrKGVycm9yKSkpIGFzIE9ic2VydmFibGU8VD47XG4gIH1cblxuICBwdXQ8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YTogb2JqZWN0LFxuICAgIG9wdGlvbnMgPSB7fSxcbiAgICBlcnJvckNhbGxiYWNrID0gdGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wdXQ8VD4oXG4gICAgICAgIGAke3RoaXMuYmFzZVVybH0ke3VybH1gLFxuICAgICAgICBkYXRhLFxuICAgICAgICB0aGlzLmJ1aWxkSGVhZGVycyhvcHRpb25zKVxuICAgICAgKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBlcnJvckNhbGxiYWNrKGVycm9yKSkpIGFzIE9ic2VydmFibGU8VD47XG4gIH1cblxuICBwYXRjaDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhOiBvYmplY3QsXG4gICAgb3B0aW9ucyA9IHt9LFxuICAgIGVycm9yQ2FsbGJhY2sgPSB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcylcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBhdGNoPFQ+KFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9JHt1cmx9YCxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgdGhpcy5idWlsZEhlYWRlcnMob3B0aW9ucylcbiAgICAgIClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gZXJyb3JDYWxsYmFjayhlcnJvcikpKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9XG5cbiAgZGVsZXRlKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGVycm9yQ2FsbGJhY2sgPSB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcylcbiAgKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZGVsZXRlKFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9JHt1cmx9YCxcbiAgICAgICAgdGhpcy5idWlsZEhlYWRlcnMoe30pXG4gICAgICApXG4gICAgICAucGlwZShjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IGVycm9yQ2FsbGJhY2soZXJyb3IpKSkgYXMgT2JzZXJ2YWJsZTxvYmplY3Q+O1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvck9iajogSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgY29uc3QgeyBlcnJvciB9ID0gZXJyb3JPYmo7XG4gICAgaWYgKGVycm9yPy5lcnJvcnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yLmVycm9ycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JPYmoubWVzc2FnZSk7XG4gICAgICB0aGlzLnNuYWNrYmFyU2VydmljZS5lcnJvcih0aGlzLnByb2Nlc3NHZW5lcmljU2VydmVyRXJyb3IoKSk7XG5cbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NHZW5lcmljU2VydmVyRXJyb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKGAke3RoaXMuUk9PVF9UUkFOU0xBVElPTlNfU0NPUEV9LkVSUk9SUy5TWVNURU1fRVJST1JgKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRIZWFkZXJzKG9wdGlvbnM6IG9iamVjdCk6IG9iamVjdCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICdYLVJFUVVFU1QtSUQnOiB3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKSxcbiAgICAgICAgJ1gtSU5WSVRBVElPTi1VVUlEJzogdGhpcy5pbnZpdGF0aW9uVVVJRCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkQXV0aG9yaXphdGlvbkhlYWRlciA9IChvcHRpb25zIGFzIHsgW2tleTogc3RyaW5nXTogYW55IH0pW1xuICAgICAgJ0F1dGhvcml6YXRpb24nXG4gICAgXTtcbiAgICBjb25zdCBoZWFkZXJzOiB7IGhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogcGFzc2VkQXV0aG9yaXphdGlvbkhlYWRlclxuICAgICAgICAgID8gcGFzc2VkQXV0aG9yaXphdGlvbkhlYWRlclxuICAgICAgICAgIDogYFRva2VuQ2FuZGlkYXR1cmUgJHt0aGlzLmludml0YXRpb25VVUlEPy5yZXBsYWNlKC8tL2csICcnKX1gLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuY29udGVudExhbmd1YWdlKSB7XG4gICAgICBoZWFkZXJzLmhlYWRlcnNbJ0FjY2VwdC1MYW5ndWFnZSddID0gdGhpcy5jb250ZW50TGFuZ3VhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,131 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { of, delay } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * MockedApiService provides fake API responses for demo/development purposes.
6
+ * This service mimics the real ApiService interface but returns mock data instead
7
+ * of making actual HTTP calls.
8
+ *
9
+ * Usage: Provide this service in place of ApiService in your demo application:
10
+ * ```
11
+ * { provide: ApiService, useClass: MockedApiService }
12
+ * ```
13
+ */
14
+ export class MockedApiService {
15
+ invitationUUID = 'demo-uuid-12345';
16
+ contentLanguage = 'en';
17
+ ROOT_TRANSLATIONS_SCOPE = '';
18
+ // Simulate network delay (in ms) - set to 0 for instant responses
19
+ MOCK_DELAY = 500;
20
+ setParams(invitationUUID, contentLanguage, translationScope, baseUrl) {
21
+ this.invitationUUID = invitationUUID;
22
+ this.contentLanguage = contentLanguage;
23
+ this.ROOT_TRANSLATIONS_SCOPE = translationScope;
24
+ console.log('[MockedApiService] Params set:', {
25
+ invitationUUID,
26
+ contentLanguage,
27
+ translationScope,
28
+ baseUrl,
29
+ });
30
+ }
31
+ getInvitationUUID() {
32
+ return this.invitationUUID;
33
+ }
34
+ get(url, options = {}, errorCallback) {
35
+ console.log('[MockedApiService] GET:', url, options);
36
+ return of(this.getMockResponse(url, 'GET')).pipe(delay(this.MOCK_DELAY));
37
+ }
38
+ post(url, data, options = {}, errorCallback, isStandaloneUrl = false) {
39
+ console.log('[MockedApiService] POST:', url, data, options);
40
+ return of(this.getMockResponse(url, 'POST', data)).pipe(delay(this.MOCK_DELAY));
41
+ }
42
+ put(url, data, options = {}, errorCallback) {
43
+ console.log('[MockedApiService] PUT:', url, data, options);
44
+ return of(this.getMockResponse(url, 'PUT', data)).pipe(delay(this.MOCK_DELAY));
45
+ }
46
+ patch(url, data, options = {}, errorCallback) {
47
+ console.log('[MockedApiService] PATCH:', url, data, options);
48
+ return of(this.getMockResponse(url, 'PATCH', data)).pipe(delay(this.MOCK_DELAY));
49
+ }
50
+ delete(url, errorCallback) {
51
+ console.log('[MockedApiService] DELETE:', url);
52
+ return of({}).pipe(delay(this.MOCK_DELAY));
53
+ }
54
+ /**
55
+ * Returns mock responses based on the URL pattern
56
+ */
57
+ getMockResponse(url, method, data) {
58
+ // CodeRunner API - Run Tests
59
+ if (url.includes('/api/attempts/public/')) {
60
+ return this.getMockCoderunnerAttemptResponse(data);
61
+ }
62
+ if (url.includes('/api/attempts/preview/')) {
63
+ return this.getMockCoderunnerAttemptResponse(data);
64
+ }
65
+ if (url.includes('/api/attempts/')) {
66
+ return this.getMockCoderunnerAttemptResponse(data);
67
+ }
68
+ // Code Events
69
+ if (url.includes('/api/code-events/')) {
70
+ return {
71
+ id: Math.floor(Math.random() * 10000),
72
+ created_at: new Date().toISOString(),
73
+ };
74
+ }
75
+ // Programming Languages
76
+ if (url.includes('programming-languages')) {
77
+ return []; // Mock all languages
78
+ }
79
+ // Default response
80
+ console.warn(`[MockedApiService] No mock defined for ${method} ${url}`);
81
+ return { success: true, data: null };
82
+ }
83
+ /**
84
+ * Returns a mock coderunner attempt response with test results
85
+ */
86
+ getMockCoderunnerAttemptResponse(data) {
87
+ const requestData = data;
88
+ const testcases = requestData?.testcases || [];
89
+ // Generate mock results for each test case
90
+ const results = testcases.map((testcase, index) => {
91
+ // Make first test pass, others random for variety
92
+ const passed = index === 0 ? true : Math.random() > 0.3;
93
+ return {
94
+ name: testcase.name || `Test Case ${index + 1}`,
95
+ passed,
96
+ expected: testcase.solution || testcase.expected_output || 'Expected output',
97
+ actual: passed
98
+ ? testcase.solution || testcase.expected_output || 'Expected output'
99
+ : 'Different output',
100
+ input: testcase.input || '',
101
+ error: passed ? null : 'AssertionError: Output does not match expected',
102
+ execution_time: Math.random() * 100,
103
+ memory_used: Math.floor(Math.random() * 1000000),
104
+ points: passed ? (testcase.points || 10) : 0,
105
+ };
106
+ });
107
+ const totalPoints = results.reduce((sum, r) => sum + r.points, 0);
108
+ const maxPoints = testcases.reduce((sum, tc) => sum + (tc.points || 10), 0);
109
+ return {
110
+ id: Math.floor(Math.random() * 100000),
111
+ uuid: crypto.randomUUID(),
112
+ created_at: new Date().toISOString(),
113
+ language: requestData?.language || 'python-3.10.0',
114
+ code: requestData?.code || '',
115
+ status: 'completed',
116
+ results,
117
+ score: maxPoints > 0 ? (totalPoints / maxPoints) * 100 : 0,
118
+ total_points: totalPoints,
119
+ max_points: maxPoints,
120
+ execution_time: results.reduce((sum, r) => sum + r.execution_time, 0),
121
+ compilation_error: null,
122
+ runtime_error: null,
123
+ };
124
+ }
125
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MockedApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
126
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MockedApiService });
127
+ }
128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MockedApiService, decorators: [{
129
+ type: Injectable
130
+ }] });
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja2VkLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9zaGFyZWQvbGliL3NlcnZpY2VzL2FwaS9tb2NrZWQtYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFN0M7Ozs7Ozs7OztHQVNHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixjQUFjLEdBQUcsaUJBQWlCLENBQUM7SUFDbkMsZUFBZSxHQUFHLElBQUksQ0FBQztJQUN2Qix1QkFBdUIsR0FBRyxFQUFFLENBQUM7SUFFckMsa0VBQWtFO0lBQ2pELFVBQVUsR0FBRyxHQUFHLENBQUM7SUFFbEMsU0FBUyxDQUNQLGNBQXNCLEVBQ3RCLGVBQXVCLEVBQ3ZCLGdCQUF3QixFQUN4QixPQUFlO1FBRWYsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLGdCQUFnQixDQUFDO1FBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUU7WUFDNUMsY0FBYztZQUNkLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsT0FBTztTQUNSLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELEdBQUcsQ0FDRCxHQUFXLEVBQ1gsT0FBTyxHQUFHLEVBQUUsRUFDWixhQUFpRDtRQUVqRCxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRCxP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RSxXQUFXO1lBQ3pCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGNBQWMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBVyxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsYUFBYSxFQUFFLElBQUk7U0FDcEIsQ0FBQztJQUNKLENBQUM7d0dBeEtVLGdCQUFnQjs0R0FBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIGRlbGF5IH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogTW9ja2VkQXBpU2VydmljZSBwcm92aWRlcyBmYWtlIEFQSSByZXNwb25zZXMgZm9yIGRlbW8vZGV2ZWxvcG1lbnQgcHVycG9zZXMuXG4gKiBUaGlzIHNlcnZpY2UgbWltaWNzIHRoZSByZWFsIEFwaVNlcnZpY2UgaW50ZXJmYWNlIGJ1dCByZXR1cm5zIG1vY2sgZGF0YSBpbnN0ZWFkXG4gKiBvZiBtYWtpbmcgYWN0dWFsIEhUVFAgY2FsbHMuXG4gKlxuICogVXNhZ2U6IFByb3ZpZGUgdGhpcyBzZXJ2aWNlIGluIHBsYWNlIG9mIEFwaVNlcnZpY2UgaW4geW91ciBkZW1vIGFwcGxpY2F0aW9uOlxuICogYGBgXG4gKiB7IHByb3ZpZGU6IEFwaVNlcnZpY2UsIHVzZUNsYXNzOiBNb2NrZWRBcGlTZXJ2aWNlIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9ja2VkQXBpU2VydmljZSB7XG4gIHByaXZhdGUgaW52aXRhdGlvblVVSUQgPSAnZGVtby11dWlkLTEyMzQ1JztcbiAgcHJpdmF0ZSBjb250ZW50TGFuZ3VhZ2UgPSAnZW4nO1xuICBwcml2YXRlIFJPT1RfVFJBTlNMQVRJT05TX1NDT1BFID0gJyc7XG5cbiAgLy8gU2ltdWxhdGUgbmV0d29yayBkZWxheSAoaW4gbXMpIC0gc2V0IHRvIDAgZm9yIGluc3RhbnQgcmVzcG9uc2VzXG4gIHByaXZhdGUgcmVhZG9ubHkgTU9DS19ERUxBWSA9IDUwMDtcblxuICBzZXRQYXJhbXMoXG4gICAgaW52aXRhdGlvblVVSUQ6IHN0cmluZyxcbiAgICBjb250ZW50TGFuZ3VhZ2U6IHN0cmluZyxcbiAgICB0cmFuc2xhdGlvblNjb3BlOiBzdHJpbmcsXG4gICAgYmFzZVVybDogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHRoaXMuaW52aXRhdGlvblVVSUQgPSBpbnZpdGF0aW9uVVVJRDtcbiAgICB0aGlzLmNvbnRlbnRMYW5ndWFnZSA9IGNvbnRlbnRMYW5ndWFnZTtcbiAgICB0aGlzLlJPT1RfVFJBTlNMQVRJT05TX1NDT1BFID0gdHJhbnNsYXRpb25TY29wZTtcbiAgICBjb25zb2xlLmxvZygnW01vY2tlZEFwaVNlcnZpY2VdIFBhcmFtcyBzZXQ6Jywge1xuICAgICAgaW52aXRhdGlvblVVSUQsXG4gICAgICBjb250ZW50TGFuZ3VhZ2UsXG4gICAgICB0cmFuc2xhdGlvblNjb3BlLFxuICAgICAgYmFzZVVybCxcbiAgICB9KTtcbiAgfVxuXG4gIGdldEludml0YXRpb25VVUlEKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW52aXRhdGlvblVVSUQ7XG4gIH1cblxuICBnZXQ8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9ucyA9IHt9LFxuICAgIGVycm9yQ2FsbGJhY2s/OiAoZXJyb3I6IGFueSkgPT4gT2JzZXJ2YWJsZTxuZXZlcj5cbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc29sZS5sb2coJ1tNb2NrZWRBcGlTZXJ2aWNlXSBHRVQ6JywgdXJsLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb2YodGhpcy5nZXRNb2NrUmVzcG9uc2U8VD4odXJsLCAnR0VUJykgYXMgVCkucGlwZShcbiAgICAgIGRlbGF5KHRoaXMuTU9DS19ERUxBWSlcbiAgICApO1xuICB9XG5cbiAgcG9zdDxUPihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhOiBvYmplY3QsXG4gICAgb3B0aW9ucyA9IHt9LFxuICAgIGVycm9yQ2FsbGJhY2s/OiAoZXJyb3I6IGFueSkgPT4gT2JzZXJ2YWJsZTxuZXZlcj4sXG4gICAgaXNTdGFuZGFsb25lVXJsID0gZmFsc2VcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc29sZS5sb2coJ1tNb2NrZWRBcGlTZXJ2aWNlXSBQT1NUOicsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9mKHRoaXMuZ2V0TW9ja1Jlc3BvbnNlPFQ+KHVybCwgJ1BPU1QnLCBkYXRhKSBhcyBUKS5waXBlKFxuICAgICAgZGVsYXkodGhpcy5NT0NLX0RFTEFZKVxuICAgICk7XG4gIH1cblxuICBwdXQ8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YTogb2JqZWN0LFxuICAgIG9wdGlvbnMgPSB7fSxcbiAgICBlcnJvckNhbGxiYWNrPzogKGVycm9yOiBhbnkpID0+IE9ic2VydmFibGU8bmV2ZXI+XG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnNvbGUubG9nKCdbTW9ja2VkQXBpU2VydmljZV0gUFVUOicsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9mKHRoaXMuZ2V0TW9ja1Jlc3BvbnNlPFQ+KHVybCwgJ1BVVCcsIGRhdGEpIGFzIFQpLnBpcGUoXG4gICAgICBkZWxheSh0aGlzLk1PQ0tfREVMQVkpXG4gICAgKTtcbiAgfVxuXG4gIHBhdGNoPFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE6IG9iamVjdCxcbiAgICBvcHRpb25zID0ge30sXG4gICAgZXJyb3JDYWxsYmFjaz86IChlcnJvcjogYW55KSA9PiBPYnNlcnZhYmxlPG5ldmVyPlxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zb2xlLmxvZygnW01vY2tlZEFwaVNlcnZpY2VdIFBBVENIOicsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9mKHRoaXMuZ2V0TW9ja1Jlc3BvbnNlPFQ+KHVybCwgJ1BBVENIJywgZGF0YSkgYXMgVCkucGlwZShcbiAgICAgIGRlbGF5KHRoaXMuTU9DS19ERUxBWSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGVycm9yQ2FsbGJhY2s/OiAoZXJyb3I6IGFueSkgPT4gT2JzZXJ2YWJsZTxuZXZlcj5cbiAgKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICBjb25zb2xlLmxvZygnW01vY2tlZEFwaVNlcnZpY2VdIERFTEVURTonLCB1cmwpO1xuICAgIHJldHVybiBvZih7fSkucGlwZShkZWxheSh0aGlzLk1PQ0tfREVMQVkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG1vY2sgcmVzcG9uc2VzIGJhc2VkIG9uIHRoZSBVUkwgcGF0dGVyblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRNb2NrUmVzcG9uc2U8VD4odXJsOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nLCBkYXRhPzogb2JqZWN0KTogVCB8IG9iamVjdCB7XG4gICAgLy8gQ29kZVJ1bm5lciBBUEkgLSBSdW4gVGVzdHNcbiAgICBpZiAodXJsLmluY2x1ZGVzKCcvYXBpL2F0dGVtcHRzL3B1YmxpYy8nKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9ja0NvZGVydW5uZXJBdHRlbXB0UmVzcG9uc2UoZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHVybC5pbmNsdWRlcygnL2FwaS9hdHRlbXB0cy9wcmV2aWV3LycpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNb2NrQ29kZXJ1bm5lckF0dGVtcHRSZXNwb25zZShkYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodXJsLmluY2x1ZGVzKCcvYXBpL2F0dGVtcHRzLycpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNb2NrQ29kZXJ1bm5lckF0dGVtcHRSZXNwb25zZShkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIEV2ZW50c1xuICAgIGlmICh1cmwuaW5jbHVkZXMoJy9hcGkvY29kZS1ldmVudHMvJykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMCksXG4gICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gUHJvZ3JhbW1pbmcgTGFuZ3VhZ2VzXG4gICAgaWYgKHVybC5pbmNsdWRlcygncHJvZ3JhbW1pbmctbGFuZ3VhZ2VzJykpIHtcbiAgICAgIHJldHVybiBbXTsgLy8gTW9jayBhbGwgbGFuZ3VhZ2VzXG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCByZXNwb25zZVxuICAgIGNvbnNvbGUud2FybihgW01vY2tlZEFwaVNlcnZpY2VdIE5vIG1vY2sgZGVmaW5lZCBmb3IgJHttZXRob2R9ICR7dXJsfWApO1xuICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IG51bGwgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbW9jayBjb2RlcnVubmVyIGF0dGVtcHQgcmVzcG9uc2Ugd2l0aCB0ZXN0IHJlc3VsdHNcbiAgICovXG4gIHByaXZhdGUgZ2V0TW9ja0NvZGVydW5uZXJBdHRlbXB0UmVzcG9uc2UoZGF0YT86IG9iamVjdCk6IG9iamVjdCB7XG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSBkYXRhIGFzIGFueTtcbiAgICBjb25zdCB0ZXN0Y2FzZXMgPSByZXF1ZXN0RGF0YT8udGVzdGNhc2VzIHx8IFtdO1xuXG4gICAgLy8gR2VuZXJhdGUgbW9jayByZXN1bHRzIGZvciBlYWNoIHRlc3QgY2FzZVxuICAgIGNvbnN0IHJlc3VsdHMgPSB0ZXN0Y2FzZXMubWFwKCh0ZXN0Y2FzZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAvLyBNYWtlIGZpcnN0IHRlc3QgcGFzcywgb3RoZXJzIHJhbmRvbSBmb3IgdmFyaWV0eVxuICAgICAgY29uc3QgcGFzc2VkID0gaW5kZXggPT09IDAgPyB0cnVlIDogTWF0aC5yYW5kb20oKSA+IDAuMztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogdGVzdGNhc2UubmFtZSB8fCBgVGVzdCBDYXNlICR7aW5kZXggKyAxfWAsXG4gICAgICAgIHBhc3NlZCxcbiAgICAgICAgZXhwZWN0ZWQ6IHRlc3RjYXNlLnNvbHV0aW9uIHx8IHRlc3RjYXNlLmV4cGVjdGVkX291dHB1dCB8fCAnRXhwZWN0ZWQgb3V0cHV0JyxcbiAgICAgICAgYWN0dWFsOiBwYXNzZWRcbiAgICAgICAgICA/IHRlc3RjYXNlLnNvbHV0aW9uIHx8IHRlc3RjYXNlLmV4cGVjdGVkX291dHB1dCB8fCAnRXhwZWN0ZWQgb3V0cHV0J1xuICAgICAgICAgIDogJ0RpZmZlcmVudCBvdXRwdXQnLFxuICAgICAgICBpbnB1dDogdGVzdGNhc2UuaW5wdXQgfHwgJycsXG4gICAgICAgIGVycm9yOiBwYXNzZWQgPyBudWxsIDogJ0Fzc2VydGlvbkVycm9yOiBPdXRwdXQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQnLFxuICAgICAgICBleGVjdXRpb25fdGltZTogTWF0aC5yYW5kb20oKSAqIDEwMCxcbiAgICAgICAgbWVtb3J5X3VzZWQ6IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApLFxuICAgICAgICBwb2ludHM6IHBhc3NlZCA/ICh0ZXN0Y2FzZS5wb2ludHMgfHwgMTApIDogMCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b3RhbFBvaW50cyA9IHJlc3VsdHMucmVkdWNlKChzdW06IG51bWJlciwgcjogYW55KSA9PiBzdW0gKyByLnBvaW50cywgMCk7XG4gICAgY29uc3QgbWF4UG9pbnRzID0gdGVzdGNhc2VzLnJlZHVjZShcbiAgICAgIChzdW06IG51bWJlciwgdGM6IGFueSkgPT4gc3VtICsgKHRjLnBvaW50cyB8fCAxMCksXG4gICAgICAwXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwKSxcbiAgICAgIHV1aWQ6IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYW5ndWFnZTogcmVxdWVzdERhdGE/Lmxhbmd1YWdlIHx8ICdweXRob24tMy4xMC4wJyxcbiAgICAgIGNvZGU6IHJlcXVlc3REYXRhPy5jb2RlIHx8ICcnLFxuICAgICAgc3RhdHVzOiAnY29tcGxldGVkJyxcbiAgICAgIHJlc3VsdHMsXG4gICAgICBzY29yZTogbWF4UG9pbnRzID4gMCA/ICh0b3RhbFBvaW50cyAvIG1heFBvaW50cykgKiAxMDAgOiAwLFxuICAgICAgdG90YWxfcG9pbnRzOiB0b3RhbFBvaW50cyxcbiAgICAgIG1heF9wb2ludHM6IG1heFBvaW50cyxcbiAgICAgIGV4ZWN1dGlvbl90aW1lOiByZXN1bHRzLnJlZHVjZSgoc3VtOiBudW1iZXIsIHI6IGFueSkgPT4gc3VtICsgci5leGVjdXRpb25fdGltZSwgMCksXG4gICAgICBjb21waWxhdGlvbl9lcnJvcjogbnVsbCxcbiAgICAgIHJ1bnRpbWVfZXJyb3I6IG51bGwsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,13 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class EnvironmentService {
4
+ get isMobile() {
5
+ return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
6
+ }
7
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnvironmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
8
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnvironmentService });
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnvironmentService, decorators: [{
11
+ type: Injectable
12
+ }] });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvc2hhcmVkL2xpYi9zZXJ2aWNlcy9lbnZpcm9ubWVudC9lbnZpcm9ubWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsSUFBSSxRQUFRO1FBQ1YsT0FBTyxnRUFBZ0UsQ0FBQyxJQUFJLENBQzFFLFNBQVMsQ0FBQyxTQUFTLENBQ3BCLENBQUM7SUFDSixDQUFDO3dHQUxVLGtCQUFrQjs0R0FBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRTZXJ2aWNlIHtcbiAgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QoXG4gICAgICBuYXZpZ2F0b3IudXNlckFnZW50XG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,10 @@
1
+ export * from './media/media.service';
2
+ export * from './theme/theme.service';
3
+ export * from './localization/transloco-lazy-module-utils';
4
+ export * from './localization/languages.model';
5
+ export * from './localization/transloco-testing.module';
6
+ export * from './api/api.service';
7
+ export * from './api/mocked-api.service';
8
+ export * from './environment/environment.service';
9
+ export * from './mixpanel/mixpanel.service';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL3NoYXJlZC9saWIvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL21lZGlhL21lZGlhLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90aGVtZS90aGVtZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbG9jYWxpemF0aW9uL3RyYW5zbG9jby1sYXp5LW1vZHVsZS11dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2xvY2FsaXphdGlvbi9sYW5ndWFnZXMubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhbGl6YXRpb24vdHJhbnNsb2NvLXRlc3RpbmcubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpL2FwaS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpL21vY2tlZC1hcGkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2Vudmlyb25tZW50L2Vudmlyb25tZW50LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9taXhwYW5lbC9taXhwYW5lbC5zZXJ2aWNlJzsiXX0=
@@ -0,0 +1,19 @@
1
+ //Languages available in the app as enum
2
+ export var Language;
3
+ (function (Language) {
4
+ Language["en"] = "en";
5
+ Language["es"] = "es";
6
+ Language["nl"] = "nl";
7
+ Language["fr"] = "fr";
8
+ Language["de"] = "de";
9
+ Language["it-it"] = "it-it";
10
+ Language["ja-jp"] = "ja-jp";
11
+ Language["pt-br"] = "pt-br";
12
+ Language["da-dk"] = "da-dk";
13
+ Language["nb-no"] = "nb-no";
14
+ Language["pl-pl"] = "pl-pl";
15
+ Language["sv-se"] = "sv-se";
16
+ })(Language || (Language = {}));
17
+ //This function retrieves all languages from the enum. It is used to initialize transloco
18
+ export const getAvailableLangs = () => Object.values(Language);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2VzLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9zaGFyZWQvbGliL3NlcnZpY2VzL2xvY2FsaXphdGlvbi9sYW5ndWFnZXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE1BQU0sQ0FBTixJQUFZLFFBYVg7QUFiRCxXQUFZLFFBQVE7SUFDbEIscUJBQVMsQ0FBQTtJQUNULHFCQUFTLENBQUE7SUFDVCxxQkFBUyxDQUFBO0lBQ1QscUJBQVMsQ0FBQTtJQUNULHFCQUFTLENBQUE7SUFDVCwyQkFBaUIsQ0FBQTtJQUNqQiwyQkFBaUIsQ0FBQTtJQUNqQiwyQkFBaUIsQ0FBQTtJQUNqQiwyQkFBaUIsQ0FBQTtJQUNqQiwyQkFBaUIsQ0FBQTtJQUNqQiwyQkFBaUIsQ0FBQTtJQUNqQiwyQkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBYlcsUUFBUSxLQUFSLFFBQVEsUUFhbkI7QUFFRCx5RkFBeUY7QUFDekYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vTGFuZ3VhZ2VzIGF2YWlsYWJsZSBpbiB0aGUgYXBwIGFzIGVudW1cbmV4cG9ydCBlbnVtIExhbmd1YWdlIHtcbiAgZW4gPSAnZW4nLFxuICBlcyA9ICdlcycsXG4gIG5sID0gJ25sJyxcbiAgZnIgPSAnZnInLFxuICBkZSA9ICdkZScsXG4gICdpdC1pdCcgPSAnaXQtaXQnLFxuICAnamEtanAnID0gJ2phLWpwJyxcbiAgJ3B0LWJyJyA9ICdwdC1icicsXG4gICdkYS1kaycgPSAnZGEtZGsnLFxuICAnbmItbm8nID0gJ25iLW5vJyxcbiAgJ3BsLXBsJyA9ICdwbC1wbCcsXG4gICdzdi1zZScgPSAnc3Ytc2UnLFxufVxuXG4vL1RoaXMgZnVuY3Rpb24gcmV0cmlldmVzIGFsbCBsYW5ndWFnZXMgZnJvbSB0aGUgZW51bS4gSXQgaXMgdXNlZCB0byBpbml0aWFsaXplIHRyYW5zbG9jb1xuZXhwb3J0IGNvbnN0IGdldEF2YWlsYWJsZUxhbmdzID0gKCkgPT4gT2JqZWN0LnZhbHVlcyhMYW5ndWFnZSk7XG5cbiJdfQ==
@@ -0,0 +1,27 @@
1
+ import { TRANSLOCO_SCOPE } from '@ngneat/transloco';
2
+ /**
3
+ * The util is based on this issue https://github.com/jsverse/transloco/issues/608#issuecomment-1416113493
4
+ *
5
+ * Transloco can't have several forRoot modules. so the only way for now to decouple translations as a separate file and context
6
+ * from the shell (TAS in this case) is to use TRANSLOCO_SCOPE
7
+ */
8
+ export class TranslocoLazyModuleUtils {
9
+ static createInlineLoader(languages, loaderFn) {
10
+ const translocoInlineLoader = {};
11
+ languages.forEach((language) => {
12
+ translocoInlineLoader[language] = () => loaderFn(language);
13
+ });
14
+ return translocoInlineLoader;
15
+ }
16
+ static getScopeProvider(scope, languages, alias, loaderFn) {
17
+ return {
18
+ provide: TRANSLOCO_SCOPE,
19
+ useValue: {
20
+ scope,
21
+ alias,
22
+ loader: this.createInlineLoader(languages, loaderFn),
23
+ },
24
+ };
25
+ }
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLWxhenktbW9kdWxlLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9zaGFyZWQvbGliL3NlcnZpY2VzL2xvY2FsaXphdGlvbi90cmFuc2xvY28tbGF6eS1tb2R1bGUtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTXBEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQUMzQixNQUFNLENBQUMsa0JBQWtCLENBQy9CLFNBQXdCLEVBQ3hCLFFBQXNDO1FBRXRDLE1BQU0scUJBQXFCLEdBQTBCLEVBQUUsQ0FBQztRQUV4RCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDN0IscUJBQXFCLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDO0lBRU0sTUFBTSxDQUFDLGdCQUFnQixDQUM1QixLQUFhLEVBQ2IsU0FBd0IsRUFDeEIsS0FBYSxFQUNiLFFBQXNDO1FBRXRDLE9BQU87WUFDTCxPQUFPLEVBQUUsZUFBZTtZQUN4QixRQUFRLEVBQUU7Z0JBQ1IsS0FBSztnQkFDTCxLQUFLO2dCQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQzthQUNyRDtTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUUkFOU0xPQ09fU0NPUEUgfSBmcm9tICdAbmduZWF0L3RyYW5zbG9jbyc7XG5cbmludGVyZmFjZSBUcmFuc2xvY29JbmxpbmVMb2FkZXIge1xuICBba2V5OiBzdHJpbmddOiAoKSA9PiBQcm9taXNlPEpTT04+O1xufVxuXG4vKipcbiAqIFRoZSB1dGlsIGlzIGJhc2VkIG9uIHRoaXMgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL2pzdmVyc2UvdHJhbnNsb2NvL2lzc3Vlcy82MDgjaXNzdWVjb21tZW50LTE0MTYxMTM0OTNcbiAqXG4gKiBUcmFuc2xvY28gY2FuJ3QgaGF2ZSBzZXZlcmFsIGZvclJvb3QgbW9kdWxlcy4gc28gdGhlIG9ubHkgd2F5IGZvciBub3cgdG8gZGVjb3VwbGUgdHJhbnNsYXRpb25zIGFzIGEgc2VwYXJhdGUgZmlsZSBhbmQgY29udGV4dFxuICogZnJvbSB0aGUgc2hlbGwgKFRBUyBpbiB0aGlzIGNhc2UpIGlzIHRvIHVzZSBUUkFOU0xPQ09fU0NPUEVcbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zbG9jb0xhenlNb2R1bGVVdGlscyB7XG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZUlubGluZUxvYWRlcihcbiAgICBsYW5ndWFnZXM6IEFycmF5PHN0cmluZz4sXG4gICAgbG9hZGVyRm46IChsOiBzdHJpbmcpID0+IFByb21pc2U8SlNPTj5cbiAgKTogVHJhbnNsb2NvSW5saW5lTG9hZGVyIHtcbiAgICBjb25zdCB0cmFuc2xvY29JbmxpbmVMb2FkZXI6IFRyYW5zbG9jb0lubGluZUxvYWRlciA9IHt9O1xuXG4gICAgbGFuZ3VhZ2VzLmZvckVhY2goKGxhbmd1YWdlKSA9PiB7XG4gICAgICB0cmFuc2xvY29JbmxpbmVMb2FkZXJbbGFuZ3VhZ2VdID0gKCkgPT4gbG9hZGVyRm4obGFuZ3VhZ2UpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyYW5zbG9jb0lubGluZUxvYWRlcjtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0U2NvcGVQcm92aWRlcihcbiAgICBzY29wZTogc3RyaW5nLFxuICAgIGxhbmd1YWdlczogQXJyYXk8c3RyaW5nPixcbiAgICBhbGlhczogc3RyaW5nLFxuICAgIGxvYWRlckZuOiAobDogc3RyaW5nKSA9PiBQcm9taXNlPEpTT04+XG4gICk6IFZhbHVlUHJvdmlkZXIge1xuICAgIHJldHVybiB7XG4gICAgICBwcm92aWRlOiBUUkFOU0xPQ09fU0NPUEUsXG4gICAgICB1c2VWYWx1ZToge1xuICAgICAgICBzY29wZSxcbiAgICAgICAgYWxpYXMsXG4gICAgICAgIGxvYWRlcjogdGhpcy5jcmVhdGVJbmxpbmVMb2FkZXIobGFuZ3VhZ2VzLCBsb2FkZXJGbiksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuIl19
@@ -0,0 +1,11 @@
1
+ import { TranslocoTestingModule, } from '@ngneat/transloco';
2
+ export const getTranslocoModule = (options = {}) => TranslocoTestingModule.forRoot({
3
+ translocoConfig: {
4
+ reRenderOnLangChange: false,
5
+ availableLangs: ['en'],
6
+ defaultLang: 'en',
7
+ },
8
+ preloadLangs: true,
9
+ ...options,
10
+ });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLXRlc3RpbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9zaGFyZWQvbGliL3NlcnZpY2VzL2xvY2FsaXphdGlvbi90cmFuc2xvY28tdGVzdGluZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixHQUV2QixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsVUFBbUMsRUFBRSxFQUFFLEVBQUUsQ0FDMUUsc0JBQXNCLENBQUMsT0FBTyxDQUFDO0lBQzdCLGVBQWUsRUFBRTtRQUNmLG9CQUFvQixFQUFFLEtBQUs7UUFDM0IsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ3RCLFdBQVcsRUFBRSxJQUFJO0tBQ2xCO0lBQ0QsWUFBWSxFQUFFLElBQUk7SUFDbEIsR0FBRyxPQUFPO0NBQ1gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgVHJhbnNsb2NvVGVzdGluZ01vZHVsZSxcbiAgVHJhbnNsb2NvVGVzdGluZ09wdGlvbnMsXG59IGZyb20gJ0BuZ25lYXQvdHJhbnNsb2NvJztcblxuZXhwb3J0IGNvbnN0IGdldFRyYW5zbG9jb01vZHVsZSA9IChvcHRpb25zOiBUcmFuc2xvY29UZXN0aW5nT3B0aW9ucyA9IHt9KSA9PlxuICBUcmFuc2xvY29UZXN0aW5nTW9kdWxlLmZvclJvb3Qoe1xuICAgIHRyYW5zbG9jb0NvbmZpZzoge1xuICAgICAgcmVSZW5kZXJPbkxhbmdDaGFuZ2U6IGZhbHNlLFxuICAgICAgYXZhaWxhYmxlTGFuZ3M6IFsnZW4nXSxcbiAgICAgIGRlZmF1bHRMYW5nOiAnZW4nLFxuICAgIH0sXG4gICAgcHJlbG9hZExhbmdzOiB0cnVlLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuIl19
@@ -0,0 +1,129 @@
1
+ import { Injectable, signal } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class MediaService {
5
+ mediaRecorder = null;
6
+ selectedMediaDevices;
7
+ isRecording = signal(false);
8
+ stopRecording() {
9
+ this.mediaRecorder?.stop();
10
+ }
11
+ getMediaStream(data) {
12
+ return navigator.mediaDevices.getUserMedia(this.getMediaStreamConstraints(data));
13
+ }
14
+ recordAudio() {
15
+ let checkPermissionPromise;
16
+ return new Observable((observer) => {
17
+ void this.getMediaStream({ video: false, audio: true })
18
+ .then((stream) => {
19
+ this.mediaRecorder = new MediaRecorder(stream);
20
+ this.mediaRecorder.start();
21
+ this.isRecording.set(true);
22
+ const audioChunks = [];
23
+ this.mediaRecorder.ondataavailable = (event) => {
24
+ audioChunks.push(event.data);
25
+ };
26
+ this.mediaRecorder.addEventListener('stop', () => {
27
+ const audioBlob = new Blob(audioChunks, {
28
+ type: 'audio/mp3',
29
+ });
30
+ observer.next({ type: 'complete', file: audioBlob });
31
+ this.isRecording.set(false);
32
+ observer.complete();
33
+ });
34
+ this.mediaRecorder.onerror = (error) => {
35
+ observer.error(error);
36
+ observer.complete();
37
+ };
38
+ const audioContext = new AudioContext();
39
+ const mediaStreamAudioSourceNode = audioContext.createMediaStreamSource(stream);
40
+ const analyserNode = audioContext.createAnalyser();
41
+ mediaStreamAudioSourceNode.connect(analyserNode);
42
+ const pcmData = new Float32Array(analyserNode.fftSize);
43
+ const onFrame = () => {
44
+ analyserNode.getFloatTimeDomainData(pcmData);
45
+ let sumSquares = 0.0;
46
+ for (const amplitude of pcmData) {
47
+ sumSquares += amplitude * amplitude;
48
+ }
49
+ if (sumSquares > 0) {
50
+ observer.next({
51
+ type: 'volume',
52
+ value: Math.sqrt(sumSquares / pcmData.length),
53
+ });
54
+ }
55
+ else {
56
+ if (!checkPermissionPromise) {
57
+ checkPermissionPromise = this.checkPermission({
58
+ video: false,
59
+ audio: true,
60
+ });
61
+ checkPermissionPromise
62
+ .then((hasPermission) => {
63
+ if (!hasPermission) {
64
+ observer.error(new Error('Permission denied'));
65
+ observer.complete();
66
+ }
67
+ })
68
+ .finally(() => {
69
+ checkPermissionPromise = null;
70
+ });
71
+ }
72
+ }
73
+ if (!observer.closed) {
74
+ window.requestAnimationFrame(onFrame);
75
+ }
76
+ };
77
+ window.requestAnimationFrame(onFrame);
78
+ })
79
+ .catch((error) => {
80
+ observer.error(error);
81
+ observer.complete();
82
+ });
83
+ });
84
+ }
85
+ async playAudio(url) {
86
+ const audio = new Audio(url);
87
+ await audio.play();
88
+ return new Promise((resolve, reject) => {
89
+ audio.onended = () => {
90
+ resolve();
91
+ };
92
+ audio.onerror = (event) => reject(event);
93
+ });
94
+ }
95
+ setSelectedMediaDevices(data) {
96
+ this.selectedMediaDevices = data;
97
+ }
98
+ async checkPermission(data) {
99
+ try {
100
+ await this.getMediaStream(data);
101
+ return true;
102
+ }
103
+ catch (err) {
104
+ console.error(err);
105
+ return false;
106
+ }
107
+ }
108
+ getMediaStreamConstraints(data) {
109
+ const audioDeviceID = this.selectedMediaDevices?.audioDeviceId;
110
+ const videoDeviceID = this.selectedMediaDevices?.videoDeviceId;
111
+ return {
112
+ audio: data.audio && audioDeviceID
113
+ ? { deviceId: { exact: audioDeviceID } }
114
+ : data.audio,
115
+ video: data.video && videoDeviceID
116
+ ? { deviceId: { exact: videoDeviceID } }
117
+ : data.video,
118
+ };
119
+ }
120
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MediaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
121
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MediaService, providedIn: 'root' });
122
+ }
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MediaService, decorators: [{
124
+ type: Injectable,
125
+ args: [{
126
+ providedIn: 'root',
127
+ }]
128
+ }] });
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvc2hhcmVkL2xpYi9zZXJ2aWNlcy9tZWRpYS9tZWRpYS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTWxDLE1BQU0sT0FBTyxZQUFZO0lBQ2YsYUFBYSxHQUF5QixJQUFJLENBQUM7SUFDM0Msb0JBQW9CLENBQW1DO0lBQ3RELFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFckMsYUFBYTtRQUNYLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUdkO1FBQ0MsT0FBTyxTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FDeEMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUNyQyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFHVCxJQUFJLHNCQUErQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQyxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDcEQsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxD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Q0gsQ0FBQztJQUVPLHlCQUF5QixDQUFDLElBR2pDO1FBQ0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQztRQUMvRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDO1FBQy9ELE9BQU87WUFDTCxLQUFLLEVBQ0gsSUFBSSxDQUFDLEtBQUssSUFBSSxhQUFhO2dCQUN6QixDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEVBQUU7Z0JBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSztZQUNoQixLQUFLLEVBQ0gsSUFBSSxDQUFDLEtBQUssSUFBSSxhQUFhO2dCQUN6QixDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEVBQUU7Z0JBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSztTQUNqQixDQUFDO0lBQ0osQ0FBQzt3R0E5SVUsWUFBWTs0R0FBWixZQUFZLGNBRlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNlbGVjdGVkTWVkaWFEZXZpY2VzIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE1lZGlhU2VydmljZSB7XG4gIHByaXZhdGUgbWVkaWFSZWNvcmRlcjogTWVkaWFSZWNvcmRlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNlbGVjdGVkTWVkaWFEZXZpY2VzOiBTZWxlY3RlZE1lZGlhRGV2aWNlcyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgaXNSZWNvcmRpbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHN0b3BSZWNvcmRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5tZWRpYVJlY29yZGVyPy5zdG9wKCk7XG4gIH1cblxuICBnZXRNZWRpYVN0cmVhbShkYXRhOiB7XG4gICAgYXVkaW86IGJvb2xlYW47XG4gICAgdmlkZW86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKFxuICAgICAgdGhpcy5nZXRNZWRpYVN0cmVhbUNvbnN0cmFpbnRzKGRhdGEpXG4gICAgKTtcbiAgfVxuXG4gIHJlY29yZEF1ZGlvKCk6IE9ic2VydmFibGU8XG4gICAgeyB0eXBlOiAnY29tcGxldGUnOyBmaWxlOiBCbG9iIH0gfCB7IHR5cGU6ICd2b2x1bWUnOyB2YWx1ZTogbnVtYmVyIH1cbiAgPiB7XG4gICAgbGV0IGNoZWNrUGVybWlzc2lvblByb21pc2U6IFByb21pc2U8Ym9vbGVhbj4gfCBudWxsO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIHZvaWQgdGhpcy5nZXRNZWRpYVN0cmVhbSh7IHZpZGVvOiBmYWxzZSwgYXVkaW86IHRydWUgfSlcbiAgICAgICAgLnRoZW4oKHN0cmVhbSkgPT4ge1xuICAgICAgICAgIHRoaXMubWVkaWFSZWNvcmRlciA9IG5ldyBNZWRpYVJlY29yZGVyKHN0cmVhbSk7XG4gICAgICAgICAgdGhpcy5tZWRpYVJlY29yZGVyLnN0YXJ0KCk7XG4gICAgICAgICAgdGhpcy5pc1JlY29yZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgY29uc3QgYXVkaW9DaHVua3M6IEJsb2JbXSA9IFtdO1xuICAgICAgICAgIHRoaXMubWVkaWFSZWNvcmRlci5vbmRhdGFhdmFpbGFibGUgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGF1ZGlvQ2h1bmtzLnB1c2goZXZlbnQuZGF0YSk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMubWVkaWFSZWNvcmRlci5hZGRFdmVudExpc3RlbmVyKCdzdG9wJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXVkaW9CbG9iID0gbmV3IEJsb2IoYXVkaW9DaHVua3MsIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2F1ZGlvL21wMycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoeyB0eXBlOiAnY29tcGxldGUnLCBmaWxlOiBhdWRpb0Jsb2IgfSk7XG4gICAgICAgICAgICB0aGlzLmlzUmVjb3JkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5tZWRpYVJlY29yZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IGF1ZGlvQ29udGV4dCA9IG5ldyBBdWRpb0NvbnRleHQoKTtcbiAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZSA9XG4gICAgICAgICAgICBhdWRpb0NvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2Uoc3RyZWFtKTtcbiAgICAgICAgICBjb25zdCBhbmFseXNlck5vZGUgPSBhdWRpb0NvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTtcbiAgICAgICAgICBtZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jb25uZWN0KGFuYWx5c2VyTm9kZSk7XG5cbiAgICAgICAgICBjb25zdCBwY21EYXRhID0gbmV3IEZsb2F0MzJBcnJheShhbmFseXNlck5vZGUuZmZ0U2l6ZSk7XG4gICAgICAgICAgY29uc3Qgb25GcmFtZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGFuYWx5c2VyTm9kZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhKHBjbURhdGEpO1xuICAgICAgICAgICAgbGV0IHN1bVNxdWFyZXMgPSAwLjA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFtcGxpdHVkZSBvZiBwY21EYXRhKSB7XG4gICAgICAgICAgICAgIHN1bVNxdWFyZXMgKz0gYW1wbGl0dWRlICogYW1wbGl0dWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN1bVNxdWFyZXMgPiAwKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICd2b2x1bWUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBNYXRoLnNxcnQoc3VtU3F1YXJlcyAvIHBjbURhdGEubGVuZ3RoKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoIWNoZWNrUGVybWlzc2lvblByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBjaGVja1Blcm1pc3Npb25Qcm9taXNlID0gdGhpcy5jaGVja1Blcm1pc3Npb24oe1xuICAgICAgICAgICAgICAgICAgdmlkZW86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgYXVkaW86IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjaGVja1Blcm1pc3Npb25Qcm9taXNlXG4gICAgICAgICAgICAgICAgICAudGhlbigoaGFzUGVybWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Blcm1pc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoJ1Blcm1pc3Npb24gZGVuaWVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrUGVybWlzc2lvblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFvYnNlcnZlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBwbGF5QXVkaW8odXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhdWRpbyA9IG5ldyBBdWRpbyh1cmwpO1xuICAgIGF3YWl0IGF1ZGlvLnBsYXkoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgYXVkaW8ub25lbmRlZCA9ICgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfTtcbiAgICAgIGF1ZGlvLm9uZXJyb3IgPSAoZXZlbnQpID0+IHJlamVjdChldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRTZWxlY3RlZE1lZGlhRGV2aWNlcyhkYXRhPzogU2VsZWN0ZWRNZWRpYURldmljZXMpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkTWVkaWFEZXZpY2VzID0gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrUGVybWlzc2lvbihkYXRhOiB7XG4gICAgYXVkaW86IGJvb2xlYW47XG4gICAgdmlkZW86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5nZXRNZWRpYVN0cmVhbShkYXRhKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWVkaWFTdHJlYW1Db25zdHJhaW50cyhkYXRhOiB7XG4gICAgYXVkaW86IGJvb2xlYW47XG4gICAgdmlkZW86IGJvb2xlYW47XG4gIH0pOiBNZWRpYVN0cmVhbUNvbnN0cmFpbnRzIHtcbiAgICBjb25zdCBhdWRpb0RldmljZUlEID0gdGhpcy5zZWxlY3RlZE1lZGlhRGV2aWNlcz8uYXVkaW9EZXZpY2VJZDtcbiAgICBjb25zdCB2aWRlb0RldmljZUlEID0gdGhpcy5zZWxlY3RlZE1lZGlhRGV2aWNlcz8udmlkZW9EZXZpY2VJZDtcbiAgICByZXR1cm4ge1xuICAgICAgYXVkaW86XG4gICAgICAgIGRhdGEuYXVkaW8gJiYgYXVkaW9EZXZpY2VJRFxuICAgICAgICAgID8geyBkZXZpY2VJZDogeyBleGFjdDogYXVkaW9EZXZpY2VJRCB9IH1cbiAgICAgICAgICA6IGRhdGEuYXVkaW8sXG4gICAgICB2aWRlbzpcbiAgICAgICAgZGF0YS52aWRlbyAmJiB2aWRlb0RldmljZUlEXG4gICAgICAgICAgPyB7IGRldmljZUlkOiB7IGV4YWN0OiB2aWRlb0RldmljZUlEIH0gfVxuICAgICAgICAgIDogZGF0YS52aWRlbyxcbiAgICB9O1xuICB9XG59XG5cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import { Injectable } from '@angular/core';
2
+ import '../../models/window';
3
+ import * as i0 from "@angular/core";
4
+ export class MixpanelService {
5
+ mixpanel = null;
6
+ track(eventName, properties = {}) {
7
+ if (this.mixpanel) {
8
+ return this.sendTrackEvent(eventName, properties);
9
+ }
10
+ if (window.mixpanel) {
11
+ this.mixpanel = window.mixpanel;
12
+ return this.sendTrackEvent(eventName, properties);
13
+ }
14
+ console.error('Mixpanel is not initialized or not available');
15
+ }
16
+ sendTrackEvent(eventName, properties = {}) {
17
+ try {
18
+ this.mixpanel.track(eventName, properties);
19
+ }
20
+ catch (error) {
21
+ console.error(error);
22
+ }
23
+ }
24
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MixpanelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
25
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MixpanelService });
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MixpanelService, decorators: [{
28
+ type: Injectable
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4cGFuZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvc2hhcmVkL2xpYi9zZXJ2aWNlcy9taXhwYW5lbC9taXhwYW5lbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxxQkFBcUIsQ0FBQzs7QUFHN0IsTUFBTSxPQUFPLGVBQWU7SUFDbEIsUUFBUSxHQUFrQyxJQUFJLENBQUM7SUFFdkQsS0FBSyxDQUFDLFNBQWlCLEVBQUUsYUFBNEIsRUFBRTtRQUNyRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxjQUFjLENBQUMsU0FBaUIsRUFBRSxhQUE0QixFQUFFO1FBQ3RFLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxRQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7d0dBdEJVLGVBQWU7NEdBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIG1peHBhbmVsIGZyb20gJ21peHBhbmVsLWJyb3dzZXInO1xuaW1wb3J0ICcuLi8uLi9tb2RlbHMvd2luZG93JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1peHBhbmVsU2VydmljZSB7XG4gIHByaXZhdGUgbWl4cGFuZWw6IHR5cGVvZiB3aW5kb3cubWl4cGFuZWwgfCBudWxsID0gbnVsbDtcblxuICB0cmFjayhldmVudE5hbWU6IHN0cmluZywgcHJvcGVydGllczogbWl4cGFuZWwuRGljdCA9IHt9KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWl4cGFuZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbmRUcmFja0V2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5taXhwYW5lbCkge1xuICAgICAgdGhpcy5taXhwYW5lbCA9IHdpbmRvdy5taXhwYW5lbDtcbiAgICAgIHJldHVybiB0aGlzLnNlbmRUcmFja0V2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcignTWl4cGFuZWwgaXMgbm90IGluaXRpYWxpemVkIG9yIG5vdCBhdmFpbGFibGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZFRyYWNrRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM6IG1peHBhbmVsLkRpY3QgPSB7fSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLm1peHBhbmVsIS50cmFjayhldmVudE5hbWUsIHByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ var THEME_VARS;
4
+ (function (THEME_VARS) {
5
+ THEME_VARS["COMPANY_COLOR"] = "--color-primary-50";
6
+ })(THEME_VARS || (THEME_VARS = {}));
7
+ export class ThemeService {
8
+ BRAND_PINK_COLOR = '#D410AA';
9
+ getCompanyColor() {
10
+ return (this.getCSSVariableValue(THEME_VARS.COMPANY_COLOR) ||
11
+ this.BRAND_PINK_COLOR);
12
+ }
13
+ getCSSVariableValue(variableName) {
14
+ return getComputedStyle(document.documentElement)
15
+ .getPropertyValue(variableName)
16
+ .trim();
17
+ }
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
19
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThemeService });
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThemeService, decorators: [{
22
+ type: Injectable
23
+ }] });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvc2hhcmVkL2xpYi9zZXJ2aWNlcy90aGVtZS90aGVtZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDLElBQUssVUFFSjtBQUZELFdBQUssVUFBVTtJQUNiLGtEQUFvQyxDQUFBO0FBQ3RDLENBQUMsRUFGSSxVQUFVLEtBQVYsVUFBVSxRQUVkO0FBR0QsTUFBTSxPQUFPLFlBQVk7SUFDTixnQkFBZ0IsR0FBRyxTQUFTLENBQUM7SUFFOUMsZUFBZTtRQUNiLE9BQU8sQ0FDTCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztZQUNsRCxJQUFJLENBQUMsZ0JBQWdCLENBQ3RCLENBQUM7SUFDSixDQUFDO0lBRU8sbUJBQW1CLENBQUMsWUFBb0I7UUFDOUMsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO2FBQzlDLGdCQUFnQixDQUFDLFlBQVksQ0FBQzthQUM5QixJQUFJLEVBQUUsQ0FBQztJQUNaLENBQUM7d0dBZFUsWUFBWTs0R0FBWixZQUFZOzs0RkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5lbnVtIFRIRU1FX1ZBUlMge1xuICBDT01QQU5ZX0NPTE9SID0gJy0tY29sb3ItcHJpbWFyeS01MCcsXG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUaGVtZVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IEJSQU5EX1BJTktfQ09MT1IgPSAnI0Q0MTBBQSc7XG5cbiAgZ2V0Q29tcGFueUNvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZ2V0Q1NTVmFyaWFibGVWYWx1ZShUSEVNRV9WQVJTLkNPTVBBTllfQ09MT1IpIHx8XG4gICAgICB0aGlzLkJSQU5EX1BJTktfQ09MT1JcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDU1NWYXJpYWJsZVZhbHVlKHZhcmlhYmxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZSh2YXJpYWJsZU5hbWUpXG4gICAgICAudHJpbSgpO1xuICB9XG59XG5cbiJdfQ==