@testgorilla/tgo-shared-lib 3.0.1 → 4.0.2
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.
|
@@ -67,9 +67,12 @@ class AudioAnimationComponent {
|
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
69
|
let range;
|
|
70
|
-
this.fakeData
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
if (this.fakeData) {
|
|
71
|
+
range = this.getFakeVolumeRange(volume);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
range = this.getRealVolumeRange(volume);
|
|
75
|
+
}
|
|
73
76
|
const randomHeight = this.getRandomHeight(range.min, range.max);
|
|
74
77
|
return {
|
|
75
78
|
'first-bar': `${randomHeight}%`,
|
|
@@ -108,10 +111,10 @@ class AudioAnimationComponent {
|
|
|
108
111
|
ngOnDestroy() {
|
|
109
112
|
this.stopAnimation();
|
|
110
113
|
}
|
|
111
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
112
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
114
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: AudioAnimationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
115
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", 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
116
|
}
|
|
114
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: AudioAnimationComponent, decorators: [{
|
|
115
118
|
type: Component,
|
|
116
119
|
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
120
|
}], ctorParameters: () => [], propDecorators: { volume: [{
|
|
@@ -136,6 +139,7 @@ class VimeoVideoComponent {
|
|
|
136
139
|
};
|
|
137
140
|
videoEnded = new EventEmitter();
|
|
138
141
|
videoStarted = new EventEmitter();
|
|
142
|
+
videoError = new EventEmitter();
|
|
139
143
|
vimeoPlayer;
|
|
140
144
|
elRef = inject(ElementRef);
|
|
141
145
|
async ngOnInit() {
|
|
@@ -147,22 +151,34 @@ class VimeoVideoComponent {
|
|
|
147
151
|
async ngOnChanges(simpleChanges) {
|
|
148
152
|
if (this.vimeoPlayer) {
|
|
149
153
|
if (simpleChanges['videoUrl'] && !simpleChanges['videoUrl'].isFirstChange() && simpleChanges['videoUrl'].currentValue != simpleChanges['videoUrl'].previousValue && this.videoUrl) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
154
|
+
try {
|
|
155
|
+
await this.vimeoPlayer.loadVideo({
|
|
156
|
+
url: this.videoUrl,
|
|
157
|
+
start_time: 0,
|
|
158
|
+
}).then(() => {
|
|
159
|
+
void this.vimeoPlayer?.setCurrentTime(0);
|
|
160
|
+
setTimeout(() => {
|
|
161
|
+
void this.vimeoPlayer?.play();
|
|
162
|
+
}, 200);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
console.error('Error loading Vimeo video:', error);
|
|
167
|
+
this.videoError.emit(error);
|
|
168
|
+
}
|
|
159
169
|
}
|
|
160
170
|
if (simpleChanges['isPlaying']) {
|
|
161
|
-
|
|
162
|
-
|
|
171
|
+
try {
|
|
172
|
+
if (this.isPlaying) {
|
|
173
|
+
await this.vimeoPlayer.play();
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
await this.vimeoPlayer.pause();
|
|
177
|
+
}
|
|
163
178
|
}
|
|
164
|
-
|
|
165
|
-
|
|
179
|
+
catch (error) {
|
|
180
|
+
console.error('Error playing/pausing Vimeo video:', error);
|
|
181
|
+
this.videoError.emit(error);
|
|
166
182
|
}
|
|
167
183
|
}
|
|
168
184
|
}
|
|
@@ -196,8 +212,9 @@ class VimeoVideoComponent {
|
|
|
196
212
|
await this.playVideo();
|
|
197
213
|
}
|
|
198
214
|
catch (error) {
|
|
215
|
+
console.error('Error configuring Vimeo player:', error);
|
|
199
216
|
await this.removeVimeoPlayer();
|
|
200
|
-
|
|
217
|
+
this.videoError.emit(error);
|
|
201
218
|
}
|
|
202
219
|
}
|
|
203
220
|
async playVideo() {
|
|
@@ -205,10 +222,10 @@ class VimeoVideoComponent {
|
|
|
205
222
|
await this.vimeoPlayer.play();
|
|
206
223
|
}
|
|
207
224
|
}
|
|
208
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
209
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
225
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: VimeoVideoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
226
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: VimeoVideoComponent, isStandalone: true, selector: "tgo-vimeo-video", inputs: { videoUrl: "videoUrl", isPlaying: "isPlaying", options: "options" }, outputs: { videoEnded: "videoEnded", videoStarted: "videoStarted", videoError: "videoError" }, 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
227
|
}
|
|
211
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
228
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: VimeoVideoComponent, decorators: [{
|
|
212
229
|
type: Component,
|
|
213
230
|
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
231
|
}], propDecorators: { class: [{
|
|
@@ -223,6 +240,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
223
240
|
type: Output
|
|
224
241
|
}], videoStarted: [{
|
|
225
242
|
type: Output
|
|
243
|
+
}], videoError: [{
|
|
244
|
+
type: Output
|
|
226
245
|
}] } });
|
|
227
246
|
|
|
228
247
|
const ROOT_TRANSLATIONS_SCOPE = 'TEST';
|
|
@@ -343,10 +362,10 @@ class MediaService {
|
|
|
343
362
|
: data.video,
|
|
344
363
|
};
|
|
345
364
|
}
|
|
346
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
347
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
365
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: MediaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
366
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: MediaService, providedIn: 'root' });
|
|
348
367
|
}
|
|
349
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
368
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: MediaService, decorators: [{
|
|
350
369
|
type: Injectable,
|
|
351
370
|
args: [{
|
|
352
371
|
providedIn: 'root',
|
|
@@ -368,10 +387,10 @@ class ThemeService {
|
|
|
368
387
|
.getPropertyValue(variableName)
|
|
369
388
|
.trim();
|
|
370
389
|
}
|
|
371
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
372
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
390
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
391
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ThemeService });
|
|
373
392
|
}
|
|
374
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
393
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ThemeService, decorators: [{
|
|
375
394
|
type: Injectable
|
|
376
395
|
}] });
|
|
377
396
|
|
|
@@ -511,10 +530,10 @@ class ApiService {
|
|
|
511
530
|
}
|
|
512
531
|
return headers;
|
|
513
532
|
}
|
|
514
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
515
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
533
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ApiService, deps: [{ token: i1$1.HttpClient }, { token: i2.SnackbarService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
534
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ApiService });
|
|
516
535
|
}
|
|
517
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
536
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ApiService, decorators: [{
|
|
518
537
|
type: Injectable
|
|
519
538
|
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i2.SnackbarService }] });
|
|
520
539
|
|
|
@@ -639,10 +658,10 @@ class MockedApiService {
|
|
|
639
658
|
runtime_error: null,
|
|
640
659
|
};
|
|
641
660
|
}
|
|
642
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
643
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
661
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: MockedApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
662
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: MockedApiService });
|
|
644
663
|
}
|
|
645
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
664
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: MockedApiService, decorators: [{
|
|
646
665
|
type: Injectable
|
|
647
666
|
}] });
|
|
648
667
|
|
|
@@ -650,10 +669,10 @@ class EnvironmentService {
|
|
|
650
669
|
get isMobile() {
|
|
651
670
|
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
|
652
671
|
}
|
|
653
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
654
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
672
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: EnvironmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
673
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: EnvironmentService });
|
|
655
674
|
}
|
|
656
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
675
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: EnvironmentService, decorators: [{
|
|
657
676
|
type: Injectable
|
|
658
677
|
}] });
|
|
659
678
|
|
|
@@ -677,10 +696,10 @@ class MixpanelService {
|
|
|
677
696
|
console.error(error);
|
|
678
697
|
}
|
|
679
698
|
}
|
|
680
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
681
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
699
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: MixpanelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
700
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: MixpanelService });
|
|
682
701
|
}
|
|
683
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
702
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: MixpanelService, decorators: [{
|
|
684
703
|
type: Injectable
|
|
685
704
|
}] });
|
|
686
705
|
|
|
@@ -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 {\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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"}
|
|
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 if (this.fakeData) {\n range = this.getFakeVolumeRange(volume);\n } else {\n range = this.getRealVolumeRange(volume);\n }\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 @Output() videoError = new EventEmitter<unknown>();\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 try {\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 } catch (error) {\n console.error('Error loading Vimeo video:', error);\n this.videoError.emit(error);\n }\n }\n if (simpleChanges['isPlaying']) {\n try {\n if (this.isPlaying) {\n await this.vimeoPlayer.play();\n } else {\n await this.vimeoPlayer.pause();\n }\n } catch (error) {\n console.error('Error playing/pausing Vimeo video:', error);\n this.videoError.emit(error);\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 console.error('Error configuring Vimeo player:', error);\n await this.removeVimeoPlayer();\n this.videoError.emit(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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"}
|
|
@@ -10,6 +10,7 @@ export declare class VimeoVideoComponent implements OnInit, OnDestroy, OnChanges
|
|
|
10
10
|
options: Options;
|
|
11
11
|
videoEnded: EventEmitter<void>;
|
|
12
12
|
videoStarted: EventEmitter<void>;
|
|
13
|
+
videoError: EventEmitter<unknown>;
|
|
13
14
|
vimeoPlayer?: Player;
|
|
14
15
|
private elRef;
|
|
15
16
|
ngOnInit(): Promise<void>;
|
|
@@ -19,6 +20,6 @@ export declare class VimeoVideoComponent implements OnInit, OnDestroy, OnChanges
|
|
|
19
20
|
private configureVimeoPlayer;
|
|
20
21
|
private playVideo;
|
|
21
22
|
static ɵfac: i0.ɵɵFactoryDeclaration<VimeoVideoComponent, never>;
|
|
22
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<VimeoVideoComponent, "tgo-vimeo-video", never, { "videoUrl": { "alias": "videoUrl"; "required": false; }; "isPlaying": { "alias": "isPlaying"; "required": false; }; "options": { "alias": "options"; "required": false; }; }, { "videoEnded": "videoEnded"; "videoStarted": "videoStarted"; }, never, never, true, never>;
|
|
23
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<VimeoVideoComponent, "tgo-vimeo-video", never, { "videoUrl": { "alias": "videoUrl"; "required": false; }; "isPlaying": { "alias": "isPlaying"; "required": false; }; "options": { "alias": "options"; "required": false; }; }, { "videoEnded": "videoEnded"; "videoStarted": "videoStarted"; "videoError": "videoError"; }, never, never, true, never>;
|
|
23
24
|
}
|
|
24
25
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testgorilla/tgo-shared-lib",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.2",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": ">= 19.0.0 < 20.0.0",
|
|
6
6
|
"@angular/core": ">= 19.0.0 < 20.0.0",
|
|
@@ -8,11 +8,15 @@
|
|
|
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": ">= 6.0.0 < 7.0.0"
|
|
12
12
|
},
|
|
13
13
|
"sideEffects": false,
|
|
14
14
|
"private": false,
|
|
15
15
|
"license": "PROPRIETARY",
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public",
|
|
18
|
+
"registry": "https://registry.npmjs.org/"
|
|
19
|
+
},
|
|
16
20
|
"displayName": "Shared library",
|
|
17
21
|
"description": "Shared library",
|
|
18
22
|
"module": "fesm2022/testgorilla-tgo-shared-lib.mjs",
|