@testgorilla/tgo-shared-lib 2.0.2 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# @testgorilla/tgo-shared-lib
|
|
2
|
-
|
|
3
|
-
Shared library component for TestGorilla assessments.
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install @testgorilla/tgo-shared-lib
|
|
9
|
-
```
|
|
1
|
+
# @testgorilla/tgo-shared-lib
|
|
2
|
+
|
|
3
|
+
Shared library component for TestGorilla assessments.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @testgorilla/tgo-shared-lib
|
|
9
|
+
```
|
|
@@ -7,7 +7,7 @@ import 'mixpanel-browser';
|
|
|
7
7
|
import { Observable, throwError, EMPTY, of, delay } from 'rxjs';
|
|
8
8
|
import { TRANSLOCO_SCOPE, TranslocoTestingModule, translate } from '@ngneat/transloco';
|
|
9
9
|
import * as i1$1 from '@angular/common/http';
|
|
10
|
-
import * as i2 from '@testgorilla/tgo-ui';
|
|
10
|
+
import * as i2 from '@testgorilla/tgo-ui/components/snackbar';
|
|
11
11
|
import { catchError } from 'rxjs/operators';
|
|
12
12
|
|
|
13
13
|
class AudioAnimationComponent {
|
|
@@ -108,12 +108,12 @@ class AudioAnimationComponent {
|
|
|
108
108
|
ngOnDestroy() {
|
|
109
109
|
this.stopAnimation();
|
|
110
110
|
}
|
|
111
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
112
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
111
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: AudioAnimationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
112
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: AudioAnimationComponent, isStandalone: true, selector: "tgo-audio-animation", inputs: { volume: "volume", fakeData: "fakeData" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"audio-animation-wrapper\">\n <section class=\"audio-animation-container\">\n <div\n class=\"sound-bar first-bar\"\n [ngStyle]=\"{ height: barHeightsSignal()['first-bar'] }\"\n ></div>\n <div\n class=\"sound-bar second-bar\"\n [ngStyle]=\"{ height: barHeightsSignal()['second-bar'] }\"\n ></div>\n <div\n class=\"sound-bar third-bar\"\n [ngStyle]=\"{ height: barHeightsSignal()['third-bar'] }\"\n ></div>\n </section>\n</div>\n\n", styles: [".audio-animation-wrapper{display:flex;justify-content:center;align-items:center}.audio-animation-wrapper .audio-animation-container{display:flex;justify-content:space-between;align-items:center;width:32px;height:24px;background-color:#4285f4;border-radius:25px;padding:5px 6.5px;box-shadow:0 4px 10px #0000001a}.audio-animation-wrapper .audio-animation-container .sound-bar{width:4px;background-color:#fff;height:20%;transition:height .2s ease-in-out;clip-path:ellipse(45% 30% at 50% 50%)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
113
113
|
}
|
|
114
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: AudioAnimationComponent, decorators: [{
|
|
115
115
|
type: Component,
|
|
116
|
-
args: [{ selector: 'tgo-audio-animation', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [CommonModule], template: "<div class=\"audio-animation-wrapper\">\
|
|
116
|
+
args: [{ selector: 'tgo-audio-animation', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [CommonModule], template: "<div class=\"audio-animation-wrapper\">\n <section class=\"audio-animation-container\">\n <div\n class=\"sound-bar first-bar\"\n [ngStyle]=\"{ height: barHeightsSignal()['first-bar'] }\"\n ></div>\n <div\n class=\"sound-bar second-bar\"\n [ngStyle]=\"{ height: barHeightsSignal()['second-bar'] }\"\n ></div>\n <div\n class=\"sound-bar third-bar\"\n [ngStyle]=\"{ height: barHeightsSignal()['third-bar'] }\"\n ></div>\n </section>\n</div>\n\n", styles: [".audio-animation-wrapper{display:flex;justify-content:center;align-items:center}.audio-animation-wrapper .audio-animation-container{display:flex;justify-content:space-between;align-items:center;width:32px;height:24px;background-color:#4285f4;border-radius:25px;padding:5px 6.5px;box-shadow:0 4px 10px #0000001a}.audio-animation-wrapper .audio-animation-container .sound-bar{width:4px;background-color:#fff;height:20%;transition:height .2s ease-in-out;clip-path:ellipse(45% 30% at 50% 50%)}\n"] }]
|
|
117
117
|
}], ctorParameters: () => [], propDecorators: { volume: [{
|
|
118
118
|
type: Input
|
|
119
119
|
}], fakeData: [{
|
|
@@ -205,10 +205,10 @@ class VimeoVideoComponent {
|
|
|
205
205
|
await this.vimeoPlayer.play();
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
209
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
208
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: VimeoVideoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
209
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: VimeoVideoComponent, isStandalone: true, selector: "tgo-vimeo-video", inputs: { videoUrl: "videoUrl", isPlaying: "isPlaying", options: "options" }, outputs: { videoEnded: "videoEnded", videoStarted: "videoStarted" }, host: { properties: { "class": "this.class" } }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [".tgo-vimeo-video iframe{position:absolute;top:0;left:0;width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
210
210
|
}
|
|
211
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
211
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: VimeoVideoComponent, decorators: [{
|
|
212
212
|
type: Component,
|
|
213
213
|
args: [{ selector: 'tgo-vimeo-video', template: '', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".tgo-vimeo-video iframe{position:absolute;top:0;left:0;width:100%;height:100%}\n"] }]
|
|
214
214
|
}], propDecorators: { class: [{
|
|
@@ -343,10 +343,10 @@ class MediaService {
|
|
|
343
343
|
: data.video,
|
|
344
344
|
};
|
|
345
345
|
}
|
|
346
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
347
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
346
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: MediaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
347
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: MediaService, providedIn: 'root' });
|
|
348
348
|
}
|
|
349
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: MediaService, decorators: [{
|
|
350
350
|
type: Injectable,
|
|
351
351
|
args: [{
|
|
352
352
|
providedIn: 'root',
|
|
@@ -368,10 +368,10 @@ class ThemeService {
|
|
|
368
368
|
.getPropertyValue(variableName)
|
|
369
369
|
.trim();
|
|
370
370
|
}
|
|
371
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
372
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
371
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
372
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ThemeService });
|
|
373
373
|
}
|
|
374
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
374
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ThemeService, decorators: [{
|
|
375
375
|
type: Injectable
|
|
376
376
|
}] });
|
|
377
377
|
|
|
@@ -511,10 +511,10 @@ class ApiService {
|
|
|
511
511
|
}
|
|
512
512
|
return headers;
|
|
513
513
|
}
|
|
514
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
515
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
514
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ApiService, deps: [{ token: i1$1.HttpClient }, { token: i2.SnackbarService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
515
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ApiService });
|
|
516
516
|
}
|
|
517
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
517
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ApiService, decorators: [{
|
|
518
518
|
type: Injectable
|
|
519
519
|
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i2.SnackbarService }] });
|
|
520
520
|
|
|
@@ -639,10 +639,10 @@ class MockedApiService {
|
|
|
639
639
|
runtime_error: null,
|
|
640
640
|
};
|
|
641
641
|
}
|
|
642
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
643
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
642
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: MockedApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
643
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: MockedApiService });
|
|
644
644
|
}
|
|
645
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
645
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: MockedApiService, decorators: [{
|
|
646
646
|
type: Injectable
|
|
647
647
|
}] });
|
|
648
648
|
|
|
@@ -650,10 +650,10 @@ class EnvironmentService {
|
|
|
650
650
|
get isMobile() {
|
|
651
651
|
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
|
652
652
|
}
|
|
653
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
654
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
653
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: EnvironmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
654
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: EnvironmentService });
|
|
655
655
|
}
|
|
656
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
656
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: EnvironmentService, decorators: [{
|
|
657
657
|
type: Injectable
|
|
658
658
|
}] });
|
|
659
659
|
|
|
@@ -677,10 +677,10 @@ class MixpanelService {
|
|
|
677
677
|
console.error(error);
|
|
678
678
|
}
|
|
679
679
|
}
|
|
680
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
681
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
680
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: MixpanelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
681
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: MixpanelService });
|
|
682
682
|
}
|
|
683
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
683
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: MixpanelService, decorators: [{
|
|
684
684
|
type: Injectable
|
|
685
685
|
}] });
|
|
686
686
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-shared-lib.mjs","sources":["../../../../packages/tgo-shared-lib/src/lib/components/audio-animation/audio-animation.component.ts","../../../../packages/tgo-shared-lib/src/lib/components/audio-animation/audio-animation.component.html","../../../../packages/tgo-shared-lib/src/lib/components/vimeo-video/vimeo-video.component.ts","../../../../packages/tgo-shared-lib/src/lib/models/translations.ts","../../../../packages/tgo-shared-lib/src/lib/services/media/media.service.ts","../../../../packages/tgo-shared-lib/src/lib/services/theme/theme.service.ts","../../../../packages/tgo-shared-lib/src/lib/services/localization/transloco-lazy-module-utils.ts","../../../../packages/tgo-shared-lib/src/lib/services/localization/languages.model.ts","../../../../packages/tgo-shared-lib/src/lib/services/localization/transloco-testing.module.ts","../../../../packages/tgo-shared-lib/src/lib/services/api/api.service.ts","../../../../packages/tgo-shared-lib/src/lib/services/api/mocked-api.service.ts","../../../../packages/tgo-shared-lib/src/lib/services/environment/environment.service.ts","../../../../packages/tgo-shared-lib/src/lib/services/mixpanel/mixpanel.service.ts","../../../../packages/tgo-shared-lib/src/test-mocks/assessment-test.mock.ts","../../../../packages/tgo-shared-lib/src/test-mocks/tgo-ui.mock.ts","../../../../packages/tgo-shared-lib/src/testgorilla-tgo-shared-lib.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n ViewEncapsulation,\r\n WritableSignal,\r\n computed,\r\n signal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'tgo-audio-animation',\r\n templateUrl: './audio-animation.component.html',\r\n styleUrls: ['./audio-animation.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [CommonModule]\r\n})\r\nexport class AudioAnimationComponent implements OnChanges, OnDestroy {\r\n @Input() volume = 0;\r\n @Input() fakeData = false;\r\n\r\n private isAnimationRunning = false;\r\n private animationFrameId: number | null = null;\r\n private lastAnimationUpdate = performance.now();\r\n\r\n volumeSignal: WritableSignal<number> = signal(this.volume);\r\n barHeightsSignal = computed(() => this.getBarHeights(this.volumeSignal()));\r\n\r\n constructor() {\r\n this.startAnimation();\r\n }\r\n\r\n ngOnChanges(): void {\r\n this.volumeSignal.set(this.normalizeRealVolume(this.volume));\r\n\r\n if (this.fakeData) {\r\n this.startAnimation();\r\n } else {\r\n this.stopAnimation();\r\n }\r\n }\r\n\r\n private normalizeRealVolume(originalVolume: number): number {\r\n return Math.min(1, originalVolume * 10);\r\n }\r\n\r\n private startAnimation(): void {\r\n if (this.isAnimationRunning) {\r\n return;\r\n }\r\n\r\n this.isAnimationRunning = true;\r\n\r\n const animate = (timestamp: number) => {\r\n if (!this.isAnimationRunning) {\r\n return;\r\n }\r\n\r\n if (timestamp - this.lastAnimationUpdate > 200) {\r\n this.lastAnimationUpdate = timestamp;\r\n\r\n const newVolume = Math.random() * 0.8 + 0.2;\r\n\r\n this.volumeSignal.set(newVolume);\r\n }\r\n\r\n this.animationFrameId = requestAnimationFrame(animate);\r\n };\r\n\r\n this.animationFrameId = requestAnimationFrame(animate);\r\n }\r\n\r\n private stopAnimation(): void {\r\n this.isAnimationRunning = false;\r\n\r\n if (this.animationFrameId) {\r\n cancelAnimationFrame(this.animationFrameId);\r\n this.animationFrameId = null;\r\n }\r\n }\r\n\r\n private getBarHeights(volume: number): {\r\n 'first-bar': string;\r\n 'second-bar': string;\r\n 'third-bar': string;\r\n } {\r\n if (!this.fakeData && volume < 0.15) {\r\n return {\r\n 'first-bar': `42%`,\r\n 'second-bar': `42%`,\r\n 'third-bar': `42%`,\r\n };\r\n }\r\n\r\n let range: { min: number; max: number };\r\n\r\n this.fakeData\r\n ? (range = this.getFakeVolumeRange(volume))\r\n : (range = this.getRealVolumeRange(volume));\r\n\r\n const randomHeight = this.getRandomHeight(range.min, range.max);\r\n\r\n return {\r\n 'first-bar': `${randomHeight}%`,\r\n 'second-bar': `${randomHeight + 30}%`,\r\n 'third-bar': `${randomHeight}%`,\r\n };\r\n }\r\n\r\n private getFakeVolumeRange(volume: number): { min: number; max: number } {\r\n if (volume < 0.33) {\r\n return { min: 60, max: 90 };\r\n } else if (volume < 0.66) {\r\n return { min: 90, max: 120 };\r\n } else {\r\n return { min: 120, max: 140 };\r\n }\r\n }\r\n\r\n private getRealVolumeRange(volume: number): { min: number; max: number } {\r\n if (volume < 0.45) {\r\n return { min: 90, max: 90 };\r\n } else if (volume < 0.6) {\r\n return { min: 110, max: 110 };\r\n } else if (volume < 0.75) {\r\n return { min: 125, max: 125 };\r\n } else {\r\n return { min: 140, max: 140 };\r\n }\r\n }\r\n\r\n private getRandomHeight(min: number, max: number): number {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stopAnimation();\r\n }\r\n}\r\n\r\n","<div class=\"audio-animation-wrapper\">\r\n <section class=\"audio-animation-container\">\r\n <div\r\n class=\"sound-bar first-bar\"\r\n [ngStyle]=\"{ height: barHeightsSignal()['first-bar'] }\"\r\n ></div>\r\n <div\r\n class=\"sound-bar second-bar\"\r\n [ngStyle]=\"{ height: barHeightsSignal()['second-bar'] }\"\r\n ></div>\r\n <div\r\n class=\"sound-bar third-bar\"\r\n [ngStyle]=\"{ height: barHeightsSignal()['third-bar'] }\"\r\n ></div>\r\n </section>\r\n</div>\r\n\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport Player from '@vimeo/player';\r\nimport type { VimeoEmbedParameters, VimeoUrl } from '@vimeo/player/types/formats';\r\n\r\n// Alias for compatibility\r\ntype Options = VimeoEmbedParameters;\r\n\r\n@Component({\r\n selector: 'tgo-vimeo-video',\r\n template: '',\r\n styleUrls: ['./vimeo-video.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class VimeoVideoComponent implements OnInit, OnDestroy, OnChanges {\r\n @HostBinding() class = 'tgo-vimeo-video';\r\n @Input() videoUrl = '';\r\n @Input() isPlaying = false;\r\n @Input() options: Options = {\r\n controls: false,\r\n autoplay: false,\r\n loop: false,\r\n speed: true,\r\n title: false,\r\n byline: false,\r\n quality: 'auto',\r\n autopause: false,\r\n };\r\n @Output() videoEnded = new EventEmitter<void>();\r\n @Output() videoStarted = new EventEmitter<void>();\r\n\r\n vimeoPlayer?: Player;\r\n\r\n private elRef = inject(ElementRef);\r\n\r\n async ngOnInit(): Promise<void> {\r\n await this.configureVimeoPlayer();\r\n }\r\n\r\n async ngOnDestroy(): Promise<void> {\r\n await this.removeVimeoPlayer();\r\n }\r\n\r\n async ngOnChanges(simpleChanges: SimpleChanges): Promise<void> {\r\n if (this.vimeoPlayer) {\r\n if (simpleChanges['videoUrl'] && !simpleChanges['videoUrl'].isFirstChange() && simpleChanges['videoUrl'].currentValue != simpleChanges['videoUrl'].previousValue && this.videoUrl) {\r\n\r\n await this.vimeoPlayer.loadVideo({\r\n url: this.videoUrl as any,\r\n start_time: 0,\r\n }).then(()=>{\r\n void this.vimeoPlayer?.setCurrentTime(0);\r\n setTimeout(() => {\r\n void this.vimeoPlayer?.play();\r\n }, 200);\r\n });\r\n\r\n }\r\n if (simpleChanges['isPlaying']) {\r\n if (this.isPlaying) {\r\n await this.vimeoPlayer.play();\r\n } else {\r\n await this.vimeoPlayer.pause();\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async removeVimeoPlayer(): Promise<void> {\r\n if (this.vimeoPlayer) {\r\n await this.vimeoPlayer.destroy();\r\n }\r\n }\r\n\r\n private async configureVimeoPlayer(): Promise<void> {\r\n const options: Options = {\r\n ...this.options,\r\n url: this.videoUrl as VimeoUrl,\r\n };\r\n try {\r\n await this.removeVimeoPlayer();\r\n this.vimeoPlayer = new Player(this.elRef.nativeElement as HTMLElement, options);\r\n this.vimeoPlayer.on('ended', () => {\r\n this.videoEnded.emit();\r\n this.isPlaying = false;\r\n this.vimeoPlayer?.pause();\r\n });\r\n this.vimeoPlayer.on('playing', () => {\r\n this.videoStarted.emit();\r\n });\r\n this.vimeoPlayer.on('pause', (event) => {\r\n if (this.isPlaying && event.percent < 1) {\r\n this.vimeoPlayer?.play();\r\n }\r\n });\r\n await this.playVideo();\r\n } catch (error) {\r\n await this.removeVimeoPlayer();\r\n throw error;\r\n }\r\n }\r\n\r\n private async playVideo() {\r\n if (this.vimeoPlayer && this.isPlaying) {\r\n await this.vimeoPlayer.play();\r\n }\r\n }\r\n}\r\n\r\n","export const ROOT_TRANSLATIONS_SCOPE = 'TEST';\r\n\r\n","import { Injectable, signal } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SelectedMediaDevices } from '../../models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class MediaService {\r\n private mediaRecorder: MediaRecorder | null = null;\r\n private selectedMediaDevices: SelectedMediaDevices | undefined;\r\n readonly isRecording = signal(false);\r\n\r\n stopRecording(): void {\r\n this.mediaRecorder?.stop();\r\n }\r\n\r\n getMediaStream(data: {\r\n audio: boolean;\r\n video: boolean;\r\n }): Promise<MediaStream> {\r\n return navigator.mediaDevices.getUserMedia(\r\n this.getMediaStreamConstraints(data)\r\n );\r\n }\r\n\r\n recordAudio(): Observable<\r\n { type: 'complete'; file: Blob } | { type: 'volume'; value: number }\r\n > {\r\n let checkPermissionPromise: Promise<boolean> | null;\r\n return new Observable((observer) => {\r\n void this.getMediaStream({ video: false, audio: true })\r\n .then((stream) => {\r\n this.mediaRecorder = new MediaRecorder(stream);\r\n this.mediaRecorder.start();\r\n this.isRecording.set(true);\r\n const audioChunks: Blob[] = [];\r\n this.mediaRecorder.ondataavailable = (event) => {\r\n audioChunks.push(event.data);\r\n };\r\n\r\n this.mediaRecorder.addEventListener('stop', () => {\r\n const audioBlob = new Blob(audioChunks, {\r\n type: 'audio/mp3',\r\n });\r\n observer.next({ type: 'complete', file: audioBlob });\r\n this.isRecording.set(false);\r\n observer.complete();\r\n });\r\n\r\n this.mediaRecorder.onerror = (error) => {\r\n observer.error(error);\r\n observer.complete();\r\n };\r\n\r\n const audioContext = new AudioContext();\r\n const mediaStreamAudioSourceNode =\r\n audioContext.createMediaStreamSource(stream);\r\n const analyserNode = audioContext.createAnalyser();\r\n mediaStreamAudioSourceNode.connect(analyserNode);\r\n\r\n const pcmData = new Float32Array(analyserNode.fftSize);\r\n const onFrame = () => {\r\n analyserNode.getFloatTimeDomainData(pcmData);\r\n let sumSquares = 0.0;\r\n for (const amplitude of pcmData) {\r\n sumSquares += amplitude * amplitude;\r\n }\r\n if (sumSquares > 0) {\r\n observer.next({\r\n type: 'volume',\r\n value: Math.sqrt(sumSquares / pcmData.length),\r\n });\r\n } else {\r\n if (!checkPermissionPromise) {\r\n checkPermissionPromise = this.checkPermission({\r\n video: false,\r\n audio: true,\r\n });\r\n\r\n checkPermissionPromise\r\n .then((hasPermission) => {\r\n if (!hasPermission) {\r\n observer.error(new Error('Permission denied'));\r\n observer.complete();\r\n }\r\n })\r\n .finally(() => {\r\n checkPermissionPromise = null;\r\n });\r\n }\r\n }\r\n\r\n if (!observer.closed) {\r\n window.requestAnimationFrame(onFrame);\r\n }\r\n };\r\n window.requestAnimationFrame(onFrame);\r\n })\r\n .catch((error) => {\r\n observer.error(error);\r\n observer.complete();\r\n });\r\n });\r\n }\r\n\r\n async playAudio(url: string): Promise<void> {\r\n const audio = new Audio(url);\r\n await audio.play();\r\n return new Promise((resolve, reject) => {\r\n audio.onended = () => {\r\n resolve();\r\n };\r\n audio.onerror = (event) => reject(event);\r\n });\r\n }\r\n\r\n setSelectedMediaDevices(data?: SelectedMediaDevices): void {\r\n this.selectedMediaDevices = data;\r\n }\r\n\r\n async checkPermission(data: {\r\n audio: boolean;\r\n video: boolean;\r\n }): Promise<boolean> {\r\n try {\r\n await this.getMediaStream(data);\r\n return true;\r\n } catch (err) {\r\n console.error(err);\r\n return false;\r\n }\r\n }\r\n\r\n private getMediaStreamConstraints(data: {\r\n audio: boolean;\r\n video: boolean;\r\n }): MediaStreamConstraints {\r\n const audioDeviceID = this.selectedMediaDevices?.audioDeviceId;\r\n const videoDeviceID = this.selectedMediaDevices?.videoDeviceId;\r\n return {\r\n audio:\r\n data.audio && audioDeviceID\r\n ? { deviceId: { exact: audioDeviceID } }\r\n : data.audio,\r\n video:\r\n data.video && videoDeviceID\r\n ? { deviceId: { exact: videoDeviceID } }\r\n : data.video,\r\n };\r\n }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\n\r\nenum THEME_VARS {\r\n COMPANY_COLOR = '--color-primary-50',\r\n}\r\n\r\n@Injectable()\r\nexport class ThemeService {\r\n private readonly BRAND_PINK_COLOR = '#D410AA';\r\n\r\n getCompanyColor(): string {\r\n return (\r\n this.getCSSVariableValue(THEME_VARS.COMPANY_COLOR) ||\r\n this.BRAND_PINK_COLOR\r\n );\r\n }\r\n\r\n private getCSSVariableValue(variableName: string): string {\r\n return getComputedStyle(document.documentElement)\r\n .getPropertyValue(variableName)\r\n .trim();\r\n }\r\n}\r\n\r\n","import { ValueProvider } from '@angular/core';\r\nimport { TRANSLOCO_SCOPE } from '@ngneat/transloco';\r\n\r\ninterface TranslocoInlineLoader {\r\n [key: string]: () => Promise<JSON>;\r\n}\r\n\r\n/**\r\n * The util is based on this issue https://github.com/jsverse/transloco/issues/608#issuecomment-1416113493\r\n *\r\n * Transloco can't have several forRoot modules. so the only way for now to decouple translations as a separate file and context\r\n * from the shell (TAS in this case) is to use TRANSLOCO_SCOPE\r\n */\r\nexport class TranslocoLazyModuleUtils {\r\n private static createInlineLoader(\r\n languages: Array<string>,\r\n loaderFn: (l: string) => Promise<JSON>\r\n ): TranslocoInlineLoader {\r\n const translocoInlineLoader: TranslocoInlineLoader = {};\r\n\r\n languages.forEach((language) => {\r\n translocoInlineLoader[language] = () => loaderFn(language);\r\n });\r\n\r\n return translocoInlineLoader;\r\n }\r\n\r\n public static getScopeProvider(\r\n scope: string,\r\n languages: Array<string>,\r\n alias: string,\r\n loaderFn: (l: string) => Promise<JSON>\r\n ): ValueProvider {\r\n return {\r\n provide: TRANSLOCO_SCOPE,\r\n useValue: {\r\n scope,\r\n alias,\r\n loader: this.createInlineLoader(languages, loaderFn),\r\n },\r\n };\r\n }\r\n}\r\n\r\n","//Languages available in the app as enum\r\nexport enum Language {\r\n en = 'en',\r\n es = 'es',\r\n nl = 'nl',\r\n fr = 'fr',\r\n de = 'de',\r\n 'it-it' = 'it-it',\r\n 'ja-jp' = 'ja-jp',\r\n 'pt-br' = 'pt-br',\r\n 'da-dk' = 'da-dk',\r\n 'nb-no' = 'nb-no',\r\n 'pl-pl' = 'pl-pl',\r\n 'sv-se' = 'sv-se',\r\n}\r\n\r\n//This function retrieves all languages from the enum. It is used to initialize transloco\r\nexport const getAvailableLangs = () => Object.values(Language);\r\n\r\n","import {\r\n TranslocoTestingModule,\r\n TranslocoTestingOptions,\r\n} from '@ngneat/transloco';\r\n\r\nexport const getTranslocoModule = (options: TranslocoTestingOptions = {}) =>\r\n TranslocoTestingModule.forRoot({\r\n translocoConfig: {\r\n reRenderOnLangChange: false,\r\n availableLangs: ['en'],\r\n defaultLang: 'en',\r\n },\r\n preloadLangs: true,\r\n ...options,\r\n });\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { translate } from '@ngneat/transloco';\r\nimport { SnackbarService } from '@testgorilla/tgo-ui';\r\nimport { EMPTY, Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class ApiService {\r\n private invitationUUID = '';\r\n private contentLanguage = '';\r\n private ROOT_TRANSLATIONS_SCOPE = '';\r\n private baseUrl = '';\r\n\r\n constructor(\r\n private httpClient: HttpClient,\r\n private snackbarService: SnackbarService\r\n ) {}\r\n\r\n setParams(\r\n invitationUUID: string,\r\n contentLanguage: string,\r\n translationScope: string,\r\n baseUrl: string\r\n ): void {\r\n this.invitationUUID = invitationUUID;\r\n this.contentLanguage = contentLanguage;\r\n this.ROOT_TRANSLATIONS_SCOPE = translationScope;\r\n this.baseUrl = baseUrl;\r\n }\r\n\r\n getInvitationUUID(): string {\r\n return this.invitationUUID;\r\n }\r\n\r\n get<T>(\r\n url: string,\r\n options = {},\r\n errorCallback = this.handleError.bind(this)\r\n ): Observable<T> {\r\n return this.httpClient\r\n .get<T>(\r\n `${this.baseUrl}${url}`,\r\n this.buildHeaders(options)\r\n )\r\n .pipe(catchError((error: HttpErrorResponse) => errorCallback(error))) as Observable<T>;\r\n }\r\n\r\n post<T>(\r\n url: string,\r\n data: object,\r\n options = {},\r\n errorCallback = this.handleError.bind(this),\r\n isStandaloneUrl = false\r\n ): Observable<T> {\r\n return this.httpClient\r\n .post<T>(\r\n isStandaloneUrl ? url : `${this.baseUrl}${url}`,\r\n data,\r\n this.buildHeaders(options)\r\n )\r\n .pipe(catchError((error: HttpErrorResponse) => errorCallback(error))) as Observable<T>;\r\n }\r\n\r\n put<T>(\r\n url: string,\r\n data: object,\r\n options = {},\r\n errorCallback = this.handleError.bind(this)\r\n ): Observable<T> {\r\n return this.httpClient\r\n .put<T>(\r\n `${this.baseUrl}${url}`,\r\n data,\r\n this.buildHeaders(options)\r\n )\r\n .pipe(catchError((error: HttpErrorResponse) => errorCallback(error))) as Observable<T>;\r\n }\r\n\r\n patch<T>(\r\n url: string,\r\n data: object,\r\n options = {},\r\n errorCallback = this.handleError.bind(this)\r\n ): Observable<T> {\r\n return this.httpClient\r\n .patch<T>(\r\n `${this.baseUrl}${url}`,\r\n data,\r\n this.buildHeaders(options)\r\n )\r\n .pipe(catchError((error: HttpErrorResponse) => errorCallback(error))) as Observable<T>;\r\n }\r\n\r\n delete(\r\n url: string,\r\n errorCallback = this.handleError.bind(this)\r\n ): Observable<object> {\r\n return this.httpClient\r\n .delete(\r\n `${this.baseUrl}${url}`,\r\n this.buildHeaders({})\r\n )\r\n .pipe(catchError((error: HttpErrorResponse) => errorCallback(error))) as Observable<object>;\r\n }\r\n\r\n private handleError(errorObj: HttpErrorResponse): Observable<never> {\r\n const { error } = errorObj;\r\n if (error?.errors?.length > 0) {\r\n return throwError(() => error.errors);\r\n } else {\r\n console.error(errorObj.message);\r\n this.snackbarService.error(this.processGenericServerError());\r\n\r\n return EMPTY;\r\n }\r\n }\r\n\r\n private processGenericServerError(): string {\r\n return translate(`${this.ROOT_TRANSLATIONS_SCOPE}.ERRORS.SYSTEM_ERROR`);\r\n }\r\n\r\n private buildHeaders(options: object): object {\r\n if (typeof window.crypto.randomUUID === 'function') {\r\n options = {\r\n ...options,\r\n 'X-REQUEST-ID': window.crypto.randomUUID(),\r\n 'X-INVITATION-UUID': this.invitationUUID,\r\n };\r\n }\r\n\r\n const passedAuthorizationHeader = (options as { [key: string]: any })[\r\n 'Authorization'\r\n ];\r\n const headers: { headers: { [header: string]: string } } = {\r\n headers: {\r\n ...options,\r\n Authorization: passedAuthorizationHeader\r\n ? passedAuthorizationHeader\r\n : `TokenCandidature ${this.invitationUUID?.replace(/-/g, '')}`,\r\n },\r\n };\r\n\r\n if (this.contentLanguage) {\r\n headers.headers['Accept-Language'] = this.contentLanguage;\r\n }\r\n\r\n return headers;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, of, delay } from 'rxjs';\r\n\r\n/**\r\n * MockedApiService provides fake API responses for demo/development purposes.\r\n * This service mimics the real ApiService interface but returns mock data instead\r\n * of making actual HTTP calls.\r\n *\r\n * Usage: Provide this service in place of ApiService in your demo application:\r\n * ```\r\n * { provide: ApiService, useClass: MockedApiService }\r\n * ```\r\n */\r\n@Injectable()\r\nexport class MockedApiService {\r\n private invitationUUID = 'demo-uuid-12345';\r\n private contentLanguage = 'en';\r\n private ROOT_TRANSLATIONS_SCOPE = '';\r\n\r\n // Simulate network delay (in ms) - set to 0 for instant responses\r\n private readonly MOCK_DELAY = 500;\r\n\r\n setParams(\r\n invitationUUID: string,\r\n contentLanguage: string,\r\n translationScope: string,\r\n baseUrl: string\r\n ): void {\r\n this.invitationUUID = invitationUUID;\r\n this.contentLanguage = contentLanguage;\r\n this.ROOT_TRANSLATIONS_SCOPE = translationScope;\r\n console.log('[MockedApiService] Params set:', {\r\n invitationUUID,\r\n contentLanguage,\r\n translationScope,\r\n baseUrl,\r\n });\r\n }\r\n\r\n getInvitationUUID(): string {\r\n return this.invitationUUID;\r\n }\r\n\r\n get<T>(\r\n url: string,\r\n options = {},\r\n errorCallback?: (error: any) => Observable<never>\r\n ): Observable<T> {\r\n console.log('[MockedApiService] GET:', url, options);\r\n return of(this.getMockResponse<T>(url, 'GET') as T).pipe(\r\n delay(this.MOCK_DELAY)\r\n );\r\n }\r\n\r\n post<T>(\r\n url: string,\r\n data: object,\r\n options = {},\r\n errorCallback?: (error: any) => Observable<never>,\r\n isStandaloneUrl = false\r\n ): Observable<T> {\r\n console.log('[MockedApiService] POST:', url, data, options);\r\n return of(this.getMockResponse<T>(url, 'POST', data) as T).pipe(\r\n delay(this.MOCK_DELAY)\r\n );\r\n }\r\n\r\n put<T>(\r\n url: string,\r\n data: object,\r\n options = {},\r\n errorCallback?: (error: any) => Observable<never>\r\n ): Observable<T> {\r\n console.log('[MockedApiService] PUT:', url, data, options);\r\n return of(this.getMockResponse<T>(url, 'PUT', data) as T).pipe(\r\n delay(this.MOCK_DELAY)\r\n );\r\n }\r\n\r\n patch<T>(\r\n url: string,\r\n data: object,\r\n options = {},\r\n errorCallback?: (error: any) => Observable<never>\r\n ): Observable<T> {\r\n console.log('[MockedApiService] PATCH:', url, data, options);\r\n return of(this.getMockResponse<T>(url, 'PATCH', data) as T).pipe(\r\n delay(this.MOCK_DELAY)\r\n );\r\n }\r\n\r\n delete(\r\n url: string,\r\n errorCallback?: (error: any) => Observable<never>\r\n ): Observable<object> {\r\n console.log('[MockedApiService] DELETE:', url);\r\n return of({}).pipe(delay(this.MOCK_DELAY));\r\n }\r\n\r\n /**\r\n * Returns mock responses based on the URL pattern\r\n */\r\n private getMockResponse<T>(url: string, method: string, data?: object): T | object {\r\n // CodeRunner API - Run Tests\r\n if (url.includes('/api/attempts/public/')) {\r\n return this.getMockCoderunnerAttemptResponse(data);\r\n }\r\n\r\n if (url.includes('/api/attempts/preview/')) {\r\n return this.getMockCoderunnerAttemptResponse(data);\r\n }\r\n\r\n if (url.includes('/api/attempts/')) {\r\n return this.getMockCoderunnerAttemptResponse(data);\r\n }\r\n\r\n // Code Events\r\n if (url.includes('/api/code-events/')) {\r\n return {\r\n id: Math.floor(Math.random() * 10000),\r\n created_at: new Date().toISOString(),\r\n };\r\n }\r\n\r\n // Programming Languages\r\n if (url.includes('programming-languages')) {\r\n return []; // Mock all languages\r\n }\r\n\r\n // Default response\r\n console.warn(`[MockedApiService] No mock defined for ${method} ${url}`);\r\n return { success: true, data: null };\r\n }\r\n\r\n /**\r\n * Returns a mock coderunner attempt response with test results\r\n */\r\n private getMockCoderunnerAttemptResponse(data?: object): object {\r\n const requestData = data as any;\r\n const testcases = requestData?.testcases || [];\r\n\r\n // Generate mock results for each test case\r\n const results = testcases.map((testcase: any, index: number) => {\r\n // Make first test pass, others random for variety\r\n const passed = index === 0 ? true : Math.random() > 0.3;\r\n\r\n return {\r\n name: testcase.name || `Test Case ${index + 1}`,\r\n passed,\r\n expected: testcase.solution || testcase.expected_output || 'Expected output',\r\n actual: passed\r\n ? testcase.solution || testcase.expected_output || 'Expected output'\r\n : 'Different output',\r\n input: testcase.input || '',\r\n error: passed ? null : 'AssertionError: Output does not match expected',\r\n execution_time: Math.random() * 100,\r\n memory_used: Math.floor(Math.random() * 1000000),\r\n points: passed ? (testcase.points || 10) : 0,\r\n };\r\n });\r\n\r\n const totalPoints = results.reduce((sum: number, r: any) => sum + r.points, 0);\r\n const maxPoints = testcases.reduce(\r\n (sum: number, tc: any) => sum + (tc.points || 10),\r\n 0\r\n );\r\n\r\n return {\r\n id: Math.floor(Math.random() * 100000),\r\n uuid: crypto.randomUUID(),\r\n created_at: new Date().toISOString(),\r\n language: requestData?.language || 'python-3.10.0',\r\n code: requestData?.code || '',\r\n status: 'completed',\r\n results,\r\n score: maxPoints > 0 ? (totalPoints / maxPoints) * 100 : 0,\r\n total_points: totalPoints,\r\n max_points: maxPoints,\r\n execution_time: results.reduce((sum: number, r: any) => sum + r.execution_time, 0),\r\n compilation_error: null,\r\n runtime_error: null,\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class EnvironmentService {\r\n get isMobile(): boolean {\r\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\r\n navigator.userAgent\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport * as mixpanel from 'mixpanel-browser';\r\nimport '../../models/window';\r\n\r\n@Injectable()\r\nexport class MixpanelService {\r\n private mixpanel: typeof window.mixpanel | null = null;\r\n\r\n track(eventName: string, properties: mixpanel.Dict = {}): void {\r\n if (this.mixpanel) {\r\n return this.sendTrackEvent(eventName, properties);\r\n }\r\n\r\n if (window.mixpanel) {\r\n this.mixpanel = window.mixpanel;\r\n return this.sendTrackEvent(eventName, properties);\r\n }\r\n\r\n console.error('Mixpanel is not initialized or not available');\r\n }\r\n\r\n private sendTrackEvent(eventName: string, properties: mixpanel.Dict = {}): void {\r\n try {\r\n this.mixpanel!.track(eventName, properties);\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n}\r\n","import { Assessment } from '../lib/models/assessment';\r\nimport { Question } from '../lib/models/question';\r\nimport { TestResultRead } from '../lib/models/test-result';\r\n\r\nexport const mockAssessment: Assessment = {\r\n uuid: 'fa67cd96-2a4c-490a-9a44-b11f759f228a',\r\n locale: 'en',\r\n is_snapshots_enabled: true,\r\n has_video_question: false,\r\n allow_non_native_speakers: true,\r\n allow_other_conditions: true,\r\n general_settings: {\r\n id: 2157,\r\n owner_profile_id: 271652,\r\n company_name: 'x',\r\n company_color: '#46a997',\r\n company_logo: '',\r\n company_redirect_url: null,\r\n has_requested_demographic_details: true,\r\n has_requested_feedback: true,\r\n original_modified: '2024-01-16T20:30:04.054308Z',\r\n },\r\n sharing_results: true,\r\n};\r\n\r\nexport const mockQuestion: Question = {\r\n id: 747282,\r\n text: '<p>Charlie was a flight attendant _______ seven years.</p>',\r\n type: 'code',\r\n context: {\r\n intro_text: null,\r\n answers: [\r\n {\r\n id: 578594,\r\n text: '<p>during</p>',\r\n answer_uuid: 'cf98b452-2704-44fa-adce-d5d93ad7c643',\r\n },\r\n {\r\n id: 578596,\r\n text: '<p>through</p>',\r\n answer_uuid: '8e848dc4-a0cf-4c8d-b8d0-42b0fc85b19f',\r\n },\r\n {\r\n id: 578595,\r\n text: '<p>after</p>',\r\n answer_uuid: '1e97f320-7d22-4dec-8555-1aa8228df131',\r\n },\r\n {\r\n id: 578593,\r\n text: '<p>for</p>',\r\n answer_uuid: 'ccc648cc-435b-460a-89e8-432d13574e1e',\r\n },\r\n ],\r\n initial_code: null,\r\n code_language: null,\r\n typing_test_type: null,\r\n typing_test_config: null,\r\n typing_test_mode: {\r\n numbers: false,\r\n punctuation: false,\r\n funbox: 'none',\r\n sentences: false,\r\n },\r\n long_answer_list: false,\r\n max_items: 100,\r\n min_items: 0,\r\n duration: null,\r\n attempts: 0,\r\n },\r\n} as unknown as Question;\r\n\r\nexport const mockTestResultRead: TestResultRead = {\r\n id: 123,\r\n test: {\r\n id: 1,\r\n name: 'test-name',\r\n duration: 100,\r\n algorithm: 'testAlgorithm',\r\n },\r\n locale: 'en-EN',\r\n order: 1,\r\n is_preview_mode: true,\r\n};\r\n\r\nexport const mockSQLTestCases = [\r\n {\r\n category: 'Test Category 1',\r\n id: 1,\r\n initial_sql: 'Test Initial SQL',\r\n name: 'Test Name 1',\r\n post_sql: 'Test Post SQL 1',\r\n pre_sql: 'Test Pre SQL 1',\r\n result: 'Test Result 1',\r\n },\r\n {\r\n category: 'Test Category 2',\r\n id: 2,\r\n initial_sql: 'Test Initial SQL',\r\n name: 'Test Name 2',\r\n post_sql: 'Test Post SQL 2',\r\n pre_sql: 'Test Pre SQL 2',\r\n result: 'Test Result 2',\r\n },\r\n];\r\n\r\nexport const mockTestCases = [\r\n {\r\n name: 'Test Case 1',\r\n input: 'Test Input 1',\r\n solution: 'Test Solution 1',\r\n points: 10,\r\n },\r\n {\r\n name: 'Test Case 2',\r\n input: 'Test Input 2',\r\n solution: 'Test Solution 2',\r\n points: 20,\r\n },\r\n];\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\ndeclare const jest: any;\r\n\r\n// Mock modules\r\nexport const ButtonComponentModule = NgModule({\r\n imports: [CommonModule],\r\n declarations: [],\r\n exports: [],\r\n})(class {});\r\n\r\nexport const IconComponentModule = NgModule({\r\n imports: [CommonModule],\r\n declarations: [],\r\n exports: [],\r\n})(class {});\r\n\r\nexport const CardComponentModule = NgModule({\r\n imports: [CommonModule],\r\n declarations: [],\r\n exports: [],\r\n})(class {});\r\n\r\nexport const DialogComponentModule = NgModule({\r\n imports: [CommonModule],\r\n declarations: [],\r\n exports: [],\r\n})(class {});\r\n\r\n// Mock DialogService\r\nexport class DialogService {\r\n open = jest.fn();\r\n}\r\n\r\n// Mock SnackbarService\r\nexport class SnackbarService {\r\n error = jest.fn();\r\n}\r\n\r\n// Export all other potential exports as empty objects\r\nexport const QuillViewComponent = class {};\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-shared-lib.mjs","sources":["../../../../packages/tgo-shared-lib/src/lib/components/audio-animation/audio-animation.component.ts","../../../../packages/tgo-shared-lib/src/lib/components/audio-animation/audio-animation.component.html","../../../../packages/tgo-shared-lib/src/lib/components/vimeo-video/vimeo-video.component.ts","../../../../packages/tgo-shared-lib/src/lib/models/translations.ts","../../../../packages/tgo-shared-lib/src/lib/services/media/media.service.ts","../../../../packages/tgo-shared-lib/src/lib/services/theme/theme.service.ts","../../../../packages/tgo-shared-lib/src/lib/services/localization/transloco-lazy-module-utils.ts","../../../../packages/tgo-shared-lib/src/lib/services/localization/languages.model.ts","../../../../packages/tgo-shared-lib/src/lib/services/localization/transloco-testing.module.ts","../../../../packages/tgo-shared-lib/src/lib/services/api/api.service.ts","../../../../packages/tgo-shared-lib/src/lib/services/api/mocked-api.service.ts","../../../../packages/tgo-shared-lib/src/lib/services/environment/environment.service.ts","../../../../packages/tgo-shared-lib/src/lib/services/mixpanel/mixpanel.service.ts","../../../../packages/tgo-shared-lib/src/test-mocks/assessment-test.mock.ts","../../../../packages/tgo-shared-lib/src/test-mocks/tgo-ui.mock.ts","../../../../packages/tgo-shared-lib/src/testgorilla-tgo-shared-lib.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n ViewEncapsulation,\n WritableSignal,\n computed,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'tgo-audio-animation',\n templateUrl: './audio-animation.component.html',\n styleUrls: ['./audio-animation.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule]\n})\nexport class AudioAnimationComponent implements OnChanges, OnDestroy {\n @Input() volume = 0;\n @Input() fakeData = false;\n\n private isAnimationRunning = false;\n private animationFrameId: number | null = null;\n private lastAnimationUpdate = performance.now();\n\n volumeSignal: WritableSignal<number> = signal(this.volume);\n barHeightsSignal = computed(() => this.getBarHeights(this.volumeSignal()));\n\n constructor() {\n this.startAnimation();\n }\n\n ngOnChanges(): void {\n this.volumeSignal.set(this.normalizeRealVolume(this.volume));\n\n if (this.fakeData) {\n this.startAnimation();\n } else {\n this.stopAnimation();\n }\n }\n\n private normalizeRealVolume(originalVolume: number): number {\n return Math.min(1, originalVolume * 10);\n }\n\n private startAnimation(): void {\n if (this.isAnimationRunning) {\n return;\n }\n\n this.isAnimationRunning = true;\n\n const animate = (timestamp: number) => {\n if (!this.isAnimationRunning) {\n return;\n }\n\n if (timestamp - this.lastAnimationUpdate > 200) {\n this.lastAnimationUpdate = timestamp;\n\n const newVolume = Math.random() * 0.8 + 0.2;\n\n this.volumeSignal.set(newVolume);\n }\n\n this.animationFrameId = requestAnimationFrame(animate);\n };\n\n this.animationFrameId = requestAnimationFrame(animate);\n }\n\n private stopAnimation(): void {\n this.isAnimationRunning = false;\n\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n }\n\n private getBarHeights(volume: number): {\n 'first-bar': string;\n 'second-bar': string;\n 'third-bar': string;\n } {\n if (!this.fakeData && volume < 0.15) {\n return {\n 'first-bar': `42%`,\n 'second-bar': `42%`,\n 'third-bar': `42%`,\n };\n }\n\n let range: { min: number; max: number };\n\n this.fakeData\n ? (range = this.getFakeVolumeRange(volume))\n : (range = this.getRealVolumeRange(volume));\n\n const randomHeight = this.getRandomHeight(range.min, range.max);\n\n return {\n 'first-bar': `${randomHeight}%`,\n 'second-bar': `${randomHeight + 30}%`,\n 'third-bar': `${randomHeight}%`,\n };\n }\n\n private getFakeVolumeRange(volume: number): { min: number; max: number } {\n if (volume < 0.33) {\n return { min: 60, max: 90 };\n } else if (volume < 0.66) {\n return { min: 90, max: 120 };\n } else {\n return { min: 120, max: 140 };\n }\n }\n\n private getRealVolumeRange(volume: number): { min: number; max: number } {\n if (volume < 0.45) {\n return { min: 90, max: 90 };\n } else if (volume < 0.6) {\n return { min: 110, max: 110 };\n } else if (volume < 0.75) {\n return { min: 125, max: 125 };\n } else {\n return { min: 140, max: 140 };\n }\n }\n\n private getRandomHeight(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n ngOnDestroy(): void {\n this.stopAnimation();\n }\n}\n\n","<div class=\"audio-animation-wrapper\">\n <section class=\"audio-animation-container\">\n <div\n class=\"sound-bar first-bar\"\n [ngStyle]=\"{ height: barHeightsSignal()['first-bar'] }\"\n ></div>\n <div\n class=\"sound-bar second-bar\"\n [ngStyle]=\"{ height: barHeightsSignal()['second-bar'] }\"\n ></div>\n <div\n class=\"sound-bar third-bar\"\n [ngStyle]=\"{ height: barHeightsSignal()['third-bar'] }\"\n ></div>\n </section>\n</div>\n\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport Player from '@vimeo/player';\nimport type { VimeoEmbedParameters, VimeoUrl } from '@vimeo/player/types/formats';\n\n// Alias for compatibility\ntype Options = VimeoEmbedParameters;\n\n@Component({\n selector: 'tgo-vimeo-video',\n template: '',\n styleUrls: ['./vimeo-video.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class VimeoVideoComponent implements OnInit, OnDestroy, OnChanges {\n @HostBinding() class = 'tgo-vimeo-video';\n @Input() videoUrl = '';\n @Input() isPlaying = false;\n @Input() options: Options = {\n controls: false,\n autoplay: false,\n loop: false,\n speed: true,\n title: false,\n byline: false,\n quality: 'auto',\n autopause: false,\n };\n @Output() videoEnded = new EventEmitter<void>();\n @Output() videoStarted = new EventEmitter<void>();\n\n vimeoPlayer?: Player;\n\n private elRef = inject(ElementRef);\n\n async ngOnInit(): Promise<void> {\n await this.configureVimeoPlayer();\n }\n\n async ngOnDestroy(): Promise<void> {\n await this.removeVimeoPlayer();\n }\n\n async ngOnChanges(simpleChanges: SimpleChanges): Promise<void> {\n if (this.vimeoPlayer) {\n if (simpleChanges['videoUrl'] && !simpleChanges['videoUrl'].isFirstChange() && simpleChanges['videoUrl'].currentValue != simpleChanges['videoUrl'].previousValue && this.videoUrl) {\n\n await this.vimeoPlayer.loadVideo({\n url: this.videoUrl as any,\n start_time: 0,\n }).then(()=>{\n void this.vimeoPlayer?.setCurrentTime(0);\n setTimeout(() => {\n void this.vimeoPlayer?.play();\n }, 200);\n });\n\n }\n if (simpleChanges['isPlaying']) {\n if (this.isPlaying) {\n await this.vimeoPlayer.play();\n } else {\n await this.vimeoPlayer.pause();\n }\n }\n }\n }\n\n private async removeVimeoPlayer(): Promise<void> {\n if (this.vimeoPlayer) {\n await this.vimeoPlayer.destroy();\n }\n }\n\n private async configureVimeoPlayer(): Promise<void> {\n const options: Options = {\n ...this.options,\n url: this.videoUrl as VimeoUrl,\n };\n try {\n await this.removeVimeoPlayer();\n this.vimeoPlayer = new Player(this.elRef.nativeElement as HTMLElement, options);\n this.vimeoPlayer.on('ended', () => {\n this.videoEnded.emit();\n this.isPlaying = false;\n this.vimeoPlayer?.pause();\n });\n this.vimeoPlayer.on('playing', () => {\n this.videoStarted.emit();\n });\n this.vimeoPlayer.on('pause', (event) => {\n if (this.isPlaying && event.percent < 1) {\n this.vimeoPlayer?.play();\n }\n });\n await this.playVideo();\n } catch (error) {\n await this.removeVimeoPlayer();\n throw error;\n }\n }\n\n private async playVideo() {\n if (this.vimeoPlayer && this.isPlaying) {\n await this.vimeoPlayer.play();\n }\n }\n}\n\n","export const ROOT_TRANSLATIONS_SCOPE = 'TEST';\n\n","import { Injectable, signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { SelectedMediaDevices } from '../../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MediaService {\n private mediaRecorder: MediaRecorder | null = null;\n private selectedMediaDevices: SelectedMediaDevices | undefined;\n readonly isRecording = signal(false);\n\n stopRecording(): void {\n this.mediaRecorder?.stop();\n }\n\n getMediaStream(data: {\n audio: boolean;\n video: boolean;\n }): Promise<MediaStream> {\n return navigator.mediaDevices.getUserMedia(\n this.getMediaStreamConstraints(data)\n );\n }\n\n recordAudio(): Observable<\n { type: 'complete'; file: Blob } | { type: 'volume'; value: number }\n > {\n let checkPermissionPromise: Promise<boolean> | null;\n return new Observable((observer) => {\n void this.getMediaStream({ video: false, audio: true })\n .then((stream) => {\n this.mediaRecorder = new MediaRecorder(stream);\n this.mediaRecorder.start();\n this.isRecording.set(true);\n const audioChunks: Blob[] = [];\n this.mediaRecorder.ondataavailable = (event) => {\n audioChunks.push(event.data);\n };\n\n this.mediaRecorder.addEventListener('stop', () => {\n const audioBlob = new Blob(audioChunks, {\n type: 'audio/mp3',\n });\n observer.next({ type: 'complete', file: audioBlob });\n this.isRecording.set(false);\n observer.complete();\n });\n\n this.mediaRecorder.onerror = (error) => {\n observer.error(error);\n observer.complete();\n };\n\n const audioContext = new AudioContext();\n const mediaStreamAudioSourceNode =\n audioContext.createMediaStreamSource(stream);\n const analyserNode = audioContext.createAnalyser();\n mediaStreamAudioSourceNode.connect(analyserNode);\n\n const pcmData = new Float32Array(analyserNode.fftSize);\n const onFrame = () => {\n analyserNode.getFloatTimeDomainData(pcmData);\n let sumSquares = 0.0;\n for (const amplitude of pcmData) {\n sumSquares += amplitude * amplitude;\n }\n if (sumSquares > 0) {\n observer.next({\n type: 'volume',\n value: Math.sqrt(sumSquares / pcmData.length),\n });\n } else {\n if (!checkPermissionPromise) {\n checkPermissionPromise = this.checkPermission({\n video: false,\n audio: true,\n });\n\n checkPermissionPromise\n .then((hasPermission) => {\n if (!hasPermission) {\n observer.error(new Error('Permission denied'));\n observer.complete();\n }\n })\n .finally(() => {\n checkPermissionPromise = null;\n });\n }\n }\n\n if (!observer.closed) {\n window.requestAnimationFrame(onFrame);\n }\n };\n window.requestAnimationFrame(onFrame);\n })\n .catch((error) => {\n observer.error(error);\n observer.complete();\n });\n });\n }\n\n async playAudio(url: string): Promise<void> {\n const audio = new Audio(url);\n await audio.play();\n return new Promise((resolve, reject) => {\n audio.onended = () => {\n resolve();\n };\n audio.onerror = (event) => reject(event);\n });\n }\n\n setSelectedMediaDevices(data?: SelectedMediaDevices): void {\n this.selectedMediaDevices = data;\n }\n\n async checkPermission(data: {\n audio: boolean;\n video: boolean;\n }): Promise<boolean> {\n try {\n await this.getMediaStream(data);\n return true;\n } catch (err) {\n console.error(err);\n return false;\n }\n }\n\n private getMediaStreamConstraints(data: {\n audio: boolean;\n video: boolean;\n }): MediaStreamConstraints {\n const audioDeviceID = this.selectedMediaDevices?.audioDeviceId;\n const videoDeviceID = this.selectedMediaDevices?.videoDeviceId;\n return {\n audio:\n data.audio && audioDeviceID\n ? { deviceId: { exact: audioDeviceID } }\n : data.audio,\n video:\n data.video && videoDeviceID\n ? { deviceId: { exact: videoDeviceID } }\n : data.video,\n };\n }\n}\n\n","import { Injectable } from '@angular/core';\n\nenum THEME_VARS {\n COMPANY_COLOR = '--color-primary-50',\n}\n\n@Injectable()\nexport class ThemeService {\n private readonly BRAND_PINK_COLOR = '#D410AA';\n\n getCompanyColor(): string {\n return (\n this.getCSSVariableValue(THEME_VARS.COMPANY_COLOR) ||\n this.BRAND_PINK_COLOR\n );\n }\n\n private getCSSVariableValue(variableName: string): string {\n return getComputedStyle(document.documentElement)\n .getPropertyValue(variableName)\n .trim();\n }\n}\n\n","import { ValueProvider } from '@angular/core';\nimport { TRANSLOCO_SCOPE } from '@ngneat/transloco';\n\ninterface TranslocoInlineLoader {\n [key: string]: () => Promise<JSON>;\n}\n\n/**\n * The util is based on this issue https://github.com/jsverse/transloco/issues/608#issuecomment-1416113493\n *\n * Transloco can't have several forRoot modules. so the only way for now to decouple translations as a separate file and context\n * from the shell (TAS in this case) is to use TRANSLOCO_SCOPE\n */\nexport class TranslocoLazyModuleUtils {\n private static createInlineLoader(\n languages: Array<string>,\n loaderFn: (l: string) => Promise<JSON>\n ): TranslocoInlineLoader {\n const translocoInlineLoader: TranslocoInlineLoader = {};\n\n languages.forEach((language) => {\n translocoInlineLoader[language] = () => loaderFn(language);\n });\n\n return translocoInlineLoader;\n }\n\n public static getScopeProvider(\n scope: string,\n languages: Array<string>,\n alias: string,\n loaderFn: (l: string) => Promise<JSON>\n ): ValueProvider {\n return {\n provide: TRANSLOCO_SCOPE,\n useValue: {\n scope,\n alias,\n loader: this.createInlineLoader(languages, loaderFn),\n },\n };\n }\n}\n\n","//Languages available in the app as enum\nexport enum Language {\n en = 'en',\n es = 'es',\n nl = 'nl',\n fr = 'fr',\n de = 'de',\n 'it-it' = 'it-it',\n 'ja-jp' = 'ja-jp',\n 'pt-br' = 'pt-br',\n 'da-dk' = 'da-dk',\n 'nb-no' = 'nb-no',\n 'pl-pl' = 'pl-pl',\n 'sv-se' = 'sv-se',\n}\n\n//This function retrieves all languages from the enum. It is used to initialize transloco\nexport const getAvailableLangs = () => Object.values(Language);\n\n","import {\n TranslocoTestingModule,\n TranslocoTestingOptions,\n} from '@ngneat/transloco';\n\nexport const getTranslocoModule = (options: TranslocoTestingOptions = {}) =>\n TranslocoTestingModule.forRoot({\n translocoConfig: {\n reRenderOnLangChange: false,\n availableLangs: ['en'],\n defaultLang: 'en',\n },\n preloadLangs: true,\n ...options,\n });\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { translate } from '@ngneat/transloco';\nimport { SnackbarService } from '@testgorilla/tgo-ui/components/snackbar';\nimport { EMPTY, Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\n@Injectable()\nexport class ApiService {\n private invitationUUID = '';\n private contentLanguage = '';\n private ROOT_TRANSLATIONS_SCOPE = '';\n private baseUrl = '';\n\n constructor(\n private httpClient: HttpClient,\n private snackbarService: SnackbarService\n ) {}\n\n setParams(\n invitationUUID: string,\n contentLanguage: string,\n translationScope: string,\n baseUrl: string\n ): void {\n this.invitationUUID = invitationUUID;\n this.contentLanguage = contentLanguage;\n this.ROOT_TRANSLATIONS_SCOPE = translationScope;\n this.baseUrl = baseUrl;\n }\n\n getInvitationUUID(): string {\n return this.invitationUUID;\n }\n\n get<T>(\n url: string,\n options = {},\n errorCallback = this.handleError.bind(this)\n ): Observable<T> {\n return this.httpClient\n .get<T>(\n `${this.baseUrl}${url}`,\n this.buildHeaders(options)\n )\n .pipe(catchError((error: HttpErrorResponse) => errorCallback(error))) as Observable<T>;\n }\n\n post<T>(\n url: string,\n data: object,\n options = {},\n errorCallback = this.handleError.bind(this),\n isStandaloneUrl = false\n ): Observable<T> {\n return this.httpClient\n .post<T>(\n isStandaloneUrl ? url : `${this.baseUrl}${url}`,\n data,\n this.buildHeaders(options)\n )\n .pipe(catchError((error: HttpErrorResponse) => errorCallback(error))) as Observable<T>;\n }\n\n put<T>(\n url: string,\n data: object,\n options = {},\n errorCallback = this.handleError.bind(this)\n ): Observable<T> {\n return this.httpClient\n .put<T>(\n `${this.baseUrl}${url}`,\n data,\n this.buildHeaders(options)\n )\n .pipe(catchError((error: HttpErrorResponse) => errorCallback(error))) as Observable<T>;\n }\n\n patch<T>(\n url: string,\n data: object,\n options = {},\n errorCallback = this.handleError.bind(this)\n ): Observable<T> {\n return this.httpClient\n .patch<T>(\n `${this.baseUrl}${url}`,\n data,\n this.buildHeaders(options)\n )\n .pipe(catchError((error: HttpErrorResponse) => errorCallback(error))) as Observable<T>;\n }\n\n delete(\n url: string,\n errorCallback = this.handleError.bind(this)\n ): Observable<object> {\n return this.httpClient\n .delete(\n `${this.baseUrl}${url}`,\n this.buildHeaders({})\n )\n .pipe(catchError((error: HttpErrorResponse) => errorCallback(error))) as Observable<object>;\n }\n\n private handleError(errorObj: HttpErrorResponse): Observable<never> {\n const { error } = errorObj;\n if (error?.errors?.length > 0) {\n return throwError(() => error.errors);\n } else {\n console.error(errorObj.message);\n this.snackbarService.error(this.processGenericServerError());\n\n return EMPTY;\n }\n }\n\n private processGenericServerError(): string {\n return translate(`${this.ROOT_TRANSLATIONS_SCOPE}.ERRORS.SYSTEM_ERROR`);\n }\n\n private buildHeaders(options: object): object {\n if (typeof window.crypto.randomUUID === 'function') {\n options = {\n ...options,\n 'X-REQUEST-ID': window.crypto.randomUUID(),\n 'X-INVITATION-UUID': this.invitationUUID,\n };\n }\n\n const passedAuthorizationHeader = (options as { [key: string]: any })[\n 'Authorization'\n ];\n const headers: { headers: { [header: string]: string } } = {\n headers: {\n ...options,\n Authorization: passedAuthorizationHeader\n ? passedAuthorizationHeader\n : `TokenCandidature ${this.invitationUUID?.replace(/-/g, '')}`,\n },\n };\n\n if (this.contentLanguage) {\n headers.headers['Accept-Language'] = this.contentLanguage;\n }\n\n return headers;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of, delay } from 'rxjs';\n\n/**\n * MockedApiService provides fake API responses for demo/development purposes.\n * This service mimics the real ApiService interface but returns mock data instead\n * of making actual HTTP calls.\n *\n * Usage: Provide this service in place of ApiService in your demo application:\n * ```\n * { provide: ApiService, useClass: MockedApiService }\n * ```\n */\n@Injectable()\nexport class MockedApiService {\n private invitationUUID = 'demo-uuid-12345';\n private contentLanguage = 'en';\n private ROOT_TRANSLATIONS_SCOPE = '';\n\n // Simulate network delay (in ms) - set to 0 for instant responses\n private readonly MOCK_DELAY = 500;\n\n setParams(\n invitationUUID: string,\n contentLanguage: string,\n translationScope: string,\n baseUrl: string\n ): void {\n this.invitationUUID = invitationUUID;\n this.contentLanguage = contentLanguage;\n this.ROOT_TRANSLATIONS_SCOPE = translationScope;\n console.log('[MockedApiService] Params set:', {\n invitationUUID,\n contentLanguage,\n translationScope,\n baseUrl,\n });\n }\n\n getInvitationUUID(): string {\n return this.invitationUUID;\n }\n\n get<T>(\n url: string,\n options = {},\n errorCallback?: (error: any) => Observable<never>\n ): Observable<T> {\n console.log('[MockedApiService] GET:', url, options);\n return of(this.getMockResponse<T>(url, 'GET') as T).pipe(\n delay(this.MOCK_DELAY)\n );\n }\n\n post<T>(\n url: string,\n data: object,\n options = {},\n errorCallback?: (error: any) => Observable<never>,\n isStandaloneUrl = false\n ): Observable<T> {\n console.log('[MockedApiService] POST:', url, data, options);\n return of(this.getMockResponse<T>(url, 'POST', data) as T).pipe(\n delay(this.MOCK_DELAY)\n );\n }\n\n put<T>(\n url: string,\n data: object,\n options = {},\n errorCallback?: (error: any) => Observable<never>\n ): Observable<T> {\n console.log('[MockedApiService] PUT:', url, data, options);\n return of(this.getMockResponse<T>(url, 'PUT', data) as T).pipe(\n delay(this.MOCK_DELAY)\n );\n }\n\n patch<T>(\n url: string,\n data: object,\n options = {},\n errorCallback?: (error: any) => Observable<never>\n ): Observable<T> {\n console.log('[MockedApiService] PATCH:', url, data, options);\n return of(this.getMockResponse<T>(url, 'PATCH', data) as T).pipe(\n delay(this.MOCK_DELAY)\n );\n }\n\n delete(\n url: string,\n errorCallback?: (error: any) => Observable<never>\n ): Observable<object> {\n console.log('[MockedApiService] DELETE:', url);\n return of({}).pipe(delay(this.MOCK_DELAY));\n }\n\n /**\n * Returns mock responses based on the URL pattern\n */\n private getMockResponse<T>(url: string, method: string, data?: object): T | object {\n // CodeRunner API - Run Tests\n if (url.includes('/api/attempts/public/')) {\n return this.getMockCoderunnerAttemptResponse(data);\n }\n\n if (url.includes('/api/attempts/preview/')) {\n return this.getMockCoderunnerAttemptResponse(data);\n }\n\n if (url.includes('/api/attempts/')) {\n return this.getMockCoderunnerAttemptResponse(data);\n }\n\n // Code Events\n if (url.includes('/api/code-events/')) {\n return {\n id: Math.floor(Math.random() * 10000),\n created_at: new Date().toISOString(),\n };\n }\n\n // Programming Languages\n if (url.includes('programming-languages')) {\n return []; // Mock all languages\n }\n\n // Default response\n console.warn(`[MockedApiService] No mock defined for ${method} ${url}`);\n return { success: true, data: null };\n }\n\n /**\n * Returns a mock coderunner attempt response with test results\n */\n private getMockCoderunnerAttemptResponse(data?: object): object {\n const requestData = data as any;\n const testcases = requestData?.testcases || [];\n\n // Generate mock results for each test case\n const results = testcases.map((testcase: any, index: number) => {\n // Make first test pass, others random for variety\n const passed = index === 0 ? true : Math.random() > 0.3;\n\n return {\n name: testcase.name || `Test Case ${index + 1}`,\n passed,\n expected: testcase.solution || testcase.expected_output || 'Expected output',\n actual: passed\n ? testcase.solution || testcase.expected_output || 'Expected output'\n : 'Different output',\n input: testcase.input || '',\n error: passed ? null : 'AssertionError: Output does not match expected',\n execution_time: Math.random() * 100,\n memory_used: Math.floor(Math.random() * 1000000),\n points: passed ? (testcase.points || 10) : 0,\n };\n });\n\n const totalPoints = results.reduce((sum: number, r: any) => sum + r.points, 0);\n const maxPoints = testcases.reduce(\n (sum: number, tc: any) => sum + (tc.points || 10),\n 0\n );\n\n return {\n id: Math.floor(Math.random() * 100000),\n uuid: crypto.randomUUID(),\n created_at: new Date().toISOString(),\n language: requestData?.language || 'python-3.10.0',\n code: requestData?.code || '',\n status: 'completed',\n results,\n score: maxPoints > 0 ? (totalPoints / maxPoints) * 100 : 0,\n total_points: totalPoints,\n max_points: maxPoints,\n execution_time: results.reduce((sum: number, r: any) => sum + r.execution_time, 0),\n compilation_error: null,\n runtime_error: null,\n };\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class EnvironmentService {\n get isMobile(): boolean {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as mixpanel from 'mixpanel-browser';\nimport '../../models/window';\n\n@Injectable()\nexport class MixpanelService {\n private mixpanel: typeof window.mixpanel | null = null;\n\n track(eventName: string, properties: mixpanel.Dict = {}): void {\n if (this.mixpanel) {\n return this.sendTrackEvent(eventName, properties);\n }\n\n if (window.mixpanel) {\n this.mixpanel = window.mixpanel;\n return this.sendTrackEvent(eventName, properties);\n }\n\n console.error('Mixpanel is not initialized or not available');\n }\n\n private sendTrackEvent(eventName: string, properties: mixpanel.Dict = {}): void {\n try {\n this.mixpanel!.track(eventName, properties);\n } catch (error) {\n console.error(error);\n }\n }\n}\n","import { Assessment } from '../lib/models/assessment';\nimport { Question } from '../lib/models/question';\nimport { TestResultRead } from '../lib/models/test-result';\n\nexport const mockAssessment: Assessment = {\n uuid: 'fa67cd96-2a4c-490a-9a44-b11f759f228a',\n locale: 'en',\n is_snapshots_enabled: true,\n has_video_question: false,\n allow_non_native_speakers: true,\n allow_other_conditions: true,\n general_settings: {\n id: 2157,\n owner_profile_id: 271652,\n company_name: 'x',\n company_color: '#46a997',\n company_logo: '',\n company_redirect_url: null,\n has_requested_demographic_details: true,\n has_requested_feedback: true,\n original_modified: '2024-01-16T20:30:04.054308Z',\n },\n sharing_results: true,\n};\n\nexport const mockQuestion: Question = {\n id: 747282,\n text: '<p>Charlie was a flight attendant _______ seven years.</p>',\n type: 'code',\n context: {\n intro_text: null,\n answers: [\n {\n id: 578594,\n text: '<p>during</p>',\n answer_uuid: 'cf98b452-2704-44fa-adce-d5d93ad7c643',\n },\n {\n id: 578596,\n text: '<p>through</p>',\n answer_uuid: '8e848dc4-a0cf-4c8d-b8d0-42b0fc85b19f',\n },\n {\n id: 578595,\n text: '<p>after</p>',\n answer_uuid: '1e97f320-7d22-4dec-8555-1aa8228df131',\n },\n {\n id: 578593,\n text: '<p>for</p>',\n answer_uuid: 'ccc648cc-435b-460a-89e8-432d13574e1e',\n },\n ],\n initial_code: null,\n code_language: null,\n typing_test_type: null,\n typing_test_config: null,\n typing_test_mode: {\n numbers: false,\n punctuation: false,\n funbox: 'none',\n sentences: false,\n },\n long_answer_list: false,\n max_items: 100,\n min_items: 0,\n duration: null,\n attempts: 0,\n },\n} as unknown as Question;\n\nexport const mockTestResultRead: TestResultRead = {\n id: 123,\n test: {\n id: 1,\n name: 'test-name',\n duration: 100,\n algorithm: 'testAlgorithm',\n },\n locale: 'en-EN',\n order: 1,\n is_preview_mode: true,\n};\n\nexport const mockSQLTestCases = [\n {\n category: 'Test Category 1',\n id: 1,\n initial_sql: 'Test Initial SQL',\n name: 'Test Name 1',\n post_sql: 'Test Post SQL 1',\n pre_sql: 'Test Pre SQL 1',\n result: 'Test Result 1',\n },\n {\n category: 'Test Category 2',\n id: 2,\n initial_sql: 'Test Initial SQL',\n name: 'Test Name 2',\n post_sql: 'Test Post SQL 2',\n pre_sql: 'Test Pre SQL 2',\n result: 'Test Result 2',\n },\n];\n\nexport const mockTestCases = [\n {\n name: 'Test Case 1',\n input: 'Test Input 1',\n solution: 'Test Solution 1',\n points: 10,\n },\n {\n name: 'Test Case 2',\n input: 'Test Input 2',\n solution: 'Test Solution 2',\n points: 20,\n },\n];\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\ndeclare const jest: any;\n\n// Mock modules\nexport const ButtonComponentModule = NgModule({\n imports: [CommonModule],\n declarations: [],\n exports: [],\n})(class {});\n\nexport const IconComponentModule = NgModule({\n imports: [CommonModule],\n declarations: [],\n exports: [],\n})(class {});\n\nexport const CardComponentModule = NgModule({\n imports: [CommonModule],\n declarations: [],\n exports: [],\n})(class {});\n\nexport const DialogComponentModule = NgModule({\n imports: [CommonModule],\n declarations: [],\n exports: [],\n})(class {});\n\n// Mock DialogService\nexport class DialogService {\n open = jest.fn();\n}\n\n// Mock SnackbarService\nexport class SnackbarService {\n error = jest.fn();\n}\n\n// Export all other potential exports as empty objects\nexport const QuillViewComponent = class {};\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { Question } from './question';
|
|
|
4
4
|
import { TestResultRead } from './test-result';
|
|
5
5
|
import { Environment } from './environment';
|
|
6
6
|
import { Assessment } from './assessment';
|
|
7
|
-
import { ApplicationTheme } from '@testgorilla/tgo-ui';
|
|
7
|
+
import { ApplicationTheme } from '@testgorilla/tgo-ui/components/core';
|
|
8
8
|
export interface INavigationButtonState {
|
|
9
9
|
disabled: boolean;
|
|
10
10
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { SnackbarService } from '@testgorilla/tgo-ui';
|
|
2
|
+
import { SnackbarService } from '@testgorilla/tgo-ui/components/snackbar';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class ApiService {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testgorilla/tgo-shared-lib",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": ">= 19.0.0 < 20.0.0",
|
|
6
6
|
"@angular/core": ">= 19.0.0 < 20.0.0",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"mixpanel-browser": ">= 2.0.0 < 3.0.0",
|
|
9
9
|
"@vimeo/player": ">= 2.0.0 < 3.0.0",
|
|
10
10
|
"@ngneat/transloco": ">= 4.0.0 < 5.0.0",
|
|
11
|
-
"@testgorilla/tgo-ui": ">=
|
|
11
|
+
"@testgorilla/tgo-ui": ">= 5.0.0 < 6.0.0"
|
|
12
12
|
},
|
|
13
13
|
"sideEffects": false,
|
|
14
14
|
"private": false,
|