@testgorilla/tgo-ai-interview-test 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/testgorilla-tgo-ai-interview-test.mjs +478 -0
- package/fesm2022/testgorilla-tgo-ai-interview-test.mjs.map +1 -0
- package/lib/components/ai-interview-test/ai-interview-test.component.d.ts +44 -0
- package/lib/components/interview-stream/interview-stream.component.d.ts +46 -0
- package/lib/components/interview-video/interview-video.component.d.ts +16 -0
- package/lib/models/index.d.ts +3 -0
- package/lib/models/question-component.d.ts +5 -0
- package/lib/models/translations.d.ts +1 -0
- package/package.json +29 -12
- package/.eslintrc.json +0 -46
- package/jest.config.ts +0 -29
- package/ng-package.json +0 -16
- package/project.json +0 -48
- package/src/lib/components/ai-interview-test/ai-interview-test.component.html +0 -42
- package/src/lib/components/ai-interview-test/ai-interview-test.component.scss +0 -167
- package/src/lib/components/ai-interview-test/ai-interview-test.component.spec.ts +0 -212
- package/src/lib/components/ai-interview-test/ai-interview-test.component.ts +0 -192
- package/src/lib/components/interview-stream/interview-stream.component.html +0 -9
- package/src/lib/components/interview-stream/interview-stream.component.scss +0 -5
- package/src/lib/components/interview-stream/interview-stream.component.spec.ts +0 -259
- package/src/lib/components/interview-stream/interview-stream.component.ts +0 -320
- package/src/lib/components/interview-video/interview-video.component.html +0 -8
- package/src/lib/components/interview-video/interview-video.component.scss +0 -7
- package/src/lib/components/interview-video/interview-video.component.spec.ts +0 -140
- package/src/lib/components/interview-video/interview-video.component.ts +0 -67
- package/src/lib/models/index.ts +0 -13
- package/src/lib/models/question-component.ts +0 -13
- package/src/lib/models/translations.ts +0 -3
- package/src/test-setup.ts +0 -76
- package/tsconfig.json +0 -20
- package/tsconfig.lib.json +0 -20
- package/tsconfig.lib.prod.json +0 -11
- package/tsconfig.spec.json +0 -17
- /package/{src/assets → assets}/i18n/en.json +0 -0
- /package/{src/index.ts → index.d.ts} +0 -0
- /package/{src/lib/components/index.ts → lib/components/index.d.ts} +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { DailyCall, DailyParticipant } from '@daily-co/daily-js';
|
|
3
|
+
import { SelectedMediaDevices } from '@testgorilla/tgo-shared-lib';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export type Participant = {
|
|
6
|
+
videoTrack?: MediaStreamTrack | undefined;
|
|
7
|
+
audioTrack?: MediaStreamTrack | undefined;
|
|
8
|
+
videoReady: boolean;
|
|
9
|
+
audioReady: boolean;
|
|
10
|
+
userName: string;
|
|
11
|
+
local: boolean;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
};
|
|
14
|
+
export declare class InterviewStreamComponent implements OnInit, OnDestroy {
|
|
15
|
+
conversationUrl: string | undefined;
|
|
16
|
+
selectedMediaDevices: SelectedMediaDevices | undefined;
|
|
17
|
+
translations: {
|
|
18
|
+
[key: string]: string;
|
|
19
|
+
};
|
|
20
|
+
streamStart: EventEmitter<null>;
|
|
21
|
+
streamEnd: EventEmitter<null>;
|
|
22
|
+
checkMediaPermissions: EventEmitter<null>;
|
|
23
|
+
callObject: DailyCall | undefined;
|
|
24
|
+
avatarParticipant: Participant | undefined;
|
|
25
|
+
candidateJoined: import("@angular/core").WritableSignal<boolean>;
|
|
26
|
+
private cdr;
|
|
27
|
+
ngOnInit(): void;
|
|
28
|
+
ngOnDestroy(): void;
|
|
29
|
+
private setupCall;
|
|
30
|
+
formatParticipantObj(participant: DailyParticipant): Participant;
|
|
31
|
+
updateTrack(participant: DailyParticipant, newTrackType: string): void;
|
|
32
|
+
private candidateJoinMeeting;
|
|
33
|
+
private participantJoined;
|
|
34
|
+
private handleTrackStartedStopped;
|
|
35
|
+
private handleParticipantLeft;
|
|
36
|
+
private handleError;
|
|
37
|
+
private handleLeftMeeting;
|
|
38
|
+
private leaveCall;
|
|
39
|
+
private handleNewMessage;
|
|
40
|
+
private getConversationId;
|
|
41
|
+
private handleToolCall;
|
|
42
|
+
private sendMessage;
|
|
43
|
+
private getToolCallTranslation;
|
|
44
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<InterviewStreamComponent, never>;
|
|
45
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InterviewStreamComponent, "tgo-interview-stream", never, { "conversationUrl": { "alias": "conversationUrl"; "required": false; }; "selectedMediaDevices": { "alias": "selectedMediaDevices"; "required": false; }; "translations": { "alias": "translations"; "required": false; }; }, { "streamStart": "streamStart"; "streamEnd": "streamEnd"; "checkMediaPermissions": "checkMediaPermissions"; }, never, never, true, never>;
|
|
46
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { OnInit, SimpleChanges, OnChanges } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class InterviewVideoComponent implements OnInit, OnChanges {
|
|
4
|
+
videoTrack: MediaStreamTrack | undefined;
|
|
5
|
+
audioTrack: MediaStreamTrack | undefined;
|
|
6
|
+
videoStream: MediaStream | undefined;
|
|
7
|
+
audioStream: MediaStream | undefined;
|
|
8
|
+
ngOnInit(): void;
|
|
9
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
10
|
+
addVideoStream(track: MediaStreamTrack): void;
|
|
11
|
+
addAudioStream(track: MediaStreamTrack): void;
|
|
12
|
+
updateVideoTrack(oldTrack: MediaStreamTrack, track: MediaStreamTrack): void;
|
|
13
|
+
updateAudioTrack(oldTrack: MediaStreamTrack, track: MediaStreamTrack): void;
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<InterviewVideoComponent, never>;
|
|
15
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InterviewVideoComponent, "tgo-interview-video", never, { "videoTrack": { "alias": "videoTrack"; "required": false; }; "audioTrack": { "alias": "audioTrack"; "required": false; }; }, {}, never, never, true, never>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { IQuestionDataContract as BaseIQuestionDataContract } from '@testgorilla/tgo-shared-lib';
|
|
2
|
+
export interface IQuestionDataContract extends BaseIQuestionDataContract {
|
|
3
|
+
conversationUrl?: string;
|
|
4
|
+
}
|
|
5
|
+
export { SelectedMediaDevices, ISubmissionState, } from '@testgorilla/tgo-shared-lib';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ROOT_TRANSLATIONS_SCOPE } from '@testgorilla/tgo-shared-lib';
|
package/package.json
CHANGED
|
@@ -1,19 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testgorilla/tgo-ai-interview-test",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/common": "
|
|
6
|
-
"@angular/core": "
|
|
7
|
-
"@angular/animations": "
|
|
8
|
-
"@ngneat/transloco": "
|
|
9
|
-
"@testgorilla/tgo-ui": "
|
|
10
|
-
"@daily-co/daily-js": "
|
|
11
|
-
"
|
|
12
|
-
"rxjs": "~7.8.1"
|
|
5
|
+
"@angular/common": ">= 19.0.0 < 20.0.0",
|
|
6
|
+
"@angular/core": ">= 19.0.0 < 20.0.0",
|
|
7
|
+
"@angular/animations": ">= 19.0.0 < 20.0.0",
|
|
8
|
+
"@ngneat/transloco": ">= 4.0.0 < 5.0.0",
|
|
9
|
+
"@testgorilla/tgo-ui": ">= 4.0.0 < 5.0.0",
|
|
10
|
+
"@daily-co/daily-js": ">= 0.79.0 < 1.0.0",
|
|
11
|
+
"rxjs": ">= 7.0.0 < 8.0.0"
|
|
13
12
|
},
|
|
14
|
-
"
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@testgorilla/tgo-shared-lib": ">= 2.0.0 < 3.0.0",
|
|
15
|
+
"tslib": "^2.3.0"
|
|
16
|
+
},
|
|
17
|
+
"typings": "index.d.ts",
|
|
15
18
|
"sideEffects": false,
|
|
16
19
|
"license": "PROPRIETARY",
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"access": "public",
|
|
22
|
+
"registry": "https://registry.npmjs.org/"
|
|
23
|
+
},
|
|
17
24
|
"displayName": "AI Interview",
|
|
18
|
-
"description": "AI Interview component"
|
|
19
|
-
|
|
25
|
+
"description": "AI Interview component",
|
|
26
|
+
"module": "fesm2022/testgorilla-tgo-ai-interview-test.mjs",
|
|
27
|
+
"exports": {
|
|
28
|
+
"./package.json": {
|
|
29
|
+
"default": "./package.json"
|
|
30
|
+
},
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./index.d.ts",
|
|
33
|
+
"default": "./fesm2022/testgorilla-tgo-ai-interview-test.mjs"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
package/.eslintrc.json
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": ["../../.eslintrc.json"],
|
|
3
|
-
"ignorePatterns": ["!**/*"],
|
|
4
|
-
"overrides": [
|
|
5
|
-
{
|
|
6
|
-
"files": ["*.ts"],
|
|
7
|
-
"extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"],
|
|
8
|
-
"rules": {
|
|
9
|
-
"@angular-eslint/directive-selector": [
|
|
10
|
-
"error",
|
|
11
|
-
{
|
|
12
|
-
"type": "attribute",
|
|
13
|
-
"prefix": "tgo",
|
|
14
|
-
"style": "camelCase"
|
|
15
|
-
}
|
|
16
|
-
],
|
|
17
|
-
"@angular-eslint/component-selector": [
|
|
18
|
-
"error",
|
|
19
|
-
{
|
|
20
|
-
"type": "element",
|
|
21
|
-
"prefix": "tgo",
|
|
22
|
-
"style": "kebab-case"
|
|
23
|
-
}
|
|
24
|
-
],
|
|
25
|
-
"@angular-eslint/prefer-standalone": "off"
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"files": ["*.html"],
|
|
30
|
-
"extends": ["plugin:@nx/angular-template"],
|
|
31
|
-
"rules": {}
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"files": ["*.json"],
|
|
35
|
-
"parser": "jsonc-eslint-parser",
|
|
36
|
-
"rules": {
|
|
37
|
-
"@nx/dependency-checks": [
|
|
38
|
-
"error",
|
|
39
|
-
{
|
|
40
|
-
"ignoredFiles": ["{projectRoot}/eslint.config.{js,cjs,mjs}"]
|
|
41
|
-
}
|
|
42
|
-
]
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
]
|
|
46
|
-
}
|
package/jest.config.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
displayName: 'tgo-ai-interview-test',
|
|
3
|
-
preset: '../../jest.preset.js',
|
|
4
|
-
setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
|
|
5
|
-
coverageDirectory: '../../coverage/packages/tgo-ai-interview-test',
|
|
6
|
-
testMatch: ['**/__tests__/**/*.[jt]s?(x)', '**/*.spec.[jt]s?(x)'],
|
|
7
|
-
testPathIgnorePatterns: ['/node_modules/', '/src/lib/models/'],
|
|
8
|
-
moduleNameMapper: {
|
|
9
|
-
'^@testgorilla/tgo-ui$': '<rootDir>/../shared/src/test-mocks/tgo-ui.mock.ts',
|
|
10
|
-
'^@testgorilla/tgo-test-shared$': '<rootDir>/src/shared/index.ts',
|
|
11
|
-
},
|
|
12
|
-
transform: {
|
|
13
|
-
'^.+\\.(ts|mjs|js|html)$': [
|
|
14
|
-
'jest-preset-angular',
|
|
15
|
-
{
|
|
16
|
-
tsconfig: '<rootDir>/tsconfig.spec.json',
|
|
17
|
-
stringifyContentPathRegex: '\\.(html|svg)$',
|
|
18
|
-
},
|
|
19
|
-
],
|
|
20
|
-
},
|
|
21
|
-
transformIgnorePatterns: [
|
|
22
|
-
'node_modules/(?!.*\\.mjs$|lodash-es|@testgorilla|ng2-charts|chart\\.js|chartjs-plugin-datalabels|@daily-co)',
|
|
23
|
-
],
|
|
24
|
-
snapshotSerializers: [
|
|
25
|
-
'jest-preset-angular/build/serializers/no-ng-attributes',
|
|
26
|
-
'jest-preset-angular/build/serializers/ng-snapshot',
|
|
27
|
-
'jest-preset-angular/build/serializers/html-comment',
|
|
28
|
-
],
|
|
29
|
-
};
|
package/ng-package.json
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
|
|
3
|
-
"dest": "../../dist/packages/tgo-ai-interview-test",
|
|
4
|
-
"assets": [
|
|
5
|
-
{
|
|
6
|
-
"glob": "**/*",
|
|
7
|
-
"input": "./src/assets",
|
|
8
|
-
"output": "./assets"
|
|
9
|
-
}
|
|
10
|
-
],
|
|
11
|
-
"lib": {
|
|
12
|
-
"entryFile": "./src/index.ts"
|
|
13
|
-
},
|
|
14
|
-
"allowedNonPeerDependencies": []
|
|
15
|
-
}
|
|
16
|
-
|
package/project.json
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "tgo-ai-interview-test",
|
|
3
|
-
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
4
|
-
"sourceRoot": "packages/tgo-ai-interview-test/src",
|
|
5
|
-
"prefix": "tgo",
|
|
6
|
-
"projectType": "library",
|
|
7
|
-
"tags": [],
|
|
8
|
-
"targets": {
|
|
9
|
-
"build": {
|
|
10
|
-
"executor": "nx:run-commands",
|
|
11
|
-
"outputs": ["{workspaceRoot}/dist/packages/tgo-ai-interview-test"],
|
|
12
|
-
"options": {
|
|
13
|
-
"commands": [
|
|
14
|
-
"nx run tgo-ai-interview-test:package",
|
|
15
|
-
"node scripts/replace-shared-alias.js dist/packages/tgo-ai-interview-test @testgorilla/tgo-test-shared"
|
|
16
|
-
],
|
|
17
|
-
"parallel": false,
|
|
18
|
-
"forwardAllArgs": false
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
"package": {
|
|
22
|
-
"executor": "@nx/angular:package",
|
|
23
|
-
"outputs": ["{workspaceRoot}/dist/{projectRoot}"],
|
|
24
|
-
"options": {
|
|
25
|
-
"project": "packages/tgo-ai-interview-test/ng-package.json"
|
|
26
|
-
},
|
|
27
|
-
"configurations": {
|
|
28
|
-
"production": {
|
|
29
|
-
"tsConfig": "packages/tgo-ai-interview-test/tsconfig.lib.prod.json"
|
|
30
|
-
},
|
|
31
|
-
"development": {
|
|
32
|
-
"tsConfig": "packages/tgo-ai-interview-test/tsconfig.lib.json"
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
"defaultConfiguration": "production"
|
|
36
|
-
},
|
|
37
|
-
"test": {
|
|
38
|
-
"executor": "@nx/jest:jest",
|
|
39
|
-
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
|
|
40
|
-
"options": {
|
|
41
|
-
"jestConfig": "packages/tgo-ai-interview-test/jest.config.ts"
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
"lint": {
|
|
45
|
-
"executor": "@nx/eslint:lint"
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
<div class="ai-interview-test">
|
|
2
|
-
<div class="test-container">
|
|
3
|
-
<div
|
|
4
|
-
class="media-container"
|
|
5
|
-
[class.is-video-visible]="isInterviewInProgress()"
|
|
6
|
-
>
|
|
7
|
-
<div class="candidate-no-camera" *ngIf="!candidateVideoStreamReady()">
|
|
8
|
-
<h3> </h3>
|
|
9
|
-
<ui-icon name="User-profile-in-line" color="white" size="24"></ui-icon>
|
|
10
|
-
<h3 class="bold">{{ translations['YOU'] }}</h3>
|
|
11
|
-
</div>
|
|
12
|
-
<div class="candidate-camera" [hidden]="!candidateVideoStreamReady()">
|
|
13
|
-
<video
|
|
14
|
-
height
|
|
15
|
-
#video
|
|
16
|
-
id="video"
|
|
17
|
-
playsinline
|
|
18
|
-
(loadedmetadata)="onVideoLoad()"
|
|
19
|
-
></video>
|
|
20
|
-
<h3 class="bold" *ngIf="candidateVideoStreamReady()">
|
|
21
|
-
{{ translations['YOU'] }}
|
|
22
|
-
</h3>
|
|
23
|
-
</div>
|
|
24
|
-
<tgo-audio-animation
|
|
25
|
-
*ngIf="isInterviewInProgress()"
|
|
26
|
-
[fakeData]="true"
|
|
27
|
-
></tgo-audio-animation>
|
|
28
|
-
<div class="interview-stream-container">
|
|
29
|
-
<tgo-interview-stream
|
|
30
|
-
*ngIf="conversationUrl && hasMediaPermissions()"
|
|
31
|
-
[selectedMediaDevices]="selectedMediaDevices"
|
|
32
|
-
[conversationUrl]="conversationUrl"
|
|
33
|
-
(streamStart)="interviewStarted()"
|
|
34
|
-
(streamEnd)="interviewEnded()"
|
|
35
|
-
(checkMediaPermissions)="checkMediaPermissions()"
|
|
36
|
-
[translations]="translations"
|
|
37
|
-
></tgo-interview-stream>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
</div>
|
|
41
|
-
</div>
|
|
42
|
-
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
@import '@testgorilla/tgo-ui/projects/tgo-canopy-ui/theme/variables';
|
|
2
|
-
|
|
3
|
-
$border-radius: 10px;
|
|
4
|
-
|
|
5
|
-
.ai-interview-test {
|
|
6
|
-
background-color: $black;
|
|
7
|
-
padding: 24px;
|
|
8
|
-
display: flex;
|
|
9
|
-
justify-content: center;
|
|
10
|
-
min-height: calc(100vh - 80px);
|
|
11
|
-
|
|
12
|
-
h3 {
|
|
13
|
-
color: $tgo-white;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
.test-container {
|
|
17
|
-
min-width: 360px;
|
|
18
|
-
width: 100%;
|
|
19
|
-
min-height: 300px;
|
|
20
|
-
height: min(725px, 100%, max(calc(100vw), calc(100vh), 200px));
|
|
21
|
-
max-width: calc(100vh * (16 / 9) - 80px - 48px);
|
|
22
|
-
display: flex;
|
|
23
|
-
flex-direction: column;
|
|
24
|
-
justify-content: space-between;
|
|
25
|
-
position: relative;
|
|
26
|
-
background-color: $black;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.media-container {
|
|
30
|
-
position: relative;
|
|
31
|
-
color: $tgo-white;
|
|
32
|
-
flex-grow: 1;
|
|
33
|
-
|
|
34
|
-
.interview-stream-container {
|
|
35
|
-
border-radius: $border-radius;
|
|
36
|
-
aspect-ratio: 16 / 9;
|
|
37
|
-
border: 4px solid $informative-40;
|
|
38
|
-
margin: 0 auto;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
.candidate-no-camera {
|
|
42
|
-
position: absolute;
|
|
43
|
-
width: 200px;
|
|
44
|
-
aspect-ratio: 16 / 9;
|
|
45
|
-
z-index: 3;
|
|
46
|
-
top: 32px;
|
|
47
|
-
left: 32px;
|
|
48
|
-
border-radius: $border-radius;
|
|
49
|
-
background-color: #1a47aa;
|
|
50
|
-
display: flex;
|
|
51
|
-
justify-content: space-between;
|
|
52
|
-
flex-direction: column;
|
|
53
|
-
padding: 16px;
|
|
54
|
-
|
|
55
|
-
ui-icon {
|
|
56
|
-
margin: auto;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.candidate-camera {
|
|
61
|
-
position: absolute;
|
|
62
|
-
width: 200px;
|
|
63
|
-
top: 32px;
|
|
64
|
-
left: 32px;
|
|
65
|
-
z-index: 3;
|
|
66
|
-
|
|
67
|
-
video {
|
|
68
|
-
width: 200px;
|
|
69
|
-
border-radius: $border-radius;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
h3 {
|
|
73
|
-
position: absolute;
|
|
74
|
-
bottom: 16px;
|
|
75
|
-
left: 16px;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
tgo-audio-animation {
|
|
80
|
-
position: absolute;
|
|
81
|
-
top: 32px;
|
|
82
|
-
right: 32px;
|
|
83
|
-
z-index: 1;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
tgo-vimeo-video {
|
|
87
|
-
display: none;
|
|
88
|
-
position: absolute;
|
|
89
|
-
height: 100%;
|
|
90
|
-
width: 100%;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
&.is-video-visible {
|
|
94
|
-
tgo-vimeo-video {
|
|
95
|
-
display: block;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
&.is-playing {
|
|
100
|
-
border: 4px solid $informative-40;
|
|
101
|
-
border-bottom-width: 3px;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
&.is-answering {
|
|
105
|
-
.candidate-camera,
|
|
106
|
-
.candidate-no-camera {
|
|
107
|
-
tgo-audio-animation {
|
|
108
|
-
position: absolute;
|
|
109
|
-
top: 16px;
|
|
110
|
-
right: 16px;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
.candidate-camera video,
|
|
115
|
-
.candidate-no-camera {
|
|
116
|
-
border: 3px solid $informative-40;
|
|
117
|
-
border-radius: $border-radius;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
tgo-vimeo-video {
|
|
121
|
-
display: block;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
.start,
|
|
126
|
-
.audio-info,
|
|
127
|
-
.overlay,
|
|
128
|
-
.answer {
|
|
129
|
-
display: flex;
|
|
130
|
-
justify-content: center;
|
|
131
|
-
align-items: center;
|
|
132
|
-
flex-direction: column;
|
|
133
|
-
gap: 40px;
|
|
134
|
-
height: 100%;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
.preview {
|
|
138
|
-
height: 100%;
|
|
139
|
-
display: flex;
|
|
140
|
-
align-items: center;
|
|
141
|
-
flex-direction: column;
|
|
142
|
-
justify-content: flex-end;
|
|
143
|
-
padding: 24px;
|
|
144
|
-
|
|
145
|
-
p {
|
|
146
|
-
color: $grayscale-30;
|
|
147
|
-
margin: 8px 0;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
audio {
|
|
151
|
-
margin: 16px 0;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
&.hidden {
|
|
155
|
-
display: none;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
@media screen and (max-width: 600px) {
|
|
162
|
-
.ai-interview-test {
|
|
163
|
-
padding: 0 24px;
|
|
164
|
-
margin-top: 16px;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|