@testgorilla/tgo-shared-lib 2.0.1 → 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: [{
|
|
@@ -146,9 +146,16 @@ class VimeoVideoComponent {
|
|
|
146
146
|
}
|
|
147
147
|
async ngOnChanges(simpleChanges) {
|
|
148
148
|
if (this.vimeoPlayer) {
|
|
149
|
-
if (simpleChanges['videoUrl'] && this.videoUrl) {
|
|
150
|
-
await this.vimeoPlayer.loadVideo(
|
|
151
|
-
|
|
149
|
+
if (simpleChanges['videoUrl'] && !simpleChanges['videoUrl'].isFirstChange() && simpleChanges['videoUrl'].currentValue != simpleChanges['videoUrl'].previousValue && this.videoUrl) {
|
|
150
|
+
await this.vimeoPlayer.loadVideo({
|
|
151
|
+
url: this.videoUrl,
|
|
152
|
+
start_time: 0,
|
|
153
|
+
}).then(() => {
|
|
154
|
+
void this.vimeoPlayer?.setCurrentTime(0);
|
|
155
|
+
setTimeout(() => {
|
|
156
|
+
void this.vimeoPlayer?.play();
|
|
157
|
+
}, 200);
|
|
158
|
+
});
|
|
152
159
|
}
|
|
153
160
|
if (simpleChanges['isPlaying']) {
|
|
154
161
|
if (this.isPlaying) {
|
|
@@ -198,10 +205,10 @@ class VimeoVideoComponent {
|
|
|
198
205
|
await this.vimeoPlayer.play();
|
|
199
206
|
}
|
|
200
207
|
}
|
|
201
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
202
|
-
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 });
|
|
203
210
|
}
|
|
204
|
-
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: [{
|
|
205
212
|
type: Component,
|
|
206
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"] }]
|
|
207
214
|
}], propDecorators: { class: [{
|
|
@@ -336,10 +343,10 @@ class MediaService {
|
|
|
336
343
|
: data.video,
|
|
337
344
|
};
|
|
338
345
|
}
|
|
339
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
340
|
-
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' });
|
|
341
348
|
}
|
|
342
|
-
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: [{
|
|
343
350
|
type: Injectable,
|
|
344
351
|
args: [{
|
|
345
352
|
providedIn: 'root',
|
|
@@ -361,10 +368,10 @@ class ThemeService {
|
|
|
361
368
|
.getPropertyValue(variableName)
|
|
362
369
|
.trim();
|
|
363
370
|
}
|
|
364
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
365
|
-
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 });
|
|
366
373
|
}
|
|
367
|
-
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: [{
|
|
368
375
|
type: Injectable
|
|
369
376
|
}] });
|
|
370
377
|
|
|
@@ -504,10 +511,10 @@ class ApiService {
|
|
|
504
511
|
}
|
|
505
512
|
return headers;
|
|
506
513
|
}
|
|
507
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
508
|
-
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 });
|
|
509
516
|
}
|
|
510
|
-
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: [{
|
|
511
518
|
type: Injectable
|
|
512
519
|
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i2.SnackbarService }] });
|
|
513
520
|
|
|
@@ -632,10 +639,10 @@ class MockedApiService {
|
|
|
632
639
|
runtime_error: null,
|
|
633
640
|
};
|
|
634
641
|
}
|
|
635
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
636
|
-
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 });
|
|
637
644
|
}
|
|
638
|
-
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: [{
|
|
639
646
|
type: Injectable
|
|
640
647
|
}] });
|
|
641
648
|
|
|
@@ -643,10 +650,10 @@ class EnvironmentService {
|
|
|
643
650
|
get isMobile() {
|
|
644
651
|
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
|
645
652
|
}
|
|
646
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
647
|
-
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 });
|
|
648
655
|
}
|
|
649
|
-
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: [{
|
|
650
657
|
type: Injectable
|
|
651
658
|
}] });
|
|
652
659
|
|
|
@@ -670,10 +677,10 @@ class MixpanelService {
|
|
|
670
677
|
console.error(error);
|
|
671
678
|
}
|
|
672
679
|
}
|
|
673
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
674
|
-
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 });
|
|
675
682
|
}
|
|
676
|
-
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: [{
|
|
677
684
|
type: Injectable
|
|
678
685
|
}] });
|
|
679
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'] && this.videoUrl) {\r\n await this.vimeoPlayer.loadVideo(this.videoUrl);\r\n await this.playVideo();\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":";;;;;;;;;;;;MAqBa,uBAAuB,CAAA;IACzB,MAAM,GAAG,CAAC;IACV,QAAQ,GAAG,KAAK;IAEjB,kBAAkB,GAAG,KAAK;IAC1B,gBAAgB,GAAkB,IAAI;AACtC,IAAA,mBAAmB,GAAG,WAAW,CAAC,GAAG,EAAE;AAE/C,IAAA,YAAY,GAA2B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1D,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAE1E,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,cAAc,EAAE;;IAGvB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE5D,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,cAAc,EAAE;;aAChB;YACL,IAAI,CAAC,aAAa,EAAE;;;AAIhB,IAAA,mBAAmB,CAAC,cAAsB,EAAA;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,EAAE,CAAC;;IAGjC,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B;;AAGF,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAE9B,QAAA,MAAM,OAAO,GAAG,CAAC,SAAiB,KAAI;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC5B;;YAGF,IAAI,SAAS,GAAG,IAAI,CAAC,mBAAmB,GAAG,GAAG,EAAE;AAC9C,gBAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;gBAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG;AAE3C,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;;AAGlC,YAAA,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,CAAC;AACxD,SAAC;AAED,QAAA,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,CAAC;;IAGhD,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAE/B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC3C,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;;AAIxB,IAAA,aAAa,CAAC,MAAc,EAAA;QAKlC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,GAAG,IAAI,EAAE;YACnC,OAAO;AACL,gBAAA,WAAW,EAAE,CAAK,GAAA,CAAA;AAClB,gBAAA,YAAY,EAAE,CAAK,GAAA,CAAA;AACnB,gBAAA,WAAW,EAAE,CAAK,GAAA,CAAA;aACnB;;AAGH,QAAA,IAAI,KAAmC;AAEvC,QAAA,IAAI,CAAC;eACA,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;eACvC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAE7C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;QAE/D,OAAO;YACL,WAAW,EAAE,CAAG,EAAA,YAAY,CAAG,CAAA,CAAA;AAC/B,YAAA,YAAY,EAAE,CAAA,EAAG,YAAY,GAAG,EAAE,CAAG,CAAA,CAAA;YACrC,WAAW,EAAE,CAAG,EAAA,YAAY,CAAG,CAAA,CAAA;SAChC;;AAGK,IAAA,kBAAkB,CAAC,MAAc,EAAA;AACvC,QAAA,IAAI,MAAM,GAAG,IAAI,EAAE;YACjB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;;AACtB,aAAA,IAAI,MAAM,GAAG,IAAI,EAAE;YACxB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;;aACvB;YACL,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;;;AAIzB,IAAA,kBAAkB,CAAC,MAAc,EAAA;AACvC,QAAA,IAAI,MAAM,GAAG,IAAI,EAAE;YACjB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;;AACtB,aAAA,IAAI,MAAM,GAAG,GAAG,EAAE;YACvB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;;AACxB,aAAA,IAAI,MAAM,GAAG,IAAI,EAAE;YACxB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;;aACxB;YACL,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;;;IAIzB,eAAe,CAAC,GAAW,EAAE,GAAW,EAAA;AAC9C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;;IAG1D,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,EAAE;;wGAvHX,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBpC,6eAiBA,EAAA,MAAA,EAAA,CAAA,6eAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDEc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAEb,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;+BACI,qBAAqB,EAAA,eAAA,EAGd,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,6eAAA,EAAA,MAAA,EAAA,CAAA,6eAAA,CAAA,EAAA;wDAGhB,MAAM,EAAA,CAAA;sBAAd;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;;;MEKU,mBAAmB,CAAA;IACf,KAAK,GAAG,iBAAiB;IAC/B,QAAQ,GAAG,EAAE;IACb,SAAS,GAAG,KAAK;AACjB,IAAA,OAAO,GAAY;AAC1B,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,SAAS,EAAE,KAAK;KACjB;AACS,IAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;AACrC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;AAEjD,IAAA,WAAW;AAEH,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAElC,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;;AAGnC,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,MAAM,IAAI,CAAC,iBAAiB,EAAE;;IAGhC,MAAM,WAAW,CAAC,aAA4B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC,YAAY,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,EAAE;AAEjL,gBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;oBAC/B,GAAG,EAAE,IAAI,CAAC,QAAe;AACzB,oBAAA,UAAU,EAAE,CAAC;AACd,iBAAA,CAAC,CAAC,IAAI,CAAC,MAAI;oBACV,KAAK,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;oBACxC,UAAU,CAAC,MAAK;AACd,wBAAA,KAAK,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;qBAC9B,EAAE,GAAG,CAAC;AACT,iBAAC,CAAC;;AAGJ,YAAA,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE;AAC9B,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;;qBACxB;AACL,oBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;;;;;AAM9B,IAAA,MAAM,iBAAiB,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;;;AAI5B,IAAA,MAAM,oBAAoB,GAAA;AAChC,QAAA,MAAM,OAAO,GAAY;YACvB,GAAG,IAAI,CAAC,OAAO;YACf,GAAG,EAAE,IAAI,CAAC,QAAoB;SAC/B;AACD,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,iBAAiB,EAAE;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAA4B,EAAE,OAAO,CAAC;YAC/E,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;AAChC,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE;AAC3B,aAAC,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAK;AAClC,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,aAAC,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;gBACrC,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE;AACvC,oBAAA,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;;AAE5B,aAAC,CAAC;AACF,YAAA,MAAM,IAAI,CAAC,SAAS,EAAE;;QACtB,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,IAAI,CAAC,iBAAiB,EAAE;AAC9B,YAAA,MAAM,KAAK;;;AAIP,IAAA,MAAM,SAAS,GAAA;QACrB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE;AACtC,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;;;wGA1FtB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,oSALpB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAKD,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;+BACE,iBAAiB,EAAA,QAAA,EACjB,EAAE,EAEK,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,kFAAA,CAAA,EAAA;8BAGtB,KAAK,EAAA,CAAA;sBAAnB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBAUS,UAAU,EAAA,CAAA;sBAAnB;gBACS,YAAY,EAAA,CAAA;sBAArB;;;AC3CI,MAAM,uBAAuB,GAAG;;MCO1B,YAAY,CAAA;IACf,aAAa,GAAyB,IAAI;AAC1C,IAAA,oBAAoB;AACnB,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;IAEpC,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE;;AAG5B,IAAA,cAAc,CAAC,IAGd,EAAA;AACC,QAAA,OAAO,SAAS,CAAC,YAAY,CAAC,YAAY,CACxC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CACrC;;IAGH,WAAW,GAAA;AAGT,QAAA,IAAI,sBAA+C;AACnD,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;AACjC,YAAA,KAAK,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;AACnD,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;gBACf,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC;AAC9C,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC1B,MAAM,WAAW,GAAW,EAAE;gBAC9B,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,CAAC,KAAK,KAAI;AAC7C,oBAAA,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9B,iBAAC;gBAED,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAK;AAC/C,oBAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;AACtC,wBAAA,IAAI,EAAE,WAAW;AAClB,qBAAA,CAAC;AACF,oBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACpD,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;oBAC3B,QAAQ,CAAC,QAAQ,EAAE;AACrB,iBAAC,CAAC;gBAEF,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AACrC,oBAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;oBACrB,QAAQ,CAAC,QAAQ,EAAE;AACrB,iBAAC;AAED,gBAAA,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE;gBACvC,MAAM,0BAA0B,GAC9B,YAAY,CAAC,uBAAuB,CAAC,MAAM,CAAC;AAC9C,gBAAA,MAAM,YAAY,GAAG,YAAY,CAAC,cAAc,EAAE;AAClD,gBAAA,0BAA0B,CAAC,OAAO,CAAC,YAAY,CAAC;gBAEhD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC;gBACtD,MAAM,OAAO,GAAG,MAAK;AACnB,oBAAA,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC;oBAC5C,IAAI,UAAU,GAAG,GAAG;AACpB,oBAAA,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE;AAC/B,wBAAA,UAAU,IAAI,SAAS,GAAG,SAAS;;AAErC,oBAAA,IAAI,UAAU,GAAG,CAAC,EAAE;wBAClB,QAAQ,CAAC,IAAI,CAAC;AACZ,4BAAA,IAAI,EAAE,QAAQ;4BACd,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;AAC9C,yBAAA,CAAC;;yBACG;wBACL,IAAI,CAAC,sBAAsB,EAAE;AAC3B,4BAAA,sBAAsB,GAAG,IAAI,CAAC,eAAe,CAAC;AAC5C,gCAAA,KAAK,EAAE,KAAK;AACZ,gCAAA,KAAK,EAAE,IAAI;AACZ,6BAAA,CAAC;4BAEF;AACG,iCAAA,IAAI,CAAC,CAAC,aAAa,KAAI;gCACtB,IAAI,CAAC,aAAa,EAAE;oCAClB,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;oCAC9C,QAAQ,CAAC,QAAQ,EAAE;;AAEvB,6BAAC;iCACA,OAAO,CAAC,MAAK;gCACZ,sBAAsB,GAAG,IAAI;AAC/B,6BAAC,CAAC;;;AAIR,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpB,wBAAA,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC;;AAEzC,iBAAC;AACD,gBAAA,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC;AACvC,aAAC;AACA,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,gBAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;gBACrB,QAAQ,CAAC,QAAQ,EAAE;AACrB,aAAC,CAAC;AACN,SAAC,CAAC;;IAGJ,MAAM,SAAS,CAAC,GAAW,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;AAC5B,QAAA,MAAM,KAAK,CAAC,IAAI,EAAE;QAClB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,KAAK,CAAC,OAAO,GAAG,MAAK;AACnB,gBAAA,OAAO,EAAE;AACX,aAAC;AACD,YAAA,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;AAC1C,SAAC,CAAC;;AAGJ,IAAA,uBAAuB,CAAC,IAA2B,EAAA;AACjD,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;IAGlC,MAAM,eAAe,CAAC,IAGrB,EAAA;AACC,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAC/B,YAAA,OAAO,IAAI;;QACX,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,YAAA,OAAO,KAAK;;;AAIR,IAAA,yBAAyB,CAAC,IAGjC,EAAA;AACC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,aAAa;AAC9D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,aAAa;QAC9D,OAAO;AACL,YAAA,KAAK,EACH,IAAI,CAAC,KAAK,IAAI;kBACV,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;kBACpC,IAAI,CAAC,KAAK;AAChB,YAAA,KAAK,EACH,IAAI,CAAC,KAAK,IAAI;kBACV,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;kBACpC,IAAI,CAAC,KAAK;SACjB;;wGA7IQ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA;;4FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACJD,IAAK,UAEJ;AAFD,CAAA,UAAK,UAAU,EAAA;AACb,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,oBAAoC;AACtC,CAAC,EAFI,UAAU,KAAV,UAAU,GAEd,EAAA,CAAA,CAAA;MAGY,YAAY,CAAA;IACN,gBAAgB,GAAG,SAAS;IAE7C,eAAe,GAAA;QACb,QACE,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,aAAa,CAAC;YAClD,IAAI,CAAC,gBAAgB;;AAIjB,IAAA,mBAAmB,CAAC,YAAoB,EAAA;AAC9C,QAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,eAAe;aAC7C,gBAAgB,CAAC,YAAY;AAC7B,aAAA,IAAI,EAAE;;wGAbA,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAZ,YAAY,EAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB;;;ACCD;;;;;AAKG;MACU,wBAAwB,CAAA;AAC3B,IAAA,OAAO,kBAAkB,CAC/B,SAAwB,EACxB,QAAsC,EAAA;QAEtC,MAAM,qBAAqB,GAA0B,EAAE;AAEvD,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;YAC7B,qBAAqB,CAAC,QAAQ,CAAC,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC;AAC5D,SAAC,CAAC;AAEF,QAAA,OAAO,qBAAqB;;IAGvB,OAAO,gBAAgB,CAC5B,KAAa,EACb,SAAwB,EACxB,KAAa,EACb,QAAsC,EAAA;QAEtC,OAAO;AACL,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,QAAQ,EAAE;gBACR,KAAK;gBACL,KAAK;gBACL,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC;AACrD,aAAA;SACF;;AAEJ;;AC1CD;IACY;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,QAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,QAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,QAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,QAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAiB;AACjB,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAiB;AACjB,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAiB;AACjB,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAiB;AACjB,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAiB;AACjB,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAiB;AACjB,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAiB;AACnB,CAAC,EAbW,QAAQ,KAAR,QAAQ,GAanB,EAAA,CAAA,CAAA;AAED;AACO,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ;;ACZtD,MAAM,kBAAkB,GAAG,CAAC,OAAA,GAAmC,EAAE,KACtE,sBAAsB,CAAC,OAAO,CAAC;AAC7B,IAAA,eAAe,EAAE;AACf,QAAA,oBAAoB,EAAE,KAAK;QAC3B,cAAc,EAAE,CAAC,IAAI,CAAC;AACtB,QAAA,WAAW,EAAE,IAAI;AAClB,KAAA;AACD,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,GAAG,OAAO;AACX,CAAA;;MCNU,UAAU,CAAA;AAOX,IAAA,UAAA;AACA,IAAA,eAAA;IAPF,cAAc,GAAG,EAAE;IACnB,eAAe,GAAG,EAAE;IACpB,uBAAuB,GAAG,EAAE;IAC5B,OAAO,GAAG,EAAE;IAEpB,WACU,CAAA,UAAsB,EACtB,eAAgC,EAAA;QADhC,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAe,CAAA,eAAA,GAAf,eAAe;;AAGzB,IAAA,SAAS,CACP,cAAsB,EACtB,eAAuB,EACvB,gBAAwB,EACxB,OAAe,EAAA;AAEf,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,uBAAuB,GAAG,gBAAgB;AAC/C,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;IAGxB,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,cAAc;;AAG5B,IAAA,GAAG,CACD,GAAW,EACX,OAAO,GAAG,EAAE,EACZ,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;QAE3C,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CACF,CAAA,EAAG,IAAI,CAAC,OAAO,CAAG,EAAA,GAAG,CAAE,CAAA,EACvB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAE3B,aAAA,IAAI,CAAC,UAAU,CAAC,CAAC,KAAwB,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAkB;;IAG1F,IAAI,CACF,GAAW,EACX,IAAY,EACZ,OAAO,GAAG,EAAE,EACZ,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3C,eAAe,GAAG,KAAK,EAAA;QAEvB,OAAO,IAAI,CAAC;aACT,IAAI,CACH,eAAe,GAAG,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAG,EAAA,GAAG,CAAE,CAAA,EAC/C,IAAI,EACJ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAE3B,aAAA,IAAI,CAAC,UAAU,CAAC,CAAC,KAAwB,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAkB;;AAG1F,IAAA,GAAG,CACD,GAAW,EACX,IAAY,EACZ,OAAO,GAAG,EAAE,EACZ,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;QAE3C,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CACF,CAAG,EAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAA,CAAE,EACvB,IAAI,EACJ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAE3B,aAAA,IAAI,CAAC,UAAU,CAAC,CAAC,KAAwB,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAkB;;AAG1F,IAAA,KAAK,CACH,GAAW,EACX,IAAY,EACZ,OAAO,GAAG,EAAE,EACZ,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;QAE3C,OAAO,IAAI,CAAC;AACT,aAAA,KAAK,CACJ,CAAG,EAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAA,CAAE,EACvB,IAAI,EACJ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAE3B,aAAA,IAAI,CAAC,UAAU,CAAC,CAAC,KAAwB,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAkB;;AAG1F,IAAA,MAAM,CACJ,GAAW,EACX,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;QAE3C,OAAO,IAAI,CAAC;AACT,aAAA,MAAM,CACL,CAAA,EAAG,IAAI,CAAC,OAAO,CAAG,EAAA,GAAG,CAAE,CAAA,EACvB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AAEtB,aAAA,IAAI,CAAC,UAAU,CAAC,CAAC,KAAwB,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAuB;;AAGvF,IAAA,WAAW,CAAC,QAA2B,EAAA;AAC7C,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ;QAC1B,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE;YAC7B,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC;;aAChC;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;AAE5D,YAAA,OAAO,KAAK;;;IAIR,yBAAyB,GAAA;QAC/B,OAAO,SAAS,CAAC,CAAG,EAAA,IAAI,CAAC,uBAAuB,CAAA,oBAAA,CAAsB,CAAC;;AAGjE,IAAA,YAAY,CAAC,OAAe,EAAA;QAClC,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;AAClD,YAAA,OAAO,GAAG;AACR,gBAAA,GAAG,OAAO;AACV,gBAAA,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;gBAC1C,mBAAmB,EAAE,IAAI,CAAC,cAAc;aACzC;;AAGH,QAAA,MAAM,yBAAyB,GAAI,OAAkC,CACnE,eAAe,CAChB;AACD,QAAA,MAAM,OAAO,GAA8C;AACzD,YAAA,OAAO,EAAE;AACP,gBAAA,GAAG,OAAO;AACV,gBAAA,aAAa,EAAE;AACb,sBAAE;AACF,sBAAE,CAAA,iBAAA,EAAoB,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAE,CAAA;AACjE,aAAA;SACF;AAED,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,eAAe;;AAG3D,QAAA,OAAO,OAAO;;wGA3IL,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAV,UAAU,EAAA,CAAA;;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB;;;ACJD;;;;;;;;;AASG;MAEU,gBAAgB,CAAA;IACnB,cAAc,GAAG,iBAAiB;IAClC,eAAe,GAAG,IAAI;IACtB,uBAAuB,GAAG,EAAE;;IAGnB,UAAU,GAAG,GAAG;AAEjC,IAAA,SAAS,CACP,cAAsB,EACtB,eAAuB,EACvB,gBAAwB,EACxB,OAAe,EAAA;AAEf,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,uBAAuB,GAAG,gBAAgB;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE;YAC5C,cAAc;YACd,eAAe;YACf,gBAAgB;YAChB,OAAO;AACR,SAAA,CAAC;;IAGJ,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,cAAc;;AAG5B,IAAA,GAAG,CACD,GAAW,EACX,OAAO,GAAG,EAAE,EACZ,aAAiD,EAAA;QAEjD,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,GAAG,EAAE,OAAO,CAAC;QACpD,OAAO,EAAE,CAAC,IAAI,CAAC,eAAe,CAAI,GAAG,EAAE,KAAK,CAAM,CAAC,CAAC,IAAI,CACtD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CACvB;;AAGH,IAAA,IAAI,CACF,GAAW,EACX,IAAY,EACZ,OAAO,GAAG,EAAE,EACZ,aAAiD,EACjD,eAAe,GAAG,KAAK,EAAA;QAEvB,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC;QAC3D,OAAO,EAAE,CAAC,IAAI,CAAC,eAAe,CAAI,GAAG,EAAE,MAAM,EAAE,IAAI,CAAM,CAAC,CAAC,IAAI,CAC7D,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CACvB;;IAGH,GAAG,CACD,GAAW,EACX,IAAY,EACZ,OAAO,GAAG,EAAE,EACZ,aAAiD,EAAA;QAEjD,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC;QAC1D,OAAO,EAAE,CAAC,IAAI,CAAC,eAAe,CAAI,GAAG,EAAE,KAAK,EAAE,IAAI,CAAM,CAAC,CAAC,IAAI,CAC5D,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CACvB;;IAGH,KAAK,CACH,GAAW,EACX,IAAY,EACZ,OAAO,GAAG,EAAE,EACZ,aAAiD,EAAA;QAEjD,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC;QAC5D,OAAO,EAAE,CAAC,IAAI,CAAC,eAAe,CAAI,GAAG,EAAE,OAAO,EAAE,IAAI,CAAM,CAAC,CAAC,IAAI,CAC9D,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CACvB;;IAGH,MAAM,CACJ,GAAW,EACX,aAAiD,EAAA;AAEjD,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC;AAC9C,QAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;AAG5C;;AAEG;AACK,IAAA,eAAe,CAAI,GAAW,EAAE,MAAc,EAAE,IAAa,EAAA;;AAEnE,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC;;AAGpD,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC;;AAGpD,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC;;;AAIpD,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;YACrC,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC;AACrC,gBAAA,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACrC;;;AAIH,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;YACzC,OAAO,EAAE,CAAC;;;QAIZ,OAAO,CAAC,IAAI,CAAC,CAAA,uCAAA,EAA0C,MAAM,CAAI,CAAA,EAAA,GAAG,CAAE,CAAA,CAAC;QACvE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;;AAGtC;;AAEG;AACK,IAAA,gCAAgC,CAAC,IAAa,EAAA;QACpD,MAAM,WAAW,GAAG,IAAW;AAC/B,QAAA,MAAM,SAAS,GAAG,WAAW,EAAE,SAAS,IAAI,EAAE;;QAG9C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAa,EAAE,KAAa,KAAI;;AAE7D,YAAA,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;YAEvD,OAAO;gBACL,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAa,UAAA,EAAA,KAAK,GAAG,CAAC,CAAE,CAAA;gBAC/C,MAAM;gBACN,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,eAAe,IAAI,iBAAiB;AAC5E,gBAAA,MAAM,EAAE;sBACJ,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,eAAe,IAAI;AACnD,sBAAE,kBAAkB;AACtB,gBAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE;gBAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,gDAAgD;AACvE,gBAAA,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;gBACnC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC;AAChD,gBAAA,MAAM,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC;aAC7C;AACH,SAAC,CAAC;QAEF,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,CAAM,KAAK,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9E,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAChC,CAAC,GAAW,EAAE,EAAO,KAAK,GAAG,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,EACjD,CAAC,CACF;QAED,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC;AACtC,YAAA,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE;AACzB,YAAA,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACpC,YAAA,QAAQ,EAAE,WAAW,EAAE,QAAQ,IAAI,eAAe;AAClD,YAAA,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE;AAC7B,YAAA,MAAM,EAAE,WAAW;YACnB,OAAO;AACP,YAAA,KAAK,EAAE,SAAS,GAAG,CAAC,GAAG,CAAC,WAAW,GAAG,SAAS,IAAI,GAAG,GAAG,CAAC;AAC1D,YAAA,YAAY,EAAE,WAAW;AACzB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,CAAM,KAAK,GAAG,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;AAClF,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,aAAa,EAAE,IAAI;SACpB;;wGAvKQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAhB,gBAAgB,EAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;MCVY,kBAAkB,CAAA;AAC7B,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,gEAAgE,CAAC,IAAI,CAC1E,SAAS,CAAC,SAAS,CACpB;;wGAJQ,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAlB,kBAAkB,EAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;MCGY,eAAe,CAAA;IAClB,QAAQ,GAAkC,IAAI;AAEtD,IAAA,KAAK,CAAC,SAAiB,EAAE,UAAA,GAA4B,EAAE,EAAA;AACrD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC;;AAGnD,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;YAC/B,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC;;AAGnD,QAAA,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC;;AAGvD,IAAA,cAAc,CAAC,SAAiB,EAAE,UAAA,GAA4B,EAAE,EAAA;AACtE,QAAA,IAAI;YACF,IAAI,CAAC,QAAS,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC;;QAC3C,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;;;wGApBb,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAf,eAAe,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;ACAY,MAAA,cAAc,GAAe;AACxC,IAAA,IAAI,EAAE,sCAAsC;AAC5C,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,oBAAoB,EAAE,IAAI;AAC1B,IAAA,kBAAkB,EAAE,KAAK;AACzB,IAAA,yBAAyB,EAAE,IAAI;AAC/B,IAAA,sBAAsB,EAAE,IAAI;AAC5B,IAAA,gBAAgB,EAAE;AAChB,QAAA,EAAE,EAAE,IAAI;AACR,QAAA,gBAAgB,EAAE,MAAM;AACxB,QAAA,YAAY,EAAE,GAAG;AACjB,QAAA,aAAa,EAAE,SAAS;AACxB,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,oBAAoB,EAAE,IAAI;AAC1B,QAAA,iCAAiC,EAAE,IAAI;AACvC,QAAA,sBAAsB,EAAE,IAAI;AAC5B,QAAA,iBAAiB,EAAE,6BAA6B;AACjD,KAAA;AACD,IAAA,eAAe,EAAE,IAAI;;AAGV,MAAA,YAAY,GAAa;AACpC,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,IAAI,EAAE,4DAA4D;AAClE,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,OAAO,EAAE;AACP,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,WAAW,EAAE,sCAAsC;AACpD,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,WAAW,EAAE,sCAAsC;AACpD,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,WAAW,EAAE,sCAAsC;AACpD,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,WAAW,EAAE,sCAAsC;AACpD,aAAA;AACF,SAAA;AACD,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,gBAAgB,EAAE,IAAI;AACtB,QAAA,kBAAkB,EAAE,IAAI;AACxB,QAAA,gBAAgB,EAAE;AAChB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA;AACD,QAAA,gBAAgB,EAAE,KAAK;AACvB,QAAA,SAAS,EAAE,GAAG;AACd,QAAA,SAAS,EAAE,CAAC;AACZ,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;;AAGU,MAAA,kBAAkB,GAAmB;AAChD,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,IAAI,EAAE;AACJ,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,SAAS,EAAE,eAAe;AAC3B,KAAA;AACD,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,eAAe,EAAE,IAAI;;AAGV,MAAA,gBAAgB,GAAG;AAC9B,IAAA;AACE,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,WAAW,EAAE,kBAAkB;AAC/B,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,OAAO,EAAE,gBAAgB;AACzB,QAAA,MAAM,EAAE,eAAe;AACxB,KAAA;AACD,IAAA;AACE,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,WAAW,EAAE,kBAAkB;AAC/B,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,OAAO,EAAE,gBAAgB;AACzB,QAAA,MAAM,EAAE,eAAe;AACxB,KAAA;;AAGU,MAAA,aAAa,GAAG;AAC3B,IAAA;AACE,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,KAAK,EAAE,cAAc;AACrB,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,MAAM,EAAE,EAAE;AACX,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,KAAK,EAAE,cAAc;AACrB,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,MAAM,EAAE,EAAE;AACX,KAAA;;;AChHH;AACO,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC5C,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,OAAO,EAAE,EAAE;AACZ,CAAA,CAAC,CAAC,MAAA;AAAQ,CAAA;AAEJ,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAC1C,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,OAAO,EAAE,EAAE;AACZ,CAAA,CAAC,CAAC,MAAA;AAAQ,CAAA;AAEJ,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAC1C,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,OAAO,EAAE,EAAE;AACZ,CAAA,CAAC,CAAC,MAAA;AAAQ,CAAA;AAEJ,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC5C,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,OAAO,EAAE,EAAE;AACZ,CAAA,CAAC,CAAC,MAAA;AAAQ,CAAA;AAEX;MACa,aAAa,CAAA;AACxB,IAAA,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE;AACjB;AAED;MACa,eAAe,CAAA;AAC1B,IAAA,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE;AAClB;AAED;AACa,MAAA,kBAAkB,GAAG,MAAA;;;ACzClC;;AAEG;;;;"}
|
|
@@ -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,
|