@snugdesk/avaya-ipo-widget 0.0.0-watch

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.

Potentially problematic release.


This version of @snugdesk/avaya-ipo-widget might be problematic. Click here for more details.

@@ -0,0 +1,2892 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, EventEmitter, Output, Input, Component, ViewChild, NgModule } from '@angular/core';
3
+ import { trigger, transition, style, animate } from '@angular/animations';
4
+ import * as i1$1 from '@angular/forms';
5
+ import { Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
6
+ import { BehaviorSubject, Subject, lastValueFrom, filter } from 'rxjs';
7
+ import * as i1 from '@angular/common/http';
8
+ import { HttpParams, HttpHeaders } from '@angular/common/http';
9
+ import * as i8 from '@snugdesk/core';
10
+ import * as i3 from '@angular/common';
11
+ import { CommonModule } from '@angular/common';
12
+ import * as i10 from '@angular/material/form-field';
13
+ import { MatFormFieldModule, MatError, MatFormField, MatLabel } from '@angular/material/form-field';
14
+ import * as i11 from '@angular/material/input';
15
+ import { MatInputModule } from '@angular/material/input';
16
+ import * as i5 from 'ngx-intl-tel-input';
17
+ import { CountryISO, SearchCountryField, NgxIntlTelInputModule } from 'ngx-intl-tel-input';
18
+ import { PhoneNumberUtil, PhoneNumberFormat } from 'google-libphonenumber';
19
+ import { JwtHelperService } from '@auth0/angular-jwt';
20
+
21
+ var LoginState;
22
+ (function (LoginState) {
23
+ LoginState["LOGIN_SUCCESS"] = "AWL_MSG_LOGIN_SUCCESS";
24
+ LoginState["LOGIN_FAILED"] = "AWL_MSG_LOGIN_FAILED";
25
+ LoginState["LOGIN_EMPTYUSERNAME"] = "AWL_MSG_LOGIN_EMPTYUSERNAME";
26
+ LoginState["LOGIN_EMPTYPASSWORD"] = "AWL_MSG_LOGIN_EMPTYPASSWORD";
27
+ LoginState["LOGIN_GW_NOTCONFIGURED"] = "AWL_MSG_LOGIN_GW_NOTCONFIGURED";
28
+ LoginState["LOGGEDOUT"] = "AWL_MSG_LOGGEDOUT";
29
+ LoginState["WEBSOCKET_FAILURE"] = "AWL_MSG_LOGIN_WEBSOCKET_FAILURE";
30
+ LoginState["DEVICEACCESS_FAILURE"] = "AWL_MSG_DEVICEACCESS_FAILURE";
31
+ LoginState["RELOGGED_IN"] = "AWL_MSG_RELOGGED_IN";
32
+ LoginState["RECONNECTING"] = "AWL_MSG_RECONNECTING";
33
+ LoginState["FAILING_OVER"] = "AWL_MSG_FAILING_OVER";
34
+ LoginState["FAILOVER_SUCCESS"] = "AWL_MSG_FAIL_OVER_SUCCESS";
35
+ LoginState["FAILOVER_FAILED"] = "AWL_MSG_FAIL_OVER_FAILED";
36
+ LoginState["FAILING_BACK"] = "AWL_MSG_FAILING_BACK";
37
+ LoginState["FAILBACK_SUCCESS"] = "AWL_MSG_FAIL_BACK_SUCCESS";
38
+ LoginState["FAILBACK_FAILED"] = "AWL_MSG_FAIL_BACK_FAILED";
39
+ })(LoginState || (LoginState = {}));
40
+ var CallState;
41
+ (function (CallState) {
42
+ CallState["IDLE"] = "AWL_MSG_CALL_IDLE";
43
+ CallState["PROGRESSING"] = "AWL_MSG_CALL_PROGRESSING";
44
+ CallState["RINGING"] = "AWL_MSG_CALL_RINGING";
45
+ CallState["CONNECTED"] = "AWL_MSG_CALL_CONNECTED";
46
+ CallState["DISCONNECTED"] = "AWL_MSG_CALL_DISCONNECTED";
47
+ CallState["FAILED"] = "AWL_MSG_CALL_FAILED";
48
+ CallState["INCOMING"] = "AWL_MSG_CALL_INCOMING";
49
+ CallState["HELD"] = "AWL_MSG_CALL_HELD";
50
+ CallState["TRANSFERRED"] = "AWL_MSG_CALL_TRANSFERRED";
51
+ CallState["FAREND_UPDATE"] = "AWL_MSG_CALL_FAREND_UPDATE";
52
+ })(CallState || (CallState = {}));
53
+ class AvayaIPOCallListener {
54
+ service;
55
+ constructor(service) {
56
+ this.service = service;
57
+ }
58
+ onNewIncomingCall = (callId, callObj, autoAnswer) => {
59
+ const farEndNumber = callObj.getFarEndNumber();
60
+ this.service.zone.run(() => {
61
+ this.service.incomingCallSubject.next({
62
+ callId,
63
+ farEndNumber,
64
+ });
65
+ });
66
+ if (!this.service.activeCallsMap.has(callId)) {
67
+ this.service.assignToFirstAvailableSlot(callId, callObj);
68
+ }
69
+ };
70
+ onCallStateChange = (callId, callObj, event) => {
71
+ // Raw callback from AWL (WebSocket JSON-RPC). Useful to see the original event.
72
+ console.debug('[AWL] onCallStateChange raw →', { callId, event });
73
+ const state = callObj.getCallState();
74
+ this.service.zone.run(() => {
75
+ this.service.callStateSubject.next({ callId, state });
76
+ });
77
+ if (event === 'CallTransferSuccessful') {
78
+ console.debug('Call transfer successful');
79
+ }
80
+ this.service.handleCallState(callObj);
81
+ try {
82
+ const remote = callObj?.getRemoteStream?.();
83
+ // if (remote instanceof MediaStream) {
84
+ // console.log('Remote stream found', remote);
85
+ // this.service.remoteStream = remote;
86
+ // this.service.remoteStream$.next(remote);
87
+ // }
88
+ if (remote instanceof MediaStream) {
89
+ const payload = { callId, stream: remote };
90
+ this.service.remoteStream = payload;
91
+ this.service.remoteStream$.next(payload);
92
+ }
93
+ }
94
+ catch (err) {
95
+ console.warn('Failed to extract media streams', err);
96
+ }
97
+ };
98
+ onCallTerminate = (callId, reason) => {
99
+ this.service.releaseCallById(callId);
100
+ console.debug('Call terminated: ', reason);
101
+ };
102
+ }
103
+ class AvayaIPOService {
104
+ zone;
105
+ http;
106
+ cli; // This should be the type of your Avaya IPO CLI instance
107
+ remoteStream = null;
108
+ remoteStream$ = new BehaviorSubject(null);
109
+ localStream = null;
110
+ incomingCallSubject = new Subject();
111
+ callStateSubject = new Subject();
112
+ callSlots = {
113
+ '1': null,
114
+ '2': null,
115
+ '3': null,
116
+ };
117
+ activeCallsMap = new Map();
118
+ activeCallId = null;
119
+ currentcallId = null;
120
+ agentId = '';
121
+ loginStatusSubject = new BehaviorSubject(false);
122
+ loginStatus$ = this.loginStatusSubject.asObservable();
123
+ DOM_TAGS = {
124
+ localVideo: 'lclVideo',
125
+ remoteVideo: 'rmtVideo',
126
+ remoteAudio: 'rmtAudio',
127
+ localAudio: 'lclAudio',
128
+ };
129
+ CONFIG_TEMPLATE = {
130
+ serviceType: 'phone', // value can be 'phone' or 'agent'
131
+ enableVideo: false,
132
+ Gateway: { ip: 'snugipose.avayalab.in', port: '9443' },
133
+ Stunserver: { ip: '', port: '3478' },
134
+ Turnserver: { ip: '', port: '3478', user: '', pwd: '' },
135
+ AppData: { applicationID: '', applicationUA: '', appInstanceID: '' },
136
+ disableResiliency: false,
137
+ };
138
+ agentStatusApiUrl = 'https://v2xla9n0t6.execute-api.us-west-2.amazonaws.com/dev';
139
+ CALL_HISTORY_API_URL = 'https://ktgxyy2x2h.execute-api.us-west-2.amazonaws.com/avayaCallHistory';
140
+ prewarmedStream;
141
+ isSafari() {
142
+ return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
143
+ }
144
+ _rpcPatched = false;
145
+ constructor(zone, http) {
146
+ this.zone = zone;
147
+ this.http = http;
148
+ }
149
+ init() {
150
+ if (typeof AWL !== 'undefined') {
151
+ this.cli = new AWL.client();
152
+ const cliAny = this.cli;
153
+ Object.defineProperty(cliAny, 'jsonRpc', {
154
+ configurable: true,
155
+ set: (rpcClient) => {
156
+ console.log('[RPC-PATCH] jsonRpc assigned:', rpcClient);
157
+ // restore the real property
158
+ delete cliAny.jsonRpc;
159
+ cliAny.jsonRpc = rpcClient;
160
+ // now do the patch
161
+ this._doPatch();
162
+ },
163
+ });
164
+ }
165
+ else {
166
+ console.warn('AWL is not yet loaded');
167
+ }
168
+ }
169
+ logIn(username, password) {
170
+ this.cli.enableLogging();
171
+ // this.cli.disableLogging();
172
+ const appInstanceId = this.cli.generateAppInstanceID();
173
+ const config = {
174
+ ...this.CONFIG_TEMPLATE,
175
+ AppData: {
176
+ ...this.CONFIG_TEMPLATE.AppData,
177
+ appInstanceID: appInstanceId,
178
+ },
179
+ };
180
+ console.debug('Parsed config: ', config);
181
+ const res_setConfiguration = this.cli.setConfiguration(config, this.handleConfigChange, this.handleRegistrationChange, new AvayaIPOCallListener(this), this.handleTokenRenewal);
182
+ console.debug('res_setConfiguration: ', res_setConfiguration);
183
+ if (res_setConfiguration === 'AWL_MSG_SETCONFIG_SUCCESS') {
184
+ console.debug('SET CONFIG SUCCESS');
185
+ }
186
+ const res_setDomElements = this.cli.setDomElements(this.DOM_TAGS);
187
+ console.debug('res_setDomElements: ', res_setDomElements);
188
+ if (res_setDomElements === 'AWL_MSG_SETDOM_FAILED') {
189
+ console.debug('SET DOM FAILED');
190
+ }
191
+ else {
192
+ console.debug('SET DOM PASS');
193
+ }
194
+ const bumbConnection = 'true';
195
+ this.cli.logIn(username, password, bumbConnection);
196
+ this.setAgentId(username);
197
+ }
198
+ logOut() {
199
+ this.cli.logOut();
200
+ }
201
+ getAlternateServerConfig() {
202
+ return this.cli.getAlternateServerConfig();
203
+ }
204
+ getDeviceList() {
205
+ this.cli.getDeviceList((deviceList) => {
206
+ console.debug('Device List: ', deviceList);
207
+ });
208
+ }
209
+ setDeviceIds(deviceIds) {
210
+ console.debug('setDeviceIds: ', deviceIds);
211
+ this.cli.setDeviceIds(deviceIds);
212
+ }
213
+ async makeCall(destination) {
214
+ await this.prewarmMic();
215
+ console.debug('makeCall devicelist: ', this.getDeviceList());
216
+ const freeSlot = ['1', '2', '3'].find((s) => this.callSlots[s] === null);
217
+ if (!freeSlot) {
218
+ console.warn('All call slots are currently occupied.');
219
+ return null;
220
+ }
221
+ // const callObj = this.cli.makeCall(destination, 'audio');
222
+ const callObj = this.cli.makeCall(destination, 'video', {
223
+ headers: { 'X-Original-Caller': 'asees' },
224
+ });
225
+ if (!callObj) {
226
+ console.error('Error! Cannot make call.');
227
+ return null;
228
+ }
229
+ const callId = callObj.getCallId();
230
+ this.activeCallsMap.set(callId, callObj);
231
+ this.callSlots[freeSlot] = callObj;
232
+ this.activeCallId = callId;
233
+ return freeSlot;
234
+ }
235
+ dropCall() {
236
+ if (!this.activeCallId) {
237
+ console.warn('No active call to drop.');
238
+ return;
239
+ }
240
+ // Find the slot that contains the active call using activeCallId
241
+ let targetSlot = null;
242
+ for (const [slot, callObj] of Object.entries(this.callSlots)) {
243
+ if (callObj && callObj.getCallId() === this.activeCallId) {
244
+ targetSlot = slot;
245
+ break;
246
+ }
247
+ }
248
+ if (!targetSlot) {
249
+ console.error('Active call slot not found for activeCallId:', this.activeCallId);
250
+ return;
251
+ }
252
+ // Drop the active call from the identified slot
253
+ const callId = this.callSlots[targetSlot].getCallId();
254
+ const res_dropCall = this.cli.dropCall(callId);
255
+ console.debug('res_dropCall: ', res_dropCall);
256
+ // Remove the call from the activeCalls map and the slot
257
+ this.activeCallsMap.delete(callId);
258
+ this.callSlots[targetSlot] = null;
259
+ // Reset activeCallId
260
+ this.activeCallId = null;
261
+ }
262
+ doMute() {
263
+ const res_doMute = this.cli.doMute(this.activeCallId);
264
+ console.debug('res_doMute: ', res_doMute);
265
+ }
266
+ doUnMute() {
267
+ const res_doUnMute = this.cli.doUnMute(this.activeCallId);
268
+ console.debug('res_doUnMute: ', res_doUnMute);
269
+ }
270
+ doHold() {
271
+ const res_doHold = this.cli.doHold(this.activeCallId);
272
+ console.debug('res_doHold: ', res_doHold);
273
+ }
274
+ doUnHold() {
275
+ const res_doUnHold = this.cli.doUnHold(this.activeCallId);
276
+ console.debug('res_doUnHold: ', res_doUnHold);
277
+ }
278
+ pauseVideo() {
279
+ const res_pauseVideo = this.cli.pauseVideo(this.activeCallId);
280
+ console.debug('res_pauseVideo: ', res_pauseVideo);
281
+ }
282
+ playVideo() {
283
+ const res_playVideo = this.cli.playVideo(this.activeCallId);
284
+ console.debug('res_playVideo: ', res_playVideo);
285
+ }
286
+ transferCall(target, type) {
287
+ const res_transferCall = this.cli.transferCall(target, this.activeCallId, type);
288
+ console.debug('res_transferCall: ', res_transferCall);
289
+ }
290
+ sendDTMF(digit) {
291
+ const res_sendDTMF = this.cli.sendDTMF(this.activeCallId, digit);
292
+ console.debug('res_sendDTMF: ', res_sendDTMF);
293
+ }
294
+ answerCall() {
295
+ if (this.callSlots['1']) {
296
+ this.activeCallId = this.callSlots['1'].getCallId();
297
+ const res_answerCall = this.cli.answerCall(this.activeCallId);
298
+ console.debug('res_answerCall: ', res_answerCall);
299
+ }
300
+ }
301
+ addVideo() {
302
+ const res_addVideo = this.cli.addVideo(this.activeCallId);
303
+ console.debug('res_addVideo: ', res_addVideo);
304
+ }
305
+ removeVideo() {
306
+ const res_removeVideo = this.cli.removeVideo(this.activeCallId);
307
+ console.debug('res_removeVideo: ', res_removeVideo);
308
+ }
309
+ clearCallSlot() {
310
+ this.callSlots['1'] = null;
311
+ }
312
+ setAgentId(id) {
313
+ this.agentId = id;
314
+ }
315
+ agentIdle() {
316
+ const params = new HttpParams()
317
+ .set('action', 'release')
318
+ .set('agentId', this.agentId);
319
+ const headers = new HttpHeaders({ 'Content-Type': 'application/json' });
320
+ this.http.post(this.agentStatusApiUrl, {}, { params, headers }).subscribe((response) => console.debug('Agent marked as idle: ', response), (error) => console.error('Error updating agent status: ', error));
321
+ }
322
+ agentBusy() {
323
+ const params = new HttpParams()
324
+ .set('action', 'confirm')
325
+ .set('agentId', this.agentId);
326
+ const headers = new HttpHeaders({ 'Content-Type': 'application/json' });
327
+ this.http.post(this.agentStatusApiUrl, {}, { params, headers }).subscribe((response) => console.debug('Agent marked as busy: ', response), (error) => console.error('Error updating agent status: ', error));
328
+ }
329
+ agentAutoRelease() {
330
+ setInterval(() => {
331
+ const params = new HttpParams().set('action', 'auto-release');
332
+ const headers = new HttpHeaders({ 'Content-Type': 'application/json' });
333
+ this.http.get(this.agentStatusApiUrl, { params, headers }).subscribe((response) => console.debug('Auto-release triggered: ', response), (error) => console.error('Auto-release failed: ', error));
334
+ }, 2 * 60 * 1000);
335
+ }
336
+ handleConfigChange = (res_configChange) => {
337
+ console.debug('res_configChange: ', res_configChange);
338
+ };
339
+ handleRegistrationChange = (res_registrationChange) => {
340
+ // console.debug('res_registrationChange: ', res_registrationChange);
341
+ this.zone.run(() => {
342
+ this.loginStatusSubject.next(res_registrationChange);
343
+ });
344
+ console.debug('res_registrationChange: ', res_registrationChange);
345
+ if (res_registrationChange?.result === LoginState.LOGIN_SUCCESS) {
346
+ const rpc = this.cli.jsonRpc;
347
+ if (rpc && rpc.ws) {
348
+ rpc.ws.evtConnectionOpen.attach(() => {
349
+ console.log('[RPC-PATCH] WebSocket open — JSON-RPC ready');
350
+ this.patchRpcForTransfers(this.agentId);
351
+ });
352
+ }
353
+ }
354
+ };
355
+ handleTokenRenewal = (res_tokenRenewal) => {
356
+ console.debug('res_tokenRenewal: ', res_tokenRenewal);
357
+ if (res_tokenRenewal.result == 'AWL_MSG_TOKEN_RENEW_SUCCESS') {
358
+ console.debug('Token is successfully renewed');
359
+ }
360
+ else {
361
+ console.debug('Token renewal failed. reason: ', res_tokenRenewal.reason);
362
+ }
363
+ };
364
+ assignToFirstAvailableSlot(callId, callObj) {
365
+ const freeSlot = Object.entries(this.callSlots).find(([_, obj]) => obj === null);
366
+ if (freeSlot) {
367
+ this.callSlots[freeSlot[0]] = callObj;
368
+ this.activeCallsMap.set(callId, callObj);
369
+ // If we don't already have an active call tracked, set this incoming call as active.
370
+ if (!this.activeCallId) {
371
+ this.activeCallId = callId;
372
+ }
373
+ }
374
+ else {
375
+ console.warn('All call slots are occupied');
376
+ }
377
+ }
378
+ getSlotForCallId(callId) {
379
+ for (const [slot, callObj] of Object.entries(this.callSlots)) {
380
+ if (callObj && callObj.getCallId() === callId) {
381
+ return slot;
382
+ }
383
+ }
384
+ return null;
385
+ }
386
+ releaseCallById(callId) {
387
+ for (const [slot, obj] of Object.entries(this.callSlots)) {
388
+ if (obj?.getCallId() === callId) {
389
+ this.callSlots[slot] = null;
390
+ this.activeCallsMap.delete(callId);
391
+ break;
392
+ }
393
+ }
394
+ }
395
+ handleCallState(callObj) {
396
+ console.debug(`Call state updated for Call ID: ${callObj?.getCallId()}`, callObj);
397
+ console.debug(`Call state updated for Call ID: ${callObj?.getSipUri()}`, callObj);
398
+ this.currentcallId = callObj.getCallId();
399
+ const state = callObj.getCallState();
400
+ if (!this.activeCallId) {
401
+ this.activeCallId = callObj.getCallId();
402
+ }
403
+ switch (state) {
404
+ case CallState.FAILED:
405
+ case CallState.DISCONNECTED:
406
+ console.debug('Call Failed or DISCONNECTED! Releasing call...');
407
+ this.releaseCallById(callObj.getCallId());
408
+ // Signal UI to reset to dialpad (ensure change detection runs)
409
+ this.zone.run(() => {
410
+ this.callStateSubject.next({
411
+ callId: callObj.getCallId(),
412
+ state: CallState.DISCONNECTED,
413
+ });
414
+ });
415
+ break;
416
+ case CallState.FAREND_UPDATE:
417
+ console.debug('FarEnd Updated:', callObj.getFarEndNumber(), callObj.getFarEndName(), callObj.getSipUri());
418
+ break;
419
+ default:
420
+ console.debug('Call state: ', state);
421
+ }
422
+ }
423
+ swapLines() {
424
+ let currentSlotKey = null;
425
+ // Find the slot key of the current active call
426
+ for (const [key, call] of Object.entries(this.callSlots)) {
427
+ if (call && call.getCallId() === this.activeCallId) {
428
+ currentSlotKey = key;
429
+ break;
430
+ }
431
+ }
432
+ if (!currentSlotKey) {
433
+ console.warn('Active call slot not found.');
434
+ return;
435
+ }
436
+ // Find another active call to swap to
437
+ for (const [key, call] of Object.entries(this.callSlots)) {
438
+ if (key === currentSlotKey)
439
+ continue;
440
+ if (call) {
441
+ const currentCall = this.callSlots[currentSlotKey];
442
+ console.log(`Holding call in slot ${currentSlotKey}`);
443
+ this.cli.doHold(currentCall?.getCallId());
444
+ console.log(`Unholding call in slot ${key}`);
445
+ this.cli.doUnHold(call.getCallId());
446
+ this.activeCallId = call.getCallId();
447
+ return;
448
+ }
449
+ }
450
+ console.warn('No other active calls to swap to.');
451
+ }
452
+ swapToSlot(targetSlot) {
453
+ // 1) Find the current slot
454
+ let currentSlotKey = null;
455
+ for (const [key, call] of Object.entries(this.callSlots)) {
456
+ if (call && call.getCallId() === this.activeCallId) {
457
+ currentSlotKey = key;
458
+ break;
459
+ }
460
+ }
461
+ if (!currentSlotKey) {
462
+ console.warn("Active call slot not found, can't swap.");
463
+ return;
464
+ }
465
+ // 2) If targetSlot is the same as currentSlotKey, do nothing
466
+ if (targetSlot === currentSlotKey) {
467
+ console.log(`Already on slot ${targetSlot}, no swap needed.`);
468
+ return;
469
+ }
470
+ // 3) If the target slot has a call
471
+ const targetCall = this.callSlots[targetSlot];
472
+ if (!targetCall) {
473
+ console.warn(`No call in slot ${targetSlot}, can't unhold that slot.`);
474
+ return;
475
+ }
476
+ // 4) Hold the old slot
477
+ const currentCall = this.callSlots[currentSlotKey];
478
+ console.log(`Holding call in slot ${currentSlotKey}`);
479
+ this.cli.doHold(currentCall?.getCallId());
480
+ // 5) Unhold the target slot
481
+ console.log(`Unholding call in slot ${targetSlot}`);
482
+ this.cli.doUnHold(targetCall.getCallId());
483
+ // 6) Update activeCallId
484
+ this.activeCallId = targetCall.getCallId();
485
+ console.log(`Swapped from slot ${currentSlotKey} to slot ${targetSlot}.`);
486
+ }
487
+ dropCallBySlot(targetSlot) {
488
+ // Check if there is a call in the requested slot.
489
+ const targetCall = this.callSlots[targetSlot];
490
+ if (!targetCall) {
491
+ console.warn(`No active call in slot ${targetSlot} to drop.`);
492
+ return;
493
+ }
494
+ // Retrieve the call ID from the target call.
495
+ const callId = targetCall.getCallId();
496
+ console.log(`Dropping call in slot ${targetSlot}, callId: ${callId}`);
497
+ // Issue the drop command through Avaya's CLI.
498
+ const res_dropCall = this.cli.dropCall(callId);
499
+ console.debug('dropCallBySlot response:', res_dropCall);
500
+ // Clean up: remove the call from the slot and from the activeCallsMap.
501
+ this.activeCallsMap.delete(callId);
502
+ this.callSlots[targetSlot] = null;
503
+ // If the activeCallId matches the dropped call, reset it.
504
+ if (this.activeCallId === callId) {
505
+ this.activeCallId = null;
506
+ }
507
+ }
508
+ mergeCall() {
509
+ const activeCallObjs = Object.entries(this.callSlots)
510
+ .filter(([_, callObj]) => callObj !== null)
511
+ .map(([_, callObj]) => callObj);
512
+ if (activeCallObjs.length < 2) {
513
+ console.warn('At least two active calls are required to perform merge.');
514
+ return;
515
+ }
516
+ const [sourceCall, targetCall] = activeCallObjs;
517
+ try {
518
+ const sourceCallId = sourceCall.getCallId();
519
+ const targetCallId = targetCall.getCallId();
520
+ console.log(`Merging calls: from ${sourceCallId} to ${targetCallId}`);
521
+ this.cli.transferCall(targetCallId, sourceCallId, 'Attended');
522
+ }
523
+ catch (error) {
524
+ console.error('Merge call failed:', error);
525
+ }
526
+ }
527
+ logCall(callData) {
528
+ // 1) Build the HttpParams with "action=log"
529
+ const params = new HttpParams().set('action', 'log');
530
+ // 2) Set headers to JSON
531
+ const headers = new HttpHeaders({ 'Content-Type': 'application/json' });
532
+ // 3) Make a POST request, passing callData in the body, and use params + headers
533
+ return this.http.post(this.CALL_HISTORY_API_URL, callData, {
534
+ params,
535
+ headers,
536
+ });
537
+ }
538
+ getActiveCallId() {
539
+ if (!this.activeCallId) {
540
+ return null;
541
+ }
542
+ const callObj = this.activeCallsMap.get(this.activeCallId);
543
+ if (!callObj) {
544
+ return null;
545
+ }
546
+ return callObj.getCallId();
547
+ }
548
+ async initLocalMic() {
549
+ try {
550
+ const micStream = await navigator.mediaDevices.getUserMedia({
551
+ audio: true,
552
+ });
553
+ console.log('Captured mic stream:', micStream);
554
+ this.localStream = micStream;
555
+ }
556
+ catch (err) {
557
+ console.error('Failed to capture microphone:', err);
558
+ }
559
+ }
560
+ /////////////////////////////////////////////////////////////
561
+ patchRpcForTransfers(agentId) {
562
+ if (this._rpcPatched) {
563
+ console.debug('[RPC-PATCH] already patched');
564
+ return;
565
+ }
566
+ const jsonRpc = this.cli.jsonRpc;
567
+ if (!jsonRpc || !jsonRpc.ws) {
568
+ console.warn('[RPC-PATCH] JSON-RPC not ready yet');
569
+ return;
570
+ }
571
+ console.debug('[RPC-PATCH] patching ws.send now');
572
+ this._rpcPatched = true;
573
+ const ws = jsonRpc.ws;
574
+ const origSend = ws.send.bind(ws);
575
+ ws.send = (raw) => {
576
+ // log every outbound frame so you can see your injection happen
577
+ try {
578
+ const msg = JSON.parse(raw);
579
+ if (msg.msgname === 'makeCall' || msg.msgname === 'transferCall') {
580
+ console.debug(`[RPC-PATCH] sending ${msg.msgname} →`, msg.params);
581
+ }
582
+ }
583
+ catch (_) {
584
+ /* not JSON, ignore */
585
+ }
586
+ return origSend(raw);
587
+ };
588
+ }
589
+ async makeCallWithCustomData(destination, dataToSend) {
590
+ // 0) Safari race fix
591
+ await this.prewarmMic();
592
+ this.patchRpcForTransfers(dataToSend);
593
+ // 2) find a free slot
594
+ const freeSlot = ['1', '2', '3'].find((s) => this.callSlots[s] === null);
595
+ if (!freeSlot) {
596
+ console.warn('All call slots are occupied.');
597
+ return null;
598
+ }
599
+ // 3) kick off the call via AWL
600
+ const callObj = this.cli.makeCall(destination, 'audio');
601
+ if (!callObj) {
602
+ console.error('Error! Cannot make call.');
603
+ return null;
604
+ }
605
+ // 4) book-keep exactly as you do today
606
+ const callId = callObj.getCallId();
607
+ this.activeCallsMap.set(callId, callObj);
608
+ this.callSlots[freeSlot] = callObj;
609
+ this.activeCallId = callId;
610
+ console.log(`📡 Started call in slot ${freeSlot} with customData="${dataToSend}"`);
611
+ return freeSlot;
612
+ }
613
+ transferCallWithTag(target, type) {
614
+ // 1) patch the JSON-RPC so the next transferCall has our tag
615
+ this.patchRpcForTransfers(this.agentId);
616
+ // 2) do the normal AWL transfer
617
+ const res = this.cli.transferCall(target, this.activeCallId, type);
618
+ console.debug('res_transferCall:', res);
619
+ }
620
+ _doPatch() {
621
+ // if (this._rpcPatched) return;
622
+ this._rpcPatched = true;
623
+ console.log('[RPC-PATCH] patching WebSocket now');
624
+ const jsonRpc = this.cli.jsonRpc;
625
+ const ws = jsonRpc.ws;
626
+ const origSend = ws.send.bind(ws);
627
+ ws.send = (data) => {
628
+ console.log('[RPC-PATCH] raw ws.send →', data);
629
+ try {
630
+ const msg = JSON.parse(data);
631
+ if (msg.msgname === 'makeCall' || msg.msgname === 'transferCall') {
632
+ // inject your field
633
+ msg.params.transferingAgent = this.agentId;
634
+ const patched = JSON.stringify(msg);
635
+ console.log(`[RPC-PATCH] sending ${msg.msgname} with params →`, msg.params);
636
+ return origSend(patched);
637
+ }
638
+ }
639
+ catch {
640
+ // non-JSON or other messages
641
+ }
642
+ return origSend(data);
643
+ };
644
+ }
645
+ /** Pre-warm microphone so AWL always has a local stream when it tries addStream() */
646
+ async prewarmMic() {
647
+ // Reuse if we already have a healthy stream
648
+ if (this.prewarmedStream && this.prewarmedStream.getTracks().length) {
649
+ return this.prewarmedStream;
650
+ }
651
+ // On Safari, first call should be simple (no exact device constraints)
652
+ const audio = this.isSafari() ? true : { echoCancellation: false, noiseSuppression: false, autoGainControl: false };
653
+ const stream = await navigator.mediaDevices.getUserMedia({ audio });
654
+ this.prewarmedStream = stream;
655
+ this.localStream = stream;
656
+ // Hand it to the polyfill fallback so addStream(undefined) still works
657
+ window.__LAST_LOCAL_STREAM = stream;
658
+ // (Optional) Nudge autoplay policy: attach to a muted hidden <audio> once
659
+ try {
660
+ const a = document.createElement('audio');
661
+ a.muted = true;
662
+ a.autoplay = true;
663
+ a.style.display = 'none';
664
+ a.srcObject = stream;
665
+ document.body.appendChild(a);
666
+ await a.play().catch(() => { });
667
+ // keep element for lifetime of the page to avoid GC issues
668
+ }
669
+ catch { }
670
+ return stream;
671
+ }
672
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AvayaIPOService, deps: [{ token: i0.NgZone }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
673
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AvayaIPOService, providedIn: 'root' });
674
+ }
675
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AvayaIPOService, decorators: [{
676
+ type: Injectable,
677
+ args: [{ providedIn: 'root' }]
678
+ }], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.HttpClient }] });
679
+
680
+ class CountryService {
681
+ httpClient;
682
+ countriesData;
683
+ // private static readonly COUNTRY_ENDPOINT = `https://assets.snugdesk.com/metadata/countries.json`;
684
+ static COUNTRY_ENDPOINT = `https://snugdesk-assets.s3.amazonaws.com/metadata/countries.json`;
685
+ constructor(httpClient) {
686
+ this.httpClient = httpClient;
687
+ }
688
+ async getAllCountries() {
689
+ if (!this.countriesData) {
690
+ this.countriesData = await lastValueFrom(this.httpClient.get(CountryService.COUNTRY_ENDPOINT));
691
+ }
692
+ return this.countriesData;
693
+ }
694
+ async getCountryFromCallingCode(countryCallingCode) {
695
+ await this.getAllCountries();
696
+ return this.countriesData?.find((c) => c.callingCode === countryCallingCode);
697
+ }
698
+ async getCountryFromCountryCode(countryCode) {
699
+ await this.getAllCountries();
700
+ return this.countriesData?.find((c) => c.code === countryCode);
701
+ }
702
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CountryService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
703
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CountryService, providedIn: 'root' });
704
+ }
705
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CountryService, decorators: [{
706
+ type: Injectable,
707
+ args: [{
708
+ providedIn: 'root',
709
+ }]
710
+ }], ctorParameters: () => [{ type: i1.HttpClient }] });
711
+
712
+ class PhoneNumberLookupService {
713
+ httpClient;
714
+ constructor(httpClient) {
715
+ this.httpClient = httpClient;
716
+ }
717
+ async lookupPhoneNumber(phoneNumber, hlr) {
718
+ const apiEndpoint = hlr
719
+ ? `https://api.snugdesk.com/phone-numbers/hlr/${encodeURIComponent(phoneNumber)}`
720
+ : `https://api.snugdesk.com/phone-numbers/${encodeURIComponent(phoneNumber)}`;
721
+ const res_lookupPhoneNumber = await lastValueFrom(this.httpClient.get(apiEndpoint));
722
+ // console.debug('res_lookupPhoneNumber: ', res_lookupPhoneNumber);
723
+ return res_lookupPhoneNumber;
724
+ }
725
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: PhoneNumberLookupService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
726
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: PhoneNumberLookupService, providedIn: 'root' });
727
+ }
728
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: PhoneNumberLookupService, decorators: [{
729
+ type: Injectable,
730
+ args: [{
731
+ providedIn: 'root',
732
+ }]
733
+ }], ctorParameters: () => [{ type: i1.HttpClient }] });
734
+
735
+ // import { Injectable } from '@angular/core';
736
+ // import { HttpClient } from '@angular/common/http';
737
+ // import { lastValueFrom } from 'rxjs';
738
+ // import { CallMetadata } from '../models/active-call.model';
739
+ // export interface RecordingSession {
740
+ // audioContext: AudioContext;
741
+ // recordingStream: MediaStreamAudioDestinationNode;
742
+ // recorder: MediaRecorder;
743
+ // metadata: CallMetadata;
744
+ // }
745
+ // @Injectable({ providedIn: 'root' })
746
+ // export class RecordingManagerService {
747
+ // private sessions = new Map<string, RecordingSession>();
748
+ // private readonly MIME_TYPE_PREFERRED = 'audio/webm;codecs=opus';
749
+ // private readonly MIME_TYPE_FALLBACK = 'audio/webm';
750
+ // private readonly CHUNK_DURATION_MS = 5000;
751
+ // private readonly AUDIO_CONTEXT_CLOSE_DELAY_MS = 200;
752
+ // private readonly CALL_HISTORY_API_URL =
753
+ // 'https://ktgxyy2x2h.execute-api.us-west-2.amazonaws.com/avayaCallHistory';
754
+ // constructor(private http: HttpClient) {}
755
+ // // prettier-ignore
756
+ // startRecording(localMediaStream: MediaStream, remoteMediaStream: MediaStream, metadata: RecordingSession['metadata']): RecordingSession | undefined {
757
+ // // Stop any existing recording session for this callId
758
+ // this.stopRecording(metadata.callId);
759
+ // if (!localMediaStream || !remoteMediaStream) {
760
+ // console.warn(`[${metadata.callId}] Skipped start recording: missing remote or local stream`);
761
+ // return undefined;
762
+ // }
763
+ // const audioContext = new AudioContext();
764
+ // const recordingStream = audioContext.createMediaStreamDestination();
765
+ // // console.debug(`[${metadata.callId}] Connecting local and remote audio streams to recording context`);
766
+ // audioContext.createMediaStreamSource(localMediaStream).connect(recordingStream);
767
+ // audioContext.createMediaStreamSource(remoteMediaStream).connect(recordingStream);
768
+ // const mimeType = MediaRecorder.isTypeSupported(this.MIME_TYPE_PREFERRED)
769
+ // ? this.MIME_TYPE_PREFERRED
770
+ // : this.MIME_TYPE_FALLBACK;
771
+ // const recorder = new MediaRecorder(recordingStream.stream, { mimeType });
772
+ // recorder.ondataavailable = (evt: BlobEvent) => this.handleDataAvailable(evt, metadata);
773
+ // recorder.onerror = (err) => console.error(`[${metadata.callId}] MediaRecorder error:`, err);
774
+ // recorder.start(this.CHUNK_DURATION_MS);
775
+ // console.debug(`[${metadata.callId}] MediaRecorder started (chunk size: ${this.CHUNK_DURATION_MS / 1000}s)`);
776
+ // const session: RecordingSession = {
777
+ // audioContext,
778
+ // recordingStream,
779
+ // recorder,
780
+ // metadata,
781
+ // };
782
+ // this.sessions.set(metadata.callId, session);
783
+ // return session;
784
+ // }
785
+ // getSession(callId: string): RecordingSession | undefined {
786
+ // return this.sessions.get(callId);
787
+ // }
788
+ // stopRecording(callId: string): void {
789
+ // const session = this.sessions.get(callId);
790
+ // if (!session) return;
791
+ // const { recorder, audioContext } = session;
792
+ // if (recorder?.state === 'recording') {
793
+ // recorder.stop();
794
+ // console.debug(`[${callId}] MediaRecorder stopped`);
795
+ // }
796
+ // setTimeout(() => {
797
+ // if (audioContext.state !== 'closed') {
798
+ // audioContext.close();
799
+ // console.debug(`[${callId}] AudioContext closed`);
800
+ // }
801
+ // }, this.AUDIO_CONTEXT_CLOSE_DELAY_MS);
802
+ // this.sessions.delete(callId);
803
+ // }
804
+ // // prettier-ignore
805
+ // private async handleDataAvailable(evt: BlobEvent, metadata: RecordingSession['metadata']): Promise<void> {
806
+ // if (!evt.data || evt.data.size === 0) return;
807
+ // const filename = this.generateFilename(metadata.callId);
808
+ // // console.debug(`[${metadata.callId}] Recording chunk ready → preparing to upload as "${filename}"`);
809
+ // try {
810
+ // await this.uploadCallRecording(metadata, evt.data, filename);
811
+ // console.debug(`[${metadata.callId}] Upload successful → "${filename}"`);
812
+ // } catch (err) {
813
+ // console.error(`[${metadata.callId}] Upload failed → "${filename}"`, err);
814
+ // }
815
+ // }
816
+ // // prettier-ignore
817
+ // private async uploadCallRecording(metadata: RecordingSession['metadata'], file: Blob, filename?: string): Promise<{ success: boolean; message: string; s3Key?: string }> {
818
+ // try {
819
+ // if (!filename) {
820
+ // const timestamp = new Date()
821
+ // .toISOString()
822
+ // .replace(/[:.]/g, '')
823
+ // .replace('T', '-')
824
+ // .slice(0, 15);
825
+ // filename = `${timestamp}-${metadata.agentId}.webm`;
826
+ // console.debug(`[${metadata.callId}] filename generated: "${filename}"`);
827
+ // }
828
+ // // console.debug(`[${metadata.callId}] Converting Blob to Base64 for upload`);
829
+ // const base64 = await this.convertBlobToBase64(file);
830
+ // const body = base64.split(',')[1];
831
+ // const payload = {
832
+ // ...metadata,
833
+ // filename,
834
+ // isBase64: true,
835
+ // body,
836
+ // };
837
+ // const url = `${this.CALL_HISTORY_API_URL}?action=uploadRecording`;
838
+ // console.debug(`[${metadata.callId}] Sending recording chunk to ${url}`);
839
+ // console.debug(`[${metadata.callId}] Payload: `, payload);
840
+ // const res: any = await lastValueFrom(
841
+ // this.http.post(url, payload, {
842
+ // headers: { 'Content-Type': 'application/json' },
843
+ // responseType: 'json',
844
+ // })
845
+ // );
846
+ // console.debug(`[${metadata.callId}] Upload response: `, res);
847
+ // return {
848
+ // success: true,
849
+ // message: res?.message || 'Upload successful',
850
+ // s3Key: res?.s3Key,
851
+ // };
852
+ // } catch (err: any) {
853
+ // console.error(`[${metadata.callId}] Upload failed: `, err);
854
+ // return {
855
+ // success: false,
856
+ // message: err?.message || 'Upload failed',
857
+ // };
858
+ // }
859
+ // }
860
+ // private convertBlobToBase64(blob: Blob): Promise<string> {
861
+ // return new Promise((resolve, reject) => {
862
+ // const reader = new FileReader();
863
+ // reader.onerror = reject;
864
+ // reader.onload = () => resolve(reader.result as string);
865
+ // reader.readAsDataURL(blob);
866
+ // });
867
+ // }
868
+ // private generateFilename(callId: string): string {
869
+ // const now = new Date();
870
+ // const dateStr = now.toISOString().slice(0, 10).replace(/-/g, '');
871
+ // const timeStr = now.toTimeString().slice(0, 8).replace(/:/g, '');
872
+ // const msStr = now.getMilliseconds().toString().padStart(3, '0');
873
+ // const filename = `${callId}-${dateStr}-${timeStr}${msStr}.webm`;
874
+ // console.debug(`[${callId}] Generated filename: "${filename}"`);
875
+ // return filename;
876
+ // }
877
+ // }
878
+ class RecordingManagerService {
879
+ http;
880
+ sessions = new Map();
881
+ MIME_TYPE_PREFERRED = 'audio/webm;codecs=opus';
882
+ MIME_TYPE_FALLBACK = 'audio/webm';
883
+ CHUNK_DURATION_MS = 5000;
884
+ AUDIO_CONTEXT_CLOSE_DELAY_MS = 200;
885
+ CALL_HISTORY_API_URL = 'https://ktgxyy2x2h.execute-api.us-west-2.amazonaws.com/avayaCallHistory';
886
+ constructor(http) {
887
+ this.http = http;
888
+ }
889
+ // ---- Public API ----------------------------------------------------------
890
+ startRecording(localMediaStream, remoteMediaStream, metadata) {
891
+ // stop any previous session for this call
892
+ this.stopRecording(metadata.callId);
893
+ if (!localMediaStream || !remoteMediaStream) {
894
+ console.warn(`[${metadata.callId}] Skipped start recording: missing remote or local stream`);
895
+ return undefined;
896
+ }
897
+ const audioContext = new AudioContext();
898
+ const recordingStream = audioContext.createMediaStreamDestination();
899
+ audioContext.createMediaStreamSource(localMediaStream).connect(recordingStream);
900
+ audioContext.createMediaStreamSource(remoteMediaStream).connect(recordingStream);
901
+ const session = {
902
+ audioContext,
903
+ recordingStream,
904
+ metadata,
905
+ stopping: false,
906
+ chunkIndex: 0,
907
+ recorder: null,
908
+ chunkTimer: undefined
909
+ };
910
+ this.sessions.set(metadata.callId, session);
911
+ // kick off the chunk loop
912
+ this.startNextChunk(session);
913
+ return session;
914
+ }
915
+ getSession(callId) {
916
+ return this.sessions.get(callId);
917
+ }
918
+ stopRecording(callId) {
919
+ const session = this.sessions.get(callId);
920
+ if (!session)
921
+ return;
922
+ session.stopping = true;
923
+ if (session.chunkTimer) {
924
+ clearTimeout(session.chunkTimer);
925
+ session.chunkTimer = undefined;
926
+ }
927
+ const rec = session.recorder;
928
+ if (rec && rec.state === 'recording') {
929
+ try {
930
+ rec.stop(); // this will still produce the final (playable) chunk
931
+ }
932
+ catch { }
933
+ }
934
+ // close audio context a bit later
935
+ setTimeout(() => {
936
+ if (session.audioContext.state !== 'closed') {
937
+ session.audioContext.close();
938
+ console.debug(`[${session.metadata.callId}] AudioContext closed`);
939
+ }
940
+ }, this.AUDIO_CONTEXT_CLOSE_DELAY_MS);
941
+ this.sessions.delete(callId);
942
+ }
943
+ // ---- Internals -----------------------------------------------------------
944
+ /** Start a new MediaRecorder for the next chunk so the blob has its own headers */
945
+ startNextChunk(session) {
946
+ if (session.stopping)
947
+ return;
948
+ const mimeType = MediaRecorder.isTypeSupported(this.MIME_TYPE_PREFERRED)
949
+ ? this.MIME_TYPE_PREFERRED
950
+ : this.MIME_TYPE_FALLBACK;
951
+ const recorder = new MediaRecorder(session.recordingStream.stream, { mimeType });
952
+ session.recorder = recorder;
953
+ const myChunkIdx = session.chunkIndex++;
954
+ recorder.ondataavailable = async (evt) => {
955
+ if (!evt.data || evt.data.size === 0)
956
+ return;
957
+ // give each chunk its own unique filename (includes index)
958
+ const filename = this.generateChunkFilename(session.metadata.callId, myChunkIdx);
959
+ try {
960
+ await this.uploadCallRecording(session.metadata, evt.data, filename);
961
+ console.debug(`[${session.metadata.callId}] ✅ uploaded chunk → ${filename}`);
962
+ }
963
+ catch (err) {
964
+ console.error(`[${session.metadata.callId}] ❌ upload failed → ${filename}`, err);
965
+ }
966
+ };
967
+ recorder.onerror = (err) => {
968
+ console.error(`[${session.metadata.callId}] MediaRecorder error:`, err);
969
+ };
970
+ // when this recorder is stopped, immediately start the next one (unless stopping)
971
+ recorder.onstop = () => {
972
+ if (session.stopping)
973
+ return;
974
+ // start the next chunk on the next tick to avoid overlap
975
+ setTimeout(() => this.startNextChunk(session), 0);
976
+ };
977
+ // Start recording this chunk (no timeslice!) and schedule a stop after N ms.
978
+ recorder.start();
979
+ console.debug(`[${session.metadata.callId}] MediaRecorder started for chunk #${myChunkIdx}`);
980
+ session.chunkTimer = window.setTimeout(() => {
981
+ if (!session.stopping && recorder.state === 'recording') {
982
+ // ensure we flush a complete, headered WebM
983
+ recorder.stop();
984
+ console.debug(`[${session.metadata.callId}] MediaRecorder stopped for chunk #${myChunkIdx}`);
985
+ }
986
+ }, this.CHUNK_DURATION_MS);
987
+ }
988
+ // Upload a single chunk (Blob) as base64 payload
989
+ async uploadCallRecording(metadata, file, filename) {
990
+ try {
991
+ if (!filename) {
992
+ filename = this.generateFilename(metadata.callId, metadata.agentId);
993
+ }
994
+ const base64 = await this.convertBlobToBase64(file);
995
+ const body = base64.split(',')[1];
996
+ const payload = {
997
+ ...metadata,
998
+ filename,
999
+ isBase64: true,
1000
+ body,
1001
+ };
1002
+ const url = `${this.CALL_HISTORY_API_URL}?action=uploadRecording`;
1003
+ const res = await lastValueFrom(this.http.post(url, payload, {
1004
+ headers: { 'Content-Type': 'application/json' },
1005
+ responseType: 'json',
1006
+ }));
1007
+ return {
1008
+ success: true,
1009
+ message: res?.message || 'Upload successful',
1010
+ s3Key: res?.s3Key,
1011
+ };
1012
+ }
1013
+ catch (err) {
1014
+ return {
1015
+ success: false,
1016
+ message: err?.message || 'Upload failed',
1017
+ };
1018
+ }
1019
+ }
1020
+ convertBlobToBase64(blob) {
1021
+ return new Promise((resolve, reject) => {
1022
+ const reader = new FileReader();
1023
+ reader.onerror = reject;
1024
+ reader.onload = () => resolve(reader.result);
1025
+ reader.readAsDataURL(blob);
1026
+ });
1027
+ }
1028
+ generateFilename(callId, agentId) {
1029
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '').replace('T', '-').slice(0, 15);
1030
+ return `${timestamp}-${agentId}-${callId}.webm`;
1031
+ }
1032
+ generateChunkFilename(callId, chunkIndex) {
1033
+ const now = new Date();
1034
+ const dateStr = now.toISOString().slice(0, 10).replace(/-/g, '');
1035
+ const timeStr = now.toTimeString().slice(0, 8).replace(/:/g, '');
1036
+ const msStr = now.getMilliseconds().toString().padStart(3, '0');
1037
+ const part = String(chunkIndex).padStart(4, '0');
1038
+ return `${callId}-${dateStr}-${timeStr}${msStr}-part${part}.webm`;
1039
+ }
1040
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: RecordingManagerService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
1041
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: RecordingManagerService, providedIn: 'root' });
1042
+ }
1043
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: RecordingManagerService, decorators: [{
1044
+ type: Injectable,
1045
+ args: [{ providedIn: 'root' }]
1046
+ }], ctorParameters: () => [{ type: i1.HttpClient }] });
1047
+
1048
+ // import { Injectable } from '@angular/core';
1049
+ // import { BehaviorSubject } from 'rxjs';
1050
+ // import { CallMetadata } from '../models/active-call.model';
1051
+ // @Injectable({ providedIn: 'root' })
1052
+ // export class CallSocketService {
1053
+ // private socket: WebSocket | null = null;
1054
+ // readonly message$ = new BehaviorSubject<any>(null);
1055
+ // open(metadata: CallMetadata): void {
1056
+ // if (this.socket?.readyState === WebSocket.OPEN) return;
1057
+ // if (this.socket?.readyState === WebSocket.CONNECTING) return;
1058
+ // this.socket = new WebSocket(
1059
+ // 'wss://hymtqh7k82.execute-api.us-west-2.amazonaws.com/callSession'
1060
+ // );
1061
+ // this.socket.onopen = () => {
1062
+ // console.warn('[WS] open----------------------------------------------');
1063
+ // this.socket!.send(JSON.stringify(metadata));
1064
+ // };
1065
+ // this.socket.onmessage = (ev) => {
1066
+ // try {
1067
+ // this.message$.next(JSON.parse(ev.data));
1068
+ // } catch {
1069
+ // this.message$.next(ev.data);
1070
+ // }
1071
+ // };
1072
+ // this.socket.onerror = (ev) => {
1073
+ // console.error('[WS] error', ev);
1074
+ // };
1075
+ // this.socket.onclose = () => {
1076
+ // console.warn('[WS] closed');
1077
+ // this.socket = null;
1078
+ // };
1079
+ // }
1080
+ // send(payload: object): void {
1081
+ // if (this.socket?.readyState === WebSocket.OPEN) {
1082
+ // this.socket.send(JSON.stringify(payload));
1083
+ // } else {
1084
+ // console.warn('[WS] not open; dropping', payload);
1085
+ // }
1086
+ // }
1087
+ // close(): void {
1088
+ // this.socket?.close();
1089
+ // this.socket = null;
1090
+ // }
1091
+ // }
1092
+ class CallSocketService {
1093
+ sockets = new Map();
1094
+ subjects = new Map();
1095
+ open(metadata) {
1096
+ const { callId } = metadata;
1097
+ const existing = this.sockets.get(callId);
1098
+ if (existing && (existing.readyState === WebSocket.OPEN || existing.readyState === WebSocket.CONNECTING)) {
1099
+ return;
1100
+ }
1101
+ const ws = new WebSocket('wss://hymtqh7k82.execute-api.us-west-2.amazonaws.com/callSession');
1102
+ this.sockets.set(callId, ws);
1103
+ if (!this.subjects.has(callId))
1104
+ this.subjects.set(callId, new BehaviorSubject(null));
1105
+ ws.onopen = () => {
1106
+ console.warn('[WS Open ]', { callId });
1107
+ ws.send(JSON.stringify(metadata));
1108
+ };
1109
+ ws.onmessage = (ev) => {
1110
+ const subj = this.subjects.get(callId);
1111
+ if (!subj)
1112
+ return;
1113
+ try {
1114
+ subj.next(JSON.parse(ev.data));
1115
+ }
1116
+ catch {
1117
+ subj.next(ev.data);
1118
+ }
1119
+ };
1120
+ ws.onerror = (ev) => {
1121
+ console.warn('[WS Error]', { callId, ev });
1122
+ };
1123
+ ws.onclose = () => {
1124
+ console.warn('[WS Closed]', { callId });
1125
+ this.sockets.delete(callId);
1126
+ // keep subject around if you want late subscribers to see last value.
1127
+ // If you want to free it too, uncomment the next line:
1128
+ // this.subjects.delete(callId);
1129
+ };
1130
+ }
1131
+ messages$(callId) {
1132
+ return this.subjects.get(callId);
1133
+ }
1134
+ send(callId, payload) {
1135
+ const ws = this.sockets.get(callId);
1136
+ if (ws?.readyState === WebSocket.OPEN) {
1137
+ ws.send(JSON.stringify(payload));
1138
+ }
1139
+ else {
1140
+ console.warn('[WS NotOpen ]', { callId, dropping: payload });
1141
+ }
1142
+ }
1143
+ close(callId) {
1144
+ const ws = this.sockets.get(callId);
1145
+ if (ws) {
1146
+ ws.close();
1147
+ this.sockets.delete(callId);
1148
+ // optional: also remove the subject
1149
+ // this.subjects.delete(callId);
1150
+ }
1151
+ }
1152
+ closeAll() {
1153
+ for (const [callId, ws] of this.sockets.entries()) {
1154
+ try {
1155
+ ws.close();
1156
+ }
1157
+ catch { }
1158
+ console.warn('[WS Closed]', { callId });
1159
+ }
1160
+ this.sockets.clear();
1161
+ // optional: also clear subjects
1162
+ // this.subjects.clear();
1163
+ }
1164
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CallSocketService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1165
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CallSocketService, providedIn: 'root' });
1166
+ }
1167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CallSocketService, decorators: [{
1168
+ type: Injectable,
1169
+ args: [{ providedIn: 'root' }]
1170
+ }] });
1171
+
1172
+ class CallHistoryComponent {
1173
+ http;
1174
+ authenticationService;
1175
+ cdr;
1176
+ mode = 'dial';
1177
+ makeCallEv = new EventEmitter();
1178
+ transferEv = new EventEmitter();
1179
+ CALL_HISTORY_API_URL = 'https://ktgxyy2x2h.execute-api.us-west-2.amazonaws.com/avayaCallHistory';
1180
+ showHistoryLoader = false;
1181
+ callHistory = [];
1182
+ recentCallactiveTab = 'recentCall';
1183
+ constructor(http, authenticationService, cdr) {
1184
+ this.http = http;
1185
+ this.authenticationService = authenticationService;
1186
+ this.cdr = cdr;
1187
+ }
1188
+ async ngOnInit() {
1189
+ await this.loadCallHistory();
1190
+ }
1191
+ recentSelectTab(tab) {
1192
+ this.recentCallactiveTab = tab;
1193
+ }
1194
+ async loadCallHistory() {
1195
+ this.showHistoryLoader = true;
1196
+ try {
1197
+ // console.log('tennat id fetched ',this.authenticationService.tenant$.getValue());
1198
+ const tenantId = this.authenticationService.getTenantId();
1199
+ console.log('tennat id fetched ', tenantId);
1200
+ // const userId = this.authenticationService.getUserId();
1201
+ // console.log('tennat id fetched ',userId);
1202
+ const userId = '5001';
1203
+ const response = await this.getCallHistory(tenantId, userId);
1204
+ const items = response.items || [];
1205
+ this.callHistory = items.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
1206
+ console.log('Fetched call history: ', this.callHistory);
1207
+ }
1208
+ catch (error) {
1209
+ console.error('Failed to load call history:', error);
1210
+ }
1211
+ finally {
1212
+ this.showHistoryLoader = false;
1213
+ this.cdr.detectChanges();
1214
+ }
1215
+ }
1216
+ getCallHistory(tenantId, agentId) {
1217
+ // GET /avayaCallHistory?action=history&tenantId=xxx&agentId=yyy
1218
+ return lastValueFrom(this.http.get(`${this.CALL_HISTORY_API_URL}?action=history&tenantId=${tenantId}&agentId=${agentId}`));
1219
+ }
1220
+ makeCall(phoneNumber) {
1221
+ this.makeCallEv.emit(phoneNumber);
1222
+ }
1223
+ get callerDropped() {
1224
+ return this.callHistory.filter((item) => {
1225
+ const duration = Number(item?.duration ?? 0);
1226
+ return item.disconnectSide === 'CALLER' && duration <= 0;
1227
+ });
1228
+ }
1229
+ selectFromHistory(item) {
1230
+ if (this.mode === 'transfer') {
1231
+ this.transferEv.emit(item);
1232
+ return;
1233
+ }
1234
+ const dialable = this.resolveDialable(item) || (item?.phoneNumber ?? '').toString().replace(/\s+/g, '');
1235
+ if (!dialable) {
1236
+ console.warn('No dialable number found in history item:', item);
1237
+ return;
1238
+ }
1239
+ this.makeCallEv.emit(dialable);
1240
+ }
1241
+ resolveDialable(item) {
1242
+ const clean = (v) => (v ?? '').toString().replace(/\s+/g, '');
1243
+ return (clean(item?.resolvedDialable) ||
1244
+ clean(item?.lookupPhoneNumber?.['local-number']) ||
1245
+ clean(item?.lookupPhoneNumber?.lookupPhoneNumber?.['local-number']) ||
1246
+ clean(item?.lookupPhoneNumber?.normalizedPhoneNumber) ||
1247
+ null);
1248
+ }
1249
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CallHistoryComponent, deps: [{ token: i1.HttpClient }, { token: i8.SnugdeskAuthenticationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1250
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.9", type: CallHistoryComponent, isStandalone: false, selector: "app-call-history", inputs: { mode: "mode" }, outputs: { makeCallEv: "makeCallEv", transferEv: "transferEv" }, ngImport: i0, template: "@if (showHistoryLoader) {\n<div class=\"history_loader\">\n <div class=\"spinner\"></div>\n <div class=\"loader_text\">Fetching call history...</div>\n</div>\n} @else {\n\n<div class=\"recent_container_outer\">\n <div class=\"recent_options_header\">\n <div class=\"recent_inner\">\n <button class=\"recent_btn\" (click)=\"recentSelectTab('recentCall')\"\n [class.active]=\"recentCallactiveTab === 'recentCall'\">\n Recent\n </button>\n <button class=\"recent_btn\" (click)=\"recentSelectTab('missedCall')\"\n [class.active]=\"recentCallactiveTab === 'missedCall'\">\n Missed Call\n </button>\n </div>\n </div>\n\n <h2 class=\"recent_heading\">Recent</h2>\n\n <div class=\"container_recent_search\">\n <input type=\"search\" placeholder=\"Type to search\" />\n </div>\n\n @if (recentCallactiveTab === 'recentCall') {\n <div class=\"recent_tab_container\">\n <div class=\"container_recent_list\">\n <div class=\"container_recent_list_inner\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n @for (call of callHistory; track $index) {\n <div class=\"outer_container_recent\">\n <div class=\"container_recent_item\">\n <!-- avatar -->\n <div class=\"container_recent_item_image\">\n <div class=\"container_recent_item_image_inner grd1\">\n {{ call.phoneNumber?.country?.code | uppercase }}\n </div>\n </div>\n\n <!-- middle -->\n <div class=\"container_recent_item_left\">\n <div class=\"container_recent_item_left_inner\">\n <div class=\"contact_field\">\n {{ call.phoneNumber?.normalizedPhoneNumber }}\n </div>\n\n <div class=\"recent_time_back\" [ngClass]=\"{\n missed_call_color: call.status === 'MISSED',\n caller_drop: call.disconnectSide === 'CALLER' && (call.duration ?? 0) <= 0\n }\">\n <!-- Direction icon (generic handset) -->\n <svg viewBox=\"0 0 512 512\" width=\"12px\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n &nbsp; {{ call.direction }}\n @if (call.disconnectSide === 'CALLER' && (call.duration ?? 0) <= 0) {\n <span class=\"disconnect_badge\">Caller hung up</span>\n }\n </div>\n </div>\n\n <!-- right time -->\n <div class=\"container_recent_item_right\">\n <div class=\"right_field\">\n <span class=\"right_field_content\">\n {{ call.timestamp | date : \"dd/MM/yyyy\" }}\n </span>\n </div>\n </div>\n\n <!-- call button -->\n <div class=\"calling_btn\">\n <div class=\"calling_btn_inner\">\n <!-- <button\n class=\"button_recent_call\"\n (click)=\"makeCall(call.phoneNumber?.normalizedPhoneNumber)\">\n <svg viewBox=\"0 0 512 512\" height=\"18px\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </button> -->\n\n @if (mode === 'transfer') {\n <button class=\"button_recent_call\" (click)=\"transferEv.emit(call)\">\n <svg viewBox=\"0 0 512 512\" height=\"18px\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </button>\n } @else {\n <button class=\"button_recent_call\" (click)=\"\n makeCall(call.phoneNumber?.normalizedPhoneNumber)\n \">\n <svg viewBox=\"0 0 512 512\" height=\"18px\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </button>\n }\n </div>\n </div>\n </div>\n <!-- /middle -->\n </div>\n </div>\n } @if (callHistory.length === 0) {\n <div class=\"container_call_history_not_found\">\n <div class=\"icon_round_area_call_history\"></div>\n <h2>No Call History</h2>\n <p>Your call history is empty</p>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n } @if (recentCallactiveTab === 'missedCall') {\n <div class=\"recent_tab_container\">\n <div class=\"container_recent_list\">\n <div class=\"container_recent_list_inner\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n @for (call of callerDropped; track $index) {\n <div class=\"outer_container_recent\">\n <div class=\"container_recent_item\">\n <div class=\"container_recent_item_image\">\n <div class=\"container_recent_item_image_inner grd1\">\n {{ call.phoneNumber?.country?.code | uppercase }}\n </div>\n </div>\n <div class=\"container_recent_item_left\">\n <div class=\"container_recent_item_left_inner\">\n <div class=\"contact_field\">\n {{ call.phoneNumber?.normalizedPhoneNumber }}\n </div>\n <div class=\"recent_time_back caller_drop\">\n <svg fill=\"currentColor\" viewBox=\"0 0 640 512\" width=\"12px\">\n <path\n d=\"M232 0c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-39 39 58.7 58.7C282.3 152.4 300.8 160 320 160s37.7-7.6 51.3-21.3L503 7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L405.3 172.7C382.6 195.3 352 208 320 208s-62.6-12.7-85.3-35.3L176 113.9l-39 39c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2L96 24c0-13.3 10.7-24 24-24L232 0zM51.4 489.9l-35.4-62c-9.7-16.9-8.3-38.1 5.5-51.7C72.6 325.9 178.1 256 320 256s247.4 69.9 298.5 120.2c13.9 13.6 15.2 34.8 5.5 51.7l-35.4 62c-7.4 12.9-22.7 19.1-37 14.8L438.8 470.8c-13.5-4.1-22.8-16.5-22.8-30.6l0-56.2c-62.3-20.8-129.7-20.8-192 0l0 56.2c0 14.1-9.3 26.6-22.8 30.6L88.4 504.7c-14.3 4.3-29.6-1.8-37-14.8z\" />\n </svg>\n &nbsp; Caller hung up\n </div>\n </div>\n <div class=\"container_recent_item_right\">\n <div class=\"right_field\">\n <span class=\"right_field_content\">\n {{ call.timestamp | date : \"dd/MM/yyyy\" }}\n </span>\n </div>\n </div>\n <div class=\"calling_btn\">\n <div class=\"calling_btn_inner\">\n <button class=\"button_recent_call\" (click)=\"selectFromHistory(call)\">\n <svg viewBox=\"0 0 512 512\" height=\"15px\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n } @if (callerDropped.length === 0) {\n <div class=\"container_call_history_not_found\">\n <div class=\"icon_round_area_call_history\"></div>\n <h2>No Caller-Hangup Calls</h2>\n <p>No inbound calls ended by caller.</p>\n </div>\n }\n </div>\n <!-- /.scrollbox-content -->\n </div>\n <!-- /.scrollbox -->\n </div>\n <!-- /.container_recent_list_inner -->\n </div>\n <!-- /.container_recent_list -->\n </div>\n <!-- /.recent_tab_container -->\n }\n</div>\n}\n", styles: [".recent_container_outer{margin:0;padding:0;width:100%;position:relative}.recent_options_header{margin:0;padding:15px 15px 10px;width:100%;text-align:center}.recent_inner{margin:0;padding:0 2px;width:100%;height:32px;background:#f0f0f4;border-radius:8px;display:flex;align-items:center;justify-content:center}.recent_btn{margin:0 1px;padding:0;width:50%;display:flex;align-items:center;justify-content:center;border:none;outline:none;background:#f0f0f4;height:26px;border-radius:8px;color:var(--sd-text-color);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.recent_btn:hover{background:#e6e6eb;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.recent_btn.active{color:var(--sd-text-color-dark);background:var(--sd-background-color);font-weight:700}.recent_heading{font-family:var(--sd-text-font-family);font-size:20px;color:var(--sd-text-color-dark);font-weight:700;letter-spacing:-.65px;padding:0 0 15px 15px;line-height:normal;margin:0}.container_recent_search{margin:0 0 15px;padding:0 15px;width:100%}.container_recent_search input{padding:0 16px;width:100%;outline:none;display:block;border:1px solid var(--sd-border-color-dark);color:var(--sd-text-color-medium);font-size:12px;letter-spacing:-.25px;font-family:var(--sd-text-font-family);background:var(--sd-background-color);font-style:italic;font-weight:400;position:relative;border-radius:27px;height:39px}.recent_tab_container{margin:0;padding:0;width:100%;height:100%;position:relative}.container_recent_list{width:100%;margin:0;padding:0;position:relative}.container_recent_list_inner{width:100%;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex;justify-content:center;align-items:center;height:calc(100vh - 204px)}.scrollbox{height:100%;overflow-y:scroll;overflow-x:hidden;visibility:hidden;padding:0 0 7px;position:relative;scroll-behavior:smooth;scrollbar-width:thin;width:100%}.scrollbox-content,.scrollbox:hover,.scrollbox:focus{visibility:visible}.outer_container_recent{width:100%;margin:0;padding:0 15px}.container_recent_item{width:100%;position:relative;display:flex;flex-direction:row;height:72px;pointer-events:all;border-radius:8px;overflow:hidden;cursor:pointer}.calling_btn{display:none}.history_loader{width:100%;padding:28px 0;display:flex;flex-direction:column;align-items:center;gap:12px}.history_loader .spinner{width:36px;height:36px;border-radius:50%;border:4px solid #e5e7eb;border-top-color:#2563eb;animation:spin .8s linear infinite}.history_loader .loader_text{font-size:13px;color:var(--sd-text-color-medium)}@keyframes spin{to{transform:rotate(360deg)}}.container_recent_item:hover .calling_btn{display:block;position:absolute;text-align:right;right:0;width:78px;height:38px;background:var(--sd-background-color)}.container_recent_item_image{display:flex;align-items:center}.container_recent_item_image_inner{margin:0 auto;padding:0;width:50px;height:50px;position:relative;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--sd-text-font-family);font-size:26px;color:var(--sd-text-color-inverse);font-weight:400;background:#2a7b9b}.grd1{background:#718ede}.container_recent_item_left{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1;justify-content:center;min-width:0;position:relative;border-top:1px solid #e9edef}.container_recent_item_left_inner{display:flex;flex-basis:1;flex-direction:column;padding:0 0 0 10px}.container_recent_item_left .contact_field{font-size:13px;color:var(--sd-text-color-dark);margin-bottom:2px}.container_recent_item_left .missed_call_color{color:#e0261f}.container_recent_item_left .recent_time_back{font-size:12px;color:var(--sd-text-color-medium)}.container_recent_item_left .caller_drop{color:#e0261f}.disconnect_badge{display:inline-flex;align-items:center;margin-left:6px;padding:2px 6px;border-radius:8px;background:#e0261f1f;color:#e0261f;font-size:10px;font-weight:600;letter-spacing:.2px}.container_recent_item_right{display:flex;flex-direction:row;position:absolute;right:0}.container_recent_item_right .right_field{display:flex;flex-basis:auto;justify-content:right}.container_recent_item_right .right_field_content{display:inline-block;border-radius:26px;border:1px solid #e5e5e5;padding:5px 8px;font-size:11px;color:var(--sd-text-color)}.calling_btn_inner{position:relative;width:100%;margin:0;padding:0;display:flex;justify-content:right}.button_recent_call{width:38px;height:38px;display:flex;flex-basis:auto;flex-direction:column;align-items:center;justify-content:center;line-height:normal;border-radius:26px;outline:none;border:none;font-size:22px;font-weight:700;color:#6c0;background:#f1f1f1;border:1px solid #f1f1f1}.container_call_history_not_found{position:absolute;width:100%;height:100%;display:flex;flex-basis:auto;flex-direction:column;flex-grow:1;justify-content:center;align-items:center;background:#f8f8f8}.container_call_history_not_found h2{font-size:18px;font-weight:700;letter-spacing:-.65px;color:var(--sd-text-color-dark);text-align:center;padding-top:26px}.container_call_history_not_found p{font-size:12px;line-height:normal;color:var(--sd-text-color);font-weight:600;white-space:normal;text-align:center;padding-top:10px}.icon_round_area_call_history{width:165px;height:75px;background:var(--sd-background-color) url(data:image/gif;base64,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) center no-repeat;border-radius:38px;display:flex;grid-row:1}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i3.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i3.DatePipe, name: "date" }] });
1251
+ }
1252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: CallHistoryComponent, decorators: [{
1253
+ type: Component,
1254
+ args: [{ selector: 'app-call-history', standalone: false, template: "@if (showHistoryLoader) {\n<div class=\"history_loader\">\n <div class=\"spinner\"></div>\n <div class=\"loader_text\">Fetching call history...</div>\n</div>\n} @else {\n\n<div class=\"recent_container_outer\">\n <div class=\"recent_options_header\">\n <div class=\"recent_inner\">\n <button class=\"recent_btn\" (click)=\"recentSelectTab('recentCall')\"\n [class.active]=\"recentCallactiveTab === 'recentCall'\">\n Recent\n </button>\n <button class=\"recent_btn\" (click)=\"recentSelectTab('missedCall')\"\n [class.active]=\"recentCallactiveTab === 'missedCall'\">\n Missed Call\n </button>\n </div>\n </div>\n\n <h2 class=\"recent_heading\">Recent</h2>\n\n <div class=\"container_recent_search\">\n <input type=\"search\" placeholder=\"Type to search\" />\n </div>\n\n @if (recentCallactiveTab === 'recentCall') {\n <div class=\"recent_tab_container\">\n <div class=\"container_recent_list\">\n <div class=\"container_recent_list_inner\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n @for (call of callHistory; track $index) {\n <div class=\"outer_container_recent\">\n <div class=\"container_recent_item\">\n <!-- avatar -->\n <div class=\"container_recent_item_image\">\n <div class=\"container_recent_item_image_inner grd1\">\n {{ call.phoneNumber?.country?.code | uppercase }}\n </div>\n </div>\n\n <!-- middle -->\n <div class=\"container_recent_item_left\">\n <div class=\"container_recent_item_left_inner\">\n <div class=\"contact_field\">\n {{ call.phoneNumber?.normalizedPhoneNumber }}\n </div>\n\n <div class=\"recent_time_back\" [ngClass]=\"{\n missed_call_color: call.status === 'MISSED',\n caller_drop: call.disconnectSide === 'CALLER' && (call.duration ?? 0) <= 0\n }\">\n <!-- Direction icon (generic handset) -->\n <svg viewBox=\"0 0 512 512\" width=\"12px\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n &nbsp; {{ call.direction }}\n @if (call.disconnectSide === 'CALLER' && (call.duration ?? 0) <= 0) {\n <span class=\"disconnect_badge\">Caller hung up</span>\n }\n </div>\n </div>\n\n <!-- right time -->\n <div class=\"container_recent_item_right\">\n <div class=\"right_field\">\n <span class=\"right_field_content\">\n {{ call.timestamp | date : \"dd/MM/yyyy\" }}\n </span>\n </div>\n </div>\n\n <!-- call button -->\n <div class=\"calling_btn\">\n <div class=\"calling_btn_inner\">\n <!-- <button\n class=\"button_recent_call\"\n (click)=\"makeCall(call.phoneNumber?.normalizedPhoneNumber)\">\n <svg viewBox=\"0 0 512 512\" height=\"18px\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </button> -->\n\n @if (mode === 'transfer') {\n <button class=\"button_recent_call\" (click)=\"transferEv.emit(call)\">\n <svg viewBox=\"0 0 512 512\" height=\"18px\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </button>\n } @else {\n <button class=\"button_recent_call\" (click)=\"\n makeCall(call.phoneNumber?.normalizedPhoneNumber)\n \">\n <svg viewBox=\"0 0 512 512\" height=\"18px\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </button>\n }\n </div>\n </div>\n </div>\n <!-- /middle -->\n </div>\n </div>\n } @if (callHistory.length === 0) {\n <div class=\"container_call_history_not_found\">\n <div class=\"icon_round_area_call_history\"></div>\n <h2>No Call History</h2>\n <p>Your call history is empty</p>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n } @if (recentCallactiveTab === 'missedCall') {\n <div class=\"recent_tab_container\">\n <div class=\"container_recent_list\">\n <div class=\"container_recent_list_inner\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n @for (call of callerDropped; track $index) {\n <div class=\"outer_container_recent\">\n <div class=\"container_recent_item\">\n <div class=\"container_recent_item_image\">\n <div class=\"container_recent_item_image_inner grd1\">\n {{ call.phoneNumber?.country?.code | uppercase }}\n </div>\n </div>\n <div class=\"container_recent_item_left\">\n <div class=\"container_recent_item_left_inner\">\n <div class=\"contact_field\">\n {{ call.phoneNumber?.normalizedPhoneNumber }}\n </div>\n <div class=\"recent_time_back caller_drop\">\n <svg fill=\"currentColor\" viewBox=\"0 0 640 512\" width=\"12px\">\n <path\n d=\"M232 0c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-39 39 58.7 58.7C282.3 152.4 300.8 160 320 160s37.7-7.6 51.3-21.3L503 7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L405.3 172.7C382.6 195.3 352 208 320 208s-62.6-12.7-85.3-35.3L176 113.9l-39 39c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2L96 24c0-13.3 10.7-24 24-24L232 0zM51.4 489.9l-35.4-62c-9.7-16.9-8.3-38.1 5.5-51.7C72.6 325.9 178.1 256 320 256s247.4 69.9 298.5 120.2c13.9 13.6 15.2 34.8 5.5 51.7l-35.4 62c-7.4 12.9-22.7 19.1-37 14.8L438.8 470.8c-13.5-4.1-22.8-16.5-22.8-30.6l0-56.2c-62.3-20.8-129.7-20.8-192 0l0 56.2c0 14.1-9.3 26.6-22.8 30.6L88.4 504.7c-14.3 4.3-29.6-1.8-37-14.8z\" />\n </svg>\n &nbsp; Caller hung up\n </div>\n </div>\n <div class=\"container_recent_item_right\">\n <div class=\"right_field\">\n <span class=\"right_field_content\">\n {{ call.timestamp | date : \"dd/MM/yyyy\" }}\n </span>\n </div>\n </div>\n <div class=\"calling_btn\">\n <div class=\"calling_btn_inner\">\n <button class=\"button_recent_call\" (click)=\"selectFromHistory(call)\">\n <svg viewBox=\"0 0 512 512\" height=\"15px\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n } @if (callerDropped.length === 0) {\n <div class=\"container_call_history_not_found\">\n <div class=\"icon_round_area_call_history\"></div>\n <h2>No Caller-Hangup Calls</h2>\n <p>No inbound calls ended by caller.</p>\n </div>\n }\n </div>\n <!-- /.scrollbox-content -->\n </div>\n <!-- /.scrollbox -->\n </div>\n <!-- /.container_recent_list_inner -->\n </div>\n <!-- /.container_recent_list -->\n </div>\n <!-- /.recent_tab_container -->\n }\n</div>\n}\n", styles: [".recent_container_outer{margin:0;padding:0;width:100%;position:relative}.recent_options_header{margin:0;padding:15px 15px 10px;width:100%;text-align:center}.recent_inner{margin:0;padding:0 2px;width:100%;height:32px;background:#f0f0f4;border-radius:8px;display:flex;align-items:center;justify-content:center}.recent_btn{margin:0 1px;padding:0;width:50%;display:flex;align-items:center;justify-content:center;border:none;outline:none;background:#f0f0f4;height:26px;border-radius:8px;color:var(--sd-text-color);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.recent_btn:hover{background:#e6e6eb;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.recent_btn.active{color:var(--sd-text-color-dark);background:var(--sd-background-color);font-weight:700}.recent_heading{font-family:var(--sd-text-font-family);font-size:20px;color:var(--sd-text-color-dark);font-weight:700;letter-spacing:-.65px;padding:0 0 15px 15px;line-height:normal;margin:0}.container_recent_search{margin:0 0 15px;padding:0 15px;width:100%}.container_recent_search input{padding:0 16px;width:100%;outline:none;display:block;border:1px solid var(--sd-border-color-dark);color:var(--sd-text-color-medium);font-size:12px;letter-spacing:-.25px;font-family:var(--sd-text-font-family);background:var(--sd-background-color);font-style:italic;font-weight:400;position:relative;border-radius:27px;height:39px}.recent_tab_container{margin:0;padding:0;width:100%;height:100%;position:relative}.container_recent_list{width:100%;margin:0;padding:0;position:relative}.container_recent_list_inner{width:100%;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex;justify-content:center;align-items:center;height:calc(100vh - 204px)}.scrollbox{height:100%;overflow-y:scroll;overflow-x:hidden;visibility:hidden;padding:0 0 7px;position:relative;scroll-behavior:smooth;scrollbar-width:thin;width:100%}.scrollbox-content,.scrollbox:hover,.scrollbox:focus{visibility:visible}.outer_container_recent{width:100%;margin:0;padding:0 15px}.container_recent_item{width:100%;position:relative;display:flex;flex-direction:row;height:72px;pointer-events:all;border-radius:8px;overflow:hidden;cursor:pointer}.calling_btn{display:none}.history_loader{width:100%;padding:28px 0;display:flex;flex-direction:column;align-items:center;gap:12px}.history_loader .spinner{width:36px;height:36px;border-radius:50%;border:4px solid #e5e7eb;border-top-color:#2563eb;animation:spin .8s linear infinite}.history_loader .loader_text{font-size:13px;color:var(--sd-text-color-medium)}@keyframes spin{to{transform:rotate(360deg)}}.container_recent_item:hover .calling_btn{display:block;position:absolute;text-align:right;right:0;width:78px;height:38px;background:var(--sd-background-color)}.container_recent_item_image{display:flex;align-items:center}.container_recent_item_image_inner{margin:0 auto;padding:0;width:50px;height:50px;position:relative;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--sd-text-font-family);font-size:26px;color:var(--sd-text-color-inverse);font-weight:400;background:#2a7b9b}.grd1{background:#718ede}.container_recent_item_left{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1;justify-content:center;min-width:0;position:relative;border-top:1px solid #e9edef}.container_recent_item_left_inner{display:flex;flex-basis:1;flex-direction:column;padding:0 0 0 10px}.container_recent_item_left .contact_field{font-size:13px;color:var(--sd-text-color-dark);margin-bottom:2px}.container_recent_item_left .missed_call_color{color:#e0261f}.container_recent_item_left .recent_time_back{font-size:12px;color:var(--sd-text-color-medium)}.container_recent_item_left .caller_drop{color:#e0261f}.disconnect_badge{display:inline-flex;align-items:center;margin-left:6px;padding:2px 6px;border-radius:8px;background:#e0261f1f;color:#e0261f;font-size:10px;font-weight:600;letter-spacing:.2px}.container_recent_item_right{display:flex;flex-direction:row;position:absolute;right:0}.container_recent_item_right .right_field{display:flex;flex-basis:auto;justify-content:right}.container_recent_item_right .right_field_content{display:inline-block;border-radius:26px;border:1px solid #e5e5e5;padding:5px 8px;font-size:11px;color:var(--sd-text-color)}.calling_btn_inner{position:relative;width:100%;margin:0;padding:0;display:flex;justify-content:right}.button_recent_call{width:38px;height:38px;display:flex;flex-basis:auto;flex-direction:column;align-items:center;justify-content:center;line-height:normal;border-radius:26px;outline:none;border:none;font-size:22px;font-weight:700;color:#6c0;background:#f1f1f1;border:1px solid #f1f1f1}.container_call_history_not_found{position:absolute;width:100%;height:100%;display:flex;flex-basis:auto;flex-direction:column;flex-grow:1;justify-content:center;align-items:center;background:#f8f8f8}.container_call_history_not_found h2{font-size:18px;font-weight:700;letter-spacing:-.65px;color:var(--sd-text-color-dark);text-align:center;padding-top:26px}.container_call_history_not_found p{font-size:12px;line-height:normal;color:var(--sd-text-color);font-weight:600;white-space:normal;text-align:center;padding-top:10px}.icon_round_area_call_history{width:165px;height:75px;background:var(--sd-background-color) url(data:image/gif;base64,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) center no-repeat;border-radius:38px;display:flex;grid-row:1}\n"] }]
1255
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i8.SnugdeskAuthenticationService }, { type: i0.ChangeDetectorRef }], propDecorators: { mode: [{
1256
+ type: Input
1257
+ }], makeCallEv: [{
1258
+ type: Output
1259
+ }], transferEv: [{
1260
+ type: Output
1261
+ }] } });
1262
+
1263
+ class AuthenticationService {
1264
+ jwtHelper = new JwtHelperService();
1265
+ tenant$ = new BehaviorSubject(null);
1266
+ user$ = new BehaviorSubject(null);
1267
+ isAuthenticated$ = new BehaviorSubject(false);
1268
+ isAuthenticated() {
1269
+ try {
1270
+ const mySessionToken = this.getAuthSessionToken();
1271
+ // console.log(`Got sessionToken: ${sessionToken}`);
1272
+ if (!mySessionToken) {
1273
+ throw new Error('Session token not found');
1274
+ }
1275
+ else if (this.jwtHelper.isTokenExpired(mySessionToken)) {
1276
+ throw new Error('Session token expired');
1277
+ }
1278
+ this.isAuthenticated$.next(true);
1279
+ return true;
1280
+ }
1281
+ catch (err) {
1282
+ console.warn(err);
1283
+ this.isAuthenticated$.next(false);
1284
+ return false;
1285
+ }
1286
+ }
1287
+ getAuthSessionToken() {
1288
+ return sessionStorage.getItem('auth_sessionToken');
1289
+ }
1290
+ getAuthDomainToken() {
1291
+ return sessionStorage.getItem('auth_domainToken');
1292
+ }
1293
+ getDecodedAuthDomainToken() {
1294
+ const token = this.getAuthDomainToken();
1295
+ return token ? this.jwtHelper.decodeToken(token) : null;
1296
+ }
1297
+ getTenantId() {
1298
+ // return this.getDecodedAuthSessionToken().tenantId;
1299
+ return this.getDecodedAuthDomainToken()?.tenantId;
1300
+ }
1301
+ getDecodedAuthSessionToken() {
1302
+ if (!this.isAuthenticated()) {
1303
+ const err = new Error(`User not authenticated`);
1304
+ err.status = 403;
1305
+ throw err;
1306
+ }
1307
+ const token = this.getAuthSessionToken();
1308
+ if (!token) {
1309
+ const err = new Error(`Token missing`);
1310
+ err.status = 401;
1311
+ throw err;
1312
+ }
1313
+ return this.jwtHelper.decodeToken(token);
1314
+ }
1315
+ getUserId() {
1316
+ return this.getDecodedAuthSessionToken()?.userId;
1317
+ }
1318
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AuthenticationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1319
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AuthenticationService, providedIn: 'root' });
1320
+ }
1321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AuthenticationService, decorators: [{
1322
+ type: Injectable,
1323
+ args: [{
1324
+ providedIn: 'root',
1325
+ }]
1326
+ }] });
1327
+
1328
+ class DialpadComponent {
1329
+ cdr;
1330
+ formBuilder;
1331
+ avayaIpoService;
1332
+ authenticationService;
1333
+ contacts = [];
1334
+ makeCallEv = new EventEmitter();
1335
+ audioElement;
1336
+ callStateSub;
1337
+ dialForm;
1338
+ showDirectoryPhonebook = false;
1339
+ incomingCallSubscription;
1340
+ incomingCallNumber;
1341
+ CountryISO = CountryISO;
1342
+ SearchCountryField = SearchCountryField;
1343
+ isRinging = false;
1344
+ audio;
1345
+ constructor(cdr, formBuilder, avayaIpoService, authenticationService) {
1346
+ this.cdr = cdr;
1347
+ this.formBuilder = formBuilder;
1348
+ this.avayaIpoService = avayaIpoService;
1349
+ this.authenticationService = authenticationService;
1350
+ this.dialForm = this.formBuilder.group({
1351
+ phoneNumber: ['', Validators.required],
1352
+ });
1353
+ }
1354
+ ngOnInit() {
1355
+ window.addEventListener('keydown', this.handleKeyboardInput);
1356
+ const phoneUtil = PhoneNumberUtil.getInstance();
1357
+ this.incomingCallSubscription =
1358
+ this.avayaIpoService.incomingCallSubject.subscribe((data) => {
1359
+ try {
1360
+ let normalizedNumber = data.farEndNumber.trim();
1361
+ // Convert numbers with "00XX" to "+XX"
1362
+ if (normalizedNumber.startsWith('00')) {
1363
+ normalizedNumber = '+' + normalizedNumber.substring(2);
1364
+ }
1365
+ let parsedNumber;
1366
+ if (normalizedNumber.startsWith('+') ||
1367
+ /^\d{1,4}/.test(normalizedNumber)) {
1368
+ parsedNumber = phoneUtil.parse(normalizedNumber);
1369
+ }
1370
+ else {
1371
+ parsedNumber = phoneUtil.parse(normalizedNumber, this.authenticationService.tenant$
1372
+ .getValue()
1373
+ .contactInformation.country.code.toUpperCase());
1374
+ }
1375
+ this.incomingCallNumber = phoneUtil.format(parsedNumber, PhoneNumberFormat.INTERNATIONAL);
1376
+ }
1377
+ catch (error) {
1378
+ console.warn('Invalid phone number:', data.farEndNumber);
1379
+ this.incomingCallNumber = data.farEndNumber; // Fallback
1380
+ }
1381
+ // this.incomingCallNumber = data.farEndNumber;
1382
+ this.isRinging = true;
1383
+ this.audio = this.audioElement.nativeElement;
1384
+ this.audio.src = '../../../assets/sounds/ringback_tone.mp3';
1385
+ this.audio.loop = true;
1386
+ this.audio.currentTime = 0;
1387
+ this.audio.play();
1388
+ // this.playRingtone();
1389
+ });
1390
+ this.callStateSub = this.avayaIpoService.callStateSubject.subscribe((evt) => {
1391
+ if (evt?.state === CallState.DISCONNECTED) {
1392
+ this.isRinging = false;
1393
+ this.audio?.pause?.();
1394
+ this.cdr.detectChanges();
1395
+ }
1396
+ });
1397
+ }
1398
+ ngOnDestroy() {
1399
+ window.removeEventListener('keydown', this.handleKeyboardInput);
1400
+ this.callStateSub?.unsubscribe?.();
1401
+ }
1402
+ makeCall() {
1403
+ if (this.dialForm.invalid) {
1404
+ console.warn('Dial form is invalid:', this.dialForm.value);
1405
+ return;
1406
+ }
1407
+ const phone = this.dialForm.value.phoneNumber;
1408
+ console.log('phone =======', phone);
1409
+ this.makeCallEv.emit(phone?.internationalNumber);
1410
+ this.dialForm.reset();
1411
+ this.showDirectoryPhonebook = false;
1412
+ }
1413
+ onClear() {
1414
+ const control = this.dialForm.get('phoneNumber');
1415
+ const current = control?.value?.number?.replace(/\s/g, '') || '';
1416
+ if (!current)
1417
+ return control?.reset();
1418
+ const updated = current.slice(0, -1);
1419
+ updated ? this.updatePhoneControl(updated) : control?.reset();
1420
+ }
1421
+ handleKeyboardInput = (event) => {
1422
+ const control = this.dialForm.get('phoneNumber');
1423
+ const current = control?.value?.number?.replace(/\s/g, '') || '';
1424
+ let updated = current;
1425
+ if (event.key === 'Enter') {
1426
+ this.makeCall();
1427
+ return;
1428
+ }
1429
+ else if (event.key === 'Backspace') {
1430
+ if (!current)
1431
+ return control?.reset();
1432
+ updated = current.slice(0, -1);
1433
+ }
1434
+ else if (/^[0-9]$/.test(event.key)) {
1435
+ updated += event.key;
1436
+ }
1437
+ else {
1438
+ return;
1439
+ }
1440
+ updated ? this.updatePhoneControl(updated) : control?.reset();
1441
+ };
1442
+ handleKeypadInput(digit) {
1443
+ const control = this.dialForm.get('phoneNumber');
1444
+ const current = control?.value?.number?.replace(/\s/g, '') || '';
1445
+ this.updatePhoneControl(current + digit);
1446
+ }
1447
+ updatePhoneControl(value) {
1448
+ setTimeout(() => {
1449
+ this.dialForm.get('phoneNumber')?.setValue(value);
1450
+ this.cdr.detectChanges();
1451
+ });
1452
+ }
1453
+ declineAvayaCall() {
1454
+ this.avayaIpoService.dropCall();
1455
+ this.isRinging = false;
1456
+ this.audio?.pause?.();
1457
+ this.avayaIpoService.agentIdle();
1458
+ this.cdr.detectChanges();
1459
+ }
1460
+ acceptAvayaCAll() {
1461
+ this.avayaIpoService.answerCall();
1462
+ // this.headerComponent.showAvayaIpo = true;
1463
+ this.isRinging = false;
1464
+ this.audio.pause();
1465
+ }
1466
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: DialpadComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$1.FormBuilder }, { token: AvayaIPOService }, { token: AuthenticationService }], target: i0.ɵɵFactoryTarget.Component });
1467
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.9", type: DialpadComponent, isStandalone: false, selector: "app-dialpad", inputs: { contacts: "contacts" }, outputs: { makeCallEv: "makeCallEv" }, viewQueries: [{ propertyName: "audioElement", first: true, predicate: ["audioElement"], descendants: true }], ngImport: i0, template: "<div class=\"container_pd_sd\">\n <audio id=\"sd_call_ring\" #audioElement></audio>\n\n @if (isRinging) {\n <div class=\"incoming_wrapper\">\n <div class=\"incoming_strip slide-right\">\n <div class=\"incoming_avatar\">\n <img\n src=\"../../../assets/images/incomingCall_avatar.gif\"\n alt=\"Incoming call avatar\"\n />\n </div>\n <div class=\"incoming_details\">\n <div class=\"incoming_label\">Incoming call</div>\n <div class=\"incoming_number\">\n {{ incomingCallNumber || 'Unknown number' }}\n </div>\n <div class=\"incoming_subtext\">Web call is ringing</div>\n </div>\n <div class=\"call_action_buttons incoming_actions\">\n <button\n type=\"button\"\n class=\"call_action_button decline\"\n (click)=\"declineAvayaCall()\"\n >\n <span class=\"icon_pill\">\n <svg height=\"18\" viewBox=\"0 0 640 512\">\n <path\n class=\"icon_color\"\n d=\"M11.7 266.3l41.9 94.3c6.1 13.7 20.8 21.3 35.5 18.4l109.2-21.8c15-3 25.7-16.1 25.7-31.4V240c62.3-20.8 129.7-20.8 192 0v85.8c0 15.3 10.8 28.4 25.7 31.4L550.9 379c14.7 2.9 29.4-4.7 35.5-18.4l41.9-94.3c7.2-16.2 5.1-35.1-7.4-47.7C570.8 168.1 464.2 96 320 96S69.2 168.1 19.1 218.6c-12.5 12.6-14.6 31.5-7.4 47.7z\"\n />\n </svg>\n </span>\n <span class=\"label\">Decline</span>\n </button>\n <button\n type=\"button\"\n class=\"call_action_button accept\"\n (click)=\"acceptAvayaCAll()\"\n >\n <span class=\"icon_pill\">\n <svg height=\"18\" viewBox=\"0 0 512 512\">\n <path\n class=\"icon_color\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\"\n />\n </svg>\n </span>\n <span class=\"label\">Answer</span>\n </button>\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"container_phone_number_input\"\n [formGroup]=\"dialForm\"\n (ngSubmit)=\"makeCall()\"\n >\n @if (contacts?.length > 0) {\n <button\n class=\"button_phonebook\"\n (click)=\"showDirectoryPhonebook = !showDirectoryPhonebook\"\n >\n <svg\n fill=\"currentColor\"\n height=\"22px\"\n style=\"enable-background: new 0 0 611.985 611.986\"\n version=\"1.1\"\n viewBox=\"0 0 611.985 611.986\"\n width=\"40.985px\"\n routerLinkActive=\"active\"\n xml:space=\"preserve\"\n >\n <g>\n <path\n d=\"M143.021,158.99c42.525,0,79.456-36.931,79.456-79.456S185.546,0.078,143.021,0.078\n S63.565,37.009,63.565,79.534S100.496,158.99,143.021,158.99z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M278.097,381.467c0-127.13-65.98-190.695-139.048-190.695S0,254.338,0,381.467\n C0,468.583,278.097,468.583,278.097,381.467z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M373.444,220.807c42.525,0,79.456-36.931,79.456-79.456s-36.931-79.456-79.456-79.456\n s-79.456,36.931-79.456,79.456S330.919,220.807,373.444,220.807z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M369.471,252.59c-21.962,0-43.033,6.452-62.071,17.957c11.537,31.051,18.37,67.792,18.37,110.921\n c0,42.843-28.541,76.151-77.517,95.22c60.768,51.424,260.267,40.459,260.267-33.403\n C508.52,316.155,442.539,252.59,369.471,252.59z\"\n fill=\"currentColor\"\n />\n </g>\n </svg>\n </button>\n }\n\n\n <ngx-intl-tel-input\n formControlName=\"phoneNumber\"\n name=\"phoneNumber\"\n [cssClass]=\"'phone_number_sd'\"\n [preferredCountries]=\"['in']\"\n [customPlaceholder]=\"'Phone Number'\"\n [enableAutoCountrySelect]=\"false\"\n [enablePlaceholder]=\"false\"\n [searchCountryFlag]=\"true\"\n [searchCountryField]=\"[SearchCountryField.Iso2, SearchCountryField.Name]\"\n [selectFirstCountry]=\"false\"\n [selectedCountryISO]=\"CountryISO.India\"\n [maxLength]=\"15\"\n [phoneValidation]=\"true\"\n [separateDialCode]=\"true\"\n (keydown)=\"handleKeyboardInput($event)\"\n >\n </ngx-intl-tel-input>\n <!-- <input type=\"text\" class=\"phone_number_sd\"> -->\n <button class=\"button_backspace\" (click)=\"onClear()\"></button>\n </div>\n }\n</div>\n\n@if (!isRinging && showDirectoryPhonebook) {\n <div class=\"container_phonebook\">\n <div class=\"container_phonebook_inner\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n @for (contact of contacts; track contact.id ?? contact.phone ?? $index) {\n <div class=\"container_contact_item\">\n <div class=\"container_contact_item_image\">\n <div class=\"container_contact_item_image_inner\">\n <svg\n viewBox=\"0 0 212 212\"\n height=\"49px\"\n width=\"49px\"\n version=\"1.1\"\n x=\"0px\"\n y=\"0px\"\n enable-background=\"new 0 0 212 212\"\n >\n <path\n fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\"\n ></path>\n <g>\n <path\n fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 c-0.964-1.144-2.024-2.326-3.184-3.527c-1.741-1.802-3.71-3.646-5.924-5.47c-2.952-2.431-6.339-4.824-10.204-7.026 c-1.877-1.07-3.873-2.092-5.98-3.055c-0.062-0.028-0.118-0.059-0.18-0.087c-9.792-4.44-22.106-7.529-37.416-7.529 s-27.624,3.089-37.416,7.529c-0.338,0.153-0.653,0.318-0.985,0.474c-1.431,0.674-2.806,1.376-4.128,2.101 c-0.716,0.393-1.417,0.792-2.101,1.197c-3.421,2.027-6.475,4.191-9.15,6.395c-2.213,1.823-4.182,3.668-5.924,5.47 c-1.161,1.201-2.22,2.384-3.184,3.527c-0.964,1.144-1.832,2.25-2.609,3.299c-0.778,1.049-1.464,2.04-2.065,2.955 c-0.557,0.848-1.033,1.622-1.447,2.324c-0.033,0.056-0.073,0.119-0.104,0.174c-0.435,0.744-0.79,1.392-1.07,1.926 c-0.559,1.068-0.818,1.678-0.818,1.678v0.398c18.285,17.927,43.322,28.985,70.945,28.985c27.678,0,52.761-11.103,71.055-29.095 v-0.289c0,0-0.619-1.45-1.992-3.778C174.594,173.238,174.117,172.463,173.561,171.615z\"\n ></path>\n <path\n fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 c1.772-0.532,3.482-1.188,5.12-1.958c2.184-1.027,4.242-2.258,6.15-3.67c2.863-2.119,5.39-4.646,7.509-7.509 c0.706-0.954,1.367-1.945,1.98-2.971c0.919-1.539,1.729-3.155,2.422-4.84c0.462-1.123,0.872-2.277,1.226-3.458 c0.177-0.591,0.341-1.188,0.49-1.792c0.299-1.208,0.542-2.443,0.725-3.701c0.275-1.887,0.417-3.827,0.417-5.811 c0-1.984-0.142-3.925-0.417-5.811c-0.184-1.258-0.426-2.493-0.725-3.701c-0.15-0.604-0.313-1.202-0.49-1.793 c-0.354-1.181-0.764-2.335-1.226-3.458c-0.693-1.685-1.504-3.301-2.422-4.84c-0.613-1.026-1.274-2.017-1.98-2.971 c-2.119-2.863-4.646-5.39-7.509-7.509c-1.909-1.412-3.966-2.643-6.15-3.67c-1.638-0.77-3.348-1.426-5.12-1.958 c-1.181-0.355-2.39-0.655-3.624-0.896c-2.468-0.484-5.035-0.737-7.68-0.737c-21.162,0-37.345,16.183-37.345,37.345 C68.657,109.317,84.84,125.5,106.002,125.5z\"\n ></path>\n </g>\n </svg>\n </div>\n </div>\n\n <div class=\"container_contact_item_left\">\n <div class=\"container_contact_item_left_inner\">\n <div class=\"contact_field\">{{ contact.name }}</div>\n <div class=\"contact_field\">{{ contact.phone }}</div>\n </div>\n </div>\n\n <div class=\"container_contact_item_right\">\n <div class=\"right_field right_field_highlighted\">\n <span class=\"right_field_content\">\n <div class=\"container_rating\">\n @for (star of [1,2,3,4,5]; track star) {\n <span [class.filled]=\"star <= (contact.rating || 0)\">\u2605</span>\n }\n </div>\n </span>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n\n@if (!isRinging) {\n <div class=\"container_dialpad\">\n <div class=\"container_dialpad_content\">\n <div class=\"container_dialpad_digits\">\n <!-- <div class=\"active-calls-container\"></div> -->\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('1')\">\n 1\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('2')\">\n 2\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('3')\">\n 3\n </button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('4')\">\n 4\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('5')\">\n 5\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('6')\">\n 6\n </button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('7')\">\n 7\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('8')\">\n 8\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('9')\">\n 9\n </button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('*')\">\n <svg viewBox=\"0 0 512 512\" height=\"17px\">\n <path\n fill=\"currentColor\"\n d=\"M208 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 140.9 122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7 43.7L352 256l122 70.4c15.3 8.8 20.6 28.4 11.7 43.7l-16 27.7c-8.8 15.3-28.4 20.6-43.7 11.7L304 339.1 304 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-140.9L86 409.6c-15.3 8.8-34.9 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7L160 256 38 185.6c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7C51.1 98.8 70.7 93.6 86 102.4l122 70.4L208 32z\"\n />\n </svg>\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('0')\">\n 0\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('#')\">\n <svg height=\"19px\" viewBox=\"0 0 448 512\">\n <path\n fill=\"currentColor\"\n d=\"M181.3 32.4c17.4 2.9 29.2 19.4 26.3 36.8L197.8 128l95.1 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3s29.2 19.4 26.3 36.8L357.8 128l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0L325.8 320l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l9.8-58.7-95.1 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8L90.2 384 32 384c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 21.3-128L64 192c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3zM187.1 192L165.8 320l95.1 0 21.3-128-95.1 0z\"\n />\n </svg>\n </button>\n </div>\n </div>\n <div class=\"container_dialpad_buttons\">\n <div class=\"container_dialpad_row\">\n <button\n class=\"button_dialpad_digit button_call_green\"\n (click)=\"makeCall()\"\n [disabled]=\"!this.dialForm.valid\"\n [ngClass]=\"{ button_call_disabled: !this.dialForm.valid }\"\n >\n <svg viewBox=\"0 0 512 512\" height=\"18px\">\n <path\n fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\"\n />\n </svg>\n </button>\n </div>\n </div>\n </div>\n </div>\n}\n", styles: [".container_pd_sd{width:100%;padding:0 30px;margin:0}.container_dialpad{width:100%;margin:0 auto;padding:32px 0;position:relative;background:var(--sd-background-color);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex;justify-content:center;align-items:center}.container_dialpad_header{width:100%;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);z-index:99;background:var(--sd-background-color)}.container_dialpad_header_inner1{margin:0;width:100%;padding:0 15px;position:relative}.container_dialpad_header_inner2{width:100%;margin:0;padding:15px;background:#f7f7f7;background:linear-gradient(180deg,#f7f7f7 72%,#fff);border-radius:12px 12px 0 0;position:relative}.container_phone_number_input{width:100%;margin:0;padding:0;position:relative}.container_phone_number_input .phone_number_sd{width:100%;display:flex;height:48px;outline:none;text-align:center;align-items:center;border:1px solid var(--sd-border-color-light);border-radius:27px;font-size:20px;font-weight:400;color:#000;padding:0 50px}.container_phone_number_input .button_phonebook{position:absolute;width:38px;height:38px;background:var(--sd-background-color);-webkit-transition-duration:.3s;transition-duration:.3s;border-radius:50%;border:none;outline:none;display:flex;align-items:center;justify-content:center;top:5px;left:8px;color:#a6a6a6}.container_phone_number_input .button_phonebook:hover,.container_phone_number_input .button_phonebook .sec_button{background:#f0f0f0;color:#29abe0}.container_phone_number_input .button_backspace{width:48px;height:48px;display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAANCAYAAABCZ/VdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQFJREFUeNqsVEEOgjAQ3JLe4QGQ+ANNIIGbPsEf4BP0JT5BjvwCT0AIB/0D3OEMCe42lpSKB2M3mWS6tJPp7lKWpilocUBkYCC4tt4xxjLLsoDwTwzDsBB3EDcUB8I0TUad31F0a0pYFU9IGEV75La+yfM88H1f8LquoWkawV3XhTAMBS/LEtq2XZyjwp5ROCbHWGebXOsgYc65QBAEc56EZRmjKFqckc6vRH4pxbe9ep6cX9bcqqiqCsZxFCAu80VRzDzP8w/n7D3nCSJGdPjBMdFMKpVs6AmxQeG9qUkRPVTWR0w8KWkqVPGOboDivWzOP1j7/R90AxxJI2/LS4ABAIzGydRITZTLAAAAAElFTkSuQmCC) center no-repeat;position:absolute;right:0;top:0;outline:none;border:none}.container_phonebook{position:absolute;width:100%;left:0;right:0;top:149px;background:var(--sd-background-color);height:386px;overflow:hidden}.container_phonebook_inner{width:100%;position:relative;height:100%;padding:0}.scrollbox{height:100%;overflow-y:scroll;overflow-x:hidden;visibility:hidden;padding:0 0 7px;position:relative;scroll-behavior:smooth;scrollbar-width:thin;width:100%}.scrollbox-content,.scrollbox:hover,.scrollbox:focus{visibility:visible}.container_contact_item{width:100%;position:relative;display:flex;flex-direction:row;align-items:center;padding:10px;border:1px solid var(--sd-border-color-light);border-radius:8px;overflow:hidden;margin-bottom:10px;cursor:pointer}.container_contact_item_image{display:flex}.container_contact_item_image_inner{margin:0 auto;padding:0;width:50px;height:50px;position:relative}.container_contact_item_left{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1}.container_contact_item_left_inner{display:flex;flex-basis:1;flex-direction:column;padding:0 0 0 10px}.container_contact_item_left .contact_field{font-size:13px;margin-bottom:2px}.contact_dark{color:var(--sd-text-color-dark)}.contact_gray{color:var(--sd-text-color-medium)}.container_contact_item_left .contact_field_grey{font-size:12px;color:var(--sd-text-color);padding-top:2px;display:flex}.container_contact_item_left .contact_field_green{font-size:13px;margin-bottom:2px;color:#6c0}.container_contact_item_left .contact_field_highlighted{display:flex;font-size:11px;color:var(--sd-text-color-medium)}.container_contact_item_left .contact_field_highlighted span{background:#6c0;border-radius:3px;text-transform:uppercase;color:var(--sd-text-color-inverse);font-size:9px;padding:2px 4px}.container_contact_item_right{display:flex;flex-direction:row}.container_contact_item_right .right_field{display:flex;flex-basis:auto;justify-content:right}.container_contact_item_right .right_field_highlighted{font-size:16px;color:#29abe0}.container_contact_item_right .right_field_content{display:inline-block;border-radius:26px;border:1px solid #e5e5e5;padding:5px 8px;font-size:11px;color:var(--sd-text-color)}.container_contact_item_right .right_recent_content{display:inline-block;padding:0;font-size:11px;color:var(--sd-text-color)}.container_contact_item_right .container_rating{font-size:11px;cursor:pointer}.container_contact_item_right .container_rating span{color:gray;transition:color .3s}.container_contact_item_right .container_rating span.filled{color:gold}.container_dialpad_content{width:100%;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);padding:21px 0 15px;display:flex;flex-basis:auto;flex-direction:column;align-items:center;justify-content:center}.container_dialpad_digits{width:100%;display:flex;justify-content:center;margin-bottom:10px;flex-direction:column}.container_dialpad_row{display:flex;column-gap:10px;flex-direction:row;flex-shrink:0;justify-content:center;margin-bottom:10px}.button_dialpad_digit{display:block;width:50px;height:50px;display:flex;column-gap:20px;margin:0 10px;align-items:center;justify-content:center;line-height:normal;border-radius:50%;outline:none;border:none;font-size:22px;font-weight:700;color:var(--sd-text-color-dark);background:var(--sd-background-color);-webkit-transition-duration:.3s;transition-duration:.3s;box-shadow:#0000001a 0 0 5px,#0000001a 0 0 1px;border:1px solid #ebebeb}.button_dialpad_digit:hover{background:#000;color:var(--sd-text-color-inverse)}.button_call_green{background:#6c0;color:var(--sd-text-color-inverse);width:60px;height:60px;-webkit-transition-duration:.3s;transition-duration:.3s}.button_call_green:hover{background:#5ab400;color:var(--sd-text-color-inverse);width:60px;height:60px}.button_call_red{background:#e0261f;color:var(--sd-text-color-inverse);width:60px;height:60px;-webkit-transition-duration:.3s;transition-duration:.3s;z-index:9999}.button_call_red:hover{background:#cf211a}.button_call_disabled{background:#eee;color:var(--sd-text-color-light);width:60px;height:60px;-webkit-transition-duration:.3s;transition-duration:.3s}.container_dialpad_buttons{width:100%;display:flex;justify-content:center;padding-top:0;margin-bottom:6px}.call_action_buttons{display:flex;gap:14px;align-items:center;justify-content:center;margin-left:auto}.call_action_button{display:inline-flex;align-items:center;gap:10px;padding:12px 18px;border-radius:999px;border:none;color:#fff;font-weight:600;letter-spacing:.2px;cursor:pointer;box-shadow:0 8px 20px #00000029;transition:transform .2s ease,box-shadow .2s ease,filter .2s ease}.call_action_button .icon_pill{width:42px;height:42px;display:grid;place-items:center;border-radius:50%;background:#ffffff29}.call_action_button.accept{background:linear-gradient(135deg,#2bb673,#0fa958)}.call_action_button.decline{background:linear-gradient(135deg,#f45c43,#c81d1d)}.call_action_button:hover{transform:translateY(-1px);box-shadow:0 10px 24px #0003;filter:saturate(1.05)}.call_action_button:active{transform:translateY(0);box-shadow:0 6px 16px #00000029}.incoming_wrapper{width:100%;display:flex;justify-content:center;padding:8px 0 6px}.incoming_strip{display:flex;flex-direction:column;align-items:center;gap:14px;width:100%}.incoming_avatar{position:relative;width:72px;height:72px;border-radius:50%;overflow:hidden}.incoming_avatar img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%}.incoming_details{display:flex;flex-direction:column;align-items:center;gap:4px}.incoming_label{font-size:12px;text-transform:uppercase;letter-spacing:.4px;color:#6b7280}.incoming_number{font-size:20px;font-weight:700;letter-spacing:.1px;color:var(--sd-text-color-dark)}.incoming_subtext{color:#6b7280;font-size:13px}.incoming_actions{margin-left:0;margin-top:6px}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.NgxIntlTelInputComponent, selector: "ngx-intl-tel-input", inputs: ["value", "preferredCountries", "enablePlaceholder", "customPlaceholder", "numberFormat", "cssClass", "onlyCountries", "enableAutoCountrySelect", "searchCountryFlag", "searchCountryField", "searchCountryPlaceholder", "maxLength", "selectFirstCountry", "selectedCountryISO", "phoneValidation", "inputId", "separateDialCode"], outputs: ["countryChange"] }, { kind: "directive", type: i5.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }] });
1468
+ }
1469
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: DialpadComponent, decorators: [{
1470
+ type: Component,
1471
+ args: [{ selector: 'app-dialpad', standalone: false, template: "<div class=\"container_pd_sd\">\n <audio id=\"sd_call_ring\" #audioElement></audio>\n\n @if (isRinging) {\n <div class=\"incoming_wrapper\">\n <div class=\"incoming_strip slide-right\">\n <div class=\"incoming_avatar\">\n <img\n src=\"../../../assets/images/incomingCall_avatar.gif\"\n alt=\"Incoming call avatar\"\n />\n </div>\n <div class=\"incoming_details\">\n <div class=\"incoming_label\">Incoming call</div>\n <div class=\"incoming_number\">\n {{ incomingCallNumber || 'Unknown number' }}\n </div>\n <div class=\"incoming_subtext\">Web call is ringing</div>\n </div>\n <div class=\"call_action_buttons incoming_actions\">\n <button\n type=\"button\"\n class=\"call_action_button decline\"\n (click)=\"declineAvayaCall()\"\n >\n <span class=\"icon_pill\">\n <svg height=\"18\" viewBox=\"0 0 640 512\">\n <path\n class=\"icon_color\"\n d=\"M11.7 266.3l41.9 94.3c6.1 13.7 20.8 21.3 35.5 18.4l109.2-21.8c15-3 25.7-16.1 25.7-31.4V240c62.3-20.8 129.7-20.8 192 0v85.8c0 15.3 10.8 28.4 25.7 31.4L550.9 379c14.7 2.9 29.4-4.7 35.5-18.4l41.9-94.3c7.2-16.2 5.1-35.1-7.4-47.7C570.8 168.1 464.2 96 320 96S69.2 168.1 19.1 218.6c-12.5 12.6-14.6 31.5-7.4 47.7z\"\n />\n </svg>\n </span>\n <span class=\"label\">Decline</span>\n </button>\n <button\n type=\"button\"\n class=\"call_action_button accept\"\n (click)=\"acceptAvayaCAll()\"\n >\n <span class=\"icon_pill\">\n <svg height=\"18\" viewBox=\"0 0 512 512\">\n <path\n class=\"icon_color\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\"\n />\n </svg>\n </span>\n <span class=\"label\">Answer</span>\n </button>\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"container_phone_number_input\"\n [formGroup]=\"dialForm\"\n (ngSubmit)=\"makeCall()\"\n >\n @if (contacts?.length > 0) {\n <button\n class=\"button_phonebook\"\n (click)=\"showDirectoryPhonebook = !showDirectoryPhonebook\"\n >\n <svg\n fill=\"currentColor\"\n height=\"22px\"\n style=\"enable-background: new 0 0 611.985 611.986\"\n version=\"1.1\"\n viewBox=\"0 0 611.985 611.986\"\n width=\"40.985px\"\n routerLinkActive=\"active\"\n xml:space=\"preserve\"\n >\n <g>\n <path\n d=\"M143.021,158.99c42.525,0,79.456-36.931,79.456-79.456S185.546,0.078,143.021,0.078\n S63.565,37.009,63.565,79.534S100.496,158.99,143.021,158.99z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M278.097,381.467c0-127.13-65.98-190.695-139.048-190.695S0,254.338,0,381.467\n C0,468.583,278.097,468.583,278.097,381.467z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M373.444,220.807c42.525,0,79.456-36.931,79.456-79.456s-36.931-79.456-79.456-79.456\n s-79.456,36.931-79.456,79.456S330.919,220.807,373.444,220.807z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M369.471,252.59c-21.962,0-43.033,6.452-62.071,17.957c11.537,31.051,18.37,67.792,18.37,110.921\n c0,42.843-28.541,76.151-77.517,95.22c60.768,51.424,260.267,40.459,260.267-33.403\n C508.52,316.155,442.539,252.59,369.471,252.59z\"\n fill=\"currentColor\"\n />\n </g>\n </svg>\n </button>\n }\n\n\n <ngx-intl-tel-input\n formControlName=\"phoneNumber\"\n name=\"phoneNumber\"\n [cssClass]=\"'phone_number_sd'\"\n [preferredCountries]=\"['in']\"\n [customPlaceholder]=\"'Phone Number'\"\n [enableAutoCountrySelect]=\"false\"\n [enablePlaceholder]=\"false\"\n [searchCountryFlag]=\"true\"\n [searchCountryField]=\"[SearchCountryField.Iso2, SearchCountryField.Name]\"\n [selectFirstCountry]=\"false\"\n [selectedCountryISO]=\"CountryISO.India\"\n [maxLength]=\"15\"\n [phoneValidation]=\"true\"\n [separateDialCode]=\"true\"\n (keydown)=\"handleKeyboardInput($event)\"\n >\n </ngx-intl-tel-input>\n <!-- <input type=\"text\" class=\"phone_number_sd\"> -->\n <button class=\"button_backspace\" (click)=\"onClear()\"></button>\n </div>\n }\n</div>\n\n@if (!isRinging && showDirectoryPhonebook) {\n <div class=\"container_phonebook\">\n <div class=\"container_phonebook_inner\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n @for (contact of contacts; track contact.id ?? contact.phone ?? $index) {\n <div class=\"container_contact_item\">\n <div class=\"container_contact_item_image\">\n <div class=\"container_contact_item_image_inner\">\n <svg\n viewBox=\"0 0 212 212\"\n height=\"49px\"\n width=\"49px\"\n version=\"1.1\"\n x=\"0px\"\n y=\"0px\"\n enable-background=\"new 0 0 212 212\"\n >\n <path\n fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\"\n ></path>\n <g>\n <path\n fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 c-0.964-1.144-2.024-2.326-3.184-3.527c-1.741-1.802-3.71-3.646-5.924-5.47c-2.952-2.431-6.339-4.824-10.204-7.026 c-1.877-1.07-3.873-2.092-5.98-3.055c-0.062-0.028-0.118-0.059-0.18-0.087c-9.792-4.44-22.106-7.529-37.416-7.529 s-27.624,3.089-37.416,7.529c-0.338,0.153-0.653,0.318-0.985,0.474c-1.431,0.674-2.806,1.376-4.128,2.101 c-0.716,0.393-1.417,0.792-2.101,1.197c-3.421,2.027-6.475,4.191-9.15,6.395c-2.213,1.823-4.182,3.668-5.924,5.47 c-1.161,1.201-2.22,2.384-3.184,3.527c-0.964,1.144-1.832,2.25-2.609,3.299c-0.778,1.049-1.464,2.04-2.065,2.955 c-0.557,0.848-1.033,1.622-1.447,2.324c-0.033,0.056-0.073,0.119-0.104,0.174c-0.435,0.744-0.79,1.392-1.07,1.926 c-0.559,1.068-0.818,1.678-0.818,1.678v0.398c18.285,17.927,43.322,28.985,70.945,28.985c27.678,0,52.761-11.103,71.055-29.095 v-0.289c0,0-0.619-1.45-1.992-3.778C174.594,173.238,174.117,172.463,173.561,171.615z\"\n ></path>\n <path\n fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 c1.772-0.532,3.482-1.188,5.12-1.958c2.184-1.027,4.242-2.258,6.15-3.67c2.863-2.119,5.39-4.646,7.509-7.509 c0.706-0.954,1.367-1.945,1.98-2.971c0.919-1.539,1.729-3.155,2.422-4.84c0.462-1.123,0.872-2.277,1.226-3.458 c0.177-0.591,0.341-1.188,0.49-1.792c0.299-1.208,0.542-2.443,0.725-3.701c0.275-1.887,0.417-3.827,0.417-5.811 c0-1.984-0.142-3.925-0.417-5.811c-0.184-1.258-0.426-2.493-0.725-3.701c-0.15-0.604-0.313-1.202-0.49-1.793 c-0.354-1.181-0.764-2.335-1.226-3.458c-0.693-1.685-1.504-3.301-2.422-4.84c-0.613-1.026-1.274-2.017-1.98-2.971 c-2.119-2.863-4.646-5.39-7.509-7.509c-1.909-1.412-3.966-2.643-6.15-3.67c-1.638-0.77-3.348-1.426-5.12-1.958 c-1.181-0.355-2.39-0.655-3.624-0.896c-2.468-0.484-5.035-0.737-7.68-0.737c-21.162,0-37.345,16.183-37.345,37.345 C68.657,109.317,84.84,125.5,106.002,125.5z\"\n ></path>\n </g>\n </svg>\n </div>\n </div>\n\n <div class=\"container_contact_item_left\">\n <div class=\"container_contact_item_left_inner\">\n <div class=\"contact_field\">{{ contact.name }}</div>\n <div class=\"contact_field\">{{ contact.phone }}</div>\n </div>\n </div>\n\n <div class=\"container_contact_item_right\">\n <div class=\"right_field right_field_highlighted\">\n <span class=\"right_field_content\">\n <div class=\"container_rating\">\n @for (star of [1,2,3,4,5]; track star) {\n <span [class.filled]=\"star <= (contact.rating || 0)\">\u2605</span>\n }\n </div>\n </span>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n\n@if (!isRinging) {\n <div class=\"container_dialpad\">\n <div class=\"container_dialpad_content\">\n <div class=\"container_dialpad_digits\">\n <!-- <div class=\"active-calls-container\"></div> -->\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('1')\">\n 1\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('2')\">\n 2\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('3')\">\n 3\n </button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('4')\">\n 4\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('5')\">\n 5\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('6')\">\n 6\n </button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('7')\">\n 7\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('8')\">\n 8\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('9')\">\n 9\n </button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('*')\">\n <svg viewBox=\"0 0 512 512\" height=\"17px\">\n <path\n fill=\"currentColor\"\n d=\"M208 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 140.9 122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7 43.7L352 256l122 70.4c15.3 8.8 20.6 28.4 11.7 43.7l-16 27.7c-8.8 15.3-28.4 20.6-43.7 11.7L304 339.1 304 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-140.9L86 409.6c-15.3 8.8-34.9 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7L160 256 38 185.6c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7C51.1 98.8 70.7 93.6 86 102.4l122 70.4L208 32z\"\n />\n </svg>\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('0')\">\n 0\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"handleKeypadInput('#')\">\n <svg height=\"19px\" viewBox=\"0 0 448 512\">\n <path\n fill=\"currentColor\"\n d=\"M181.3 32.4c17.4 2.9 29.2 19.4 26.3 36.8L197.8 128l95.1 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3s29.2 19.4 26.3 36.8L357.8 128l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0L325.8 320l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l9.8-58.7-95.1 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8L90.2 384 32 384c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 21.3-128L64 192c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3zM187.1 192L165.8 320l95.1 0 21.3-128-95.1 0z\"\n />\n </svg>\n </button>\n </div>\n </div>\n <div class=\"container_dialpad_buttons\">\n <div class=\"container_dialpad_row\">\n <button\n class=\"button_dialpad_digit button_call_green\"\n (click)=\"makeCall()\"\n [disabled]=\"!this.dialForm.valid\"\n [ngClass]=\"{ button_call_disabled: !this.dialForm.valid }\"\n >\n <svg viewBox=\"0 0 512 512\" height=\"18px\">\n <path\n fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\"\n />\n </svg>\n </button>\n </div>\n </div>\n </div>\n </div>\n}\n", styles: [".container_pd_sd{width:100%;padding:0 30px;margin:0}.container_dialpad{width:100%;margin:0 auto;padding:32px 0;position:relative;background:var(--sd-background-color);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex;justify-content:center;align-items:center}.container_dialpad_header{width:100%;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);z-index:99;background:var(--sd-background-color)}.container_dialpad_header_inner1{margin:0;width:100%;padding:0 15px;position:relative}.container_dialpad_header_inner2{width:100%;margin:0;padding:15px;background:#f7f7f7;background:linear-gradient(180deg,#f7f7f7 72%,#fff);border-radius:12px 12px 0 0;position:relative}.container_phone_number_input{width:100%;margin:0;padding:0;position:relative}.container_phone_number_input .phone_number_sd{width:100%;display:flex;height:48px;outline:none;text-align:center;align-items:center;border:1px solid var(--sd-border-color-light);border-radius:27px;font-size:20px;font-weight:400;color:#000;padding:0 50px}.container_phone_number_input .button_phonebook{position:absolute;width:38px;height:38px;background:var(--sd-background-color);-webkit-transition-duration:.3s;transition-duration:.3s;border-radius:50%;border:none;outline:none;display:flex;align-items:center;justify-content:center;top:5px;left:8px;color:#a6a6a6}.container_phone_number_input .button_phonebook:hover,.container_phone_number_input .button_phonebook .sec_button{background:#f0f0f0;color:#29abe0}.container_phone_number_input .button_backspace{width:48px;height:48px;display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAANCAYAAABCZ/VdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQFJREFUeNqsVEEOgjAQ3JLe4QGQ+ANNIIGbPsEf4BP0JT5BjvwCT0AIB/0D3OEMCe42lpSKB2M3mWS6tJPp7lKWpilocUBkYCC4tt4xxjLLsoDwTwzDsBB3EDcUB8I0TUad31F0a0pYFU9IGEV75La+yfM88H1f8LquoWkawV3XhTAMBS/LEtq2XZyjwp5ROCbHWGebXOsgYc65QBAEc56EZRmjKFqckc6vRH4pxbe9ep6cX9bcqqiqCsZxFCAu80VRzDzP8w/n7D3nCSJGdPjBMdFMKpVs6AmxQeG9qUkRPVTWR0w8KWkqVPGOboDivWzOP1j7/R90AxxJI2/LS4ABAIzGydRITZTLAAAAAElFTkSuQmCC) center no-repeat;position:absolute;right:0;top:0;outline:none;border:none}.container_phonebook{position:absolute;width:100%;left:0;right:0;top:149px;background:var(--sd-background-color);height:386px;overflow:hidden}.container_phonebook_inner{width:100%;position:relative;height:100%;padding:0}.scrollbox{height:100%;overflow-y:scroll;overflow-x:hidden;visibility:hidden;padding:0 0 7px;position:relative;scroll-behavior:smooth;scrollbar-width:thin;width:100%}.scrollbox-content,.scrollbox:hover,.scrollbox:focus{visibility:visible}.container_contact_item{width:100%;position:relative;display:flex;flex-direction:row;align-items:center;padding:10px;border:1px solid var(--sd-border-color-light);border-radius:8px;overflow:hidden;margin-bottom:10px;cursor:pointer}.container_contact_item_image{display:flex}.container_contact_item_image_inner{margin:0 auto;padding:0;width:50px;height:50px;position:relative}.container_contact_item_left{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1}.container_contact_item_left_inner{display:flex;flex-basis:1;flex-direction:column;padding:0 0 0 10px}.container_contact_item_left .contact_field{font-size:13px;margin-bottom:2px}.contact_dark{color:var(--sd-text-color-dark)}.contact_gray{color:var(--sd-text-color-medium)}.container_contact_item_left .contact_field_grey{font-size:12px;color:var(--sd-text-color);padding-top:2px;display:flex}.container_contact_item_left .contact_field_green{font-size:13px;margin-bottom:2px;color:#6c0}.container_contact_item_left .contact_field_highlighted{display:flex;font-size:11px;color:var(--sd-text-color-medium)}.container_contact_item_left .contact_field_highlighted span{background:#6c0;border-radius:3px;text-transform:uppercase;color:var(--sd-text-color-inverse);font-size:9px;padding:2px 4px}.container_contact_item_right{display:flex;flex-direction:row}.container_contact_item_right .right_field{display:flex;flex-basis:auto;justify-content:right}.container_contact_item_right .right_field_highlighted{font-size:16px;color:#29abe0}.container_contact_item_right .right_field_content{display:inline-block;border-radius:26px;border:1px solid #e5e5e5;padding:5px 8px;font-size:11px;color:var(--sd-text-color)}.container_contact_item_right .right_recent_content{display:inline-block;padding:0;font-size:11px;color:var(--sd-text-color)}.container_contact_item_right .container_rating{font-size:11px;cursor:pointer}.container_contact_item_right .container_rating span{color:gray;transition:color .3s}.container_contact_item_right .container_rating span.filled{color:gold}.container_dialpad_content{width:100%;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);padding:21px 0 15px;display:flex;flex-basis:auto;flex-direction:column;align-items:center;justify-content:center}.container_dialpad_digits{width:100%;display:flex;justify-content:center;margin-bottom:10px;flex-direction:column}.container_dialpad_row{display:flex;column-gap:10px;flex-direction:row;flex-shrink:0;justify-content:center;margin-bottom:10px}.button_dialpad_digit{display:block;width:50px;height:50px;display:flex;column-gap:20px;margin:0 10px;align-items:center;justify-content:center;line-height:normal;border-radius:50%;outline:none;border:none;font-size:22px;font-weight:700;color:var(--sd-text-color-dark);background:var(--sd-background-color);-webkit-transition-duration:.3s;transition-duration:.3s;box-shadow:#0000001a 0 0 5px,#0000001a 0 0 1px;border:1px solid #ebebeb}.button_dialpad_digit:hover{background:#000;color:var(--sd-text-color-inverse)}.button_call_green{background:#6c0;color:var(--sd-text-color-inverse);width:60px;height:60px;-webkit-transition-duration:.3s;transition-duration:.3s}.button_call_green:hover{background:#5ab400;color:var(--sd-text-color-inverse);width:60px;height:60px}.button_call_red{background:#e0261f;color:var(--sd-text-color-inverse);width:60px;height:60px;-webkit-transition-duration:.3s;transition-duration:.3s;z-index:9999}.button_call_red:hover{background:#cf211a}.button_call_disabled{background:#eee;color:var(--sd-text-color-light);width:60px;height:60px;-webkit-transition-duration:.3s;transition-duration:.3s}.container_dialpad_buttons{width:100%;display:flex;justify-content:center;padding-top:0;margin-bottom:6px}.call_action_buttons{display:flex;gap:14px;align-items:center;justify-content:center;margin-left:auto}.call_action_button{display:inline-flex;align-items:center;gap:10px;padding:12px 18px;border-radius:999px;border:none;color:#fff;font-weight:600;letter-spacing:.2px;cursor:pointer;box-shadow:0 8px 20px #00000029;transition:transform .2s ease,box-shadow .2s ease,filter .2s ease}.call_action_button .icon_pill{width:42px;height:42px;display:grid;place-items:center;border-radius:50%;background:#ffffff29}.call_action_button.accept{background:linear-gradient(135deg,#2bb673,#0fa958)}.call_action_button.decline{background:linear-gradient(135deg,#f45c43,#c81d1d)}.call_action_button:hover{transform:translateY(-1px);box-shadow:0 10px 24px #0003;filter:saturate(1.05)}.call_action_button:active{transform:translateY(0);box-shadow:0 6px 16px #00000029}.incoming_wrapper{width:100%;display:flex;justify-content:center;padding:8px 0 6px}.incoming_strip{display:flex;flex-direction:column;align-items:center;gap:14px;width:100%}.incoming_avatar{position:relative;width:72px;height:72px;border-radius:50%;overflow:hidden}.incoming_avatar img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%}.incoming_details{display:flex;flex-direction:column;align-items:center;gap:4px}.incoming_label{font-size:12px;text-transform:uppercase;letter-spacing:.4px;color:#6b7280}.incoming_number{font-size:20px;font-weight:700;letter-spacing:.1px;color:var(--sd-text-color-dark)}.incoming_subtext{color:#6b7280;font-size:13px}.incoming_actions{margin-left:0;margin-top:6px}\n"] }]
1472
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1$1.FormBuilder }, { type: AvayaIPOService }, { type: AuthenticationService }], propDecorators: { contacts: [{
1473
+ type: Input
1474
+ }], makeCallEv: [{
1475
+ type: Output
1476
+ }], audioElement: [{
1477
+ type: ViewChild,
1478
+ args: ['audioElement']
1479
+ }] } });
1480
+
1481
+ class DeviceSelectorComponent {
1482
+ selectedAudioInputId;
1483
+ selectedAudioOutputId;
1484
+ change = new EventEmitter();
1485
+ audioInputs = [];
1486
+ audioOutputs = [];
1487
+ ngOnInit() {
1488
+ if (navigator?.mediaDevices) {
1489
+ navigator.mediaDevices.addEventListener('devicechange', this.handleDeviceChange);
1490
+ this.refreshDeviceList();
1491
+ }
1492
+ else {
1493
+ console.warn('MediaDevices API not supported');
1494
+ }
1495
+ }
1496
+ ngOnDestroy() {
1497
+ navigator.mediaDevices.removeEventListener('devicechange', this.handleDeviceChange);
1498
+ }
1499
+ handleDeviceChange = async () => {
1500
+ await this.refreshDeviceList();
1501
+ };
1502
+ async refreshDeviceList() {
1503
+ const devices = await navigator.mediaDevices.enumerateDevices();
1504
+ this.audioInputs = devices.filter((d) => d.kind === 'audioinput');
1505
+ this.audioOutputs = devices.filter((d) => d.kind === 'audiooutput');
1506
+ // Fallback to first device if previous selection is no longer available
1507
+ if (!this.audioInputs.some((d) => d.deviceId === this.selectedAudioInputId)) {
1508
+ this.selectedAudioInputId = this.audioInputs[0]?.deviceId ?? '';
1509
+ }
1510
+ if (!this.audioOutputs.some((d) => d.deviceId === this.selectedAudioOutputId)) {
1511
+ this.selectedAudioOutputId = this.audioOutputs[0]?.deviceId ?? '';
1512
+ }
1513
+ this.emitDeviceChange();
1514
+ }
1515
+ onMicChange(deviceId) {
1516
+ this.selectedAudioInputId = deviceId;
1517
+ this.emitDeviceChange();
1518
+ }
1519
+ onSpeakerChange(deviceId) {
1520
+ this.selectedAudioOutputId = deviceId;
1521
+ this.emitDeviceChange();
1522
+ }
1523
+ emitDeviceChange() {
1524
+ this.change.emit({
1525
+ audioInputId: this.selectedAudioInputId ?? '',
1526
+ audioOutputId: this.selectedAudioOutputId ?? '',
1527
+ videoInputId: undefined,
1528
+ });
1529
+ }
1530
+ trackByDeviceId(index, device) {
1531
+ return device.deviceId;
1532
+ }
1533
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: DeviceSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1534
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.9", type: DeviceSelectorComponent, isStandalone: false, selector: "app-device-selector", inputs: { selectedAudioInputId: "selectedAudioInputId", selectedAudioOutputId: "selectedAudioOutputId" }, outputs: { change: "change" }, ngImport: i0, template: "<div class=\"sd_container_device_selector\">\n <h2 class=\"sd_tab_heading\">Preferences</h2>\n\n <div class=\"sd_tab_content\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n <div class=\"sd_tab_pd_sd\">\n <h3>Audio settings</h3>\n\n <div class=\"sd_container_selector_item\">\n <label for=\"audioInputSelect\">\n Microphone<br />\n <p>The device used to capture your voice</p>\n </label>\n\n <div class=\"sd_container_item_input\">\n <div class=\"sd_container_item_icon\">\n <svg width=\"14px\" viewBox=\"0 0 384 512\">\n <path\n d=\"M192 0C139 0 96 43 96 96l0 160c0 53 43 96 96 96s96-43 96-96l0-160c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c85.8-11.7 152-85.3 152-174.4l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 70.7-57.3 128-128 128S64 326.7 64 256l0-40z\"\n />\n </svg>\n </div>\n\n <select\n id=\"audioInputSelect\"\n [(ngModel)]=\"selectedAudioInputId\"\n (change)=\"onMicChange(selectedAudioInputId)\"\n >\n @for (mic of audioInputs; track mic.deviceId; let i = $index) {\n <option [value]=\"mic.deviceId\">\n {{ mic.label || \"Microphone \" + (i + 1) }}\n </option>\n } @empty {\n <option disabled>No microphones found</option>\n }\n </select>\n </div>\n </div>\n\n <div class=\"sd_container_selector_item\">\n <label for=\"audioOutputSelect\">\n Speakers<br />\n <p>The device that rings when you get a call.</p>\n </label>\n\n <div class=\"sd_container_item_input\">\n <div class=\"sd_container_item_icon\">\n <svg width=\"21px\" viewBox=\"0 0 576 512\">\n <path\n d=\"M333.1 34.8C344.6 40 352 51.4 352 64l0 384c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L163.8 352 96 352c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l67.8 0L298.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zm172 72.2c43.2 35.2 70.9 88.9 70.9 149s-27.7 113.8-70.9 149c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C507.3 341.3 528 301.1 528 256s-20.7-85.3-53.2-111.8c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zm-60.5 74.5C466.1 199.1 480 225.9 480 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C425.1 284.4 432 271 432 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5z\"\n />\n </svg>\n </div>\n\n <select\n id=\"audioOutputSelect\"\n [(ngModel)]=\"selectedAudioOutputId\"\n (change)=\"onSpeakerChange(selectedAudioOutputId)\"\n >\n @for (spk of audioOutputs; track spk.deviceId; let i = $index) {\n <option [value]=\"spk.deviceId\">\n {{ spk.label || \"Speaker \" + (i + 1) }}\n </option>\n } @empty {\n <option disabled>No speakers found</option>\n }\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".sd_container_device_selector{margin:0;padding:15px 0 0;width:100%;position:relative}.sd_tab_heading{font-family:var(--sd-text-font-family);font-size:20px;color:var(--sd-text-color-dark);font-weight:700;letter-spacing:-.65px;padding:0 0 15px 15px;line-height:normal;margin:0}.sd_tab_content{margin:0;padding:0 0 15px;width:100%;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex;justify-content:center;align-items:center;height:calc(100vh - 108px)}.sd_tab_pd_sd{margin:0;padding:0 15px;width:100%}.sd_tab_content h3{font-family:var(--sd-text-font-family);font-size:16px;color:var(--sd-text-color-dark);letter-spacing:-.26px;font-weight:700;padding-bottom:10px}.sd_container_selector_item{width:100%;background:var(--sd-background-color);border-radius:8px;padding:15px;box-shadow:#0000001a 0 0 5px,#0000001a 0 0 1px;margin-bottom:15px;position:relative}.sd_container_selector_item label{font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;display:block;color:var(--sd-text-color-dark);margin-bottom:8px}.sd_container_selector_item label p{font-size:12px;color:var(--sd-text-color-medium);margin:4px 0 0;line-height:1.4}.sd_container_selector_item select{font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;display:block;color:var(--sd-text-color);width:100%;border:1px solid var(--sd-border-color-dark);padding:12px 8px 12px 63px;border-radius:4px;outline:none;position:relative;box-sizing:border-box}.sd_container_item_input{margin:0;padding:0;width:100%;position:relative}.sd_container_item_icon{position:absolute;width:54px;height:44px;display:flex;align-items:center;justify-content:center;background:#f1f1f1;top:1px;left:1px;border-bottom-left-radius:3px;border-top-left-radius:3px;z-index:9}\n"], dependencies: [{ kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }] });
1535
+ }
1536
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: DeviceSelectorComponent, decorators: [{
1537
+ type: Component,
1538
+ args: [{ selector: 'app-device-selector', standalone: false, template: "<div class=\"sd_container_device_selector\">\n <h2 class=\"sd_tab_heading\">Preferences</h2>\n\n <div class=\"sd_tab_content\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n <div class=\"sd_tab_pd_sd\">\n <h3>Audio settings</h3>\n\n <div class=\"sd_container_selector_item\">\n <label for=\"audioInputSelect\">\n Microphone<br />\n <p>The device used to capture your voice</p>\n </label>\n\n <div class=\"sd_container_item_input\">\n <div class=\"sd_container_item_icon\">\n <svg width=\"14px\" viewBox=\"0 0 384 512\">\n <path\n d=\"M192 0C139 0 96 43 96 96l0 160c0 53 43 96 96 96s96-43 96-96l0-160c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c85.8-11.7 152-85.3 152-174.4l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 70.7-57.3 128-128 128S64 326.7 64 256l0-40z\"\n />\n </svg>\n </div>\n\n <select\n id=\"audioInputSelect\"\n [(ngModel)]=\"selectedAudioInputId\"\n (change)=\"onMicChange(selectedAudioInputId)\"\n >\n @for (mic of audioInputs; track mic.deviceId; let i = $index) {\n <option [value]=\"mic.deviceId\">\n {{ mic.label || \"Microphone \" + (i + 1) }}\n </option>\n } @empty {\n <option disabled>No microphones found</option>\n }\n </select>\n </div>\n </div>\n\n <div class=\"sd_container_selector_item\">\n <label for=\"audioOutputSelect\">\n Speakers<br />\n <p>The device that rings when you get a call.</p>\n </label>\n\n <div class=\"sd_container_item_input\">\n <div class=\"sd_container_item_icon\">\n <svg width=\"21px\" viewBox=\"0 0 576 512\">\n <path\n d=\"M333.1 34.8C344.6 40 352 51.4 352 64l0 384c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L163.8 352 96 352c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l67.8 0L298.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zm172 72.2c43.2 35.2 70.9 88.9 70.9 149s-27.7 113.8-70.9 149c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C507.3 341.3 528 301.1 528 256s-20.7-85.3-53.2-111.8c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zm-60.5 74.5C466.1 199.1 480 225.9 480 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C425.1 284.4 432 271 432 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5z\"\n />\n </svg>\n </div>\n\n <select\n id=\"audioOutputSelect\"\n [(ngModel)]=\"selectedAudioOutputId\"\n (change)=\"onSpeakerChange(selectedAudioOutputId)\"\n >\n @for (spk of audioOutputs; track spk.deviceId; let i = $index) {\n <option [value]=\"spk.deviceId\">\n {{ spk.label || \"Speaker \" + (i + 1) }}\n </option>\n } @empty {\n <option disabled>No speakers found</option>\n }\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".sd_container_device_selector{margin:0;padding:15px 0 0;width:100%;position:relative}.sd_tab_heading{font-family:var(--sd-text-font-family);font-size:20px;color:var(--sd-text-color-dark);font-weight:700;letter-spacing:-.65px;padding:0 0 15px 15px;line-height:normal;margin:0}.sd_tab_content{margin:0;padding:0 0 15px;width:100%;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex;justify-content:center;align-items:center;height:calc(100vh - 108px)}.sd_tab_pd_sd{margin:0;padding:0 15px;width:100%}.sd_tab_content h3{font-family:var(--sd-text-font-family);font-size:16px;color:var(--sd-text-color-dark);letter-spacing:-.26px;font-weight:700;padding-bottom:10px}.sd_container_selector_item{width:100%;background:var(--sd-background-color);border-radius:8px;padding:15px;box-shadow:#0000001a 0 0 5px,#0000001a 0 0 1px;margin-bottom:15px;position:relative}.sd_container_selector_item label{font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;display:block;color:var(--sd-text-color-dark);margin-bottom:8px}.sd_container_selector_item label p{font-size:12px;color:var(--sd-text-color-medium);margin:4px 0 0;line-height:1.4}.sd_container_selector_item select{font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;display:block;color:var(--sd-text-color);width:100%;border:1px solid var(--sd-border-color-dark);padding:12px 8px 12px 63px;border-radius:4px;outline:none;position:relative;box-sizing:border-box}.sd_container_item_input{margin:0;padding:0;width:100%;position:relative}.sd_container_item_icon{position:absolute;width:54px;height:44px;display:flex;align-items:center;justify-content:center;background:#f1f1f1;top:1px;left:1px;border-bottom-left-radius:3px;border-top-left-radius:3px;z-index:9}\n"] }]
1539
+ }], propDecorators: { selectedAudioInputId: [{
1540
+ type: Input
1541
+ }], selectedAudioOutputId: [{
1542
+ type: Input
1543
+ }], change: [{
1544
+ type: Output
1545
+ }] } });
1546
+
1547
+ class AvayaIPOWidgetComponent {
1548
+ http;
1549
+ cdr;
1550
+ zone;
1551
+ formBuilder;
1552
+ countryService;
1553
+ phoneNumberLookupService;
1554
+ avayaIPOService;
1555
+ recordingManagerService;
1556
+ callSocket;
1557
+ authenticationService;
1558
+ tenantService;
1559
+ userService;
1560
+ tenantId;
1561
+ userId;
1562
+ isVisible;
1563
+ containerHeightObservable;
1564
+ containerWidthObservable;
1565
+ notificationEvent = new EventEmitter();
1566
+ isRecording = false;
1567
+ loginForm;
1568
+ transferForm;
1569
+ dtmfForm;
1570
+ isRinging = false;
1571
+ showActiveCall = false;
1572
+ loginSubscription;
1573
+ incomingCallSubscription;
1574
+ callDuration = 0;
1575
+ timer;
1576
+ isCalling = false;
1577
+ lookupPhoneNumber = null;
1578
+ ringtone;
1579
+ isReconnectingInProgress = false;
1580
+ isFailoverInProgress = false;
1581
+ isFailbackInProgress = false;
1582
+ showLoginForm = false;
1583
+ showLoginPassword = false;
1584
+ showLoginLoader = false;
1585
+ hasAvayaSocketError = false;
1586
+ hasAvayaLoginError = false;
1587
+ hasAvayaLoginConflictError = false;
1588
+ hasAvayaDeviceError = false;
1589
+ callStateSubscription;
1590
+ isMuted = false;
1591
+ isOnHold = false;
1592
+ isactiveCall = false;
1593
+ phoneNumber = '';
1594
+ isDailpadOpen = false;
1595
+ isCallTransferOpen = false;
1596
+ activeTab = 'tab1';
1597
+ contacts = [];
1598
+ searchText = '';
1599
+ extensionNumber = '';
1600
+ isDirectoryOpen = false;
1601
+ istransfer = false;
1602
+ rating = 4; // TODO: Remove thiss
1603
+ isConfereceList = false;
1604
+ conferenceParticipants;
1605
+ /* conferenceParticipants = [
1606
+ { name: 'Pankaj Kumar Singh', duration: '00:10' },
1607
+ { name: 'Saurabh Mehta', duration: '00:10' },
1608
+ { name: 'Rajat Verma', duration: '00:10' }
1609
+ ]; */
1610
+ currentView = 'transferListpage';
1611
+ redialTimeout;
1612
+ showCallDisconnected = false;
1613
+ lastDisconnectedCall = null;
1614
+ activeCalls = [];
1615
+ currentActiveCallIndex = 0;
1616
+ isAddingNewCall = false;
1617
+ isredialling = false;
1618
+ wasInbound = false;
1619
+ showHistoryPopup = false;
1620
+ noOfCalls = 0;
1621
+ isCallingFromContact = false;
1622
+ bottomActiveTab = 'keypad_sd';
1623
+ disconnecttriggered = false;
1624
+ lastRemoteStream = null;
1625
+ lastLocalStream = null;
1626
+ showInitLoader = false;
1627
+ tenant;
1628
+ user;
1629
+ internalContacts = [
1630
+ { id: 1, name: 'Lovish Snug', phone: '6283675354', role: 'Agent', ext: '8002' },
1631
+ { id: 2, name: 'Rakesh Kumar', phone: '(888) 9876549', role: 'Administrator', ext: '3005' },
1632
+ { id: 3, name: 'Sohan Singh', phone: '(876) 8800965', role: 'Manager', ext: '3005' },
1633
+ { id: 4, name: 'Pardeep Mishra', phone: '(876) 8800965', role: 'Agent', ext: '3005' },
1634
+ { id: 5, name: 'Varun Ji', phone: '(876) 8800965', role: 'Manager', ext: '3005' }
1635
+ ];
1636
+ directoryContacts = [
1637
+ { id: 101, name: 'Rajeev Kumar Singh', phone: '(654) 9876549', rating: 4 },
1638
+ { id: 102, name: 'Amit Sharma', phone: '(987) 6543210', rating: 5 },
1639
+ { id: 103, name: 'Sunita Verma', phone: '(765) 4321987', rating: 3 }
1640
+ ];
1641
+ recognition;
1642
+ transcriptText = '';
1643
+ showTranscriptionPopup = false;
1644
+ recognitionKeepAlive;
1645
+ transcriptHistory = [];
1646
+ recognitionActive = false;
1647
+ transcriptSegments = []; // final lines w/ timestamps
1648
+ transcriptStartedAt = 0;
1649
+ transcriptEndedAt = 0;
1650
+ autoDownloadSummaryOnEnd = true; // toggle if you want auto-download
1651
+ summaryText = '';
1652
+ displayCallingNumber;
1653
+ redialnumber;
1654
+ isTransferring = false;
1655
+ constructor(http, cdr, zone, formBuilder, countryService, phoneNumberLookupService, avayaIPOService, recordingManagerService, callSocket, authenticationService, tenantService, userService) {
1656
+ this.http = http;
1657
+ this.cdr = cdr;
1658
+ this.zone = zone;
1659
+ this.formBuilder = formBuilder;
1660
+ this.countryService = countryService;
1661
+ this.phoneNumberLookupService = phoneNumberLookupService;
1662
+ this.avayaIPOService = avayaIPOService;
1663
+ this.recordingManagerService = recordingManagerService;
1664
+ this.callSocket = callSocket;
1665
+ this.authenticationService = authenticationService;
1666
+ this.tenantService = tenantService;
1667
+ this.userService = userService;
1668
+ this.loginForm = this.formBuilder.group({
1669
+ ipoExtensionNo: ['', Validators.required],
1670
+ ipoPassword: ['', Validators.required],
1671
+ });
1672
+ this.transferForm = this.formBuilder.group({
1673
+ target: ['', Validators.required],
1674
+ });
1675
+ this.dtmfForm = this.formBuilder.group({
1676
+ dtmf: ['', Validators.required],
1677
+ });
1678
+ }
1679
+ async ngOnInit() {
1680
+ if (!('serviceWorker' in navigator)) {
1681
+ // Service Worker isn't supported on this browser, disable or hide UI.
1682
+ return;
1683
+ }
1684
+ if (!('PushManager' in window)) {
1685
+ // Push isn't supported on this browser, disable or hide UI.
1686
+ return;
1687
+ }
1688
+ this.loadScript('https://snugdesk-assets.s3.us-east-1.amazonaws.com/js/awl.min.js').then(() => {
1689
+ this.avayaIPOService.init();
1690
+ });
1691
+ this.showInitLoader = true;
1692
+ try {
1693
+ if (!this.authenticationService.isAuthenticated()) {
1694
+ const res_login = await this.authenticationService.login(this.tenantId, this.userId);
1695
+ console.debug('Login response:', res_login);
1696
+ }
1697
+ this.tenant = sessionStorage.getItem('sd-tenant');
1698
+ if (!this.tenant) {
1699
+ this.tenant = await this.tenantService.getTenantById(this.tenantId);
1700
+ console.debug('Fetched tenant:', this.tenant);
1701
+ sessionStorage.setItem('sd-tenant', JSON.stringify(this.tenant));
1702
+ }
1703
+ this.user = sessionStorage.getItem('sd-user');
1704
+ if (!this.user) {
1705
+ this.user = await this.userService.getUserById(this.userId);
1706
+ console.debug('Fetched user:', this.user);
1707
+ sessionStorage.setItem('sd-user', JSON.stringify(this.user));
1708
+ }
1709
+ }
1710
+ catch (error) {
1711
+ console.error(error);
1712
+ // this.hasInitConfigurationErrors = true;
1713
+ // this.snackBar.open(
1714
+ // `Oops! WhatsApp settings unavailable or invalid configuration detected`,
1715
+ // 'Close',
1716
+ // {
1717
+ // duration: 5000,
1718
+ // panelClass: ['snackbar-error'],
1719
+ // horizontalPosition: 'center',
1720
+ // verticalPosition: 'top',
1721
+ // }
1722
+ // );
1723
+ }
1724
+ finally {
1725
+ // Select the first WhatsApp phone number by default
1726
+ this.showInitLoader = false;
1727
+ this.cdr.detectChanges();
1728
+ }
1729
+ return;
1730
+ }
1731
+ loadScript(src) {
1732
+ return new Promise((resolve, reject) => {
1733
+ const script = document.createElement('script');
1734
+ script.src = src;
1735
+ script.async = true;
1736
+ script.onload = () => resolve();
1737
+ script.onerror = () => reject();
1738
+ document.body.appendChild(script);
1739
+ });
1740
+ }
1741
+ ngAfterViewInit() {
1742
+ this.loginSubscription = this.avayaIPOService.loginStatus$.subscribe(async (response) => {
1743
+ this.zone.run(async () => {
1744
+ console.debug('Got Avaya IPO Login response: ', response);
1745
+ if (!response) {
1746
+ this.showLoginForm = true;
1747
+ this.cdr.detectChanges();
1748
+ // this.hasAvayaDeviceError = true;
1749
+ return;
1750
+ }
1751
+ this.showLoginLoader = false;
1752
+ switch (response.result) {
1753
+ case LoginState.LOGIN_SUCCESS:
1754
+ console.debug('Login successful:', response);
1755
+ this.showLoginForm = false;
1756
+ this.hasAvayaLoginError = false;
1757
+ this.hasAvayaLoginConflictError = false;
1758
+ this.avayaIPOService.agentIdle();
1759
+ await this.avayaIPOService.initLocalMic();
1760
+ await this.fetchContacts();
1761
+ // await this.loadCallHistory();
1762
+ break;
1763
+ case LoginState.LOGGEDOUT:
1764
+ this.loginForm.reset();
1765
+ this.showLoginForm = true;
1766
+ this.hasAvayaLoginError = false;
1767
+ this.hasAvayaLoginConflictError = false;
1768
+ this.hasAvayaDeviceError = false;
1769
+ this.hasAvayaSocketError = false;
1770
+ this.avayaIPOService.agentBusy();
1771
+ break;
1772
+ case LoginState.LOGIN_EMPTYUSERNAME:
1773
+ case LoginState.LOGIN_EMPTYPASSWORD:
1774
+ this.showLoginForm = true;
1775
+ this.hasAvayaLoginError = true;
1776
+ this.avayaIPOService.agentBusy();
1777
+ break;
1778
+ case LoginState.LOGIN_FAILED:
1779
+ this.showLoginForm = true;
1780
+ if (response.reason === 'Invalid Credentials') {
1781
+ this.hasAvayaLoginError = true;
1782
+ }
1783
+ else
1784
+ this.hasAvayaLoginConflictError = true;
1785
+ this.avayaIPOService.agentBusy();
1786
+ break;
1787
+ case LoginState.LOGIN_GW_NOTCONFIGURED:
1788
+ case LoginState.WEBSOCKET_FAILURE:
1789
+ this.showLoginForm = true;
1790
+ this.hasAvayaSocketError = true;
1791
+ // this.loginForm.disable();
1792
+ this.avayaIPOService.agentBusy();
1793
+ break;
1794
+ case LoginState.DEVICEACCESS_FAILURE:
1795
+ this.showLoginForm = true;
1796
+ this.hasAvayaDeviceError = true;
1797
+ this.avayaIPOService.agentBusy();
1798
+ break;
1799
+ case LoginState.RECONNECTING:
1800
+ this.isReconnectingInProgress = true;
1801
+ this.avayaIPOService.agentBusy();
1802
+ break;
1803
+ case LoginState.RELOGGED_IN:
1804
+ this.isReconnectingInProgress = false;
1805
+ this.avayaIPOService.agentIdle();
1806
+ break;
1807
+ case LoginState.FAILING_OVER:
1808
+ this.isFailoverInProgress = true;
1809
+ this.avayaIPOService.agentBusy();
1810
+ break;
1811
+ case LoginState.FAILOVER_SUCCESS:
1812
+ this.isFailoverInProgress = false;
1813
+ this.avayaIPOService.agentIdle();
1814
+ break;
1815
+ case LoginState.FAILOVER_FAILED:
1816
+ this.isFailoverInProgress = false;
1817
+ this.showLoginForm = true;
1818
+ this.hasAvayaSocketError = true;
1819
+ this.avayaIPOService.agentBusy();
1820
+ break;
1821
+ case LoginState.FAILING_BACK:
1822
+ this.isFailbackInProgress = true;
1823
+ this.avayaIPOService.agentBusy();
1824
+ break;
1825
+ case LoginState.FAILBACK_SUCCESS:
1826
+ this.isFailbackInProgress = false;
1827
+ this.avayaIPOService.agentIdle();
1828
+ break;
1829
+ case LoginState.FAILBACK_FAILED:
1830
+ this.isFailbackInProgress = false;
1831
+ this.showLoginForm = true;
1832
+ this.hasAvayaSocketError = true;
1833
+ this.avayaIPOService.agentBusy();
1834
+ break;
1835
+ default:
1836
+ console.warn('Unhandled Avaya IPO Login state:', response.result);
1837
+ }
1838
+ this.cdr.detectChanges();
1839
+ });
1840
+ });
1841
+ this.avayaIPOService.remoteStream$
1842
+ .pipe(filter((r) => !!r && r.stream.getAudioTracks().length > 0))
1843
+ .subscribe((r) => {
1844
+ this.lastRemoteStream = r.stream;
1845
+ this.lastLocalStream = this.avayaIPOService.localStream;
1846
+ });
1847
+ this.callStateSubscription =
1848
+ this.avayaIPOService.callStateSubject.subscribe((evt) => {
1849
+ this.zone.run(() => {
1850
+ // 1) early‐exit on null/undefined
1851
+ if (!evt || !evt.callId) {
1852
+ console.debug('ignoring empty callState event', evt);
1853
+ return;
1854
+ }
1855
+ // 2) now it’s safe to destructure
1856
+ const { state, callId } = evt;
1857
+ const idx = this.activeCalls.findIndex((c) => c.callId === callId);
1858
+ if (idx === -1) {
1859
+ console.warn('Event for unknown call', { state, callId });
1860
+ return;
1861
+ }
1862
+ console.log('Call stateeeeeeeeeee', state);
1863
+ switch (state) {
1864
+ case CallState.CONNECTED:
1865
+ this.currentActiveCallIndex = idx;
1866
+ this.avayaIPOService.agentBusy();
1867
+ this.handleCallConnect();
1868
+ this.cdr.detectChanges();
1869
+ break;
1870
+ case CallState.DISCONNECTED:
1871
+ console.log(this.disconnecttriggered);
1872
+ this.avayaIPOService.agentIdle();
1873
+ if (!this.disconnecttriggered) {
1874
+ this.lastRemoteStream = null;
1875
+ this.lastLocalStream = null;
1876
+ this.handleCallDisconnect(idx, 'CALLER');
1877
+ }
1878
+ this.showActiveCall = false;
1879
+ this.bottomActiveTab = 'keypad_sd';
1880
+ this.avayaIPOService.activeCallId = null;
1881
+ this.isactiveCall = false;
1882
+ break;
1883
+ case CallState.INCOMING:
1884
+ console.log(this.disconnecttriggered);
1885
+ this.avayaIPOService.agentIdle();
1886
+ if (!this.disconnecttriggered) {
1887
+ this.lastRemoteStream = null;
1888
+ this.lastLocalStream = null;
1889
+ this.handleCallDisconnect(idx, 'AGENT');
1890
+ }
1891
+ this.showActiveCall = false;
1892
+ this.bottomActiveTab = 'keypad_sd';
1893
+ this.avayaIPOService.activeCallId = null;
1894
+ this.isactiveCall = false;
1895
+ break;
1896
+ case CallState.HELD:
1897
+ this.recordingManagerService.stopRecording(callId);
1898
+ this.lastRemoteStream = null;
1899
+ this.lastLocalStream = null;
1900
+ console.log('**************** HOLD HOLD HOLD *****************');
1901
+ break;
1902
+ case CallState.PROGRESSING:
1903
+ this.currentActiveCallIndex = idx;
1904
+ this.showActiveCall = true;
1905
+ break;
1906
+ default:
1907
+ console.warn('Unhandled call state:', state, 'idx=', idx);
1908
+ }
1909
+ this.cdr.detectChanges();
1910
+ });
1911
+ });
1912
+ this.incomingCallSubscription = this.avayaIPOService.incomingCallSubject
1913
+ .pipe(filter((evt) => !!evt && typeof evt.callId === 'string'))
1914
+ .subscribe(async (evt) => {
1915
+ this.zone.run(async () => {
1916
+ const { callId, farEndNumber } = evt;
1917
+ console.log('📞 Incoming call!', callId, farEndNumber);
1918
+ // TODO: rename displayInfo to this.lookupPhoneNumber
1919
+ const displayInfo = await this.getLookupPhoneNumber(farEndNumber);
1920
+ console.log(displayInfo);
1921
+ const slot = this.avayaIPOService.getSlotForCallId(callId);
1922
+ if (!slot) {
1923
+ console.warn('Couldn’t find slot for incoming callId', callId);
1924
+ return;
1925
+ }
1926
+ this.activeCalls.push({
1927
+ callId,
1928
+ phoneNumber: displayInfo.lookupPhoneNumber?.['local-number'].replace(/\s+/g, ''),
1929
+ lookupPhoneNumber: displayInfo,
1930
+ duration: 0,
1931
+ isMuted: false,
1932
+ isOnHold: false,
1933
+ startTime: Date.now(),
1934
+ slot,
1935
+ });
1936
+ this.phoneNumber = displayInfo.lookupPhoneNumber?.['local-number'].replace(/\s+/g, '');
1937
+ this.currentActiveCallIndex = this.activeCalls.length - 1;
1938
+ this.isactiveCall = true;
1939
+ this.wasInbound = true;
1940
+ // Ensure UI is on dialpad tab and active-call view when ringing
1941
+ this.bottomActiveTab = 'keypad_sd';
1942
+ this.showActiveCall = true;
1943
+ this.cdr.detectChanges();
1944
+ });
1945
+ });
1946
+ }
1947
+ ngOnDestroy() {
1948
+ this.loginSubscription?.unsubscribe();
1949
+ this.incomingCallSubscription?.unsubscribe();
1950
+ this.callStateSubscription?.unsubscribe();
1951
+ // this.clearTimer(); todo
1952
+ }
1953
+ // prettier-ignore
1954
+ async getLookupPhoneNumber(phoneNumber) {
1955
+ if (!phoneNumber || typeof phoneNumber !== 'string') {
1956
+ console.warn('lookupPhoneNumber called with an invalid phoneNumber: ', phoneNumber);
1957
+ return {
1958
+ phoneNumber: '',
1959
+ };
1960
+ }
1961
+ let normalizedPhoneNumber = phoneNumber.trim();
1962
+ if (normalizedPhoneNumber.startsWith('00')) {
1963
+ normalizedPhoneNumber = '+' + normalizedPhoneNumber.substring(2);
1964
+ }
1965
+ try {
1966
+ const res_lookupPhoneNumber = await this.phoneNumberLookupService.lookupPhoneNumber(normalizedPhoneNumber);
1967
+ if (!res_lookupPhoneNumber?.data?.valid) {
1968
+ throw new Error('Invalid res_lookupPhoneNumber: ', res_lookupPhoneNumber);
1969
+ }
1970
+ const countryCode = res_lookupPhoneNumber?.data
1971
+ ? res_lookupPhoneNumber.data['country-code']
1972
+ : null;
1973
+ const res_getCountryFromCountryCode = countryCode
1974
+ ? await this.countryService.getCountryFromCountryCode(countryCode)
1975
+ : null;
1976
+ // console.debug('res_getCountryFromCountryCode:', res_getCountryFromCountryCode);
1977
+ return {
1978
+ normalizedPhoneNumber: normalizedPhoneNumber,
1979
+ lookupPhoneNumber: res_lookupPhoneNumber?.data,
1980
+ country: res_getCountryFromCountryCode,
1981
+ };
1982
+ }
1983
+ catch (err) {
1984
+ console.warn(`Error looking up phone number ${phoneNumber}: `, err);
1985
+ return {
1986
+ normalizedPhoneNumber: normalizedPhoneNumber,
1987
+ };
1988
+ }
1989
+ }
1990
+ onLogin() {
1991
+ this.loginForm.markAllAsTouched();
1992
+ this.hasAvayaLoginError = false;
1993
+ this.hasAvayaDeviceError = false;
1994
+ this.hasAvayaSocketError = false;
1995
+ if (this.loginForm.invalid) {
1996
+ console.warn(`Invalid form data`);
1997
+ return;
1998
+ }
1999
+ this.showLoginLoader = true;
2000
+ const { ipoExtensionNo, ipoPassword } = this.loginForm.value;
2001
+ this.extensionNumber = ipoExtensionNo;
2002
+ try {
2003
+ this.avayaIPOService.logIn(ipoExtensionNo, ipoPassword);
2004
+ }
2005
+ catch (err) {
2006
+ console.error(err);
2007
+ this.showLoginLoader = false;
2008
+ }
2009
+ }
2010
+ onLogout() {
2011
+ this.avayaIPOService.logOut();
2012
+ }
2013
+ async makeCall(phoneNumber) {
2014
+ this.redialnumber = phoneNumber;
2015
+ console.log('phone number passed', phoneNumber);
2016
+ this.isCalling = true;
2017
+ this.displayCallingNumber = phoneNumber;
2018
+ this.showActiveCall = true;
2019
+ this.cdr.detectChanges();
2020
+ if (!phoneNumber) {
2021
+ alert('Please enter a number to call.');
2022
+ this.isCalling = false;
2023
+ return;
2024
+ }
2025
+ const initPhoneNumber = phoneNumber.replace(/\s+/g, '');
2026
+ this.lookupPhoneNumber = await this.getLookupPhoneNumber(phoneNumber);
2027
+ console.log('lookupPhoneNumber: ', this.lookupPhoneNumber);
2028
+ this.phoneNumber = this.lookupPhoneNumber?.lookupPhoneNumber?.['local-number']?.replace(/\s+/g, '');
2029
+ console.log('this.phoneNumber: ', this.phoneNumber);
2030
+ // hold the existing call if any
2031
+ if (this.activeCalls.length > 0) {
2032
+ const currentCall = this.activeCalls[this.currentActiveCallIndex];
2033
+ currentCall.isOnHold = true;
2034
+ this.avayaIPOService.doHold();
2035
+ }
2036
+ // don't duplicate the same number
2037
+ const alreadyExists = this.activeCalls.some((c) => c.phoneNumber === phoneNumber);
2038
+ if (alreadyExists) {
2039
+ console.warn('Call already in progress for this number.');
2040
+ this.isCalling = false;
2041
+ return;
2042
+ }
2043
+ const dataToSend = '*************custom data in sdp*************';
2044
+ try {
2045
+ // 🔴 FIX: await the Promise returned by the service
2046
+ const slot = await this.avayaIPOService.makeCallWithCustomData(this.phoneNumber, dataToSend);
2047
+ if (!slot) {
2048
+ console.warn('Could not place call: no free slot or call failed to start.');
2049
+ this.isCalling = false;
2050
+ return;
2051
+ }
2052
+ this.activeCalls.push({
2053
+ callId: this.avayaIPOService.activeCallId,
2054
+ phoneNumber,
2055
+ lookupPhoneNumber: this.lookupPhoneNumber,
2056
+ duration: 0,
2057
+ isMuted: false,
2058
+ isOnHold: false,
2059
+ startTime: Date.now(),
2060
+ slot, // ✅ now a "1" | "2" | "3" value, not a Promise
2061
+ });
2062
+ this.currentActiveCallIndex = this.activeCalls.length - 1;
2063
+ this.noOfCalls = this.activeCalls.length;
2064
+ // Log call initiation so the same IDs are present before connect/disconnect logs
2065
+ const callId = this.avayaIPOService.activeCallId;
2066
+ const callLogPayload = {
2067
+ tenantId: this.tenantId,
2068
+ agentId: this.extensionNumber,
2069
+ callId,
2070
+ phoneNumber: this.lookupPhoneNumber ?? phoneNumber,
2071
+ direction: 'outbound',
2072
+ duration: 0,
2073
+ status: 'initiated',
2074
+ timestamp: new Date().toISOString(),
2075
+ callinginfo: 'calling',
2076
+ };
2077
+ this.avayaIPOService.logCall(callLogPayload).subscribe({
2078
+ error: (err) => console.error('logCall (initiated) failed', err),
2079
+ });
2080
+ this.avayaIPOService.agentBusy();
2081
+ this.isCallingFromContact = false;
2082
+ this.isAddingNewCall = false;
2083
+ }
2084
+ catch (err) {
2085
+ console.error('Failed to start call:', err);
2086
+ this.isCalling = false;
2087
+ }
2088
+ }
2089
+ async makeCallFromContact(phoneNumber) {
2090
+ this.isCallingFromContact = true;
2091
+ this.makeCall(phoneNumber);
2092
+ }
2093
+ async cancelCall() {
2094
+ // Mirror manual disconnect button behavior
2095
+ this.disconnecttriggered = true;
2096
+ this.avayaIPOService.agentIdle();
2097
+ await this.dropCurrentCall();
2098
+ }
2099
+ async dropCurrentCall() {
2100
+ console.log('***************dropping call button triggered******************');
2101
+ this.disconnecttriggered = true;
2102
+ console.log('Cancelling active call. Active calls before:', this.activeCalls);
2103
+ console.log('Current active call index:', this.currentActiveCallIndex);
2104
+ const index = this.currentActiveCallIndex;
2105
+ if (index < 0 || index >= this.activeCalls.length) {
2106
+ console.warn('Active call index out of range:', index);
2107
+ return;
2108
+ }
2109
+ const activeCall = this.activeCalls[index];
2110
+ const targetSlot = activeCall.slot;
2111
+ if (!targetSlot) {
2112
+ console.warn('Active call at index', index, 'does not have a valid slot.');
2113
+ return;
2114
+ }
2115
+ console.log(`Dropping active call from slot ${targetSlot} (index ${index}).`);
2116
+ await this.avayaIPOService.dropCallBySlot(targetSlot);
2117
+ // Log the manual drop so it shares the same IDs as other call logs
2118
+ const dropLog = {
2119
+ tenantId: this.tenantId,
2120
+ agentId: this.extensionNumber,
2121
+ callId: activeCall.callId,
2122
+ phoneNumber: activeCall.lookupPhoneNumber ?? activeCall.phoneNumber,
2123
+ duration: activeCall.duration,
2124
+ status: 'disconnected',
2125
+ timestamp: new Date().toISOString(),
2126
+ callinginfo: 'calling',
2127
+ disconnectSide: 'AGENT',
2128
+ };
2129
+ this.avayaIPOService.logCall(dropLog).subscribe({
2130
+ error: (err) => console.error('logCall (dropCurrentCall) failed', err),
2131
+ });
2132
+ this.handleCallDisconnect(index, 'CALLER');
2133
+ // Force UI back to dialpad after manual drop
2134
+ this.zone.run(() => {
2135
+ this.showActiveCall = this.activeCalls.length > 0;
2136
+ if (!this.showActiveCall) {
2137
+ this.bottomActiveTab = 'keypad_sd';
2138
+ this.avayaIPOService.activeCallId = null;
2139
+ }
2140
+ this.cdr.detectChanges();
2141
+ });
2142
+ }
2143
+ onMute() {
2144
+ try {
2145
+ this.avayaIPOService.doMute();
2146
+ this.isMuted = !this.isMuted;
2147
+ }
2148
+ catch {
2149
+ console.log("couldn't mute");
2150
+ }
2151
+ }
2152
+ onUnmute() {
2153
+ try {
2154
+ this.avayaIPOService.doUnMute();
2155
+ this.isMuted = !this.isMuted;
2156
+ }
2157
+ catch {
2158
+ console.log("couldn't unmute");
2159
+ }
2160
+ }
2161
+ toggleHold() {
2162
+ if (!this.activeCalls[this.currentActiveCallIndex])
2163
+ return;
2164
+ if (this.activeCalls[this.currentActiveCallIndex].isOnHold) {
2165
+ this.avayaIPOService.doUnHold();
2166
+ this.activeCalls[this.currentActiveCallIndex].isOnHold = false;
2167
+ }
2168
+ else {
2169
+ this.avayaIPOService.doHold();
2170
+ this.activeCalls[this.currentActiveCallIndex].isOnHold = true;
2171
+ }
2172
+ }
2173
+ toggleMute() {
2174
+ if (!this.activeCalls[this.currentActiveCallIndex])
2175
+ return;
2176
+ if (this.activeCalls[this.currentActiveCallIndex].isMuted) {
2177
+ this.avayaIPOService.doUnMute();
2178
+ this.activeCalls[this.currentActiveCallIndex].isMuted = false;
2179
+ }
2180
+ else {
2181
+ this.avayaIPOService.doMute();
2182
+ this.activeCalls[this.currentActiveCallIndex].isMuted = true;
2183
+ }
2184
+ }
2185
+ onPauseVideo() {
2186
+ this.avayaIPOService.pauseVideo();
2187
+ }
2188
+ onResumeVideo() {
2189
+ this.avayaIPOService.playVideo();
2190
+ }
2191
+ onDigitClick(digit) {
2192
+ const currentValue = this.transferForm.get('target')?.value || '';
2193
+ this.transferForm.patchValue({ target: currentValue + digit });
2194
+ }
2195
+ onBackspace() {
2196
+ const currentValue = this.transferForm.get('target')?.value || '';
2197
+ if (currentValue.length > 0) {
2198
+ this.transferForm.patchValue({ target: currentValue.slice(0, -1) });
2199
+ }
2200
+ }
2201
+ onTransferCall() {
2202
+ this.istransfer = true;
2203
+ if (this.transferForm.valid) {
2204
+ const { target } = this.transferForm.value;
2205
+ console.log('Transfer Target:', target);
2206
+ const type = 'unAttended';
2207
+ this.avayaIPOService.transferCall(target, type);
2208
+ }
2209
+ else {
2210
+ console.error('Transfer form is invalid.');
2211
+ }
2212
+ }
2213
+ onSendDTMF(digit) {
2214
+ this.avayaIPOService.sendDTMF(digit);
2215
+ const currentValue = this.dtmfForm.get('dtmf')?.value || '';
2216
+ this.dtmfForm.patchValue({ dtmf: currentValue + digit });
2217
+ }
2218
+ onAnswerCall() {
2219
+ this.avayaIPOService.answerCall();
2220
+ this.isRinging = false;
2221
+ // this.stopRingtone();
2222
+ this.showActiveCall = true;
2223
+ }
2224
+ onAddVideo() {
2225
+ this.avayaIPOService.addVideo();
2226
+ }
2227
+ onRemoveVideo() {
2228
+ this.avayaIPOService.removeVideo();
2229
+ }
2230
+ allowOnlyNumbers(event) {
2231
+ const input = event.target;
2232
+ input.value = input.value.replace(/[^0-9]/g, '');
2233
+ }
2234
+ startTimer(index) {
2235
+ const call = this.activeCalls[index];
2236
+ if (!call || call.timer)
2237
+ return;
2238
+ call.timer = setInterval(() => {
2239
+ call.duration++;
2240
+ // this.cdr.detectChanges();
2241
+ this.cdr.markForCheck();
2242
+ }, 1000);
2243
+ }
2244
+ clearTimer(index) {
2245
+ const call = this.activeCalls[index];
2246
+ if (call?.timer) {
2247
+ clearInterval(call.timer);
2248
+ call.timer = null;
2249
+ }
2250
+ }
2251
+ formatTime(totalSeconds) {
2252
+ const minutes = Math.floor(totalSeconds / 60);
2253
+ const seconds = totalSeconds % 60;
2254
+ return (String(minutes).padStart(2, '0') + ':' + String(seconds).padStart(2, '0'));
2255
+ }
2256
+ menuDailpad() {
2257
+ this.isDailpadOpen = !this.isDailpadOpen;
2258
+ this.cdr.detectChanges();
2259
+ }
2260
+ async selectTab(tab) {
2261
+ this.activeTab = tab;
2262
+ /* if (tab === 'tab1') {
2263
+ await this.loadCallHistory();
2264
+ } */
2265
+ }
2266
+ async fetchContacts() {
2267
+ const size = 50;
2268
+ let start = 0;
2269
+ let allContacts = [];
2270
+ while (true) {
2271
+ const queryString = `q=(and (term field%3Dtenant_id '${this.tenantId}'))&size=${size}&start=${start}&q.parser=structured`;
2272
+ try {
2273
+ const res_searchEntities = await this.searchEntities(queryString);
2274
+ const hits = res_searchEntities?.hits?.hit;
2275
+ if (!Array.isArray(hits) || hits.length === 0) {
2276
+ break;
2277
+ }
2278
+ allContacts = [...allContacts, ...hits];
2279
+ start += size;
2280
+ }
2281
+ catch (error) {
2282
+ console.error('Error fetching contacts:', error);
2283
+ break;
2284
+ }
2285
+ }
2286
+ this.contacts = allContacts;
2287
+ }
2288
+ searchEntities(queryString) {
2289
+ return lastValueFrom(this.http.get('https://search.snugdesk.com/entities?' + queryString));
2290
+ }
2291
+ handleCallConnect() {
2292
+ console.log("handle call connect ----------------------------");
2293
+ const active = this.activeCalls[this.currentActiveCallIndex];
2294
+ if (!active)
2295
+ return;
2296
+ const { callId, phoneNumber } = active;
2297
+ const callMetadata = {
2298
+ tenantId: this.tenantId,
2299
+ agentId: this.extensionNumber,
2300
+ callId,
2301
+ phoneNumber,
2302
+ };
2303
+ this.callSocket.open(callMetadata);
2304
+ // Update UI and call state
2305
+ this.startTimer(this.currentActiveCallIndex);
2306
+ this.isRinging = false;
2307
+ this.isactiveCall = true;
2308
+ console.log("this.isactiveCall = ", this.isactiveCall);
2309
+ this.isCalling = false;
2310
+ this.showActiveCall = true;
2311
+ // Log call as answered/connected so the same ids can be updated later on disconnect
2312
+ const callLogPayload = {
2313
+ tenantId: this.tenantId,
2314
+ agentId: this.extensionNumber,
2315
+ callId,
2316
+ phoneNumber: active.lookupPhoneNumber ?? active.phoneNumber,
2317
+ direction: this.wasInbound ? 'inbound' : 'outbound',
2318
+ duration: active.duration,
2319
+ status: 'connected',
2320
+ timestamp: new Date().toISOString(),
2321
+ callinginfo: 'calling',
2322
+ };
2323
+ this.avayaIPOService.logCall(callLogPayload).subscribe({
2324
+ error: (err) => console.error('logCall (connected) failed', err),
2325
+ });
2326
+ this.cdr.detectChanges();
2327
+ const local = this.lastLocalStream || undefined;
2328
+ const remote = this.lastRemoteStream || undefined;
2329
+ const hasAudio = (stream) => stream instanceof MediaStream && stream.getAudioTracks().length > 0;
2330
+ if (hasAudio(remote) && hasAudio(local)) {
2331
+ console.debug(`[${callId}] Starting recording with available local & remote streams`);
2332
+ this.recordingManagerService.startRecording(local, remote, callMetadata);
2333
+ this.initTranscription();
2334
+ this.recognition.start();
2335
+ this.showTranscriptionPopup = true;
2336
+ this.transcriptSegments = [];
2337
+ this.transcriptHistory = [];
2338
+ this.transcriptText = '';
2339
+ this.transcriptStartedAt = Date.now();
2340
+ return;
2341
+ }
2342
+ console.debug(`[${callId}] Waiting for remote stream...`);
2343
+ const remoteStreamSubscription = this.avayaIPOService.remoteStream$
2344
+ .pipe(filter((r) => !!r && r.callId === callId), filter((r) => r.stream.getAudioTracks().length > 0))
2345
+ .subscribe({
2346
+ next: ({ stream: freshRemote }) => {
2347
+ const freshLocal = this.avayaIPOService.localStream;
2348
+ console.debug(`[${callId}] Remote stream received! Starting recording.`);
2349
+ this.recordingManagerService.startRecording(freshLocal, freshRemote, callMetadata);
2350
+ this.initTranscription();
2351
+ this.recognition.start();
2352
+ this.showTranscriptionPopup = true;
2353
+ this.transcriptSegments = [];
2354
+ this.transcriptHistory = [];
2355
+ this.transcriptText = '';
2356
+ this.transcriptStartedAt = Date.now();
2357
+ remoteStreamSubscription.unsubscribe(); // stop listening after the first hit
2358
+ },
2359
+ error: (err) => {
2360
+ console.error(`[${callId}] Error receiving remote stream:`, err);
2361
+ remoteStreamSubscription.unsubscribe();
2362
+ },
2363
+ });
2364
+ }
2365
+ handleCallDisconnect(index, disconnectSide) {
2366
+ console.log('+++++++++++++++++handle disconnect trigered++++++++++++++');
2367
+ this.disconnecttriggered = false;
2368
+ this.isAddingNewCall = false;
2369
+ this.isCalling = false;
2370
+ this.isRecording = false;
2371
+ console.log(`Disconnecting call at index ${index}. Active calls before:`, this.activeCalls);
2372
+ if (index < 0 || index >= this.activeCalls.length) {
2373
+ console.warn(`Invalid index ${index}, activeCalls.length = ${this.activeCalls.length}`);
2374
+ return;
2375
+ }
2376
+ const disconnectingCall = this.activeCalls[index];
2377
+ this.clearTimer(index);
2378
+ const callId = this.activeCalls[this.currentActiveCallIndex].callId;
2379
+ this.recordingManagerService.stopRecording(disconnectingCall.callId);
2380
+ console.log('***********stopping recording in disconnect***********');
2381
+ this.callSocket.close(callId);
2382
+ // const callData = {
2383
+ // tenantId: this.tenantId,
2384
+ // agentId: this.extensionNumber,
2385
+ // callId: this.avayaIPOService.currentcallId,
2386
+ // // phoneNumber: disconnectingCall.phoneNumber,
2387
+ // phoneNumber:
2388
+ // this.activeCalls[this.currentActiveCallIndex].lookupPhoneNumber,
2389
+ // direction: this.wasInbound ? 'inbound' : 'outbound',
2390
+ // duration: disconnectingCall.duration,
2391
+ // status: 'disconnected',
2392
+ // timestamp: new Date().toISOString(),
2393
+ // callinginfo: 'calling',
2394
+ // };
2395
+ const callData = {
2396
+ tenantId: this.tenantId,
2397
+ agentId: this.extensionNumber,
2398
+ callId: disconnectingCall.callId,
2399
+ phoneNumber: disconnectingCall.lookupPhoneNumber,
2400
+ direction: this.wasInbound ? 'inbound' : 'outbound',
2401
+ duration: disconnectingCall.duration,
2402
+ status: 'disconnected',
2403
+ timestamp: new Date().toISOString(),
2404
+ callinginfo: 'calling',
2405
+ disconnectSide: disconnectSide
2406
+ };
2407
+ this.avayaIPOService.logCall(callData).subscribe(() => { }, (err) => console.error(err));
2408
+ this.lastDisconnectedCall = {
2409
+ ...disconnectingCall,
2410
+ };
2411
+ this.activeCalls.splice(index, 1);
2412
+ console.log('Active calls after removal:', this.activeCalls);
2413
+ if (index === this.currentActiveCallIndex) {
2414
+ if (this.activeCalls.length > 0) {
2415
+ this.currentActiveCallIndex = 0;
2416
+ const newActive = this.activeCalls[0];
2417
+ this.lookupPhoneNumber = newActive.phoneNumber;
2418
+ // this.lookupPhoneNumber = newActive.lookupPhoneNumber; TODO to check whats happening here
2419
+ this.startTimer(0);
2420
+ this.isMuted = newActive.isMuted;
2421
+ this.isOnHold = false;
2422
+ this.showActiveCall = true;
2423
+ this.isactiveCall = true;
2424
+ this.avayaIPOService.activeCallId = newActive.callId;
2425
+ this.avayaIPOService.doUnHold();
2426
+ newActive.isOnHold = false;
2427
+ for (let i = 1; i < this.activeCalls.length; i++) {
2428
+ const other = this.activeCalls[i];
2429
+ this.avayaIPOService.activeCallId = other.callId;
2430
+ this.avayaIPOService.doHold();
2431
+ other.isOnHold = true;
2432
+ }
2433
+ console.log(`Switched active call to slot ${newActive.slot} (index=0)`);
2434
+ }
2435
+ else {
2436
+ this.showCallDisconnected = true;
2437
+ this.isactiveCall = false;
2438
+ this.isMuted = false;
2439
+ this.isOnHold = false;
2440
+ console.log('flag value for isCalling', this.isCalling);
2441
+ this.showActiveCall = false; // return to dialpad view when no calls remain
2442
+ this.bottomActiveTab = 'keypad_sd';
2443
+ this.avayaIPOService.activeCallId = null;
2444
+ if (!this.isCalling) {
2445
+ this.phoneNumber = '';
2446
+ this.lookupPhoneNumber = null;
2447
+ }
2448
+ this.istransfer = false;
2449
+ this.showCallDisconnected = false;
2450
+ this.cdr.detectChanges();
2451
+ }
2452
+ }
2453
+ else if (index < this.currentActiveCallIndex) {
2454
+ this.currentActiveCallIndex--;
2455
+ }
2456
+ this.transferForm.reset();
2457
+ this.dtmfForm.reset();
2458
+ this.isDailpadOpen = false;
2459
+ this.isCallTransferOpen = false;
2460
+ this.isRinging = false;
2461
+ setTimeout(() => {
2462
+ this.showActiveCall = this.activeCalls.length > 0;
2463
+ this.cdr.detectChanges();
2464
+ }, 3000);
2465
+ console.log('handleCallDisconnect() done. new active index =', this.currentActiveCallIndex);
2466
+ console.log('active call div decider ', this.showActiveCall);
2467
+ this.stopTranscription(disconnectingCall.callId);
2468
+ }
2469
+ goToDiv(div) {
2470
+ this.currentView = div;
2471
+ }
2472
+ restrictNumeric(e) {
2473
+ const allowedKeys = [
2474
+ 'Enter',
2475
+ 'Backspace',
2476
+ 'ArrowLeft',
2477
+ 'ArrowRight',
2478
+ 'Tab',
2479
+ 'Delete',
2480
+ ];
2481
+ return /^[0-9]$/.test(e.key) || allowedKeys.includes(e.key);
2482
+ }
2483
+ onRedial() {
2484
+ this.isredialling = true;
2485
+ if (!this.phoneNumber) {
2486
+ console.log('returninggggggg');
2487
+ return;
2488
+ }
2489
+ if (this.redialTimeout) {
2490
+ console.log('redialingggggggggggggggg');
2491
+ this.istransfer = false;
2492
+ this.showCallDisconnected = false;
2493
+ clearTimeout(this.redialTimeout);
2494
+ this.redialTimeout = null;
2495
+ }
2496
+ this.isCalling = true;
2497
+ this.makeCall(this.redialnumber);
2498
+ }
2499
+ swapLinesToIndex(index) {
2500
+ const slotMap = ['1', '2', '3'];
2501
+ if (index < 0 || index >= slotMap.length) {
2502
+ console.warn('Index out of range for slotMap');
2503
+ return;
2504
+ }
2505
+ const targetSlot = slotMap[index];
2506
+ this.avayaIPOService.swapToSlot(targetSlot);
2507
+ this.activeCalls.forEach((call, i) => {
2508
+ if (call.slot === targetSlot) {
2509
+ call.isOnHold = false;
2510
+ this.currentActiveCallIndex = i;
2511
+ }
2512
+ else {
2513
+ call.isOnHold = true;
2514
+ }
2515
+ });
2516
+ // this.currentActiveCallIndex = index;x
2517
+ }
2518
+ mergeCall() {
2519
+ console.log('******************* merging ******************');
2520
+ this.avayaIPOService.mergeCall();
2521
+ }
2522
+ onAddCall() {
2523
+ this.isCallTransferOpen = false;
2524
+ this.isAddingNewCall = true;
2525
+ // this.dialForm.reset();
2526
+ }
2527
+ getDisplayStatus(call) {
2528
+ if (call.direction === 'inbound' &&
2529
+ call.status === 'disconnected' &&
2530
+ call.duration === 0) {
2531
+ return 'Missed';
2532
+ }
2533
+ // If status is "connected"
2534
+ if (call.status === 'connected') {
2535
+ return 'Connected';
2536
+ }
2537
+ // If status is "disconnected" but not missed
2538
+ if (call.status === 'disconnected') {
2539
+ return 'Disconnected';
2540
+ }
2541
+ // Otherwise show the raw status
2542
+ return call.status;
2543
+ }
2544
+ bottomSelectTab(tab) {
2545
+ this.bottomActiveTab = tab;
2546
+ }
2547
+ /** Central place to notify AvayaIPOService about current picks */
2548
+ handleDeviceSelection(event) {
2549
+ this.avayaIPOService.setDeviceIds({
2550
+ defaultId: true,
2551
+ audioInputID: event.audioInputId || undefined,
2552
+ audioOutputID: event.audioOutputId || undefined,
2553
+ videoInputID: event.videoInputId || undefined,
2554
+ });
2555
+ }
2556
+ createMixedStream(local, remote) {
2557
+ const audioContext = new AudioContext();
2558
+ const destination = audioContext.createMediaStreamDestination();
2559
+ // Local stream
2560
+ if (local) {
2561
+ const localSource = audioContext.createMediaStreamSource(local);
2562
+ localSource.connect(destination);
2563
+ }
2564
+ // Remote stream
2565
+ if (remote) {
2566
+ const remoteSource = audioContext.createMediaStreamSource(remote);
2567
+ remoteSource.connect(destination);
2568
+ }
2569
+ return destination.stream;
2570
+ }
2571
+ initTranscription() {
2572
+ const SpeechRecognition = window.SpeechRecognition ||
2573
+ window.webkitSpeechRecognition;
2574
+ if (!SpeechRecognition) {
2575
+ console.error('Web Speech API is not supported in this browser.');
2576
+ return;
2577
+ }
2578
+ this.recognition = new SpeechRecognition();
2579
+ this.recognition.lang = 'en-US'; // change as needed
2580
+ this.recognition.continuous = true;
2581
+ this.recognition.interimResults = true;
2582
+ this.recognition.onresult = (event) => {
2583
+ let interimTranscript = '';
2584
+ for (let i = event.resultIndex; i < event.results.length; ++i) {
2585
+ if (event.results[i].isFinal) {
2586
+ const text = event.results[i][0].transcript.trim();
2587
+ this.transcriptHistory.push(text);
2588
+ // ⬇️ ADD: store finals w/ timestamp for summary
2589
+ this.transcriptSegments.push({ ts: Date.now(), text });
2590
+ }
2591
+ else {
2592
+ interimTranscript += event.results[i][0].transcript;
2593
+ }
2594
+ }
2595
+ this.transcriptText = [...this.transcriptHistory, interimTranscript].join(' ');
2596
+ console.log('Live Transcription:', this.transcriptText, this.transcriptHistory);
2597
+ this.cdr.detectChanges();
2598
+ };
2599
+ this.recognition.onerror = (event) => {
2600
+ console.error('Transcription error:', event.error);
2601
+ };
2602
+ this.recognition.onend = () => {
2603
+ if (this.showTranscriptionPopup) {
2604
+ console.log('Recognition ended, restarting…');
2605
+ try {
2606
+ this.recognition.start();
2607
+ }
2608
+ catch (err) {
2609
+ console.warn('Error restarting recognition:', err);
2610
+ }
2611
+ }
2612
+ };
2613
+ // 👇 Manual keep-alive every 25s
2614
+ if (this.recognitionKeepAlive) {
2615
+ clearInterval(this.recognitionKeepAlive);
2616
+ }
2617
+ this.recognitionKeepAlive = setInterval(() => {
2618
+ if (this.showTranscriptionPopup && this.recognition) {
2619
+ console.log('Force restarting recognition (keep-alive)…');
2620
+ try {
2621
+ this.recognition.stop(); // will trigger onend → restart
2622
+ }
2623
+ catch (err) {
2624
+ console.warn('Error stopping recognition:', err);
2625
+ }
2626
+ }
2627
+ }, 10000);
2628
+ }
2629
+ stopTranscription(callId) {
2630
+ // mark end BEFORE clearing anything
2631
+ this.transcriptEndedAt = Date.now();
2632
+ if (this.recognitionKeepAlive) {
2633
+ clearInterval(this.recognitionKeepAlive);
2634
+ this.recognitionKeepAlive = null;
2635
+ }
2636
+ if (this.recognition) {
2637
+ try {
2638
+ this.recognition.onend = null; // prevent auto-restart during teardown
2639
+ this.recognition.stop();
2640
+ }
2641
+ catch { }
2642
+ }
2643
+ // ⬇️ NEW: build + download markdown summary (if there is content)
2644
+ if (this.autoDownloadSummaryOnEnd && this.transcriptSegments.length > 0) {
2645
+ this.generateAndDownloadSummary(callId);
2646
+ }
2647
+ // cleanup live state (leave segments cleared after download)
2648
+ this.transcriptText = '';
2649
+ this.transcriptHistory = [];
2650
+ this.transcriptSegments = [];
2651
+ this.transcriptStartedAt = 0;
2652
+ this.transcriptEndedAt = 0;
2653
+ this.showTranscriptionPopup = false;
2654
+ }
2655
+ // Build + download a Markdown summary using lightweight extractive heuristics
2656
+ generateAndDownloadSummary(callId) {
2657
+ const fullText = this.transcriptSegments.map(s => s.text).join(' ');
2658
+ if (!fullText.trim())
2659
+ return;
2660
+ const bullets = this.buildExtractiveSummary(fullText, 5); // 5 highlight bullets
2661
+ const actions = this.extractActionItems(fullText);
2662
+ const keyInfo = this.extractKeyInfo(fullText);
2663
+ const mdLines = [];
2664
+ mdLines.push('# Call Summary');
2665
+ mdLines.push(`**Call ID:** ${callId ?? '-'}`);
2666
+ mdLines.push(`**Agent:** ${this.extensionNumber} `);
2667
+ mdLines.push(`**Tenant:** ${this.tenantId}`);
2668
+ mdLines.push(`**Start:** ${this.transcriptStartedAt ? new Date(this.transcriptStartedAt).toISOString() : '-'}`);
2669
+ mdLines.push(`**End:** ${this.transcriptEndedAt ? new Date(this.transcriptEndedAt).toISOString() : '-'}`);
2670
+ const durMs = (this.transcriptStartedAt && this.transcriptEndedAt)
2671
+ ? (this.transcriptEndedAt - this.transcriptStartedAt) : 0;
2672
+ mdLines.push(`**Duration:** ${this.fmtHMS(durMs)}`);
2673
+ mdLines.push('');
2674
+ mdLines.push('## Highlights');
2675
+ if (bullets.length)
2676
+ bullets.forEach(b => mdLines.push(`- ${b}`));
2677
+ else
2678
+ mdLines.push('- (no highlights)');
2679
+ if (actions.length) {
2680
+ mdLines.push('', '## Action Items');
2681
+ actions.forEach(a => mdLines.push(`- [ ] ${a}`));
2682
+ }
2683
+ if (keyInfo.length) {
2684
+ mdLines.push('', '## Key Info');
2685
+ keyInfo.forEach(k => mdLines.push(`- ${k}`));
2686
+ }
2687
+ // Optional appendix: full transcript with timestamps
2688
+ mdLines.push('', '## Transcript (final lines)');
2689
+ for (const seg of this.transcriptSegments) {
2690
+ const offset = seg.ts - (this.transcriptStartedAt || seg.ts);
2691
+ mdLines.push(`[${this.fmtHMS(offset)}] ${seg.text}`);
2692
+ }
2693
+ const mdBlob = new Blob([mdLines.join('\n')], { type: 'text/markdown;charset=utf-8' });
2694
+ const name = `call-${callId || 'unknown'}-summary.md`;
2695
+ this.downloadBlobFile(mdBlob, name);
2696
+ // store in memory if you also want to show it somewhere
2697
+ this.summaryText = mdLines.join('\n');
2698
+ }
2699
+ // === extractive “enough” summarizer ===
2700
+ buildExtractiveSummary(text, maxBullets = 5) {
2701
+ const sents = this.splitSentences(text);
2702
+ if (sents.length <= maxBullets)
2703
+ return sents;
2704
+ const stop = new Set(('i,me,my,myself,we,our,ours,ourselves,you,your,yours,' +
2705
+ 'he,him,his,she,her,hers,it,its,they,them,their,theirs,what,which,who,whom,' +
2706
+ 'this,that,these,those,am,is,are,was,were,be,been,being,have,has,had,do,does,' +
2707
+ 'did,doing,a,an,the,and,but,if,or,because,as,until,while,of,at,by,for,with,' +
2708
+ 'about,against,between,into,through,during,before,after,above,below,to,from,' +
2709
+ 'up,down,in,out,on,off,over,under,again,further,then,once,here,there,when,' +
2710
+ 'where,why,how,all,any,both,each,few,more,most,other,some,such,no,nor,not,' +
2711
+ 'only,own,same,so,than,too,very,can,will,just,don,should,now').split(','));
2712
+ const tokenize = (s) => s.toLowerCase().replace(/[^a-z0-9\s]/g, ' ')
2713
+ .split(/\s+/).filter(w => w && !stop.has(w));
2714
+ const freq = new Map();
2715
+ for (const s of sents)
2716
+ for (const w of tokenize(s))
2717
+ freq.set(w, (freq.get(w) || 0) + 1);
2718
+ const scored = sents.map((s, i) => {
2719
+ const words = tokenize(s);
2720
+ const score = words.reduce((acc, w) => acc + (freq.get(w) || 0), 0) / Math.max(1, words.length);
2721
+ return { i, s, score };
2722
+ });
2723
+ return scored
2724
+ .sort((a, b) => b.score - a.score)
2725
+ .slice(0, maxBullets)
2726
+ .sort((a, b) => a.i - b.i)
2727
+ .map(x => x.s.trim());
2728
+ }
2729
+ splitSentences(text) {
2730
+ return text
2731
+ .replace(/\s+/g, ' ')
2732
+ .split(/(?<=[.!?])\s+(?=[A-Z0-9])/g)
2733
+ .map(s => s.trim())
2734
+ .filter(Boolean);
2735
+ }
2736
+ extractActionItems(text) {
2737
+ const sents = this.splitSentences(text);
2738
+ const pat = /(need to|please|send|share|call|schedule|arrange|follow up|email|whatsapp|provide|confirm|deliver|prepare|create|set up|book|assign|remind)/i;
2739
+ return sents.filter(s => pat.test(s)).slice(0, 12);
2740
+ }
2741
+ extractKeyInfo(text) {
2742
+ const out = [];
2743
+ const phones = text.match(/(?:\+?\d[\s-]?){8,15}\d/g) || [];
2744
+ const emails = text.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi) || [];
2745
+ const amounts = text.match(/(?:₹|\$|INR\s?)\s?\d[\d,]*(?:\.\d+)?/g) || [];
2746
+ const dates = text.match(/\b(?:\d{1,2}[-/]\d{1,2}[-/]\d{2,4}|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\s+\d{1,2}(?:,\s*\d{4})?)\b/gi) || [];
2747
+ if (phones.length)
2748
+ out.push(`Phones: ${Array.from(new Set(phones)).join(', ')}`);
2749
+ if (emails.length)
2750
+ out.push(`Emails: ${Array.from(new Set(emails)).join(', ')}`);
2751
+ if (amounts.length)
2752
+ out.push(`Amounts: ${Array.from(new Set(amounts)).join(', ')}`);
2753
+ if (dates.length)
2754
+ out.push(`Dates: ${Array.from(new Set(dates)).join(', ')}`);
2755
+ return out;
2756
+ }
2757
+ downloadBlobFile(blob, filename) {
2758
+ const url = URL.createObjectURL(blob);
2759
+ const a = document.createElement('a');
2760
+ a.href = url;
2761
+ a.download = filename;
2762
+ document.body.appendChild(a);
2763
+ a.click();
2764
+ a.remove();
2765
+ URL.revokeObjectURL(url);
2766
+ }
2767
+ fmtHMS(ms) {
2768
+ const totalSec = Math.floor(ms / 1000);
2769
+ const h = Math.floor(totalSec / 3600);
2770
+ const m = Math.floor((totalSec % 3600) / 60);
2771
+ const s = totalSec % 60;
2772
+ return (h > 0 ? String(h).padStart(2, '0') + ':' : '') +
2773
+ String(m).padStart(2, '0') + ':' + String(s).padStart(2, '0');
2774
+ }
2775
+ // add this method in the component class
2776
+ transferToFromHistory(item) {
2777
+ // prefer a previously-resolved dialable if you store one
2778
+ const prefer = (v) => (v ?? '').toString().replace(/\s+/g, '');
2779
+ let target = prefer(item.resolvedDialable) ||
2780
+ prefer(item.lookupPhoneNumber?.['local-number']) ||
2781
+ prefer(item.lookupPhoneNumber?.lookupPhoneNumber?.['local-number']) ||
2782
+ prefer(item.lookupPhoneNumber?.normalizedPhoneNumber) ||
2783
+ prefer(item.phoneNumber);
2784
+ if (!target) {
2785
+ console.warn('Transfer aborted: no dialable number found in recent item:', item);
2786
+ return;
2787
+ }
2788
+ // IMPORTANT: transfer, not makeCall
2789
+ this.avayaIPOService.transferCall(target, 'unAttended'); // or 'Blind'
2790
+ this.isCallTransferOpen = false; // close transfer UI if you want
2791
+ }
2792
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AvayaIPOWidgetComponent, deps: [{ token: i1.HttpClient }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1$1.FormBuilder }, { token: CountryService }, { token: PhoneNumberLookupService }, { token: AvayaIPOService }, { token: RecordingManagerService }, { token: CallSocketService }, { token: i8.SnugdeskAuthenticationService }, { token: i8.TenantService }, { token: i8.UserService }], target: i0.ɵɵFactoryTarget.Component });
2793
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.9", type: AvayaIPOWidgetComponent, isStandalone: false, selector: "snugdesk-avaya-ipo-widget", inputs: { tenantId: "tenantId", userId: "userId", isVisible: "isVisible", containerHeightObservable: "containerHeightObservable", containerWidthObservable: "containerWidthObservable" }, outputs: { notificationEvent: "notificationEvent" }, ngImport: i0, template: "@if (isReconnectingInProgress || isFailoverInProgress || isFailbackInProgress) {\n <div class=\"container_connection_status_overlay\">\n <div class=\"container_connection_status\">\n <i class=\"fa-solid fa-circle-dot\"></i>\n\n @if (isReconnectingInProgress) {\n <span>Reconnecting to the server...</span>\n }\n\n @if (isFailoverInProgress) {\n <span>Failover in progress...</span>\n }\n\n @if (isFailbackInProgress) {\n <span>Failback in progress...</span>\n }\n\n <div class=\"container_connection_status_loader\">\n <div class=\"container_three_dot_loader\">\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n </div>\n </div>\n </div>\n </div>\n}\n\n\n\n@if (showLoginForm) {\n <!-- Login Form -->\n <div class=\"container_avaya_login\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n <div class=\"container_avaya_login_inner\">\n <div class=\"container_avaya_login_content\">\n\n <div class=\"container_avaya_logo\">\n <div class=\"container_avaya_logo_image\"></div>\n <h3>IP Office<span>TM</span></h3>\n </div>\n\n @if (hasAvayaSocketError || hasAvayaLoginError || hasAvayaLoginConflictError || hasAvayaDeviceError) {\n <div class=\"container_avaya_login_error\">\n <p class=\"message_label error_message\">\n @if (hasAvayaSocketError) {\n We're having trouble connecting to the server\n }\n @if (hasAvayaLoginError) {\n Invalid extension or password!\n }\n @if (hasAvayaLoginConflictError) {\n Another user is logged in with this extension\n }\n @if (hasAvayaDeviceError) {\n We're having trouble accessing your device\n }\n </p>\n </div>\n }\n\n <div class=\"container_avaya_login_form\">\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"onLogin()\">\n\n <!-- Extension -->\n <div class=\"form_field\">\n <mat-form-field class=\"properties_form_field mat-form-field-outline\">\n <mat-label class=\"mdc-floating-disabled\">Extension</mat-label>\n <input matInput formControlName=\"ipoExtensionNo\" autocomplete=\"ipoExtensionNo\"\n (keypress)=\"restrictNumeric($event)\" />\n\n @if (loginForm.controls['ipoExtensionNo'].invalid && loginForm.controls['ipoExtensionNo'].touched) {\n <mat-error>\n @if (loginForm.controls['ipoExtensionNo'].errors?.['required']) {\n <small>Extension is required.</small>\n }\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- Password -->\n <div class=\"form_field\">\n <mat-form-field class=\"properties_form_field mat-form-field-outline\">\n <mat-label class=\"mdc-floating-disabled\">Password</mat-label>\n <input matInput formControlName=\"ipoPassword\" autocomplete=\"avaya-ipo-password\"\n (keypress)=\"restrictNumeric($event)\" [type]=\"showLoginPassword ? 'text' : 'password'\" />\n\n <mat-icon matSuffix (click)=\"showLoginPassword = !showLoginPassword && !hasAvayaSocketError\">\n @if (showLoginPassword) {\n <span class=\"container_icon_eye\">\n <i class=\"fa-solid fa-eye\"></i>\n </span>\n } @else {\n <span class=\"container_icon_eye\">\n <i class=\"fa-solid fa-eye-slash\"></i>\n </span>\n }\n </mat-icon>\n\n @if (loginForm.controls['ipoPassword'].invalid && loginForm.controls['ipoPassword'].touched) {\n <mat-error>\n @if (loginForm.controls['ipoPassword'].errors?.['required']) {\n <small>Password is required.</small>\n }\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- Login button -->\n <div class=\"avaya_login_button_area\">\n <button type=\"submit\" class=\"button_submit_login\"\n [ngClass]=\"{ 'button_submit_login_loader': showLoginLoader }\"\n [disabled]=\"showLoginLoader\">\n @if (showLoginLoader) {\n <span class=\"button_submit_loader\"></span>\n } @else {\n <span>Login</span>\n }\n </button>\n </div>\n\n </form>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n} @else {\n <!-- Softphone UI -->\n <ng-container *ngTemplateOutlet=\"showSoftphoneDiv\"></ng-container>\n}\n\n<!-- Footer (always visible) -->\n<div class=\"container_avaya_footer\">&copy; 2025 SNUG Technologies Pvt. Ltd.\n\n\n\n</div>\n\n\n\n\n\n<ng-template #showSoftphoneDiv>\n\n@if (!showActiveCall) {\n <div class=\"container_avaya_softphone_inner\">\n <!-- ------------------- Keypad work start ---------- -->\n @if (bottomActiveTab === 'keypad_sd') {\n <div class=\"tab-content_sd\">\n <div class=\"container_dialpad_header\">\n <div class=\"container_dialpad_header_inner2\">\n <div class=\"container_avaya_extension\">\n <div class=\"container_avaya_extension_left\">\n <div class=\"extension_label\">Extension</div>\n <div class=\"extension_number\">{{ extensionNumber }}</div>\n </div>\n <div class=\"container_avaya_extension_right\">\n <button title=\"Sign out\" (click)=\"onLogout()\">\n <svg width=\"16px\" fill=\"currentColor\" viewBox=\"0 0 512 512\">\n <path\n d=\"M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"dialpad_container_sd\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n <app-dialpad [contacts]=\"contacts\" (makeCallEv)=\"makeCall($event)\"></app-dialpad>\n <!-- to do list -->\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- ------------------- Keypad work end ---------- -->\n\n @if (bottomActiveTab === 'recent_sd') {\n <div class=\"tab-content_sd\">\n <app-call-history (makeCallEv)=\"makeCallFromContact($event)\"></app-call-history>\n </div>\n }\n\n @if (bottomActiveTab === 'settings_sd') {\n <div class=\"tab-content_sd\">\n <app-device-selector (change)=\"handleDeviceSelection($event)\"></app-device-selector>\n </div>\n }\n </div>\n\n <div class=\"tabs_sd\">\n <button class=\"tab_heading_btn\" (click)=\"bottomSelectTab('recent_sd')\"\n [class.active]=\"bottomActiveTab === 'recent_sd'\">\n <span class=\"nav_icon\">\n <svg width=\"19px\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\"\n d=\"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\" />\n </svg>\n </span>\n <span class=\"nav_heading_sd\">Recent</span>\n </button>\n\n <button class=\"tab_heading_btn\" (click)=\"bottomSelectTab('keypad_sd')\"\n [class.active]=\"bottomActiveTab === 'keypad_sd'\">\n <span class=\"nav_icon\">\n <svg width=\"20px\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M256,400a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M256,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M256,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M256,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M384,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M384,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M384,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M128,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M128,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M128,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n </svg>\n </span>\n <span class=\"nav_heading_sd\">Keypad</span>\n </button>\n\n <button class=\"tab_heading_btn\" (click)=\"bottomSelectTab('settings_sd')\"\n [class.active]=\"bottomActiveTab === 'settings_sd'\">\n <span class=\"nav_icon\">\n <svg width=\"19px\" viewBox=\"-0.03 0 16.079 16.079\">\n <g>\n <path fill=\"currentColor\"\n d=\"M8.182 1.083a6.99 6.99 0 0 0-6.248 3.493c-1.929 3.342-.776 7.629 2.57 9.562 3.346 1.934 7.634.792 9.562-2.55 1.929-3.343.776-7.634-2.57-9.567a6.98 6.98 0 0 0-3.314-.938zM8 2.08a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6z\" />\n <path fill=\"currentColor\"\n d=\"M9.322 0L6.69.393v1.354a6.49 6.477 43.146 0 1 2.632.005V0zM3.937 1.19L1.93 2.897l.988 1.177a6.49 6.477 43.146 0 1 2.017-1.69zm8.128.013l-.993 1.184a6.49 6.477 43.146 0 1 .17.09 6.49 6.477 43.146 0 1 1.845 1.603l1.006-1.197zM.455 5.42l-.44 2.596 1.515.267a6.49 6.477 43.146 0 1 .455-2.593zm15.086.003l-1.523.269a6.49 6.477 43.146 0 1 .464 2.59l1.533-.27zM1.858 10.118l-1.351.78 1.33 2.271 1.339-.772a6.49 6.477 43.146 0 1-1.317-2.28zm12.301.003a6.49 6.477 43.146 0 1-.534 1.215 6.49 6.477 43.146 0 1-.774 1.069l1.338.773 1.302-2.288zm-9.557 3.471l-.534 1.47 2.48.884.525-1.446a6.49 6.477 43.146 0 1-2.303-.8 6.49 6.477 43.146 0 1-.168-.108zm6.814.016a6.49 6.477 43.146 0 1-2.475.897l.53 1.457 2.468-.917z\" />\n <path fill=\"currentColor\"\n d=\"M7.648 3.093a4.989 4.989 0 0 0-3.982 2.483 5.013 5.013 0 0 0 1.836 6.834 5.002 5.002 0 0 0 6.83-1.827 5.01 5.01 0 0 0-1.836-6.832 4.976 4.976 0 0 0-2.848-.658zM8 4.08a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4z\" />\n </g>\n </svg>\n </span>\n <span class=\"nav_heading_sd\">Preferences</span>\n </button>\n </div>\n} @else {\n <ng-container *ngTemplateOutlet=\"showActiveCallDiv\"></ng-container>\n}\n\n\n<!-- ////////////// -->\n\n <!-- Active Call Div -->\n \n <ng-template #showActiveCallDiv>\n\n\n @if (showTranscriptionPopup) {\n <div class=\"transcription-popup\">\n <div class=\"transcription-header\">\n <span>Live Transcription</span>\n <button class=\"close-btn\" (click)=\"showTranscriptionPopup = false\">\u00D7</button>\n </div>\n <div class=\"transcription-body\">\n <p>{{ transcriptText }}</p>\n </div>\n </div>\n}\n\n\n\n\n\n\n\n<div class=\"container_call\">\n <div class=\"container_call_header\">\n <div class=\"container_call_header_inner\">\n\n @if (!conferenceParticipants || conferenceParticipants.length <= 1) {\n <!-- ------------ add call list swap and merge area start ---------------- -->\n @if (activeCalls.length > 1) {\n <div class=\"container_swap_merge_list\">\n <div class=\"container_conference_contact_list_inner\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n <div class=\"outer_container_swap_merge\">\n @for (call of activeCalls; track call.phoneNumber; let i = $index) {\n @if (i !== currentActiveCallIndex) {\n <div class=\"container_swap_merge_item\"\n (click)=\"swapLinesToIndex(i)\"\n [ngClass]=\"{ 'active-call': i === currentActiveCallIndex, 'other-call': i !== currentActiveCallIndex }\">\n\n <!-- Avatar -->\n <div class=\"container_recent_item_image\">\n <div class=\"container_swap_merge_item_image_inner\">\n <!-- svg avatar here -->\n </div>\n </div>\n\n <!-- Call Info -->\n <div class=\"container_recent_item_left\">\n <div class=\"container_recent_item_left_inner\">\n <div class=\"contact_field\">{{ call.phoneNumber }}</div>\n @if (call.isOnHold) {\n <div class=\"onhold_st\">On hold</div>\n }\n </div>\n\n <!-- Action Buttons -->\n <div class=\"container_recent_item_right\">\n <div class=\"right_field\">\n <button class=\"button_swap_merge\">\n <div class=\"button_icon\">\n <!-- merge svg -->\n </div>\n <div class=\"button_text\">Merge</div>\n </button>\n </div>\n <div class=\"right_field\">\n <button class=\"button_swap_merge\">\n <div class=\"button_icon\">\n <!-- swap svg -->\n </div>\n <div class=\"button_text\">Swap</div>\n </button>\n </div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n <!-- ------------ add call list swap and merge area end ---------------- -->\n\n @if (isCalling) {\n <div class=\"container_call_info\">Calling...</div>\n } @else {\n @if (isactiveCall) {\n <div class=\"container_call_info\">\n {{ formatTime(activeCalls[currentActiveCallIndex].duration) }}\n </div>\n }\n @if (showCallDisconnected) {\n <div class=\"container_call_info_blinker\">\n <!-- disconnected svg -->\n {{ this.istransfer ? 'Call Transferred' : 'Call ended' }}\n </div>\n }\n }\n\n <div class=\"container_call_ani\">\n @if (isCalling && displayCallingNumber && activeCalls.length === 0) {\n <!-- show what the user dialed while call is spinning up -->\n <div class=\"container_call_ani_number\">\n {{ displayCallingNumber }}\n </div>} \n @else if (activeCalls.length > 0) {\n <div class=\"container_call_ani_number\">\n {{ activeCalls[currentActiveCallIndex].lookupPhoneNumber.country?.flag }}\n {{ activeCalls[currentActiveCallIndex].phoneNumber }}\n \n </div>\n <div class=\"container_call_ani_name\">\n {{ activeCalls[currentActiveCallIndex].lookupPhoneNumber.phoneNumber?.location }}\n </div>\n } @else {\n <div class=\"container_call_ani_number\">\n {{ lastDisconnectedCall?.lookupPhoneNumber?.country?.flag }}\n {{ lastDisconnectedCall?.phoneNumber }}\n </div>\n <div class=\"container_call_ani_name\">\n {{ lastDisconnectedCall?.lookupPhoneNumber?.phoneNumber?.location }}\n </div>\n }\n\n <div class=\"container_call_ani_image\">\n <div class=\"container_call_ani_image_inner\" [ngClass]=\"{ 'call_animation': isactiveCall }\">\n <!-- big avatar svg -->\n </div>\n </div>\n </div>\n\n } @else {\n <!-- Conference Call Placeholder -->\n <!-- @if block can render conference call template here -->\n }\n\n </div>\n </div>\n\n <div class=\"container_call_content\">\n <div class=\"container_call_dnis\">\n <span>Ext. {{ extensionNumber }}</span>\n </div>\n\n <div class=\"container_call_options\">\n <div class=\"container_dialpad_row margin_bottom_16\">\n <button class=\"button_call_option button_elevated\"\n [ngClass]=\"{ 'button_disabled': !isactiveCall && activeCalls.length < 4 }\"\n (click)=\"onAddCall()\"\n [disabled]=\"!isactiveCall\">\n <div class=\"button_icon\"> \n <svg fill=\"#000000\" width=\"20\" viewBox=\"0 0 52 52\" enable-background=\"new 0 0 52 52\"\n xml:space=\"preserve\">\n <path fill=\"currentColor\" d=\"M30,29h16.5c0.8,0,1.5-0.7,1.5-1.5v-3c0-0.8-0.7-1.5-1.5-1.5H30c-0.6,0-1-0.4-1-1V5.5C29,4.7,28.3,4,27.5,4\n h-3C23.7,4,23,4.7,23,5.5V22c0,0.6-0.4,1-1,1H5.5C4.7,23,4,23.7,4,24.5v3C4,28.3,4.7,29,5.5,29H22c0.6,0,1,0.4,1,1v16.5\n c0,0.8,0.7,1.5,1.5,1.5h3c0.8,0,1.5-0.7,1.5-1.5V30C29,29.4,29.4,29,30,29z\" />\n </svg>\n </div>\n <div class=\"button_text\">Add</div>\n </button>\n\n @if (activeCalls.length > 0) {\n <button class=\"button_call_option\" (click)=\"onAddCall()\" type=\"button\">\n <div class=\"button_icon\"> <svg width=\"20\" viewBox=\"0 0 52 52\" aria-hidden=\"true\">\n <path fill=\"currentColor\"\n d=\"M30,29h16.5c0.8,0,1.5-0.7,1.5-1.5v-3c0-0.8-0.7-1.5-1.5-1.5H30c-0.6,0-1-0.4-1-1V5.5C29,4.7,28.3,4,27.5,4h-3\n C23.7,4,23,4.7,23,5.5V22c0,0.6-0.4,1-1,1H5.5C4.7,23,4,23.7,4,24.5v3C4,28.3,4.7,29,5.5,29H22c0.6,0,1,0.4,1,1v16.5\n c0,0.8,0.7,1.5,1.5,1.5h3c0.8,0,1.5-0.7,1.5-1.5V30C29,29.4,29.4,29,30,29z\"/>\n </svg></div>\n <div class=\"button_text\">Conference</div>\n </button>\n }\n\n @if (!isRecording) {\n <button class=\"button_call_option button_elevated\"\n [ngClass]=\"{ 'button_disabled': !isactiveCall }\"\n [disabled]=\"!isactiveCall\">\n <div class=\"button_icon\"> <svg width=\"22px\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path fill=\"currentColor\" d=\"M3 10L3 14M7.5 6L7.5 18M12 3V21M16.5 6V18M21 10V14\" stroke=\"#000000\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg></div>\n <div class=\"button_text\">Record</div>\n </button>\n } @else {\n <button class=\"button_call_option button_elevated\"\n [ngClass]=\"{ 'button_disabled': !isactiveCall }\"\n [disabled]=\"!isactiveCall\">\n <div class=\"button_icon\"><svg width=\"22px\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path fill=\"currentColor\" d=\"M3 10L3 14M7.5 6L7.5 18M12 3V21M16.5 6V18M21 10V14\" stroke=\"#000000\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg></div>\n <div class=\"button_text\">Stop</div>\n </button>\n }\n\n <button class=\"button_call_option button_elevated\"\n [ngClass]=\"{ 'button_disabled': !isactiveCall }\"\n [disabled]=\"!isactiveCall\"\n (click)=\"isCallTransferOpen = !isCallTransferOpen\">\n <div class=\"button_icon\"> <svg width=\"25px\" height=\"25px\" viewBox=\"0 0 48 48\" version=\"1\" enable-background=\"new 0 0 48 48\">\n <path fill=\"currentColor\"\n d=\"M39.2,8.4l-1.8,1.8c-6.3,6.5-5.4,22,0,27.6l1.8,1.8c0.5,0.5,1.3,0.5,1.8,0l3.6-3.7c0.5-0.5,0.5-1.3,0-1.8 l-3.4-3.4h-4.8c-1.3-1.3-1.3-12.1,0-13.4h4.8l3.3-3.4c0.5-0.5,0.5-1.3,0-1.8L41,8.4C40.5,7.9,39.7,7.9,39.2,8.4z\" />\n <path fill=\"currentColor\"\n d=\"M11.2,8.4l-1.8,1.8c-6.3,6.5-5.4,22,0,27.6l1.8,1.8c0.5,0.5,1.3,0.5,1.8,0l3.6-3.7c0.5-0.5,0.5-1.3,0-1.8 l-3.4-3.4H8.5c-1.3-1.3-1.3-12.1,0-13.4h4.8l3.3-3.4c0.5-0.5,0.5-1.3,0-1.8L13,8.4C12.5,7.9,11.7,7.9,11.2,8.4z\" />\n <g fill=\"currentColor\">\n <polygon points=\"25.3,18.6 30.7,24 25.3,29.4\" />\n <rect x=\"16\" y=\"22\" width=\"11\" height=\"4\" />\n </g>\n </svg></div>\n <div class=\"button_text\">Transfer</div>\n </button>\n\n @if (isCallTransferOpen) {\n <ng-container *ngTemplateOutlet=\"callTransferTemplate\"></ng-container>\n }\n </div>\n\n <!-- Mute / Unmute -->\n <div class=\"container_dialpad_row\">\n @if (activeCalls.length > 0 && !this.activeCalls[this.currentActiveCallIndex].isMuted) {\n <button class=\"button_call_option button_elevated\"\n (click)=\"toggleMute()\"\n [ngClass]=\"{ 'button_disabled': showCallDisconnected }\">\n <div class=\"button_icon\"> <svg viewBox=\"0 0 384 512\" width=\"16\">\n <path fill=\"currentColor\"\n d=\"M192 0C139 0 96 43 96 96l0 160c0 53 43 96 96 96s96-43 96-96l0-160c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c85.8-11.7 152-85.3 152-174.4l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-40z\" />\n </svg></div>\n <div class=\"button_text\">Mute</div>\n </button>\n } @else if (activeCalls.length > 0 && this.activeCalls[this.currentActiveCallIndex].isMuted) {\n <button class=\"button_call_option button_active button_elevated\" (click)=\"toggleMute()\">\n <div class=\"button_icon\"> <svg width=\"26\" viewBox=\"0 0 640 512\">\n <path fill=\"currentColor\"\n d=\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c15.2-26 23.9-56.3 23.9-88.7l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 21.2-5.1 41.1-14.2 58.7L416 300.8 416 96c0-53-43-96-96-96s-96 43-96 96l0 54.3L38.8 5.1zM344 430.4c20.4-2.8 39.7-9.1 57.3-18.2l-43.1-33.9C346.1 382 333.3 384 320 384c-70.7 0-128-57.3-128-128l0-8.7L144.7 210c-.5 1.9-.7 3.9-.7 6l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6z\" />\n </svg></div>\n <div class=\"button_text\">Unmute</div>\n </button>\n }\n\n <!-- Hold / Unhold -->\n @if (activeCalls.length > 0 && !this.activeCalls[this.currentActiveCallIndex].isOnHold) {\n <button class=\"button_call_option button_elevated\"\n [ngClass]=\"{ 'button_disabled': !isactiveCall }\"\n [disabled]=\"!isactiveCall\"\n (click)=\"toggleHold()\">\n <div class=\"button_icon\"> <svg viewBox=\"0 0 320 512\" width=\"14\">\n <path fill=\"currentColor\" d=\"M128 64L0 64 0 448l128 0 0-384zm192 0L192 64l0 384 128 0 0-384z\" />\n </svg></div>\n <div class=\"button_text\">Hold</div>\n </button>\n } @else if (activeCalls.length > 0 && this.activeCalls[this.currentActiveCallIndex].isOnHold) {\n <button class=\"button_call_option button_active button_elevated\" (click)=\"toggleHold()\">\n <div class=\"button_icon\">\n <svg viewBox=\"0 0 320 512\" width=\"14\">\n <path fill=\"currentColor\" d=\"M128 64L0 64 0 448l128 0 0-384zm192 0L192 64l0 384 128 0 0-384z\" />\n </svg></div>\n <div class=\"button_text\">Unhold</div>\n </button>\n \n }\n\n <!-- Keypad -->\n <button class=\"button_call_option button_elevated\"\n [class.button_active]=\"isDailpadOpen\"\n (click)=\"menuDailpad()\"\n [ngClass]=\"{ 'button_disabled': showCallDisconnected }\">\n <div class=\"button_icon\"> <svg width=\"22px\" height=\"22px\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M256,400a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M256,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M256,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M256,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M384,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M384,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M384,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M128,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M128,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M128,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n </svg></div>\n <div class=\"button_text\">{{ isDailpadOpen ? 'Hide' : 'Keypad' }}</div>\n </button>\n\n @if (isDailpadOpen) {\n <div class=\"container_popup_dialpad\">\n <div class=\"container_popup_dialpad_inner\">\n <div [formGroup]=\"dtmfForm\">\n <div class=\"container_dtmf_input\">\n <input type=\"tel\" formControlName=\"dtmf\">\n </div>\n <div class=\"container_dialpad_digits\">\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('1')\">1</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('2')\">2</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('3')\">3</button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('4')\">4</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('5')\">5</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('6')\">6</button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('7')\">7</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('8')\">8</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('9')\">9</button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('*')\">\n <svg viewBox=\"0 0 512 512\" height=\"17px\">\n <path fill=\"currentColor\"\n d=\"M208 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 140.9 122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7 43.7L352 256l122 70.4c15.3 8.8 20.6 28.4 11.7 43.7l-16 27.7c-8.8 15.3-28.4 20.6-43.7 11.7L304 339.1 304 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-140.9L86 409.6c-15.3 8.8-34.9 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7L160 256 38 185.6c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7C51.1 98.8 70.7 93.6 86 102.4l122 70.4L208 32z\" />\n </svg>\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('0')\">0</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('#')\">\n <svg height=\"19px\" viewBox=\"0 0 448 512\">\n <path fill=\"currentColor\"\n d=\"M181.3 32.4c17.4 2.9 29.2 19.4 26.3 36.8L197.8 128l95.1 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3s29.2 19.4 26.3 36.8L357.8 128l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0L325.8 320l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l9.8-58.7-95.1 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8L90.2 384 32 384c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 21.3-128L64 192c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3zM187.1 192L165.8 320l95.1 0 21.3-128-95.1 0z\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Call Control Buttons -->\n <div class=\"container_dialpad_buttons\">\n <div class=\"container_dialpad_row\">\n @if (!showCallDisconnected || isCalling) {\n <button class=\"button_dialpad_digit button_call_red\" (click)=\"dropCurrentCall()\">\n <svg width=\"25\" viewBox=\"0 0 640 512\">\n <path fill=\"currentColor\"\n d=\"M11.7 266.3l41.9 94.3c6.1 13.7 20.8 21.3 35.5 18.4l109.2-21.8c15-3 25.7-16.1 25.7-31.4V240c62.3-20.8 129.7-20.8 192 0v85.8c0 15.3 10.8 28.4 25.7 31.4L550.9 379c14.7 2.9 29.4-4.7 35.5-18.4l41.9-94.3c7.2-16.2 5.1-35.1-7.4-47.7C570.8 168.1 464.2 96 320 96S69.2 168.1 19.1 218.6c-12.5 12.6-14.6 31.5-7.4 47.7z\" />\n </svg>\n </button>\n } @else if (showCallDisconnected && !isCalling) {\n <button class=\"button_dialpad_digit button_call_green\"\n (click)=\"onRedial()\"\n [ngClass]=\"{ 'button_call_disabled': !phoneNumber }\">\n <svg viewBox=\"0 0 512 512\" height=\"18px\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </button>\n }\n </div>\n </div>\n </div>\n</div>\n</ng-template>\n\n\n <!-- ////////////////// -->\n <!-- Conference Call Template -->\n <ng-template #conferenceCallTemplate>\n<div class=\"container_active_call_header\">\n <div class=\"container_active_call_avatar\">\n <div class=\"container_active_call_avatar_inner\">\n <svg viewBox=\"0 0 212 212\" height=\"45px\" width=\"45px\" version=\"1.1\" x=\"0px\" y=\"0px\"\n enable-background=\"new 0 0 212 212\">\n <path fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\">\n </path>\n <g>\n <path fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 c-0.964-1.144-2.024-2.326-3.184-3.527c-1.741-1.802-3.71-3.646-5.924-5.47c-2.952-2.431-6.339-4.824-10.204-7.026 c-1.877-1.07-3.873-2.092-5.98-3.055c-0.062-0.028-0.118-0.059-0.18-0.087c-9.792-4.44-22.106-7.529-37.416-7.529 s-27.624,3.089-37.416,7.529c-0.338,0.153-0.653,0.318-0.985,0.474c-1.431,0.674-2.806,1.376-4.128,2.101 c-0.716,0.393-1.417,0.792-2.101,1.197c-3.421,2.027-6.475,4.191-9.15,6.395c-2.213,1.823-4.182,3.668-5.924,5.47 c-1.161,1.201-2.22,2.384-3.184,3.527c-0.964,1.144-1.832,2.25-2.609,3.299c-0.778,1.049-1.464,2.04-2.065,2.955 c-0.557,0.848-1.033,1.622-1.447,2.324c-0.033,0.056-0.073,0.119-0.104,0.174c-0.435,0.744-0.79,1.392-1.07,1.926 c-0.559,1.068-0.818,1.678-0.818,1.678v0.398c18.285,17.927,43.322,28.985,70.945,28.985c27.678,0,52.761-11.103,71.055-29.095 v-0.289c0,0-0.619-1.45-1.992-3.778C174.594,173.238,174.117,172.463,173.561,171.615z\">\n </path>\n <path fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 c1.772-0.532,3.482-1.188,5.12-1.958c2.184-1.027,4.242-2.258,6.15-3.67c2.863-2.119,5.39-4.646,7.509-7.509 c0.706-0.954,1.367-1.945,1.98-2.971c0.919-1.539,1.729-3.155,2.422-4.84c0.462-1.123,0.872-2.277,1.226-3.458 c0.177-0.591,0.341-1.188,0.49-1.792c0.299-1.208,0.542-2.443,0.725-3.701c0.275-1.887,0.417-3.827,0.417-5.811 c0-1.984-0.142-3.925-0.417-5.811c-0.184-1.258-0.426-2.493-0.725-3.701c-0.15-0.604-0.313-1.202-0.49-1.793 c-0.354-1.181-0.764-2.335-1.226-3.458c-0.693-1.685-1.504-3.301-2.422-4.84c-0.613-1.026-1.274-2.017-1.98-2.971 c-2.119-2.863-4.646-5.39-7.509-7.509c-1.909-1.412-3.966-2.643-6.15-3.67c-1.638-0.77-3.348-1.426-5.12-1.958 c-1.181-0.355-2.39-0.655-3.624-0.896c-2.468-0.484-5.035-0.737-7.68-0.737c-21.162,0-37.345,16.183-37.345,37.345 C68.657,109.317,84.84,125.5,106.002,125.5z\">\n </path>\n </g>\n </svg>\n </div>\n </div>\n\n <div class=\"container_active_call_info\">\n <div class=\"container_active_call_info_inner\">\n <div class=\"container_active_call_number\">Conference call</div>\n <div class=\"container_active_call_details\">\n <div class=\"container_active_call_details_inner\">\n <div class=\"container_active_call_icon_green\">\n <svg viewBox=\"0 0 512 512\" width=\"12\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </div>\n <div class=\"container_active_call_status_green\">\n with {{ conferenceParticipants?.length }} people\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"container_active_call_options\">\n <div class=\"button_active_call_options button_active_call_options_highlighted\">\n <span (click)=\"isConfereceList = !isConfereceList\" class=\"container_active_call_options_button\">\n <svg viewBox=\"0 0 448 512\" width=\"16px\">\n <path fill=\"currentColor\"\n d=\"M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\" />\n </svg>\n </span>\n </div>\n </div>\n</div>\n\n<!-- Conference List -->\n@if (isConfereceList) {\n <div class=\"container_conference_contact_list\">\n <div class=\"container_conference_contact_list_inner\">\n <div class=\"scrollbox container_conference_contact_list_scrollbox\">\n <div class=\"scrollbox-content\">\n\n @for (person of conferenceParticipants; track person.id) {\n <div class=\"container_conference_contact_item\">\n <!-- Avatar -->\n <div class=\"container_contact_item_image\">\n <div class=\"container_contact_item_image_inner\">\n <svg viewBox=\"0 0 212 212\" height=\"49px\" width=\"49px\" version=\"1.1\" x=\"0px\" y=\"0px\"\n enable-background=\"new 0 0 212 212\">\n <path fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\">\n </path>\n <g>\n <path fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 c-0.964-1.144-2.024-2.326-3.184-3.527c-1.741-1.802-3.71-3.646-5.924-5.47c-2.952-2.431-6.339-4.824-10.204-7.026 c-1.877-1.07-3.873-2.092-5.98-3.055c-0.062-0.028-0.118-0.059-0.18-0.087c-9.792-4.44-22.106-7.529-37.416-7.529 s-27.624,3.089-37.416,7.529c-0.338,0.153-0.653,0.318-0.985,0.474c-1.431,0.674-2.806,1.376-4.128,2.101 c-0.716,0.393-1.417,0.792-2.101,1.197c-3.421,2.027-6.475,4.191-9.15,6.395c-2.213,1.823-4.182,3.668-5.924,5.47 c-1.161,1.201-2.22,2.384-3.184,3.527c-0.964,1.144-1.832,2.25-2.609,3.299c-0.778,1.049-1.464,2.04-2.065,2.955 c-0.557,0.848-1.033,1.622-1.447,2.324c-0.033,0.056-0.073,0.119-0.104,0.174c-0.435,0.744-0.79,1.392-1.07,1.926 c-0.559,1.068-0.818,1.678-0.818,1.678v0.398c18.285,17.927,43.322,28.985,70.945,28.985c27.678,0,52.761-11.103,71.055-29.095 v-0.289c0,0-0.619-1.45-1.992-3.778C174.594,173.238,174.117,172.463,173.561,171.615z\">\n </path>\n <path fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 c1.772-0.532,3.482-1.188,5.12-1.958c2.184-1.027,4.242-2.258,6.15-3.67c2.863-2.119,5.39-4.646,7.509-7.509 c0.706-0.954,1.367-1.945,1.98-2.971c0.919-1.539,1.729-3.155,2.422-4.84c0.462-1.123,0.872-2.277,1.226-3.458 c0.177-0.591,0.341-1.188,0.49-1.792c0.299-1.208,0.542-2.443,0.725-3.701c0.275-1.887,0.417-3.827,0.417-5.811 c0-1.984-0.142-3.925-0.417-5.811c-0.184-1.258-0.426-2.493-0.725-3.701c-0.15-0.604-0.313-1.202-0.49-1.793 c-0.354-1.181-0.764-2.335-1.226-3.458c-0.693-1.685-1.504-3.301-2.422-4.84c-0.613-1.026-1.274-2.017-1.98-2.971 c-2.119-2.863-4.646-5.39-7.509-7.509c-1.909-1.412-3.966-2.643-6.15-3.67c-1.638-0.77-3.348-1.426-5.12-1.958 c-1.181-0.355-2.39-0.655-3.624-0.896c-2.468-0.484-5.035-0.737-7.68-0.737c-21.162,0-37.345,16.183-37.345,37.345 C68.657,109.317,84.84,125.5,106.002,125.5z\">\n </path>\n </g>\n </svg>\n </div>\n </div>\n\n <!-- Name and Time -->\n <div class=\"container_contact_item_left\">\n <div class=\"container_contact_item_left_inner\">\n <div class=\"contact_field\">{{ person.name }}</div>\n <div class=\"contact_field_green\">{{ person.duration }}</div>\n </div>\n </div>\n\n <!-- End Button -->\n <div class=\"container_contact_item_right\">\n <div class=\"right_field\">\n <button class=\"button_disconnect_call\">\n <svg width=\"22\" viewBox=\"0 0 640 512\">\n <path fill=\"currentColor\"\n d=\"M11.7 266.3l41.9 94.3c6.1 13.7 20.8 21.3 35.5 18.4l109.2-21.8c15-3 25.7-16.1 25.7-31.4V240c62.3-20.8 129.7-20.8 192 0v85.8c0 15.3 10.8 28.4 25.7 31.4L550.9 379c14.7 2.9 29.4-4.7 35.5-18.4l41.9-94.3c7.2-16.2 5.1-35.1-7.4-47.7C570.8 168.1 464.2 96 320 96S69.2 168.1 19.1 218.6c-12.5 12.6-14.6 31.5-7.4 47.7z\">\n </path>\n </svg>\n </button>\n </div>\n </div>\n </div>\n\n @if (!$last) {\n <div class=\"container_separator\"></div>\n }\n }\n\n </div>\n </div>\n </div>\n </div>\n}\n\n</ng-template>\n\n\n <ng-template #callTransferTemplate>\n <div class=\"container_transfer_call\">\n <div class=\"container_transfer_call_inner\">\n <div class=\"container_button_close\">\n <span (click)=\"isCallTransferOpen = false\" title=\"Close\">\n <i class=\"fa-sharp fa-solid fa-xmark\"></i>\n </span>\n </div>\n\n <!-- First Div -->\n <div class=\"container_transfer_call_content\" @slideInOut>\n @if (currentView === 'transferListpage') {\n <div class=\"container_active_call_duration\">{{ formatTime(callDuration)}}</div>\n\n <div class=\"container_active_call_header margin_bottom_16 shadow_st\">\n <div class=\"container_active_call_avatar\">\n <div class=\"container_active_call_avatar_inner\">\n <svg viewBox=\"0 0 212 212\" height=\"45px\" width=\"45px\" version=\"1.1\" x=\"0px\" y=\"0px\"\n enable-background=\"new 0 0 212 212\">\n <path fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\">\n </path>\n <g>\n <path fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 c-0.964-1.144-2.024-2.326-3.184-3.527c-1.741-1.802-3.71-3.646-5.924-5.47c-2.952-2.431-6.339-4.824-10.204-7.026 c-1.877-1.07-3.873-2.092-5.98-3.055c-0.062-0.028-0.118-0.059-0.18-0.087c-9.792-4.44-22.106-7.529-37.416-7.529 s-27.624,3.089-37.416,7.529c-0.338,0.153-0.653,0.318-0.985,0.474c-1.431,0.674-2.806,1.376-4.128,2.101 c-0.716,0.393-1.417,0.792-2.101,1.197c-3.421,2.027-6.475,4.191-9.15,6.395c-2.213,1.823-4.182,3.668-5.924,5.47 c-1.161,1.201-2.22,2.384-3.184,3.527c-0.964,1.144-1.832,2.25-2.609,3.299c-0.778,1.049-1.464,2.04-2.065,2.955 c-0.557,0.848-1.033,1.622-1.447,2.324c-0.033,0.056-0.073,0.119-0.104,0.174c-0.435,0.744-0.79,1.392-1.07,1.926 c-0.559,1.068-0.818,1.678-0.818,1.678v0.398c18.285,17.927,43.322,28.985,70.945,28.985c27.678,0,52.761-11.103,71.055-29.095 v-0.289c0,0-0.619-1.45-1.992-3.778C174.594,173.238,174.117,172.463,173.561,171.615z\">\n </path>\n <path fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 c1.772-0.532,3.482-1.188,5.12-1.958c2.184-1.027,4.242-2.258,6.15-3.67c2.863-2.119,5.39-4.646,7.509-7.509 c0.706-0.954,1.367-1.945,1.98-2.971c0.919-1.539,1.729-3.155,2.422-4.84c0.462-1.123,0.872-2.277,1.226-3.458 c0.177-0.591,0.341-1.188,0.49-1.792c0.299-1.208,0.542-2.443,0.725-3.701c0.275-1.887,0.417-3.827,0.417-5.811 c0-1.984-0.142-3.925-0.417-5.811c-0.184-1.258-0.426-2.493-0.725-3.701c-0.15-0.604-0.313-1.202-0.49-1.793 c-0.354-1.181-0.764-2.335-1.226-3.458c-0.693-1.685-1.504-3.301-2.422-4.84c-0.613-1.026-1.274-2.017-1.98-2.971 c-2.119-2.863-4.646-5.39-7.509-7.509c-1.909-1.412-3.966-2.643-6.15-3.67c-1.638-0.77-3.348-1.426-5.12-1.958 c-1.181-0.355-2.39-0.655-3.624-0.896c-2.468-0.484-5.035-0.737-7.68-0.737c-21.162,0-37.345,16.183-37.345,37.345 C68.657,109.317,84.84,125.5,106.002,125.5z\">\n </path>\n </g>\n </svg>\n </div>\n </div>\n <div class=\"container_active_call_info\">\n <div class=\"container_active_call_info_inner\">\n <div class=\"container_active_call_number\">{{ lookupPhoneNumber?.country?.flag }}\n {{ lookupPhoneNumber?.phoneNumber }}</div>\n <div class=\"container_active_call_details\">\n <div class=\"container_active_call_details_inner\">\n <div class=\"container_active_call_icon_green\">\n <svg viewBox=\"0 0 512 512\" width=\"12\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </div>\n <div class=\"container_active_call_status_green\">Active call</div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"container_contact_item_right\">\n <div class=\"right_field right_field_highlighted\">\n <span class=\"right_field_content\">Ext. {{extensionNumber}}</span>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"container_transfer_tab_buttons\">\n <button class=\"button_transfer_tab\" (click)=\"selectTab('tab1')\" [class.active]=\"activeTab === 'tab1'\">\n <svg width=\"18px\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\"\n d=\"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\" />\n </svg> Recent</button>\n <button class=\"button_transfer_tab\" (click)=\"selectTab('tab2')\" [class.active]=\"activeTab === 'tab2'\">\n <svg width=\"20px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\"\n d=\"M15.71,12.71a6,6,0,1,0-7.42,0,10,10,0,0,0-6.22,8.18,1,1,0,0,0,2,.22,8,8,0,0,1,15.9,0,1,1,0,0,0,1,.89h.11a1,1,0,0,0,.88-1.1A10,10,0,0,0,15.71,12.71ZM12,12a4,4,0,1,1,4-4A4,4,0,0,1,12,12Z\" />\n </svg> Internal</button>\n <button class=\"button_transfer_tab\" (click)=\"selectTab('tab3')\" [class.active]=\"activeTab === 'tab3'\">\n <svg width=\"18px\" height=\"18px\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M256,400a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M256,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M256,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M256,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M384,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M384,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M384,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M128,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M128,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M128,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" /></svg>\n Dail</button>\n </div>\n\n <!-- Tab 1 -->\n @if (activeTab === 'tab1') {\n <!-- <div class=\"container_transfer_tab_content\">\n <app-call-history (makeCallEv)=\"makeCallFromContact($event)\"></app-call-history>\n </div> -->\n <div class=\"container_transfer_tab_content\">\n <app-call-history [mode]=\"'transfer'\" (transferEv)=\"transferToFromHistory($event)\"> </app-call-history>\n</div>\n }\n\n <!-- Tab 2 -->\n @if (activeTab === 'tab2') {\n <div class=\"container_transfer_tab_content\">\n <div class=\"container_transfer_internal_search\">\n <input type=\"search\" placeholder=\"Type to search\">\n </div>\n <div class=\"container_transfer_contact_list\">\n <div class=\"container_transfer_contact_list_inner\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n <!-- Instead of repeating static contacts, render via array -->\n @for (contact of internalContacts; track contact.ext) {\n <div class=\"container_contact_item\" (click)=\"goToDiv('transferDetails'); makeCallFromContact(contact.phone)\">\n <div class=\"container_contact_item_image\">\n <div class=\"container_contact_item_image_inner\">\n <svg viewBox=\"0 0 212 212\" height=\"49px\" width=\"49px\" version=\"1.1\" x=\"0px\" y=\"0px\"\n enable-background=\"new 0 0 212 212\">\n <path fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\">\n </path>\n <g>\n <path fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 c-0.964-1.144-2.024-2.326-3.184-3.527c-1.741-1.802-3.71-3.646-5.924-5.47c-2.952-2.431-6.339-4.824-10.204-7.026 c-1.877-1.07-3.873-2.092-5.98-3.055c-0.062-0.028-0.118-0.059-0.18-0.087c-9.792-4.44-22.106-7.529-37.416-7.529 s-27.624,3.089-37.416,7.529c-0.338,0.153-0.653,0.318-0.985,0.474c-1.431,0.674-2.806,1.376-4.128,2.101 c-0.716,0.393-1.417,0.792-2.101,1.197c-3.421,2.027-6.475,4.191-9.15,6.395c-2.213,1.823-4.182,3.668-5.924,5.47 c-1.161,1.201-2.22,2.384-3.184,3.527c-0.964,1.144-1.832,2.25-2.609,3.299c-0.778,1.049-1.464,2.04-2.065,2.955 c-0.557,0.848-1.033,1.622-1.447,2.324c-0.033,0.056-0.073,0.119-0.104,0.174c-0.435,0.744-0.79,1.392-1.07,1.926 c-0.559,1.068-0.818,1.678-0.818,1.678v0.398c18.285,17.927,43.322,28.985,70.945,28.985c27.678,0,52.761-11.103,71.055-29.095 v-0.289c0,0-0.619-1.45-1.992-3.778C174.594,173.238,174.117,172.463,173.561,171.615z\">\n </path>\n <path fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 c1.772-0.532,3.482-1.188,5.12-1.958c2.184-1.027,4.242-2.258,6.15-3.67c2.863-2.119,5.39-4.646,7.509-7.509 c0.706-0.954,1.367-1.945,1.98-2.971c0.919-1.539,1.729-3.155,2.422-4.84c0.462-1.123,0.872-2.277,1.226-3.458 c0.177-0.591,0.341-1.188,0.49-1.792c0.299-1.208,0.542-2.443,0.725-3.701c0.275-1.887,0.417-3.827,0.417-5.811 c0-1.984-0.142-3.925-0.417-5.811c-0.184-1.258-0.426-2.493-0.725-3.701c-0.15-0.604-0.313-1.202-0.49-1.793 c-0.354-1.181-0.764-2.335-1.226-3.458c-0.693-1.685-1.504-3.301-2.422-4.84c-0.613-1.026-1.274-2.017-1.98-2.971 c-2.119-2.863-4.646-5.39-7.509-7.509c-1.909-1.412-3.966-2.643-6.15-3.67c-1.638-0.77-3.348-1.426-5.12-1.958 c-1.181-0.355-2.39-0.655-3.624-0.896c-2.468-0.484-5.035-0.737-7.68-0.737c-21.162,0-37.345,16.183-37.345,37.345 C68.657,109.317,84.84,125.5,106.002,125.5z\">\n </path>\n </g>\n </svg>\n </div>\n </div>\n <div class=\"container_contact_item_left\">\n <div class=\"container_contact_item_left_inner\">\n <div class=\"contact_field\">{{ contact.name }}</div>\n <div class=\"contact_field\">{{ contact.phone }}</div>\n @if (contact.role) {\n <div class=\"contact_field_grey\">\n <div class=\"contact_field_highlighted\"><span>{{ contact.role }}</span></div>\n </div>\n }\n </div>\n </div>\n <div class=\"container_contact_item_right\">\n <div class=\"right_field\">\n <span class=\"right_field_content\">Ext. {{ contact.ext }}</span>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Tab 3 -->\n @if (activeTab === 'tab3') {\n <div class=\"container_transfer_tab_content\">\n <form [formGroup]=\"transferForm\">\n <div class=\"container_transfer_contact_list\">\n <div class=\"container_phone_number_input margin_bottom_16\">\n <button class=\"button_phonebook\" (click)=\"isDirectoryOpen = !isDirectoryOpen\">\uD83D\uDCD6</button>\n <input placeholder=\"Phone Number\" type=\"tel\" formControlName=\"target\">\n <button class=\"button_backspace\" (click)=\"onBackspace()\"></button>\n </div>\n\n @if (isDirectoryOpen) {\n <div class=\"container_transfer_internal_contact_list\">\n <div class=\"container_transfer_contact_list_inner\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n @for (directoryContact of directoryContacts; track directoryContact.id) {\n <div class=\"container_contact_item\">\n <div class=\"container_contact_item_left\">\n <div class=\"container_contact_item_left_inner\">\n <div class=\"contact_field\">{{ directoryContact.name }}</div>\n <div class=\"contact_field\">{{ directoryContact.phone }}</div>\n </div>\n </div>\n <div class=\"container_contact_item_right\">\n <div class=\"right_field right_field_highlighted\">\n <span class=\"right_field_content\">\n <div class=\"container_rating\">\n @for (star of [1,2,3,4,5]; track $index) {\n <span [class.filled]=\"star <= directoryContact.rating\">\u2605</span>\n }\n </div>\n </span>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Dialpad -->\n <div class=\"container_dialpad_digits\">\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('1')\">1</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('2')\">2</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('3')\">3</button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('4')\">4</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('5')\">5</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('6')\">6</button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('7')\">7</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('8')\">8</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('9')\">9</button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('*')\">\n <svg viewBox=\"0 0 512 512\" height=\"17px\">\n <path fill=\"currentColor\" d=\"M208 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 140.9\n 122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7\n 43.7L352 256l122 70.4c15.3 8.8 20.6 28.4 11.7 43.7l-16 27.7c-8.8\n 15.3-28.4 20.6-43.7 11.7L304 339.1 304 480c0 17.7-14.3 32-32 32l-32\n 0c-17.7 0-32-14.3-32-32l0-140.9L86 409.6c-15.3 8.8-34.9\n 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7L160 256 38\n 185.6c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7C51.1 98.8 70.7 93.6 86\n 102.4l122 70.4L208 32z\" />\n </svg>\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('0')\">0</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('#')\">\n <svg height=\"19px\" viewBox=\"0 0 448 512\">\n <path fill=\"currentColor\" d=\"M181.3 32.4c17.4 2.9 29.2 19.4 26.3\n36.8L197.8 128l95.1 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3s29.2 19.4\n26.3 36.8L357.8 128l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9\n0L325.8 320l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0-11.5\n69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l9.8-58.7-95.1\n0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8L90.2\n384 32 384c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 21.3-128L64\n192c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 11.5-69.3c2.9-17.4\n19.4-29.2 36.8-26.3zM187.1 192L165.8 320l95.1 0 21.3-128-95.1 0z\" />\n </svg></button>\n </div>\n </div>\n\n <div class=\"container_dialpad_buttons\">\n <div class=\"container_dialpad_row\">\n @if (isAddingNewCall) {\n <button class=\"button_dialpad_digit button_call_green\"\n (click)=\"makeCall(transferForm.value.target)\"\n [disabled]=\"!phoneNumber\"\n [ngClass]=\"{ 'button_call_disabled': !phoneNumber }\">\n <svg viewBox=\"0 0 512 512\" height=\"18px\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </button>\n } @else {\n <button type=\"submit\" class=\"button_dialpad_digit button_call_green\" (click)=\"onTransferCall()\"> <svg height=\"20px\" viewBox=\"0 0 52 52\" enable-background=\"new 0 0 52 52\" xml:space=\"preserve\">\n <g>\n <path fill=\"currentColor\" d=\"M48.5,37.9L42.4,33c-1.4-1.1-3.4-1.2-4.8-0.1l-5.2,3.8c-0.6,0.5-1.5,0.4-2.1-0.2l-7.8-7l-7-7.8\n c-0.6-0.6-0.6-1.4-0.2-2.1l3.8-5.2c1.1-1.4,1-3.4-0.1-4.8l-4.9-6.1c-1.5-1.8-4.2-2-5.9-0.3L3,8.4c-0.8,0.8-1.2,1.9-1.2,3\n c0.5,10.2,5.1,19.9,11.9,26.7S30.2,49.5,40.4,50c1.1,0.1,2.2-0.4,3-1.2l5.2-5.2C50.5,42.1,50.4,39.3,48.5,37.9z\" />\n <path fill=\"currentColor\" d=\"M48.4,2H33c-1,0-1.3,1.1-0.5,1.9l4.9,5l-9,9.1c-0.5,0.5-0.5,1.4,0,1.9l3.7,3.7c0.5,0.5,1.3,0.5,1.9,0\n l9.1-9.1l5.1,4.9C48.9,20.3,50,20,50,19V3.7C50,3,49.1,2,48.4,2z\" />\n </g>\n </svg></button>\n }\n </div>\n </div>\n </div>\n </form>\n </div>\n }\n }\n</div>\n\n <!-- Second Div -->\n @if (currentView === 'transferDetails') {\n <div class=\"container_transfer_call_content\" @slideInOut>\n <div class=\"container_active_call_duration\">00:10</div>\n <div class=\"container_active_call_header shadow_st\">\n <div class=\"container_active_call_avatar\">\n <div class=\"container_active_call_avatar_inner\">\n <svg viewBox=\"0 0 212 212\" height=\"45px\" width=\"45px\" version=\"1.1\" x=\"0px\" y=\"0px\"\n enable-background=\"new 0 0 212 212\">\n <path fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\"></path>\n <g>\n <path fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 ...\"></path>\n <path fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 ...\"></path>\n </g>\n </svg>\n </div>\n </div>\n\n <div class=\"container_active_call_info\">\n <div class=\"container_active_call_info_inner\">\n <div class=\"container_active_call_number\">\n {{ lookupPhoneNumber?.country?.flag }} {{ lookupPhoneNumber?.phoneNumber }}\n </div>\n <div class=\"container_active_call_details\">\n <div class=\"container_active_call_details_inner\">\n <div class=\"container_active_call_icon_grey\">\n <svg viewBox=\"0 0 320 512\" width=\"12\">\n <path fill=\"currentColor\"\n d=\"M128 64L0 64 0 448l128 0 0-384zm192 0L192 64l0 384 128 0 0-384z\"></path>\n </svg>\n </div>\n <div class=\"container_active_call_status_grey\">On hold</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"container_contact_item_right\">\n <div class=\"right_field right_field_highlighted\">\n <span class=\"right_field_content\">Ext. {{ extensionNumber }}</span>\n </div>\n </div>\n </div>\n\n <div class=\"container_transfer_call_details\">\n <div class=\"container_call_ani_number padding_top_nt\">+91 (654) 9876549</div>\n <div class=\"container_call_ani_name\">Rajeev kumar singh</div>\n <div class=\"container_call_ani_image\">\n <div class=\"container_call_ani_image_inner\">\n <svg viewBox=\"0 0 212 212\" height=\"85\" width=\"85\" version=\"1.1\" x=\"0px\" y=\"0px\"\n enable-background=\"new 0 0 212 212\">\n <path fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\"></path>\n <g>\n <path fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 ...\"></path>\n <path fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 ...\"></path>\n </g>\n </svg>\n </div>\n </div>\n </div>\n\n <div class=\"container_call_dnis\">\n <span>Ext. {{ extensionNumber }}</span>\n </div>\n\n <div class=\"container_call_options margin_bottom_nt\">\n <div class=\"container_dialpad_row margin_bottom_16\">\n <button class=\"button_call_option\" (click)=\"mergeCall()\">\n <div class=\"button_icon\"><svg width=\"22\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\"\n d=\"M32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l97.2 0c9.7 0 18.9 4.4 25 12L247 256 154.2 372c-6.1 7.6-15.3 12-25 12L32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l97.2 0c29.2 0 56.7-13.3 75-36l99.2-124 80.6 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c6-6 9.4-14.1 9.4-22.6s-3.4-16.6-9.4-22.6l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 32-80.6 0L204.2 100c-18.2-22.8-45.8-36-75-36L32 64z\"></path>\n </svg></div>\n <div class=\"button_text\">Merge</div>\n </button>\n\n <button class=\"button_call_option\">\n <div class=\"button_icon\"> <svg width=\"26px\" viewBox=\"0 0 640 512\">\n <path fill=\"currentColor\"\n d=\"M150.6 73.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 173.3 96 320c0 53 43 96 96 96l112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0c-17.7 0-32-14.3-32-32l0-146.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96zM336 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l112 0c17.7 0 32-14.3 32-32l0 146.7-41.4-41.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L544 338.7 544 192c0-53-43-96-96-96L336 96z\"></path>\n </svg></div>\n <div class=\"button_text\">Swap</div>\n </button>\n\n <button class=\"button_call_option\">\n <div class=\"button_icon\"><svg width=\"19px\" viewBox=\"0 0 52 52\">\n <path fill=\"currentColor\"\n d=\"M48.5,37.9L42.4,33c-1.4-1.1-3.4-1.2-4.8-0.1l-5.2,3.8c-0.6,0.5-1.5,0.4-2.1-0.2l-7.8-7l-7-7.8 c-0.6-0.6-0.6-1.4-0.2-2.1l3.8-5.2c1.1-1.4,1-3.4-0.1-4.8l-4.9-6.1c-1.5-1.8-4.2-2-5.9-0.3L3,8.4c-0.8,0.8-1.2,1.9-1.2,3 c0.5,10.2,5.1,19.9,11.9,26.7S30.2,49.5,40.4,50c1.1,0.1,2.2-0.4,3-1.2l5.2-5.2C50.5,42.1,50.4,39.3,48.5,37.9z\"></path>\n <path fill=\"currentColor\"\n d=\"M48.4,2H33c-1,0-1.3,1.1-0.5,1.9l4.9,5l-9,9.1c-0.5,0.5-0.5,1.4,0,1.9l3.7,3.7c0.5,0.5,1.3,0.5,1.9,0 l9.1-9.1l5.1,4.9C48.9,20.3,50,20,50,19V3.7C50,3,49.1,2,48.4,2z\"></path>\n </svg>\n</div>\n <div class=\"button_text\">Transfer</div>\n </button>\n </div>\n </div>\n\n <div class=\"container_transfer_disconnect\">\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit button_call_red\" (click)=\"goToDiv('transferListpage')\">\n <svg width=\"36px\" viewBox=\"0 0 76 76\">\n <path fill=\"currentColor\"\n d=\"M 16.2013,39.582L 15.4175,39.4096L 14.8094,38.9315L 14.4029,38.2193L 14.25,37.364L 14.25,34.9055C 14.25,33.184 14.6023,31.6057 15.3069,30.1704C 16.0116,28.7352 16.9698,27.4788 18.1818,26.4013C 19.3937,25.3237 20.8095,24.4424 22.429,23.7573C 24.0486,23.0722 25.7732,22.6277 27.6031,22.4239L 31.304,22.0792L 34.9918,21.8256L 39.109,21.715L 42.966,21.8451L 46.101,22.0987L 48.9628,22.489C 50.7276,22.7318 52.3883,23.199 53.945,23.8906C 55.5017,24.5822 56.8567,25.4625 58.0101,26.5313C 59.1635,27.6002 60.0752,28.8468 60.7451,30.2712C 61.4151,31.6956 61.75,33.2599 61.75,34.964L 61.75,37.4486L 61.5874,38.2681L 61.1386,38.9511L 60.4785,39.4096L 59.6752,39.582L 51.8897,39.582L 51.0994,39.4096L 50.4588,38.9413L 50.0327,38.2584L 49.8799,37.4226L 49.8799,32.1217L 49.7075,31.1656L 49.2295,30.3818L 48.5075,29.8452C 48.23,29.7108 47.9286,29.6436 47.6034,29.6436L 28.7413,29.6436C 28.4161,29.6436 28.0974,29.7108 27.7852,29.8452L 26.9722,30.3818L 26.4128,31.1851C 26.2697,31.4973 26.1982,31.8225 26.1982,32.1607L 26.1982,37.364L 26.0356,38.2193L 25.5803,38.9315L 24.9104,39.4096L 24.1038,39.582L 16.2013,39.582 Z M 34.8333,41.1667L 41.1666,41.1667L 41.1667,52.6458L 45.9167,47.8958L 45.9167,54.2292L 38,62.5417L 30.0833,54.2292L 30.0833,47.8958L 34.8333,52.6458L 34.8333,41.1667 Z \" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n}\n\n\n\n\n\n\n\n\n\n\n\n </div>\n </div>\n </ng-template>\n\n \n\n\n</ng-template>\n\n<div id=\"videoPanel\" style=\"display: none\">\n <audio #rmtAudio id=\"rmtAudio\" autoplay></audio>\n <audio #lclAudio id=\"lclAudio\" autoplay muted></audio>\n <video #rmtVideo id=\"rmtVideo\" autoplay></video>\n <video #lclVideo id=\"lclVideo\" autoplay muted controls title=\"Local Video\"></video>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,500,600,700,800\";@import\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css\";:host{--sd-app-color: #ff6633;--sd-app-color-dark: #ff5805;--sd-app-color-light: #fe8c66;--sd-text-font-family: \"Open Sans\", \"sans-serif\", \"Helvetica Neue\", \"Helvetica\", \"Arial\";--sd-text-color: #666;--sd-text-color-inverse: #fff;--sd-text-color-light: #ccc;--sd-text-color-medium: #999;--sd-text-color-dark: #333;--sd-background-color: #fff;--sd-border-color-light: #e3e3e3;--sd-border-color-dark: #c9c9c9}.message_label{width:100%;font-size:13px;font-family:var(--sd-text-font-family);letter-spacing:-.25px;border-radius:4px;font-weight:600;border:1px solid #f5c6cb;padding:8px 11px;position:relative}.error_message{color:#e1143c;background-color:#f8d7da;border-color:#dfadb2}.success_message{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert_message{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.properties_form_field{width:100%;font-size:13px!important;font-family:var(--sd-text-font-family)!important;font-weight:600!important;letter-spacing:-.24px!important;color:#555!important}.container_avaya_login{width:100%;height:calc(100vh - 51px);padding:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.container_avaya_login_inner{margin:0 auto;width:100%;max-width:370px;padding:65px 20px 20px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex}.container_connection_status_overlay{width:100%;height:100%;position:absolute;left:0;right:0;bottom:0;background-color:#6669;display:flex;justify-content:center;z-index:9999999;padding:20px}.container_connection_status{width:100%;background:var(--sd-background-color);padding:0 10px;border-radius:8px;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);display:flex;height:42px;align-items:center;position:relative;box-shadow:#32325d40 0 6px 12px -2px,#0000004d 0 3px 7px -3px}.container_connection_status span{padding:0 0 0 8px}.container_connection_status .fa-circle-dot{color:#f66060}.container_connection_status_loader{position:absolute;right:15px}.container_avaya_login_content{position:relative;width:100%}.container_avaya_logo{margin:0;padding:0 26px 24px;width:100%;text-align:center}.container_avaya_logo_image{margin:0 auto;width:120px;height:35px;background:var(--sd-background-color) url(data:image/png;base64,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) center no-repeat;background-size:120px}.container_avaya_logo h3{margin:0;padding:6px 0 0;font-family:var(--sd-text-font-family);font-size:18px;font-weight:700;letter-spacing:-.45px;color:var(--sd-text-color-dark);position:relative}.container_avaya_logo h3 span{font-size:8px;position:absolute;top:8px}.container_avaya_login_error{width:100%;white-space:normal}.container_avaya_login_form{width:100%;margin:0;padding:26px 0 0;position:relative}.container_avaya_login_form form{width:100%;margin:0;padding:0}.container_avaya_login_form .form_field{margin:0;padding:0;width:100%}.avaya_login_button_area{padding:10px 0 0}.container_icon_eye{position:absolute;right:15px}.container_avaya_login_form .button_submit_login{font:14px / 48px var(--sd-text-font-family);display:inline-block;height:48px;background:#cd1f1e;color:var(--sd-text-color-inverse);border:1px solid #cd1f1e;font-weight:600;padding:0 12px;border-radius:4px;outline:none;letter-spacing:-.24px;cursor:pointer;width:100%;position:relative}.container_avaya_login_form .button_submit_login_loader{background:#cd1f1e!important;color:var(--sd-text-color-inverse)!important;border:1px solid #cd1f1e!important;cursor:auto}.container_avaya_login_form .button_submit_login:disabled{background:#f1f1f1;color:var(--sd-text-color-medium);border:1px solid #f1f1f1}.button_submit_loader:after{content:\"\";position:absolute;width:16px;height:16px;inset:0;margin:auto;border:3px solid transparent;border-top-color:#fff;border-radius:50%;animation:button_submit_loader_spinner 1s ease infinite}@keyframes button_submit_loader_spinner{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.container_avaya_softphone{width:100%;height:100%;position:relative}.container_avaya_softphone_inner{width:100%;position:absolute;top:0;left:0;right:0;padding:0;height:calc(100% - 51px);font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);line-height:normal;background:var(--sd-background-color);-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:#000}.container_call{margin:0 auto;padding:0;position:relative;width:100%;height:100%;background:var(--sd-background-color)}.container_dialpad_header{width:100%;position:relative;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);z-index:99999;background:var(--sd-background-color);padding:15px 15px 0}.container_dialpad_header_inner2{width:100%;margin:0;padding:15px 15px 0;background:#f7f7f7;background:linear-gradient(180deg,#f7f7f7 72%,#fff);border-radius:12px 12px 0 0;position:relative}.container_avaya_extension{width:100%;position:relative;display:flex;flex-direction:row;align-items:center;padding:8px 10px;border:1px solid var(--sd-border-color-light);border-radius:12px;margin-bottom:15px;background:#f0f0f0}.container_avaya_extension_left{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1;justify-content:center}.container_avaya_extension_left .extension_label{display:flex;align-items:center;line-height:normal;text-align:left}.container_avaya_extension_left .extension_number{display:flex;align-items:center;line-height:20px}.container_avaya_extension_right{flex-basis:auto;flex-direction:column;flex-grow:1;text-align:right;justify-items:flex-end}.container_avaya_extension_right button{background:none;border:none;outline:none;color:#a6a6a6;font-weight:600;border-radius:50%;align-items:center;justify-content:center;-webkit-transition-duration:.3s;transition-duration:.3s;background:#f0f0f0;height:38px;width:38px}.container_avaya_extension_right button:hover{color:var(--sd-text-color-dark);background:var(--sd-border-color-light)}.dialpad_container_sd{position:absolute;width:100%;right:0;left:0;top:101px;height:calc(100vh - 101px);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}.scrollbox{height:100%;overflow-y:scroll;overflow-x:hidden;visibility:hidden;padding:0 0 7px;position:relative;scroll-behavior:smooth;scrollbar-width:thin;width:100%}.scrollbox-content,.scrollbox:hover,.scrollbox:focus{visibility:visible}.container_contact_item{width:100%;position:relative;display:flex;flex-direction:row;align-items:center;padding:10px;border:1px solid var(--sd-border-color-light);border-radius:8px;overflow:hidden;margin-bottom:10px;cursor:pointer}.container_contact_item_image{display:flex}.container_contact_item_image_inner{margin:0 auto;padding:0;width:50px;height:50px;position:relative}.container_contact_item_left{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1}.container_contact_item_left_inner{display:flex;flex-basis:1;flex-direction:column;padding:0 0 0 10px}.container_contact_item_left .contact_field{font-size:13px;margin-bottom:2px}.contact_dark{color:var(--sd-text-color-dark)}.contact_gray{color:var(--sd-text-color-medium)}.container_contact_item_left .contact_field_grey{font-size:12px;color:var(--sd-text-color);padding-top:2px;display:flex}.container_contact_item_left .contact_field_green{font-size:13px;margin-bottom:2px;color:#6c0}.container_contact_item_left .contact_field_highlighted{display:flex;font-size:11px;color:var(--sd-text-color-medium)}.container_contact_item_left .contact_field_highlighted span{background:#6c0;border-radius:3px;text-transform:uppercase;color:var(--sd-text-color-inverse);font-size:9px;padding:2px 4px}.container_contact_item_right{display:flex;flex-direction:row}.container_contact_item_right .right_field{display:flex;flex-basis:auto;justify-content:right}.container_contact_item_right .right_field_highlighted{font-size:16px;color:#29abe0}.container_contact_item_right .right_field_content{display:inline-block;border-radius:26px;border:1px solid #e5e5e5;padding:5px 8px;font-size:11px;color:var(--sd-text-color)}.container_contact_item_right .right_recent_content{display:inline-block;padding:0;font-size:11px;color:var(--sd-text-color)}.container_contact_item_right .container_rating{font-size:11px;cursor:pointer}.container_contact_item_right .container_rating span{color:gray;transition:color .3s}.container_contact_item_right .container_rating span.filled{color:gold}.container_dialpad_digits{width:100%;display:flex;justify-content:center;margin-bottom:10px;flex-direction:column}.container_dialpad_row{display:flex;column-gap:10px;flex-direction:row;flex-shrink:0;justify-content:center;margin-bottom:10px}.button_dialpad_digit{display:block;width:50px;height:50px;display:flex;column-gap:20px;margin:0 10px;align-items:center;justify-content:center;line-height:normal;border-radius:50%;outline:none;border:none;font-size:22px;font-weight:700;color:var(--sd-text-color-dark);background:var(--sd-background-color);-webkit-transition-duration:.3s;transition-duration:.3s;box-shadow:#0000001a 0 0 5px,#0000001a 0 0 1px;border:1px solid #ebebeb}.button_dialpad_digit:hover{background:#000;color:var(--sd-text-color-inverse)}.button_call_green{background:#6c0;color:var(--sd-text-color-inverse);width:60px;height:60px;-webkit-transition-duration:.3s;transition-duration:.3s}.button_call_green:hover{background:#5ab400;color:var(--sd-text-color-inverse);width:60px;height:60px}.button_call_red{background:#e0261f;color:var(--sd-text-color-inverse);width:60px;height:60px;-webkit-transition-duration:.3s;transition-duration:.3s;z-index:9999}.button_call_red:hover{background:#cf211a}.button_call_disabled{background:#eee;color:var(--sd-text-color-light);width:60px;height:60px;-webkit-transition-duration:.3s;transition-duration:.3s}.container_dialpad_buttons{width:100%;display:flex;justify-content:center;padding-top:0;margin-bottom:6px}.container_call_header{width:100%;position:absolute;top:0;left:0;right:0;height:221px;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);z-index:99;background:var(--sd-background-color)}.container_call_header_inner{width:100%;margin:0;padding:10px 15px 15px;position:relative}.container_call_info{display:flex;justify-content:center;font-size:14px;font-weight:600;width:100%;color:var(--sd-text-color)}.container_call_info_blinker{display:flex;justify-content:center;font-size:14px;font-weight:600;width:100%;color:red;animation:blinker 1s linear infinite}@keyframes blinker{26%{opacity:0}}.container_call_ani{width:100%;margin:0;padding:0}.container_call_ani_number{text-align:center;font-size:20px;font-weight:600;padding-top:26px}.container_call_ani_name{text-align:center;font-size:13px;font-weight:600;padding-top:2px}.container_call_ani_image{margin:0;padding:24px 0 0;width:100%}.container_call_ani_image_inner{display:flex;align-items:center;flex:0 0 auto;padding:0;width:85px;height:85px;position:relative;margin:0 auto;border-radius:100%}.container_call_content{width:100%;position:absolute;top:221px;left:0;right:0;height:calc(100% - 221px);font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);padding-top:20px;display:flex;flex-basis:auto;flex-direction:column;align-items:center;justify-content:center}.container_call_dnis{width:100%;text-align:center;padding-bottom:16px}.container_call_dnis span{display:inline-block;border-radius:26px;border:1px solid #e5e5e5;padding:5px 16px}.container_call_options{width:100%;display:flex;justify-content:center;margin-bottom:16px;flex-direction:column}.button_call_option{display:block;width:80px;height:60px;display:flex;flex-direction:column;flex-shrink:0;column-gap:0px;margin:0 10px;align-items:center;justify-content:center;line-height:normal;outline:none;border:none;font-size:12px;font-weight:600;color:var(--sd-text-color-dark);background:none;-webkit-transition-duration:.3s;transition-duration:.3s;position:relative}.button_call_option .button_icon{display:flex;justify-content:center;align-items:center;height:40px}.button_call_option .button_text{display:flex;justify-content:center;color:var(--sd-text-color)}.button_active{color:#67cc02}.button_elevated{position:relative;z-index:9999}.button_disabled{color:gray;cursor:not-allowed;pointer-events:none;opacity:.6}.button_call_option[disabled],.button_disabled{opacity:.5;pointer-events:none;display:inline-flex}.container_popup_dialpad{position:absolute;z-index:999;left:0;right:0;bottom:0}.container_popup_dialpad_inner{background:#f1f1f1;background:linear-gradient(180deg,#f1f1f1 44%,#fff);margin:0 auto;padding:10px 15px 20px;border-radius:8px;width:88%;position:relative;height:475px}.container_popup_dialpad .button_close{position:absolute;right:-15px;top:-17px;z-index:9}.container_popup_dialpad .button_close span{width:32px;height:32px;background:var(--sd-background-color);display:flex;align-items:center;justify-content:center;border-radius:50%;cursor:pointer;box-shadow:#0000001a 0 0 5px,#0000001a 0 0 1px;border:1px solid #ebebeb}.container_popup_dialpad .button_close span:hover{background:#f1f1f1;color:var(--sd-text-color-dark)}.container_popup_dialpad .button_close span .fa-xmark{font-size:1.4em;font-weight:400}.container_dtmf_input{width:100%;margin:0;padding:0 0 10px;position:relative}.container_dtmf_input input{width:100%;display:flex;height:38px;outline:none;text-align:center;align-items:center;border:1px solid #f1f1f1;font-size:26px;font-weight:400;color:transparent;text-shadow:0 0 0 #000;padding:0;background:#f1f1f1}.container_active_call_header{width:100%;position:relative;display:flex;flex-direction:row;align-items:center;padding:10px;border:1px solid var(--sd-border-color-light);border-radius:12px;overflow:hidden}.container_active_call_avatar{display:flex}@keyframes play1{0%{transform:scale(1)}15%{box-shadow:0 0 0 2px #57b84666}25%{box-shadow:0 0 0 3px #98d48266,0 0 0 20px #fff3}25%{box-shadow:0 0 0 5px #bde4a966,0 0 0 30px #fff3}}.container_active_call_avatar_inner{margin:0 auto;padding:0;width:50px;height:50px;background:#dfe6e8;color:var(--sd-text-color-dark);position:relative;animation:play1 2s ease infinite;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;border-radius:100%;overflow:hidden;display:flex;justify-content:center;align-items:center}.container_active_call_info{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1}.container_active_call_info_inner{display:flex;flex-basis:1;flex-direction:column;padding:0 0 0 10px}.container_active_call_duration{display:flex;justify-content:center;font-size:14px;font-weight:600;width:100%;color:var(--sd-text-color);margin-bottom:10px}.container_active_call_number{font-size:13px;margin-bottom:2px}.container_active_call_details{font-size:13px;color:#6c0;padding-top:2px}.container_active_call_details_inner{display:flex;margin:0;padding:0;justify-content:left}.container_active_call_icon_grey{display:flex;width:18px;height:16px;justify-content:center;align-items:center;color:var(--sd-text-color-medium)}.container_active_call_icon_green{display:flex;width:18px;height:16px;justify-content:center;align-items:center;color:#6c0}.container_active_call_status_green{display:flex;justify-content:center;align-items:center;color:#6c0;padding-left:6px;font-size:12px}.container_active_call_status_grey{display:flex;justify-content:center;align-items:center;color:var(--sd-text-color-medium);padding-left:6px;font-size:12px}.container_active_call_options{display:flex;flex-direction:row}.container_active_call_options .button_active_call_options{display:flex;flex-basis:auto;justify-content:right}.container_active_call_options .button_active_call_options_highlighted{font-size:16px;color:#29abe0}.container_active_call_options_button{display:flex;border-radius:26px;border:none;padding:0;font-size:11px;color:var(--sd-text-color);width:32px;height:32px;justify-content:center;align-items:center}.container_active_call_options_button:hover{background:#f1f1f1}.container_conference_contact_list{position:relative;width:100%;background:#f7f7f7;border-top:1px solid #eee;border-bottom:1px solid #eee;height:149px;padding:0;margin-top:16px}.container_swap_merge_contact_list{position:relative;width:100%;background:var(--sd-background-color);height:149px;padding:0;margin-top:32px}.container_conference_contact_list_inner{margin:0;padding:0;position:relative;width:100%;height:100%}.container_conference_contact_list_scrollbox{padding:12px 15px}.container_conference_contact_item{width:100%;position:relative;display:flex;flex-direction:row;align-items:center;padding:0 10px;overflow:hidden;cursor:pointer}.button_disconnect_call{display:block;width:42px;height:42px;display:flex;margin:0;align-items:center;justify-content:center;line-height:normal;border-radius:50%;outline:none;border:none;color:#e0261f;background:#f7f7f7;-webkit-transition-duration:.3s;transition-duration:.3s}.button_disconnect_call:hover{color:var(--sd-text-color-inverse);background:#e0261f;-webkit-transition-duration:.3s;transition-duration:.3s}.container_separator{height:1px;width:100%;background:#ededed;margin:11px 0}.container_transfer_call{position:absolute;z-index:99999;left:0;right:0;bottom:-51px;width:100%;background:var(--sd-background-color)}.container_transfer_call_inner{background:var(--sd-background-color);box-shadow:#11111a1a 0 4px 16px,#11111a0d 0 8px 32px;padding:20px 15px 10px;border-radius:0;width:100%;position:relative;height:596px;overflow:hidden}.container_transfer_call_inner h2{font-family:var(--sd-text-font-family);font-size:20px;font-weight:700;color:var(--sd-text-color-dark);letter-spacing:-1px;padding:0;line-height:normal;text-transform:capitalize;margin-bottom:15px}.container_button_close{position:absolute;right:4px;top:4px}.container_button_close span{width:36px;height:36px;background:var(--sd-background-color);display:flex;align-items:center;justify-content:center;border-radius:50%;cursor:pointer}.container_button_close span:hover{background:var(--sd-background-color)}.container_button_close .fa-xmark{font-size:1.6em;font-weight:400;color:var(--sd-text-color-light)}.container_button_close span:hover .fa-xmark:hover{color:var(--sd-text-color-dark)}.container_transfer_call_content{margin:0;padding:5px 0 0;width:100%;background:var(--sd-background-color);min-height:485px}.container_transfer_call_content h3{font-family:var(--sd-text-font-family);font-size:14px;font-weight:700;color:var(--sd-text-color);letter-spacing:-.26px;padding:8px 0 0;line-height:normal;text-transform:capitalize;margin-bottom:15px}.container_transfer_call_content h3 span{color:var(--sd-text-color-dark)}.container_transfer_call_details{width:100%;margin:0;padding:10px 15px 69px;position:relative}.container_transfer_tab_buttons{display:flex;gap:10px;align-items:center;margin-bottom:15px}.button_transfer_tab{padding:10px;border:none;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);background-color:var(--sd-border-color-light);cursor:pointer;width:105px;border-radius:28px;outline:none}.button_transfer_tab.active{background-color:var(--sd-app-color);color:#fff}.container_transfer_tab_content{margin:0;padding:0;width:100%}.container_transfer_internal_search{margin:0 0 15px;padding:0;width:100%}.container_transfer_internal_search input{padding:0 16px;width:100%;outline:none;display:block;border:1px solid var(--sd-border-color-dark);color:var(--sd-text-color-medium);font-size:12px;letter-spacing:-.25px;font-family:var(--sd-text-font-family);background:var(--sd-background-color);font-style:italic;font-weight:400;position:relative;border-radius:27px;height:48px}.container_transfer_contact_list{width:100%;margin:0;padding:0;position:relative;height:336px}.container_transfer_contact_list_inner{width:100%;position:relative;height:100%}.container_transfer_internal_contact_list{position:absolute;width:100%;left:0;right:0;background:var(--sd-background-color);height:332px}.container_transfer_disconnect{width:100%;display:flex;justify-content:center;padding-top:3px;margin-bottom:6px}.container_avaya_footer{width:100%;padding:0;background:#f7f7f7;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color-medium);position:relative;display:flex;height:51px;justify-content:center;align-items:center;border-top:1px solid var(--sd-border-color-light);-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:999;position:absolute;bottom:0;left:0}.margin_bottom_16{margin-bottom:16px}.margin_bottom_nt{margin-bottom:10px}.padding_top_nt{padding-top:7px}.shadow_st{box-shadow:#00000026 0 2px 8px}.call_animation{animation:play 2s ease infinite;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.mini-call-switcher{display:flex;justify-content:center;margin-top:10px}.mini-call{padding:6px 12px;margin:0 6px;background:#eaeaea;border-radius:8px;cursor:pointer;font-size:14px}.mini-call.active{background-color:#c6f6d5;font-weight:700}.history-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;z-index:999}.history-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--sd-background-color);padding:20px;z-index:1000;box-shadow:0 2px 10px #0000004d;border-radius:5px;width:600px;max-height:80vh;overflow-y:auto}.history-content{position:relative}.history-content h3{margin-top:0}.close-btn{background:transparent;border:none;font-size:1.5rem;position:absolute;top:0;right:0;cursor:pointer}.history-content table{width:100%;border-collapse:collapse;margin-top:1rem}.history-content th,.history-content td{padding:.5rem;border:1px solid var(--sd-text-color-light)}@keyframes play{0%{transform:scale(1)}15%{box-shadow:0 0 0 4px #57b84680}25%{box-shadow:0 0 0 5px #98d48266,0 0 0 20px #fff3}25%{box-shadow:0 0 0 10px #c2e5b180,0 0 0 30px #fff3}}::-webkit-input-placeholder{color:#ddd}::-moz-placeholder{color:var(--sd-text-color-dark)}:-ms-input-placeholder{color:var(--sd-text-color-dark)}:-moz-placeholder{color:var(--sd-text-color-dark)}.slide_st{left:-100px;-webkit-animation:slide .5s forwards;-webkit-animation-delay:2s;animation:slide .5s forwards;animation-delay:0s}@-webkit-keyframes slide{to{left:0}}@keyframes slide{to{left:0}}.tabs_sd{width:100%;position:absolute;bottom:0;left:0;right:0;display:flex;height:51px;border-top:1px solid var(--sd-border-color-light);background:#f9f9f9;z-index:999999}.tab_heading_btn{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1;justify-content:center;min-width:0;align-items:center;padding:0;border:none;cursor:pointer;width:25%;font-family:var(--sd-text-font-family);font-size:11px;font-weight:600;line-height:normal;color:var(--sd-text-color-medium);background:none;transition:background-color .3s linear;-webkit-transition:background-color .3s linear;-o-transition:background-color .3s linear;-ms-transition:background-color .3s linear}.nav_icon{display:flex;align-items:center;justify-content:center;height:22px;margin-bottom:1px}.nav_heading_sd{display:flex;align-items:center}.tab_heading_btn.active{color:var(--sd-app-color);background:url(data:image/gif;base64,R0lGODlhNwACAIAAAP9mMwAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgNzkuMTQ2Mjg5OTc3NywgMjAyMy8wNi8yNS0yMzo1NzoxNCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI1LjAgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODA1QUIyRjkwRDVFMTFGMDg4RUU4ODJGQTgxQUNDOEMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODA1QUIyRkEwRDVFMTFGMDg4RUU4ODJGQTgxQUNDOEMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MDVBQjJGNzBENUUxMUYwODhFRTg4MkZBODFBQ0M4QyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4MDVBQjJGODBENUUxMUYwODhFRTg4MkZBODFBQ0M4QyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAAAAAAALAAAAAA3AAIAAAIJhI+py+0Po0wFADs=) top center no-repeat}.tab-content_sd{width:100%;height:100%;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;line-height:normal;background:var(--sd-background-color);-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative}.container_transfer_fav_list{width:100%;margin:0;padding:0;position:relative;height:376px}.outer_container_swap_merge{width:100%;margin:0;padding:0}.container_swap_merge_item{width:100%;position:relative;display:flex;flex-direction:row;height:72px;border-radius:8px;overflow:hidden}.container_recent_item_image{display:flex;align-items:center}.container_swap_merge_item_image_inner{margin:0 auto;padding:0;width:50px;height:50px;position:relative;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--sd-text-font-family);font-size:26px;color:var(--sd-text-color-inverse);font-weight:400}.container_recent_item_left{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1;justify-content:center;min-width:0;position:relative;border-top:1px solid #e9edef}.container_recent_item_left_inner{display:flex;flex-basis:1;flex-direction:column;padding:0 0 0 10px}.container_recent_item_left .contact_field{font-size:13px;color:var(--sd-text-color-dark);margin-bottom:2px}.onhold_st{font-family:var(--sd-text-font-family);font-size:12px;color:var(--sd-text-color-medium);font-weight:600}.container_recent_item_right{display:flex;flex-direction:row;position:absolute;right:0}.container_recent_item_right .right_field{display:flex;flex-basis:auto;justify-content:right}.button_swap_merge{display:block;width:32px;height:45px;display:flex;flex-direction:column;flex-shrink:0;column-gap:0px;margin:0 0 0 28px;align-items:center;justify-content:center;line-height:normal;outline:none;border:none;font-size:12px;font-weight:600;color:var(--sd-text-color-dark);background:none;-webkit-transition-duration:.3s;transition-duration:.3s;position:relative;pointer-events:all;cursor:pointer}.button_swap_merge .button_icon{display:flex;justify-content:center;align-items:center;height:40px}.button_swap_merge .button_text{display:flex;justify-content:center;color:var(--sd-text-color-dark)}@media only screen and (max-width: 767px){.previewcontent{width:95%!important}.bgSecWrap .numberArrow{left:0!important;top:-20px!important}.transcription-popup{position:fixed;bottom:20px;right:20px;width:320px;max-height:250px;background:#fff;border-radius:10px;box-shadow:0 4px 12px #0003;padding:12px;z-index:1000;display:flex;flex-direction:column}.transcription-header{display:flex;justify-content:space-between;align-items:center;font-weight:700;font-size:14px;margin-bottom:8px}.transcription-body{overflow-y:auto;font-size:13px;line-height:1.4;color:#333}.close-btn{border:none;background:transparent;font-size:18px;cursor:pointer}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: i5.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "component", type: CallHistoryComponent, selector: "app-call-history", inputs: ["mode"], outputs: ["makeCallEv", "transferEv"] }, { kind: "component", type: DialpadComponent, selector: "app-dialpad", inputs: ["contacts"], outputs: ["makeCallEv"] }, { kind: "component", type: DeviceSelectorComponent, selector: "app-device-selector", inputs: ["selectedAudioInputId", "selectedAudioOutputId"], outputs: ["change"] }], animations: [
2794
+ trigger('slideInOut', [
2795
+ transition(':enter', [
2796
+ style({ transform: 'translateX(100%)', opacity: 0 }),
2797
+ animate('300ms ease-in', style({ transform: 'translateX(0)', opacity: 1 })),
2798
+ ]),
2799
+ transition(':leave', [
2800
+ animate('300ms ease-out', style({ transform: 'translateX(-100%)', opacity: 0 })),
2801
+ ]),
2802
+ ]),
2803
+ ] });
2804
+ }
2805
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AvayaIPOWidgetComponent, decorators: [{
2806
+ type: Component,
2807
+ args: [{ selector: 'snugdesk-avaya-ipo-widget', animations: [
2808
+ trigger('slideInOut', [
2809
+ transition(':enter', [
2810
+ style({ transform: 'translateX(100%)', opacity: 0 }),
2811
+ animate('300ms ease-in', style({ transform: 'translateX(0)', opacity: 1 })),
2812
+ ]),
2813
+ transition(':leave', [
2814
+ animate('300ms ease-out', style({ transform: 'translateX(-100%)', opacity: 0 })),
2815
+ ]),
2816
+ ]),
2817
+ ], standalone: false, template: "@if (isReconnectingInProgress || isFailoverInProgress || isFailbackInProgress) {\n <div class=\"container_connection_status_overlay\">\n <div class=\"container_connection_status\">\n <i class=\"fa-solid fa-circle-dot\"></i>\n\n @if (isReconnectingInProgress) {\n <span>Reconnecting to the server...</span>\n }\n\n @if (isFailoverInProgress) {\n <span>Failover in progress...</span>\n }\n\n @if (isFailbackInProgress) {\n <span>Failback in progress...</span>\n }\n\n <div class=\"container_connection_status_loader\">\n <div class=\"container_three_dot_loader\">\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n </div>\n </div>\n </div>\n </div>\n}\n\n\n\n@if (showLoginForm) {\n <!-- Login Form -->\n <div class=\"container_avaya_login\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n <div class=\"container_avaya_login_inner\">\n <div class=\"container_avaya_login_content\">\n\n <div class=\"container_avaya_logo\">\n <div class=\"container_avaya_logo_image\"></div>\n <h3>IP Office<span>TM</span></h3>\n </div>\n\n @if (hasAvayaSocketError || hasAvayaLoginError || hasAvayaLoginConflictError || hasAvayaDeviceError) {\n <div class=\"container_avaya_login_error\">\n <p class=\"message_label error_message\">\n @if (hasAvayaSocketError) {\n We're having trouble connecting to the server\n }\n @if (hasAvayaLoginError) {\n Invalid extension or password!\n }\n @if (hasAvayaLoginConflictError) {\n Another user is logged in with this extension\n }\n @if (hasAvayaDeviceError) {\n We're having trouble accessing your device\n }\n </p>\n </div>\n }\n\n <div class=\"container_avaya_login_form\">\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"onLogin()\">\n\n <!-- Extension -->\n <div class=\"form_field\">\n <mat-form-field class=\"properties_form_field mat-form-field-outline\">\n <mat-label class=\"mdc-floating-disabled\">Extension</mat-label>\n <input matInput formControlName=\"ipoExtensionNo\" autocomplete=\"ipoExtensionNo\"\n (keypress)=\"restrictNumeric($event)\" />\n\n @if (loginForm.controls['ipoExtensionNo'].invalid && loginForm.controls['ipoExtensionNo'].touched) {\n <mat-error>\n @if (loginForm.controls['ipoExtensionNo'].errors?.['required']) {\n <small>Extension is required.</small>\n }\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- Password -->\n <div class=\"form_field\">\n <mat-form-field class=\"properties_form_field mat-form-field-outline\">\n <mat-label class=\"mdc-floating-disabled\">Password</mat-label>\n <input matInput formControlName=\"ipoPassword\" autocomplete=\"avaya-ipo-password\"\n (keypress)=\"restrictNumeric($event)\" [type]=\"showLoginPassword ? 'text' : 'password'\" />\n\n <mat-icon matSuffix (click)=\"showLoginPassword = !showLoginPassword && !hasAvayaSocketError\">\n @if (showLoginPassword) {\n <span class=\"container_icon_eye\">\n <i class=\"fa-solid fa-eye\"></i>\n </span>\n } @else {\n <span class=\"container_icon_eye\">\n <i class=\"fa-solid fa-eye-slash\"></i>\n </span>\n }\n </mat-icon>\n\n @if (loginForm.controls['ipoPassword'].invalid && loginForm.controls['ipoPassword'].touched) {\n <mat-error>\n @if (loginForm.controls['ipoPassword'].errors?.['required']) {\n <small>Password is required.</small>\n }\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- Login button -->\n <div class=\"avaya_login_button_area\">\n <button type=\"submit\" class=\"button_submit_login\"\n [ngClass]=\"{ 'button_submit_login_loader': showLoginLoader }\"\n [disabled]=\"showLoginLoader\">\n @if (showLoginLoader) {\n <span class=\"button_submit_loader\"></span>\n } @else {\n <span>Login</span>\n }\n </button>\n </div>\n\n </form>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n} @else {\n <!-- Softphone UI -->\n <ng-container *ngTemplateOutlet=\"showSoftphoneDiv\"></ng-container>\n}\n\n<!-- Footer (always visible) -->\n<div class=\"container_avaya_footer\">&copy; 2025 SNUG Technologies Pvt. Ltd.\n\n\n\n</div>\n\n\n\n\n\n<ng-template #showSoftphoneDiv>\n\n@if (!showActiveCall) {\n <div class=\"container_avaya_softphone_inner\">\n <!-- ------------------- Keypad work start ---------- -->\n @if (bottomActiveTab === 'keypad_sd') {\n <div class=\"tab-content_sd\">\n <div class=\"container_dialpad_header\">\n <div class=\"container_dialpad_header_inner2\">\n <div class=\"container_avaya_extension\">\n <div class=\"container_avaya_extension_left\">\n <div class=\"extension_label\">Extension</div>\n <div class=\"extension_number\">{{ extensionNumber }}</div>\n </div>\n <div class=\"container_avaya_extension_right\">\n <button title=\"Sign out\" (click)=\"onLogout()\">\n <svg width=\"16px\" fill=\"currentColor\" viewBox=\"0 0 512 512\">\n <path\n d=\"M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"dialpad_container_sd\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n <app-dialpad [contacts]=\"contacts\" (makeCallEv)=\"makeCall($event)\"></app-dialpad>\n <!-- to do list -->\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- ------------------- Keypad work end ---------- -->\n\n @if (bottomActiveTab === 'recent_sd') {\n <div class=\"tab-content_sd\">\n <app-call-history (makeCallEv)=\"makeCallFromContact($event)\"></app-call-history>\n </div>\n }\n\n @if (bottomActiveTab === 'settings_sd') {\n <div class=\"tab-content_sd\">\n <app-device-selector (change)=\"handleDeviceSelection($event)\"></app-device-selector>\n </div>\n }\n </div>\n\n <div class=\"tabs_sd\">\n <button class=\"tab_heading_btn\" (click)=\"bottomSelectTab('recent_sd')\"\n [class.active]=\"bottomActiveTab === 'recent_sd'\">\n <span class=\"nav_icon\">\n <svg width=\"19px\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\"\n d=\"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\" />\n </svg>\n </span>\n <span class=\"nav_heading_sd\">Recent</span>\n </button>\n\n <button class=\"tab_heading_btn\" (click)=\"bottomSelectTab('keypad_sd')\"\n [class.active]=\"bottomActiveTab === 'keypad_sd'\">\n <span class=\"nav_icon\">\n <svg width=\"20px\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M256,400a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M256,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M256,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M256,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M384,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M384,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M384,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M128,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M128,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n <path fill=\"currentColor\" d=\"M128,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\"></path>\n </svg>\n </span>\n <span class=\"nav_heading_sd\">Keypad</span>\n </button>\n\n <button class=\"tab_heading_btn\" (click)=\"bottomSelectTab('settings_sd')\"\n [class.active]=\"bottomActiveTab === 'settings_sd'\">\n <span class=\"nav_icon\">\n <svg width=\"19px\" viewBox=\"-0.03 0 16.079 16.079\">\n <g>\n <path fill=\"currentColor\"\n d=\"M8.182 1.083a6.99 6.99 0 0 0-6.248 3.493c-1.929 3.342-.776 7.629 2.57 9.562 3.346 1.934 7.634.792 9.562-2.55 1.929-3.343.776-7.634-2.57-9.567a6.98 6.98 0 0 0-3.314-.938zM8 2.08a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6z\" />\n <path fill=\"currentColor\"\n d=\"M9.322 0L6.69.393v1.354a6.49 6.477 43.146 0 1 2.632.005V0zM3.937 1.19L1.93 2.897l.988 1.177a6.49 6.477 43.146 0 1 2.017-1.69zm8.128.013l-.993 1.184a6.49 6.477 43.146 0 1 .17.09 6.49 6.477 43.146 0 1 1.845 1.603l1.006-1.197zM.455 5.42l-.44 2.596 1.515.267a6.49 6.477 43.146 0 1 .455-2.593zm15.086.003l-1.523.269a6.49 6.477 43.146 0 1 .464 2.59l1.533-.27zM1.858 10.118l-1.351.78 1.33 2.271 1.339-.772a6.49 6.477 43.146 0 1-1.317-2.28zm12.301.003a6.49 6.477 43.146 0 1-.534 1.215 6.49 6.477 43.146 0 1-.774 1.069l1.338.773 1.302-2.288zm-9.557 3.471l-.534 1.47 2.48.884.525-1.446a6.49 6.477 43.146 0 1-2.303-.8 6.49 6.477 43.146 0 1-.168-.108zm6.814.016a6.49 6.477 43.146 0 1-2.475.897l.53 1.457 2.468-.917z\" />\n <path fill=\"currentColor\"\n d=\"M7.648 3.093a4.989 4.989 0 0 0-3.982 2.483 5.013 5.013 0 0 0 1.836 6.834 5.002 5.002 0 0 0 6.83-1.827 5.01 5.01 0 0 0-1.836-6.832 4.976 4.976 0 0 0-2.848-.658zM8 4.08a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4z\" />\n </g>\n </svg>\n </span>\n <span class=\"nav_heading_sd\">Preferences</span>\n </button>\n </div>\n} @else {\n <ng-container *ngTemplateOutlet=\"showActiveCallDiv\"></ng-container>\n}\n\n\n<!-- ////////////// -->\n\n <!-- Active Call Div -->\n \n <ng-template #showActiveCallDiv>\n\n\n @if (showTranscriptionPopup) {\n <div class=\"transcription-popup\">\n <div class=\"transcription-header\">\n <span>Live Transcription</span>\n <button class=\"close-btn\" (click)=\"showTranscriptionPopup = false\">\u00D7</button>\n </div>\n <div class=\"transcription-body\">\n <p>{{ transcriptText }}</p>\n </div>\n </div>\n}\n\n\n\n\n\n\n\n<div class=\"container_call\">\n <div class=\"container_call_header\">\n <div class=\"container_call_header_inner\">\n\n @if (!conferenceParticipants || conferenceParticipants.length <= 1) {\n <!-- ------------ add call list swap and merge area start ---------------- -->\n @if (activeCalls.length > 1) {\n <div class=\"container_swap_merge_list\">\n <div class=\"container_conference_contact_list_inner\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n <div class=\"outer_container_swap_merge\">\n @for (call of activeCalls; track call.phoneNumber; let i = $index) {\n @if (i !== currentActiveCallIndex) {\n <div class=\"container_swap_merge_item\"\n (click)=\"swapLinesToIndex(i)\"\n [ngClass]=\"{ 'active-call': i === currentActiveCallIndex, 'other-call': i !== currentActiveCallIndex }\">\n\n <!-- Avatar -->\n <div class=\"container_recent_item_image\">\n <div class=\"container_swap_merge_item_image_inner\">\n <!-- svg avatar here -->\n </div>\n </div>\n\n <!-- Call Info -->\n <div class=\"container_recent_item_left\">\n <div class=\"container_recent_item_left_inner\">\n <div class=\"contact_field\">{{ call.phoneNumber }}</div>\n @if (call.isOnHold) {\n <div class=\"onhold_st\">On hold</div>\n }\n </div>\n\n <!-- Action Buttons -->\n <div class=\"container_recent_item_right\">\n <div class=\"right_field\">\n <button class=\"button_swap_merge\">\n <div class=\"button_icon\">\n <!-- merge svg -->\n </div>\n <div class=\"button_text\">Merge</div>\n </button>\n </div>\n <div class=\"right_field\">\n <button class=\"button_swap_merge\">\n <div class=\"button_icon\">\n <!-- swap svg -->\n </div>\n <div class=\"button_text\">Swap</div>\n </button>\n </div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n <!-- ------------ add call list swap and merge area end ---------------- -->\n\n @if (isCalling) {\n <div class=\"container_call_info\">Calling...</div>\n } @else {\n @if (isactiveCall) {\n <div class=\"container_call_info\">\n {{ formatTime(activeCalls[currentActiveCallIndex].duration) }}\n </div>\n }\n @if (showCallDisconnected) {\n <div class=\"container_call_info_blinker\">\n <!-- disconnected svg -->\n {{ this.istransfer ? 'Call Transferred' : 'Call ended' }}\n </div>\n }\n }\n\n <div class=\"container_call_ani\">\n @if (isCalling && displayCallingNumber && activeCalls.length === 0) {\n <!-- show what the user dialed while call is spinning up -->\n <div class=\"container_call_ani_number\">\n {{ displayCallingNumber }}\n </div>} \n @else if (activeCalls.length > 0) {\n <div class=\"container_call_ani_number\">\n {{ activeCalls[currentActiveCallIndex].lookupPhoneNumber.country?.flag }}\n {{ activeCalls[currentActiveCallIndex].phoneNumber }}\n \n </div>\n <div class=\"container_call_ani_name\">\n {{ activeCalls[currentActiveCallIndex].lookupPhoneNumber.phoneNumber?.location }}\n </div>\n } @else {\n <div class=\"container_call_ani_number\">\n {{ lastDisconnectedCall?.lookupPhoneNumber?.country?.flag }}\n {{ lastDisconnectedCall?.phoneNumber }}\n </div>\n <div class=\"container_call_ani_name\">\n {{ lastDisconnectedCall?.lookupPhoneNumber?.phoneNumber?.location }}\n </div>\n }\n\n <div class=\"container_call_ani_image\">\n <div class=\"container_call_ani_image_inner\" [ngClass]=\"{ 'call_animation': isactiveCall }\">\n <!-- big avatar svg -->\n </div>\n </div>\n </div>\n\n } @else {\n <!-- Conference Call Placeholder -->\n <!-- @if block can render conference call template here -->\n }\n\n </div>\n </div>\n\n <div class=\"container_call_content\">\n <div class=\"container_call_dnis\">\n <span>Ext. {{ extensionNumber }}</span>\n </div>\n\n <div class=\"container_call_options\">\n <div class=\"container_dialpad_row margin_bottom_16\">\n <button class=\"button_call_option button_elevated\"\n [ngClass]=\"{ 'button_disabled': !isactiveCall && activeCalls.length < 4 }\"\n (click)=\"onAddCall()\"\n [disabled]=\"!isactiveCall\">\n <div class=\"button_icon\"> \n <svg fill=\"#000000\" width=\"20\" viewBox=\"0 0 52 52\" enable-background=\"new 0 0 52 52\"\n xml:space=\"preserve\">\n <path fill=\"currentColor\" d=\"M30,29h16.5c0.8,0,1.5-0.7,1.5-1.5v-3c0-0.8-0.7-1.5-1.5-1.5H30c-0.6,0-1-0.4-1-1V5.5C29,4.7,28.3,4,27.5,4\n h-3C23.7,4,23,4.7,23,5.5V22c0,0.6-0.4,1-1,1H5.5C4.7,23,4,23.7,4,24.5v3C4,28.3,4.7,29,5.5,29H22c0.6,0,1,0.4,1,1v16.5\n c0,0.8,0.7,1.5,1.5,1.5h3c0.8,0,1.5-0.7,1.5-1.5V30C29,29.4,29.4,29,30,29z\" />\n </svg>\n </div>\n <div class=\"button_text\">Add</div>\n </button>\n\n @if (activeCalls.length > 0) {\n <button class=\"button_call_option\" (click)=\"onAddCall()\" type=\"button\">\n <div class=\"button_icon\"> <svg width=\"20\" viewBox=\"0 0 52 52\" aria-hidden=\"true\">\n <path fill=\"currentColor\"\n d=\"M30,29h16.5c0.8,0,1.5-0.7,1.5-1.5v-3c0-0.8-0.7-1.5-1.5-1.5H30c-0.6,0-1-0.4-1-1V5.5C29,4.7,28.3,4,27.5,4h-3\n C23.7,4,23,4.7,23,5.5V22c0,0.6-0.4,1-1,1H5.5C4.7,23,4,23.7,4,24.5v3C4,28.3,4.7,29,5.5,29H22c0.6,0,1,0.4,1,1v16.5\n c0,0.8,0.7,1.5,1.5,1.5h3c0.8,0,1.5-0.7,1.5-1.5V30C29,29.4,29.4,29,30,29z\"/>\n </svg></div>\n <div class=\"button_text\">Conference</div>\n </button>\n }\n\n @if (!isRecording) {\n <button class=\"button_call_option button_elevated\"\n [ngClass]=\"{ 'button_disabled': !isactiveCall }\"\n [disabled]=\"!isactiveCall\">\n <div class=\"button_icon\"> <svg width=\"22px\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path fill=\"currentColor\" d=\"M3 10L3 14M7.5 6L7.5 18M12 3V21M16.5 6V18M21 10V14\" stroke=\"#000000\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg></div>\n <div class=\"button_text\">Record</div>\n </button>\n } @else {\n <button class=\"button_call_option button_elevated\"\n [ngClass]=\"{ 'button_disabled': !isactiveCall }\"\n [disabled]=\"!isactiveCall\">\n <div class=\"button_icon\"><svg width=\"22px\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path fill=\"currentColor\" d=\"M3 10L3 14M7.5 6L7.5 18M12 3V21M16.5 6V18M21 10V14\" stroke=\"#000000\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg></div>\n <div class=\"button_text\">Stop</div>\n </button>\n }\n\n <button class=\"button_call_option button_elevated\"\n [ngClass]=\"{ 'button_disabled': !isactiveCall }\"\n [disabled]=\"!isactiveCall\"\n (click)=\"isCallTransferOpen = !isCallTransferOpen\">\n <div class=\"button_icon\"> <svg width=\"25px\" height=\"25px\" viewBox=\"0 0 48 48\" version=\"1\" enable-background=\"new 0 0 48 48\">\n <path fill=\"currentColor\"\n d=\"M39.2,8.4l-1.8,1.8c-6.3,6.5-5.4,22,0,27.6l1.8,1.8c0.5,0.5,1.3,0.5,1.8,0l3.6-3.7c0.5-0.5,0.5-1.3,0-1.8 l-3.4-3.4h-4.8c-1.3-1.3-1.3-12.1,0-13.4h4.8l3.3-3.4c0.5-0.5,0.5-1.3,0-1.8L41,8.4C40.5,7.9,39.7,7.9,39.2,8.4z\" />\n <path fill=\"currentColor\"\n d=\"M11.2,8.4l-1.8,1.8c-6.3,6.5-5.4,22,0,27.6l1.8,1.8c0.5,0.5,1.3,0.5,1.8,0l3.6-3.7c0.5-0.5,0.5-1.3,0-1.8 l-3.4-3.4H8.5c-1.3-1.3-1.3-12.1,0-13.4h4.8l3.3-3.4c0.5-0.5,0.5-1.3,0-1.8L13,8.4C12.5,7.9,11.7,7.9,11.2,8.4z\" />\n <g fill=\"currentColor\">\n <polygon points=\"25.3,18.6 30.7,24 25.3,29.4\" />\n <rect x=\"16\" y=\"22\" width=\"11\" height=\"4\" />\n </g>\n </svg></div>\n <div class=\"button_text\">Transfer</div>\n </button>\n\n @if (isCallTransferOpen) {\n <ng-container *ngTemplateOutlet=\"callTransferTemplate\"></ng-container>\n }\n </div>\n\n <!-- Mute / Unmute -->\n <div class=\"container_dialpad_row\">\n @if (activeCalls.length > 0 && !this.activeCalls[this.currentActiveCallIndex].isMuted) {\n <button class=\"button_call_option button_elevated\"\n (click)=\"toggleMute()\"\n [ngClass]=\"{ 'button_disabled': showCallDisconnected }\">\n <div class=\"button_icon\"> <svg viewBox=\"0 0 384 512\" width=\"16\">\n <path fill=\"currentColor\"\n d=\"M192 0C139 0 96 43 96 96l0 160c0 53 43 96 96 96s96-43 96-96l0-160c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c85.8-11.7 152-85.3 152-174.4l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-40z\" />\n </svg></div>\n <div class=\"button_text\">Mute</div>\n </button>\n } @else if (activeCalls.length > 0 && this.activeCalls[this.currentActiveCallIndex].isMuted) {\n <button class=\"button_call_option button_active button_elevated\" (click)=\"toggleMute()\">\n <div class=\"button_icon\"> <svg width=\"26\" viewBox=\"0 0 640 512\">\n <path fill=\"currentColor\"\n d=\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c15.2-26 23.9-56.3 23.9-88.7l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 21.2-5.1 41.1-14.2 58.7L416 300.8 416 96c0-53-43-96-96-96s-96 43-96 96l0 54.3L38.8 5.1zM344 430.4c20.4-2.8 39.7-9.1 57.3-18.2l-43.1-33.9C346.1 382 333.3 384 320 384c-70.7 0-128-57.3-128-128l0-8.7L144.7 210c-.5 1.9-.7 3.9-.7 6l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6z\" />\n </svg></div>\n <div class=\"button_text\">Unmute</div>\n </button>\n }\n\n <!-- Hold / Unhold -->\n @if (activeCalls.length > 0 && !this.activeCalls[this.currentActiveCallIndex].isOnHold) {\n <button class=\"button_call_option button_elevated\"\n [ngClass]=\"{ 'button_disabled': !isactiveCall }\"\n [disabled]=\"!isactiveCall\"\n (click)=\"toggleHold()\">\n <div class=\"button_icon\"> <svg viewBox=\"0 0 320 512\" width=\"14\">\n <path fill=\"currentColor\" d=\"M128 64L0 64 0 448l128 0 0-384zm192 0L192 64l0 384 128 0 0-384z\" />\n </svg></div>\n <div class=\"button_text\">Hold</div>\n </button>\n } @else if (activeCalls.length > 0 && this.activeCalls[this.currentActiveCallIndex].isOnHold) {\n <button class=\"button_call_option button_active button_elevated\" (click)=\"toggleHold()\">\n <div class=\"button_icon\">\n <svg viewBox=\"0 0 320 512\" width=\"14\">\n <path fill=\"currentColor\" d=\"M128 64L0 64 0 448l128 0 0-384zm192 0L192 64l0 384 128 0 0-384z\" />\n </svg></div>\n <div class=\"button_text\">Unhold</div>\n </button>\n \n }\n\n <!-- Keypad -->\n <button class=\"button_call_option button_elevated\"\n [class.button_active]=\"isDailpadOpen\"\n (click)=\"menuDailpad()\"\n [ngClass]=\"{ 'button_disabled': showCallDisconnected }\">\n <div class=\"button_icon\"> <svg width=\"22px\" height=\"22px\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M256,400a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M256,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M256,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M256,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M384,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M384,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M384,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M128,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M128,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M128,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n </svg></div>\n <div class=\"button_text\">{{ isDailpadOpen ? 'Hide' : 'Keypad' }}</div>\n </button>\n\n @if (isDailpadOpen) {\n <div class=\"container_popup_dialpad\">\n <div class=\"container_popup_dialpad_inner\">\n <div [formGroup]=\"dtmfForm\">\n <div class=\"container_dtmf_input\">\n <input type=\"tel\" formControlName=\"dtmf\">\n </div>\n <div class=\"container_dialpad_digits\">\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('1')\">1</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('2')\">2</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('3')\">3</button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('4')\">4</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('5')\">5</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('6')\">6</button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('7')\">7</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('8')\">8</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('9')\">9</button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('*')\">\n <svg viewBox=\"0 0 512 512\" height=\"17px\">\n <path fill=\"currentColor\"\n d=\"M208 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 140.9 122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7 43.7L352 256l122 70.4c15.3 8.8 20.6 28.4 11.7 43.7l-16 27.7c-8.8 15.3-28.4 20.6-43.7 11.7L304 339.1 304 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-140.9L86 409.6c-15.3 8.8-34.9 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7L160 256 38 185.6c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7C51.1 98.8 70.7 93.6 86 102.4l122 70.4L208 32z\" />\n </svg>\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('0')\">0</button>\n <button class=\"button_dialpad_digit\" (click)=\"onSendDTMF('#')\">\n <svg height=\"19px\" viewBox=\"0 0 448 512\">\n <path fill=\"currentColor\"\n d=\"M181.3 32.4c17.4 2.9 29.2 19.4 26.3 36.8L197.8 128l95.1 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3s29.2 19.4 26.3 36.8L357.8 128l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0L325.8 320l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l9.8-58.7-95.1 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8L90.2 384 32 384c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 21.3-128L64 192c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3zM187.1 192L165.8 320l95.1 0 21.3-128-95.1 0z\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Call Control Buttons -->\n <div class=\"container_dialpad_buttons\">\n <div class=\"container_dialpad_row\">\n @if (!showCallDisconnected || isCalling) {\n <button class=\"button_dialpad_digit button_call_red\" (click)=\"dropCurrentCall()\">\n <svg width=\"25\" viewBox=\"0 0 640 512\">\n <path fill=\"currentColor\"\n d=\"M11.7 266.3l41.9 94.3c6.1 13.7 20.8 21.3 35.5 18.4l109.2-21.8c15-3 25.7-16.1 25.7-31.4V240c62.3-20.8 129.7-20.8 192 0v85.8c0 15.3 10.8 28.4 25.7 31.4L550.9 379c14.7 2.9 29.4-4.7 35.5-18.4l41.9-94.3c7.2-16.2 5.1-35.1-7.4-47.7C570.8 168.1 464.2 96 320 96S69.2 168.1 19.1 218.6c-12.5 12.6-14.6 31.5-7.4 47.7z\" />\n </svg>\n </button>\n } @else if (showCallDisconnected && !isCalling) {\n <button class=\"button_dialpad_digit button_call_green\"\n (click)=\"onRedial()\"\n [ngClass]=\"{ 'button_call_disabled': !phoneNumber }\">\n <svg viewBox=\"0 0 512 512\" height=\"18px\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </button>\n }\n </div>\n </div>\n </div>\n</div>\n</ng-template>\n\n\n <!-- ////////////////// -->\n <!-- Conference Call Template -->\n <ng-template #conferenceCallTemplate>\n<div class=\"container_active_call_header\">\n <div class=\"container_active_call_avatar\">\n <div class=\"container_active_call_avatar_inner\">\n <svg viewBox=\"0 0 212 212\" height=\"45px\" width=\"45px\" version=\"1.1\" x=\"0px\" y=\"0px\"\n enable-background=\"new 0 0 212 212\">\n <path fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\">\n </path>\n <g>\n <path fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 c-0.964-1.144-2.024-2.326-3.184-3.527c-1.741-1.802-3.71-3.646-5.924-5.47c-2.952-2.431-6.339-4.824-10.204-7.026 c-1.877-1.07-3.873-2.092-5.98-3.055c-0.062-0.028-0.118-0.059-0.18-0.087c-9.792-4.44-22.106-7.529-37.416-7.529 s-27.624,3.089-37.416,7.529c-0.338,0.153-0.653,0.318-0.985,0.474c-1.431,0.674-2.806,1.376-4.128,2.101 c-0.716,0.393-1.417,0.792-2.101,1.197c-3.421,2.027-6.475,4.191-9.15,6.395c-2.213,1.823-4.182,3.668-5.924,5.47 c-1.161,1.201-2.22,2.384-3.184,3.527c-0.964,1.144-1.832,2.25-2.609,3.299c-0.778,1.049-1.464,2.04-2.065,2.955 c-0.557,0.848-1.033,1.622-1.447,2.324c-0.033,0.056-0.073,0.119-0.104,0.174c-0.435,0.744-0.79,1.392-1.07,1.926 c-0.559,1.068-0.818,1.678-0.818,1.678v0.398c18.285,17.927,43.322,28.985,70.945,28.985c27.678,0,52.761-11.103,71.055-29.095 v-0.289c0,0-0.619-1.45-1.992-3.778C174.594,173.238,174.117,172.463,173.561,171.615z\">\n </path>\n <path fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 c1.772-0.532,3.482-1.188,5.12-1.958c2.184-1.027,4.242-2.258,6.15-3.67c2.863-2.119,5.39-4.646,7.509-7.509 c0.706-0.954,1.367-1.945,1.98-2.971c0.919-1.539,1.729-3.155,2.422-4.84c0.462-1.123,0.872-2.277,1.226-3.458 c0.177-0.591,0.341-1.188,0.49-1.792c0.299-1.208,0.542-2.443,0.725-3.701c0.275-1.887,0.417-3.827,0.417-5.811 c0-1.984-0.142-3.925-0.417-5.811c-0.184-1.258-0.426-2.493-0.725-3.701c-0.15-0.604-0.313-1.202-0.49-1.793 c-0.354-1.181-0.764-2.335-1.226-3.458c-0.693-1.685-1.504-3.301-2.422-4.84c-0.613-1.026-1.274-2.017-1.98-2.971 c-2.119-2.863-4.646-5.39-7.509-7.509c-1.909-1.412-3.966-2.643-6.15-3.67c-1.638-0.77-3.348-1.426-5.12-1.958 c-1.181-0.355-2.39-0.655-3.624-0.896c-2.468-0.484-5.035-0.737-7.68-0.737c-21.162,0-37.345,16.183-37.345,37.345 C68.657,109.317,84.84,125.5,106.002,125.5z\">\n </path>\n </g>\n </svg>\n </div>\n </div>\n\n <div class=\"container_active_call_info\">\n <div class=\"container_active_call_info_inner\">\n <div class=\"container_active_call_number\">Conference call</div>\n <div class=\"container_active_call_details\">\n <div class=\"container_active_call_details_inner\">\n <div class=\"container_active_call_icon_green\">\n <svg viewBox=\"0 0 512 512\" width=\"12\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </div>\n <div class=\"container_active_call_status_green\">\n with {{ conferenceParticipants?.length }} people\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"container_active_call_options\">\n <div class=\"button_active_call_options button_active_call_options_highlighted\">\n <span (click)=\"isConfereceList = !isConfereceList\" class=\"container_active_call_options_button\">\n <svg viewBox=\"0 0 448 512\" width=\"16px\">\n <path fill=\"currentColor\"\n d=\"M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\" />\n </svg>\n </span>\n </div>\n </div>\n</div>\n\n<!-- Conference List -->\n@if (isConfereceList) {\n <div class=\"container_conference_contact_list\">\n <div class=\"container_conference_contact_list_inner\">\n <div class=\"scrollbox container_conference_contact_list_scrollbox\">\n <div class=\"scrollbox-content\">\n\n @for (person of conferenceParticipants; track person.id) {\n <div class=\"container_conference_contact_item\">\n <!-- Avatar -->\n <div class=\"container_contact_item_image\">\n <div class=\"container_contact_item_image_inner\">\n <svg viewBox=\"0 0 212 212\" height=\"49px\" width=\"49px\" version=\"1.1\" x=\"0px\" y=\"0px\"\n enable-background=\"new 0 0 212 212\">\n <path fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\">\n </path>\n <g>\n <path fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 c-0.964-1.144-2.024-2.326-3.184-3.527c-1.741-1.802-3.71-3.646-5.924-5.47c-2.952-2.431-6.339-4.824-10.204-7.026 c-1.877-1.07-3.873-2.092-5.98-3.055c-0.062-0.028-0.118-0.059-0.18-0.087c-9.792-4.44-22.106-7.529-37.416-7.529 s-27.624,3.089-37.416,7.529c-0.338,0.153-0.653,0.318-0.985,0.474c-1.431,0.674-2.806,1.376-4.128,2.101 c-0.716,0.393-1.417,0.792-2.101,1.197c-3.421,2.027-6.475,4.191-9.15,6.395c-2.213,1.823-4.182,3.668-5.924,5.47 c-1.161,1.201-2.22,2.384-3.184,3.527c-0.964,1.144-1.832,2.25-2.609,3.299c-0.778,1.049-1.464,2.04-2.065,2.955 c-0.557,0.848-1.033,1.622-1.447,2.324c-0.033,0.056-0.073,0.119-0.104,0.174c-0.435,0.744-0.79,1.392-1.07,1.926 c-0.559,1.068-0.818,1.678-0.818,1.678v0.398c18.285,17.927,43.322,28.985,70.945,28.985c27.678,0,52.761-11.103,71.055-29.095 v-0.289c0,0-0.619-1.45-1.992-3.778C174.594,173.238,174.117,172.463,173.561,171.615z\">\n </path>\n <path fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 c1.772-0.532,3.482-1.188,5.12-1.958c2.184-1.027,4.242-2.258,6.15-3.67c2.863-2.119,5.39-4.646,7.509-7.509 c0.706-0.954,1.367-1.945,1.98-2.971c0.919-1.539,1.729-3.155,2.422-4.84c0.462-1.123,0.872-2.277,1.226-3.458 c0.177-0.591,0.341-1.188,0.49-1.792c0.299-1.208,0.542-2.443,0.725-3.701c0.275-1.887,0.417-3.827,0.417-5.811 c0-1.984-0.142-3.925-0.417-5.811c-0.184-1.258-0.426-2.493-0.725-3.701c-0.15-0.604-0.313-1.202-0.49-1.793 c-0.354-1.181-0.764-2.335-1.226-3.458c-0.693-1.685-1.504-3.301-2.422-4.84c-0.613-1.026-1.274-2.017-1.98-2.971 c-2.119-2.863-4.646-5.39-7.509-7.509c-1.909-1.412-3.966-2.643-6.15-3.67c-1.638-0.77-3.348-1.426-5.12-1.958 c-1.181-0.355-2.39-0.655-3.624-0.896c-2.468-0.484-5.035-0.737-7.68-0.737c-21.162,0-37.345,16.183-37.345,37.345 C68.657,109.317,84.84,125.5,106.002,125.5z\">\n </path>\n </g>\n </svg>\n </div>\n </div>\n\n <!-- Name and Time -->\n <div class=\"container_contact_item_left\">\n <div class=\"container_contact_item_left_inner\">\n <div class=\"contact_field\">{{ person.name }}</div>\n <div class=\"contact_field_green\">{{ person.duration }}</div>\n </div>\n </div>\n\n <!-- End Button -->\n <div class=\"container_contact_item_right\">\n <div class=\"right_field\">\n <button class=\"button_disconnect_call\">\n <svg width=\"22\" viewBox=\"0 0 640 512\">\n <path fill=\"currentColor\"\n d=\"M11.7 266.3l41.9 94.3c6.1 13.7 20.8 21.3 35.5 18.4l109.2-21.8c15-3 25.7-16.1 25.7-31.4V240c62.3-20.8 129.7-20.8 192 0v85.8c0 15.3 10.8 28.4 25.7 31.4L550.9 379c14.7 2.9 29.4-4.7 35.5-18.4l41.9-94.3c7.2-16.2 5.1-35.1-7.4-47.7C570.8 168.1 464.2 96 320 96S69.2 168.1 19.1 218.6c-12.5 12.6-14.6 31.5-7.4 47.7z\">\n </path>\n </svg>\n </button>\n </div>\n </div>\n </div>\n\n @if (!$last) {\n <div class=\"container_separator\"></div>\n }\n }\n\n </div>\n </div>\n </div>\n </div>\n}\n\n</ng-template>\n\n\n <ng-template #callTransferTemplate>\n <div class=\"container_transfer_call\">\n <div class=\"container_transfer_call_inner\">\n <div class=\"container_button_close\">\n <span (click)=\"isCallTransferOpen = false\" title=\"Close\">\n <i class=\"fa-sharp fa-solid fa-xmark\"></i>\n </span>\n </div>\n\n <!-- First Div -->\n <div class=\"container_transfer_call_content\" @slideInOut>\n @if (currentView === 'transferListpage') {\n <div class=\"container_active_call_duration\">{{ formatTime(callDuration)}}</div>\n\n <div class=\"container_active_call_header margin_bottom_16 shadow_st\">\n <div class=\"container_active_call_avatar\">\n <div class=\"container_active_call_avatar_inner\">\n <svg viewBox=\"0 0 212 212\" height=\"45px\" width=\"45px\" version=\"1.1\" x=\"0px\" y=\"0px\"\n enable-background=\"new 0 0 212 212\">\n <path fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\">\n </path>\n <g>\n <path fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 c-0.964-1.144-2.024-2.326-3.184-3.527c-1.741-1.802-3.71-3.646-5.924-5.47c-2.952-2.431-6.339-4.824-10.204-7.026 c-1.877-1.07-3.873-2.092-5.98-3.055c-0.062-0.028-0.118-0.059-0.18-0.087c-9.792-4.44-22.106-7.529-37.416-7.529 s-27.624,3.089-37.416,7.529c-0.338,0.153-0.653,0.318-0.985,0.474c-1.431,0.674-2.806,1.376-4.128,2.101 c-0.716,0.393-1.417,0.792-2.101,1.197c-3.421,2.027-6.475,4.191-9.15,6.395c-2.213,1.823-4.182,3.668-5.924,5.47 c-1.161,1.201-2.22,2.384-3.184,3.527c-0.964,1.144-1.832,2.25-2.609,3.299c-0.778,1.049-1.464,2.04-2.065,2.955 c-0.557,0.848-1.033,1.622-1.447,2.324c-0.033,0.056-0.073,0.119-0.104,0.174c-0.435,0.744-0.79,1.392-1.07,1.926 c-0.559,1.068-0.818,1.678-0.818,1.678v0.398c18.285,17.927,43.322,28.985,70.945,28.985c27.678,0,52.761-11.103,71.055-29.095 v-0.289c0,0-0.619-1.45-1.992-3.778C174.594,173.238,174.117,172.463,173.561,171.615z\">\n </path>\n <path fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 c1.772-0.532,3.482-1.188,5.12-1.958c2.184-1.027,4.242-2.258,6.15-3.67c2.863-2.119,5.39-4.646,7.509-7.509 c0.706-0.954,1.367-1.945,1.98-2.971c0.919-1.539,1.729-3.155,2.422-4.84c0.462-1.123,0.872-2.277,1.226-3.458 c0.177-0.591,0.341-1.188,0.49-1.792c0.299-1.208,0.542-2.443,0.725-3.701c0.275-1.887,0.417-3.827,0.417-5.811 c0-1.984-0.142-3.925-0.417-5.811c-0.184-1.258-0.426-2.493-0.725-3.701c-0.15-0.604-0.313-1.202-0.49-1.793 c-0.354-1.181-0.764-2.335-1.226-3.458c-0.693-1.685-1.504-3.301-2.422-4.84c-0.613-1.026-1.274-2.017-1.98-2.971 c-2.119-2.863-4.646-5.39-7.509-7.509c-1.909-1.412-3.966-2.643-6.15-3.67c-1.638-0.77-3.348-1.426-5.12-1.958 c-1.181-0.355-2.39-0.655-3.624-0.896c-2.468-0.484-5.035-0.737-7.68-0.737c-21.162,0-37.345,16.183-37.345,37.345 C68.657,109.317,84.84,125.5,106.002,125.5z\">\n </path>\n </g>\n </svg>\n </div>\n </div>\n <div class=\"container_active_call_info\">\n <div class=\"container_active_call_info_inner\">\n <div class=\"container_active_call_number\">{{ lookupPhoneNumber?.country?.flag }}\n {{ lookupPhoneNumber?.phoneNumber }}</div>\n <div class=\"container_active_call_details\">\n <div class=\"container_active_call_details_inner\">\n <div class=\"container_active_call_icon_green\">\n <svg viewBox=\"0 0 512 512\" width=\"12\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </div>\n <div class=\"container_active_call_status_green\">Active call</div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"container_contact_item_right\">\n <div class=\"right_field right_field_highlighted\">\n <span class=\"right_field_content\">Ext. {{extensionNumber}}</span>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"container_transfer_tab_buttons\">\n <button class=\"button_transfer_tab\" (click)=\"selectTab('tab1')\" [class.active]=\"activeTab === 'tab1'\">\n <svg width=\"18px\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\"\n d=\"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\" />\n </svg> Recent</button>\n <button class=\"button_transfer_tab\" (click)=\"selectTab('tab2')\" [class.active]=\"activeTab === 'tab2'\">\n <svg width=\"20px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\"\n d=\"M15.71,12.71a6,6,0,1,0-7.42,0,10,10,0,0,0-6.22,8.18,1,1,0,0,0,2,.22,8,8,0,0,1,15.9,0,1,1,0,0,0,1,.89h.11a1,1,0,0,0,.88-1.1A10,10,0,0,0,15.71,12.71ZM12,12a4,4,0,1,1,4-4A4,4,0,0,1,12,12Z\" />\n </svg> Internal</button>\n <button class=\"button_transfer_tab\" (click)=\"selectTab('tab3')\" [class.active]=\"activeTab === 'tab3'\">\n <svg width=\"18px\" height=\"18px\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M256,400a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M256,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M256,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M256,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M384,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M384,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M384,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M128,272a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M128,144a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" />\n <path fill=\"currentColor\" d=\"M128,16a48,48,0,1,0,48,48,48,48,0,0,0-48-48Z\" /></svg>\n Dail</button>\n </div>\n\n <!-- Tab 1 -->\n @if (activeTab === 'tab1') {\n <!-- <div class=\"container_transfer_tab_content\">\n <app-call-history (makeCallEv)=\"makeCallFromContact($event)\"></app-call-history>\n </div> -->\n <div class=\"container_transfer_tab_content\">\n <app-call-history [mode]=\"'transfer'\" (transferEv)=\"transferToFromHistory($event)\"> </app-call-history>\n</div>\n }\n\n <!-- Tab 2 -->\n @if (activeTab === 'tab2') {\n <div class=\"container_transfer_tab_content\">\n <div class=\"container_transfer_internal_search\">\n <input type=\"search\" placeholder=\"Type to search\">\n </div>\n <div class=\"container_transfer_contact_list\">\n <div class=\"container_transfer_contact_list_inner\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n <!-- Instead of repeating static contacts, render via array -->\n @for (contact of internalContacts; track contact.ext) {\n <div class=\"container_contact_item\" (click)=\"goToDiv('transferDetails'); makeCallFromContact(contact.phone)\">\n <div class=\"container_contact_item_image\">\n <div class=\"container_contact_item_image_inner\">\n <svg viewBox=\"0 0 212 212\" height=\"49px\" width=\"49px\" version=\"1.1\" x=\"0px\" y=\"0px\"\n enable-background=\"new 0 0 212 212\">\n <path fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\">\n </path>\n <g>\n <path fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 c-0.964-1.144-2.024-2.326-3.184-3.527c-1.741-1.802-3.71-3.646-5.924-5.47c-2.952-2.431-6.339-4.824-10.204-7.026 c-1.877-1.07-3.873-2.092-5.98-3.055c-0.062-0.028-0.118-0.059-0.18-0.087c-9.792-4.44-22.106-7.529-37.416-7.529 s-27.624,3.089-37.416,7.529c-0.338,0.153-0.653,0.318-0.985,0.474c-1.431,0.674-2.806,1.376-4.128,2.101 c-0.716,0.393-1.417,0.792-2.101,1.197c-3.421,2.027-6.475,4.191-9.15,6.395c-2.213,1.823-4.182,3.668-5.924,5.47 c-1.161,1.201-2.22,2.384-3.184,3.527c-0.964,1.144-1.832,2.25-2.609,3.299c-0.778,1.049-1.464,2.04-2.065,2.955 c-0.557,0.848-1.033,1.622-1.447,2.324c-0.033,0.056-0.073,0.119-0.104,0.174c-0.435,0.744-0.79,1.392-1.07,1.926 c-0.559,1.068-0.818,1.678-0.818,1.678v0.398c18.285,17.927,43.322,28.985,70.945,28.985c27.678,0,52.761-11.103,71.055-29.095 v-0.289c0,0-0.619-1.45-1.992-3.778C174.594,173.238,174.117,172.463,173.561,171.615z\">\n </path>\n <path fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 c1.772-0.532,3.482-1.188,5.12-1.958c2.184-1.027,4.242-2.258,6.15-3.67c2.863-2.119,5.39-4.646,7.509-7.509 c0.706-0.954,1.367-1.945,1.98-2.971c0.919-1.539,1.729-3.155,2.422-4.84c0.462-1.123,0.872-2.277,1.226-3.458 c0.177-0.591,0.341-1.188,0.49-1.792c0.299-1.208,0.542-2.443,0.725-3.701c0.275-1.887,0.417-3.827,0.417-5.811 c0-1.984-0.142-3.925-0.417-5.811c-0.184-1.258-0.426-2.493-0.725-3.701c-0.15-0.604-0.313-1.202-0.49-1.793 c-0.354-1.181-0.764-2.335-1.226-3.458c-0.693-1.685-1.504-3.301-2.422-4.84c-0.613-1.026-1.274-2.017-1.98-2.971 c-2.119-2.863-4.646-5.39-7.509-7.509c-1.909-1.412-3.966-2.643-6.15-3.67c-1.638-0.77-3.348-1.426-5.12-1.958 c-1.181-0.355-2.39-0.655-3.624-0.896c-2.468-0.484-5.035-0.737-7.68-0.737c-21.162,0-37.345,16.183-37.345,37.345 C68.657,109.317,84.84,125.5,106.002,125.5z\">\n </path>\n </g>\n </svg>\n </div>\n </div>\n <div class=\"container_contact_item_left\">\n <div class=\"container_contact_item_left_inner\">\n <div class=\"contact_field\">{{ contact.name }}</div>\n <div class=\"contact_field\">{{ contact.phone }}</div>\n @if (contact.role) {\n <div class=\"contact_field_grey\">\n <div class=\"contact_field_highlighted\"><span>{{ contact.role }}</span></div>\n </div>\n }\n </div>\n </div>\n <div class=\"container_contact_item_right\">\n <div class=\"right_field\">\n <span class=\"right_field_content\">Ext. {{ contact.ext }}</span>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Tab 3 -->\n @if (activeTab === 'tab3') {\n <div class=\"container_transfer_tab_content\">\n <form [formGroup]=\"transferForm\">\n <div class=\"container_transfer_contact_list\">\n <div class=\"container_phone_number_input margin_bottom_16\">\n <button class=\"button_phonebook\" (click)=\"isDirectoryOpen = !isDirectoryOpen\">\uD83D\uDCD6</button>\n <input placeholder=\"Phone Number\" type=\"tel\" formControlName=\"target\">\n <button class=\"button_backspace\" (click)=\"onBackspace()\"></button>\n </div>\n\n @if (isDirectoryOpen) {\n <div class=\"container_transfer_internal_contact_list\">\n <div class=\"container_transfer_contact_list_inner\">\n <div class=\"scrollbox\">\n <div class=\"scrollbox-content\">\n @for (directoryContact of directoryContacts; track directoryContact.id) {\n <div class=\"container_contact_item\">\n <div class=\"container_contact_item_left\">\n <div class=\"container_contact_item_left_inner\">\n <div class=\"contact_field\">{{ directoryContact.name }}</div>\n <div class=\"contact_field\">{{ directoryContact.phone }}</div>\n </div>\n </div>\n <div class=\"container_contact_item_right\">\n <div class=\"right_field right_field_highlighted\">\n <span class=\"right_field_content\">\n <div class=\"container_rating\">\n @for (star of [1,2,3,4,5]; track $index) {\n <span [class.filled]=\"star <= directoryContact.rating\">\u2605</span>\n }\n </div>\n </span>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Dialpad -->\n <div class=\"container_dialpad_digits\">\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('1')\">1</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('2')\">2</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('3')\">3</button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('4')\">4</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('5')\">5</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('6')\">6</button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('7')\">7</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('8')\">8</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('9')\">9</button>\n </div>\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('*')\">\n <svg viewBox=\"0 0 512 512\" height=\"17px\">\n <path fill=\"currentColor\" d=\"M208 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 140.9\n 122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7\n 43.7L352 256l122 70.4c15.3 8.8 20.6 28.4 11.7 43.7l-16 27.7c-8.8\n 15.3-28.4 20.6-43.7 11.7L304 339.1 304 480c0 17.7-14.3 32-32 32l-32\n 0c-17.7 0-32-14.3-32-32l0-140.9L86 409.6c-15.3 8.8-34.9\n 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7L160 256 38\n 185.6c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7C51.1 98.8 70.7 93.6 86\n 102.4l122 70.4L208 32z\" />\n </svg>\n </button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('0')\">0</button>\n <button class=\"button_dialpad_digit\" (click)=\"onDigitClick('#')\">\n <svg height=\"19px\" viewBox=\"0 0 448 512\">\n <path fill=\"currentColor\" d=\"M181.3 32.4c17.4 2.9 29.2 19.4 26.3\n36.8L197.8 128l95.1 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3s29.2 19.4\n26.3 36.8L357.8 128l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9\n0L325.8 320l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0-11.5\n69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l9.8-58.7-95.1\n0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8L90.2\n384 32 384c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 21.3-128L64\n192c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 11.5-69.3c2.9-17.4\n19.4-29.2 36.8-26.3zM187.1 192L165.8 320l95.1 0 21.3-128-95.1 0z\" />\n </svg></button>\n </div>\n </div>\n\n <div class=\"container_dialpad_buttons\">\n <div class=\"container_dialpad_row\">\n @if (isAddingNewCall) {\n <button class=\"button_dialpad_digit button_call_green\"\n (click)=\"makeCall(transferForm.value.target)\"\n [disabled]=\"!phoneNumber\"\n [ngClass]=\"{ 'button_call_disabled': !phoneNumber }\">\n <svg viewBox=\"0 0 512 512\" height=\"18px\">\n <path fill=\"currentColor\"\n d=\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\" />\n </svg>\n </button>\n } @else {\n <button type=\"submit\" class=\"button_dialpad_digit button_call_green\" (click)=\"onTransferCall()\"> <svg height=\"20px\" viewBox=\"0 0 52 52\" enable-background=\"new 0 0 52 52\" xml:space=\"preserve\">\n <g>\n <path fill=\"currentColor\" d=\"M48.5,37.9L42.4,33c-1.4-1.1-3.4-1.2-4.8-0.1l-5.2,3.8c-0.6,0.5-1.5,0.4-2.1-0.2l-7.8-7l-7-7.8\n c-0.6-0.6-0.6-1.4-0.2-2.1l3.8-5.2c1.1-1.4,1-3.4-0.1-4.8l-4.9-6.1c-1.5-1.8-4.2-2-5.9-0.3L3,8.4c-0.8,0.8-1.2,1.9-1.2,3\n c0.5,10.2,5.1,19.9,11.9,26.7S30.2,49.5,40.4,50c1.1,0.1,2.2-0.4,3-1.2l5.2-5.2C50.5,42.1,50.4,39.3,48.5,37.9z\" />\n <path fill=\"currentColor\" d=\"M48.4,2H33c-1,0-1.3,1.1-0.5,1.9l4.9,5l-9,9.1c-0.5,0.5-0.5,1.4,0,1.9l3.7,3.7c0.5,0.5,1.3,0.5,1.9,0\n l9.1-9.1l5.1,4.9C48.9,20.3,50,20,50,19V3.7C50,3,49.1,2,48.4,2z\" />\n </g>\n </svg></button>\n }\n </div>\n </div>\n </div>\n </form>\n </div>\n }\n }\n</div>\n\n <!-- Second Div -->\n @if (currentView === 'transferDetails') {\n <div class=\"container_transfer_call_content\" @slideInOut>\n <div class=\"container_active_call_duration\">00:10</div>\n <div class=\"container_active_call_header shadow_st\">\n <div class=\"container_active_call_avatar\">\n <div class=\"container_active_call_avatar_inner\">\n <svg viewBox=\"0 0 212 212\" height=\"45px\" width=\"45px\" version=\"1.1\" x=\"0px\" y=\"0px\"\n enable-background=\"new 0 0 212 212\">\n <path fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\"></path>\n <g>\n <path fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 ...\"></path>\n <path fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 ...\"></path>\n </g>\n </svg>\n </div>\n </div>\n\n <div class=\"container_active_call_info\">\n <div class=\"container_active_call_info_inner\">\n <div class=\"container_active_call_number\">\n {{ lookupPhoneNumber?.country?.flag }} {{ lookupPhoneNumber?.phoneNumber }}\n </div>\n <div class=\"container_active_call_details\">\n <div class=\"container_active_call_details_inner\">\n <div class=\"container_active_call_icon_grey\">\n <svg viewBox=\"0 0 320 512\" width=\"12\">\n <path fill=\"currentColor\"\n d=\"M128 64L0 64 0 448l128 0 0-384zm192 0L192 64l0 384 128 0 0-384z\"></path>\n </svg>\n </div>\n <div class=\"container_active_call_status_grey\">On hold</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"container_contact_item_right\">\n <div class=\"right_field right_field_highlighted\">\n <span class=\"right_field_content\">Ext. {{ extensionNumber }}</span>\n </div>\n </div>\n </div>\n\n <div class=\"container_transfer_call_details\">\n <div class=\"container_call_ani_number padding_top_nt\">+91 (654) 9876549</div>\n <div class=\"container_call_ani_name\">Rajeev kumar singh</div>\n <div class=\"container_call_ani_image\">\n <div class=\"container_call_ani_image_inner\">\n <svg viewBox=\"0 0 212 212\" height=\"85\" width=\"85\" version=\"1.1\" x=\"0px\" y=\"0px\"\n enable-background=\"new 0 0 212 212\">\n <path fill=\"#DFE5E7\"\n d=\"M106.251,0.5C164.653,0.5,212,47.846,212,106.25S164.653,212,106.25,212C47.846,212,0.5,164.654,0.5,106.25 S47.846,0.5,106.251,0.5z\"></path>\n <g>\n <path fill=\"#FFFFFF\"\n d=\"M173.561,171.615c-0.601-0.915-1.287-1.907-2.065-2.955c-0.777-1.049-1.645-2.155-2.608-3.299 ...\"></path>\n <path fill=\"#FFFFFF\"\n d=\"M106.002,125.5c2.645,0,5.212-0.253,7.68-0.737c1.234-0.242,2.443-0.542,3.624-0.896 ...\"></path>\n </g>\n </svg>\n </div>\n </div>\n </div>\n\n <div class=\"container_call_dnis\">\n <span>Ext. {{ extensionNumber }}</span>\n </div>\n\n <div class=\"container_call_options margin_bottom_nt\">\n <div class=\"container_dialpad_row margin_bottom_16\">\n <button class=\"button_call_option\" (click)=\"mergeCall()\">\n <div class=\"button_icon\"><svg width=\"22\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\"\n d=\"M32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l97.2 0c9.7 0 18.9 4.4 25 12L247 256 154.2 372c-6.1 7.6-15.3 12-25 12L32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l97.2 0c29.2 0 56.7-13.3 75-36l99.2-124 80.6 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c6-6 9.4-14.1 9.4-22.6s-3.4-16.6-9.4-22.6l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 32-80.6 0L204.2 100c-18.2-22.8-45.8-36-75-36L32 64z\"></path>\n </svg></div>\n <div class=\"button_text\">Merge</div>\n </button>\n\n <button class=\"button_call_option\">\n <div class=\"button_icon\"> <svg width=\"26px\" viewBox=\"0 0 640 512\">\n <path fill=\"currentColor\"\n d=\"M150.6 73.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 173.3 96 320c0 53 43 96 96 96l112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0c-17.7 0-32-14.3-32-32l0-146.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96zM336 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l112 0c17.7 0 32-14.3 32-32l0 146.7-41.4-41.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L544 338.7 544 192c0-53-43-96-96-96L336 96z\"></path>\n </svg></div>\n <div class=\"button_text\">Swap</div>\n </button>\n\n <button class=\"button_call_option\">\n <div class=\"button_icon\"><svg width=\"19px\" viewBox=\"0 0 52 52\">\n <path fill=\"currentColor\"\n d=\"M48.5,37.9L42.4,33c-1.4-1.1-3.4-1.2-4.8-0.1l-5.2,3.8c-0.6,0.5-1.5,0.4-2.1-0.2l-7.8-7l-7-7.8 c-0.6-0.6-0.6-1.4-0.2-2.1l3.8-5.2c1.1-1.4,1-3.4-0.1-4.8l-4.9-6.1c-1.5-1.8-4.2-2-5.9-0.3L3,8.4c-0.8,0.8-1.2,1.9-1.2,3 c0.5,10.2,5.1,19.9,11.9,26.7S30.2,49.5,40.4,50c1.1,0.1,2.2-0.4,3-1.2l5.2-5.2C50.5,42.1,50.4,39.3,48.5,37.9z\"></path>\n <path fill=\"currentColor\"\n d=\"M48.4,2H33c-1,0-1.3,1.1-0.5,1.9l4.9,5l-9,9.1c-0.5,0.5-0.5,1.4,0,1.9l3.7,3.7c0.5,0.5,1.3,0.5,1.9,0 l9.1-9.1l5.1,4.9C48.9,20.3,50,20,50,19V3.7C50,3,49.1,2,48.4,2z\"></path>\n </svg>\n</div>\n <div class=\"button_text\">Transfer</div>\n </button>\n </div>\n </div>\n\n <div class=\"container_transfer_disconnect\">\n <div class=\"container_dialpad_row\">\n <button class=\"button_dialpad_digit button_call_red\" (click)=\"goToDiv('transferListpage')\">\n <svg width=\"36px\" viewBox=\"0 0 76 76\">\n <path fill=\"currentColor\"\n d=\"M 16.2013,39.582L 15.4175,39.4096L 14.8094,38.9315L 14.4029,38.2193L 14.25,37.364L 14.25,34.9055C 14.25,33.184 14.6023,31.6057 15.3069,30.1704C 16.0116,28.7352 16.9698,27.4788 18.1818,26.4013C 19.3937,25.3237 20.8095,24.4424 22.429,23.7573C 24.0486,23.0722 25.7732,22.6277 27.6031,22.4239L 31.304,22.0792L 34.9918,21.8256L 39.109,21.715L 42.966,21.8451L 46.101,22.0987L 48.9628,22.489C 50.7276,22.7318 52.3883,23.199 53.945,23.8906C 55.5017,24.5822 56.8567,25.4625 58.0101,26.5313C 59.1635,27.6002 60.0752,28.8468 60.7451,30.2712C 61.4151,31.6956 61.75,33.2599 61.75,34.964L 61.75,37.4486L 61.5874,38.2681L 61.1386,38.9511L 60.4785,39.4096L 59.6752,39.582L 51.8897,39.582L 51.0994,39.4096L 50.4588,38.9413L 50.0327,38.2584L 49.8799,37.4226L 49.8799,32.1217L 49.7075,31.1656L 49.2295,30.3818L 48.5075,29.8452C 48.23,29.7108 47.9286,29.6436 47.6034,29.6436L 28.7413,29.6436C 28.4161,29.6436 28.0974,29.7108 27.7852,29.8452L 26.9722,30.3818L 26.4128,31.1851C 26.2697,31.4973 26.1982,31.8225 26.1982,32.1607L 26.1982,37.364L 26.0356,38.2193L 25.5803,38.9315L 24.9104,39.4096L 24.1038,39.582L 16.2013,39.582 Z M 34.8333,41.1667L 41.1666,41.1667L 41.1667,52.6458L 45.9167,47.8958L 45.9167,54.2292L 38,62.5417L 30.0833,54.2292L 30.0833,47.8958L 34.8333,52.6458L 34.8333,41.1667 Z \" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n}\n\n\n\n\n\n\n\n\n\n\n\n </div>\n </div>\n </ng-template>\n\n \n\n\n</ng-template>\n\n<div id=\"videoPanel\" style=\"display: none\">\n <audio #rmtAudio id=\"rmtAudio\" autoplay></audio>\n <audio #lclAudio id=\"lclAudio\" autoplay muted></audio>\n <video #rmtVideo id=\"rmtVideo\" autoplay></video>\n <video #lclVideo id=\"lclVideo\" autoplay muted controls title=\"Local Video\"></video>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,500,600,700,800\";@import\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css\";:host{--sd-app-color: #ff6633;--sd-app-color-dark: #ff5805;--sd-app-color-light: #fe8c66;--sd-text-font-family: \"Open Sans\", \"sans-serif\", \"Helvetica Neue\", \"Helvetica\", \"Arial\";--sd-text-color: #666;--sd-text-color-inverse: #fff;--sd-text-color-light: #ccc;--sd-text-color-medium: #999;--sd-text-color-dark: #333;--sd-background-color: #fff;--sd-border-color-light: #e3e3e3;--sd-border-color-dark: #c9c9c9}.message_label{width:100%;font-size:13px;font-family:var(--sd-text-font-family);letter-spacing:-.25px;border-radius:4px;font-weight:600;border:1px solid #f5c6cb;padding:8px 11px;position:relative}.error_message{color:#e1143c;background-color:#f8d7da;border-color:#dfadb2}.success_message{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert_message{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.properties_form_field{width:100%;font-size:13px!important;font-family:var(--sd-text-font-family)!important;font-weight:600!important;letter-spacing:-.24px!important;color:#555!important}.container_avaya_login{width:100%;height:calc(100vh - 51px);padding:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.container_avaya_login_inner{margin:0 auto;width:100%;max-width:370px;padding:65px 20px 20px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex}.container_connection_status_overlay{width:100%;height:100%;position:absolute;left:0;right:0;bottom:0;background-color:#6669;display:flex;justify-content:center;z-index:9999999;padding:20px}.container_connection_status{width:100%;background:var(--sd-background-color);padding:0 10px;border-radius:8px;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);display:flex;height:42px;align-items:center;position:relative;box-shadow:#32325d40 0 6px 12px -2px,#0000004d 0 3px 7px -3px}.container_connection_status span{padding:0 0 0 8px}.container_connection_status .fa-circle-dot{color:#f66060}.container_connection_status_loader{position:absolute;right:15px}.container_avaya_login_content{position:relative;width:100%}.container_avaya_logo{margin:0;padding:0 26px 24px;width:100%;text-align:center}.container_avaya_logo_image{margin:0 auto;width:120px;height:35px;background:var(--sd-background-color) url(data:image/png;base64,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) center no-repeat;background-size:120px}.container_avaya_logo h3{margin:0;padding:6px 0 0;font-family:var(--sd-text-font-family);font-size:18px;font-weight:700;letter-spacing:-.45px;color:var(--sd-text-color-dark);position:relative}.container_avaya_logo h3 span{font-size:8px;position:absolute;top:8px}.container_avaya_login_error{width:100%;white-space:normal}.container_avaya_login_form{width:100%;margin:0;padding:26px 0 0;position:relative}.container_avaya_login_form form{width:100%;margin:0;padding:0}.container_avaya_login_form .form_field{margin:0;padding:0;width:100%}.avaya_login_button_area{padding:10px 0 0}.container_icon_eye{position:absolute;right:15px}.container_avaya_login_form .button_submit_login{font:14px / 48px var(--sd-text-font-family);display:inline-block;height:48px;background:#cd1f1e;color:var(--sd-text-color-inverse);border:1px solid #cd1f1e;font-weight:600;padding:0 12px;border-radius:4px;outline:none;letter-spacing:-.24px;cursor:pointer;width:100%;position:relative}.container_avaya_login_form .button_submit_login_loader{background:#cd1f1e!important;color:var(--sd-text-color-inverse)!important;border:1px solid #cd1f1e!important;cursor:auto}.container_avaya_login_form .button_submit_login:disabled{background:#f1f1f1;color:var(--sd-text-color-medium);border:1px solid #f1f1f1}.button_submit_loader:after{content:\"\";position:absolute;width:16px;height:16px;inset:0;margin:auto;border:3px solid transparent;border-top-color:#fff;border-radius:50%;animation:button_submit_loader_spinner 1s ease infinite}@keyframes button_submit_loader_spinner{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.container_avaya_softphone{width:100%;height:100%;position:relative}.container_avaya_softphone_inner{width:100%;position:absolute;top:0;left:0;right:0;padding:0;height:calc(100% - 51px);font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);line-height:normal;background:var(--sd-background-color);-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:#000}.container_call{margin:0 auto;padding:0;position:relative;width:100%;height:100%;background:var(--sd-background-color)}.container_dialpad_header{width:100%;position:relative;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);z-index:99999;background:var(--sd-background-color);padding:15px 15px 0}.container_dialpad_header_inner2{width:100%;margin:0;padding:15px 15px 0;background:#f7f7f7;background:linear-gradient(180deg,#f7f7f7 72%,#fff);border-radius:12px 12px 0 0;position:relative}.container_avaya_extension{width:100%;position:relative;display:flex;flex-direction:row;align-items:center;padding:8px 10px;border:1px solid var(--sd-border-color-light);border-radius:12px;margin-bottom:15px;background:#f0f0f0}.container_avaya_extension_left{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1;justify-content:center}.container_avaya_extension_left .extension_label{display:flex;align-items:center;line-height:normal;text-align:left}.container_avaya_extension_left .extension_number{display:flex;align-items:center;line-height:20px}.container_avaya_extension_right{flex-basis:auto;flex-direction:column;flex-grow:1;text-align:right;justify-items:flex-end}.container_avaya_extension_right button{background:none;border:none;outline:none;color:#a6a6a6;font-weight:600;border-radius:50%;align-items:center;justify-content:center;-webkit-transition-duration:.3s;transition-duration:.3s;background:#f0f0f0;height:38px;width:38px}.container_avaya_extension_right button:hover{color:var(--sd-text-color-dark);background:var(--sd-border-color-light)}.dialpad_container_sd{position:absolute;width:100%;right:0;left:0;top:101px;height:calc(100vh - 101px);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}.scrollbox{height:100%;overflow-y:scroll;overflow-x:hidden;visibility:hidden;padding:0 0 7px;position:relative;scroll-behavior:smooth;scrollbar-width:thin;width:100%}.scrollbox-content,.scrollbox:hover,.scrollbox:focus{visibility:visible}.container_contact_item{width:100%;position:relative;display:flex;flex-direction:row;align-items:center;padding:10px;border:1px solid var(--sd-border-color-light);border-radius:8px;overflow:hidden;margin-bottom:10px;cursor:pointer}.container_contact_item_image{display:flex}.container_contact_item_image_inner{margin:0 auto;padding:0;width:50px;height:50px;position:relative}.container_contact_item_left{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1}.container_contact_item_left_inner{display:flex;flex-basis:1;flex-direction:column;padding:0 0 0 10px}.container_contact_item_left .contact_field{font-size:13px;margin-bottom:2px}.contact_dark{color:var(--sd-text-color-dark)}.contact_gray{color:var(--sd-text-color-medium)}.container_contact_item_left .contact_field_grey{font-size:12px;color:var(--sd-text-color);padding-top:2px;display:flex}.container_contact_item_left .contact_field_green{font-size:13px;margin-bottom:2px;color:#6c0}.container_contact_item_left .contact_field_highlighted{display:flex;font-size:11px;color:var(--sd-text-color-medium)}.container_contact_item_left .contact_field_highlighted span{background:#6c0;border-radius:3px;text-transform:uppercase;color:var(--sd-text-color-inverse);font-size:9px;padding:2px 4px}.container_contact_item_right{display:flex;flex-direction:row}.container_contact_item_right .right_field{display:flex;flex-basis:auto;justify-content:right}.container_contact_item_right .right_field_highlighted{font-size:16px;color:#29abe0}.container_contact_item_right .right_field_content{display:inline-block;border-radius:26px;border:1px solid #e5e5e5;padding:5px 8px;font-size:11px;color:var(--sd-text-color)}.container_contact_item_right .right_recent_content{display:inline-block;padding:0;font-size:11px;color:var(--sd-text-color)}.container_contact_item_right .container_rating{font-size:11px;cursor:pointer}.container_contact_item_right .container_rating span{color:gray;transition:color .3s}.container_contact_item_right .container_rating span.filled{color:gold}.container_dialpad_digits{width:100%;display:flex;justify-content:center;margin-bottom:10px;flex-direction:column}.container_dialpad_row{display:flex;column-gap:10px;flex-direction:row;flex-shrink:0;justify-content:center;margin-bottom:10px}.button_dialpad_digit{display:block;width:50px;height:50px;display:flex;column-gap:20px;margin:0 10px;align-items:center;justify-content:center;line-height:normal;border-radius:50%;outline:none;border:none;font-size:22px;font-weight:700;color:var(--sd-text-color-dark);background:var(--sd-background-color);-webkit-transition-duration:.3s;transition-duration:.3s;box-shadow:#0000001a 0 0 5px,#0000001a 0 0 1px;border:1px solid #ebebeb}.button_dialpad_digit:hover{background:#000;color:var(--sd-text-color-inverse)}.button_call_green{background:#6c0;color:var(--sd-text-color-inverse);width:60px;height:60px;-webkit-transition-duration:.3s;transition-duration:.3s}.button_call_green:hover{background:#5ab400;color:var(--sd-text-color-inverse);width:60px;height:60px}.button_call_red{background:#e0261f;color:var(--sd-text-color-inverse);width:60px;height:60px;-webkit-transition-duration:.3s;transition-duration:.3s;z-index:9999}.button_call_red:hover{background:#cf211a}.button_call_disabled{background:#eee;color:var(--sd-text-color-light);width:60px;height:60px;-webkit-transition-duration:.3s;transition-duration:.3s}.container_dialpad_buttons{width:100%;display:flex;justify-content:center;padding-top:0;margin-bottom:6px}.container_call_header{width:100%;position:absolute;top:0;left:0;right:0;height:221px;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);z-index:99;background:var(--sd-background-color)}.container_call_header_inner{width:100%;margin:0;padding:10px 15px 15px;position:relative}.container_call_info{display:flex;justify-content:center;font-size:14px;font-weight:600;width:100%;color:var(--sd-text-color)}.container_call_info_blinker{display:flex;justify-content:center;font-size:14px;font-weight:600;width:100%;color:red;animation:blinker 1s linear infinite}@keyframes blinker{26%{opacity:0}}.container_call_ani{width:100%;margin:0;padding:0}.container_call_ani_number{text-align:center;font-size:20px;font-weight:600;padding-top:26px}.container_call_ani_name{text-align:center;font-size:13px;font-weight:600;padding-top:2px}.container_call_ani_image{margin:0;padding:24px 0 0;width:100%}.container_call_ani_image_inner{display:flex;align-items:center;flex:0 0 auto;padding:0;width:85px;height:85px;position:relative;margin:0 auto;border-radius:100%}.container_call_content{width:100%;position:absolute;top:221px;left:0;right:0;height:calc(100% - 221px);font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);padding-top:20px;display:flex;flex-basis:auto;flex-direction:column;align-items:center;justify-content:center}.container_call_dnis{width:100%;text-align:center;padding-bottom:16px}.container_call_dnis span{display:inline-block;border-radius:26px;border:1px solid #e5e5e5;padding:5px 16px}.container_call_options{width:100%;display:flex;justify-content:center;margin-bottom:16px;flex-direction:column}.button_call_option{display:block;width:80px;height:60px;display:flex;flex-direction:column;flex-shrink:0;column-gap:0px;margin:0 10px;align-items:center;justify-content:center;line-height:normal;outline:none;border:none;font-size:12px;font-weight:600;color:var(--sd-text-color-dark);background:none;-webkit-transition-duration:.3s;transition-duration:.3s;position:relative}.button_call_option .button_icon{display:flex;justify-content:center;align-items:center;height:40px}.button_call_option .button_text{display:flex;justify-content:center;color:var(--sd-text-color)}.button_active{color:#67cc02}.button_elevated{position:relative;z-index:9999}.button_disabled{color:gray;cursor:not-allowed;pointer-events:none;opacity:.6}.button_call_option[disabled],.button_disabled{opacity:.5;pointer-events:none;display:inline-flex}.container_popup_dialpad{position:absolute;z-index:999;left:0;right:0;bottom:0}.container_popup_dialpad_inner{background:#f1f1f1;background:linear-gradient(180deg,#f1f1f1 44%,#fff);margin:0 auto;padding:10px 15px 20px;border-radius:8px;width:88%;position:relative;height:475px}.container_popup_dialpad .button_close{position:absolute;right:-15px;top:-17px;z-index:9}.container_popup_dialpad .button_close span{width:32px;height:32px;background:var(--sd-background-color);display:flex;align-items:center;justify-content:center;border-radius:50%;cursor:pointer;box-shadow:#0000001a 0 0 5px,#0000001a 0 0 1px;border:1px solid #ebebeb}.container_popup_dialpad .button_close span:hover{background:#f1f1f1;color:var(--sd-text-color-dark)}.container_popup_dialpad .button_close span .fa-xmark{font-size:1.4em;font-weight:400}.container_dtmf_input{width:100%;margin:0;padding:0 0 10px;position:relative}.container_dtmf_input input{width:100%;display:flex;height:38px;outline:none;text-align:center;align-items:center;border:1px solid #f1f1f1;font-size:26px;font-weight:400;color:transparent;text-shadow:0 0 0 #000;padding:0;background:#f1f1f1}.container_active_call_header{width:100%;position:relative;display:flex;flex-direction:row;align-items:center;padding:10px;border:1px solid var(--sd-border-color-light);border-radius:12px;overflow:hidden}.container_active_call_avatar{display:flex}@keyframes play1{0%{transform:scale(1)}15%{box-shadow:0 0 0 2px #57b84666}25%{box-shadow:0 0 0 3px #98d48266,0 0 0 20px #fff3}25%{box-shadow:0 0 0 5px #bde4a966,0 0 0 30px #fff3}}.container_active_call_avatar_inner{margin:0 auto;padding:0;width:50px;height:50px;background:#dfe6e8;color:var(--sd-text-color-dark);position:relative;animation:play1 2s ease infinite;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;border-radius:100%;overflow:hidden;display:flex;justify-content:center;align-items:center}.container_active_call_info{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1}.container_active_call_info_inner{display:flex;flex-basis:1;flex-direction:column;padding:0 0 0 10px}.container_active_call_duration{display:flex;justify-content:center;font-size:14px;font-weight:600;width:100%;color:var(--sd-text-color);margin-bottom:10px}.container_active_call_number{font-size:13px;margin-bottom:2px}.container_active_call_details{font-size:13px;color:#6c0;padding-top:2px}.container_active_call_details_inner{display:flex;margin:0;padding:0;justify-content:left}.container_active_call_icon_grey{display:flex;width:18px;height:16px;justify-content:center;align-items:center;color:var(--sd-text-color-medium)}.container_active_call_icon_green{display:flex;width:18px;height:16px;justify-content:center;align-items:center;color:#6c0}.container_active_call_status_green{display:flex;justify-content:center;align-items:center;color:#6c0;padding-left:6px;font-size:12px}.container_active_call_status_grey{display:flex;justify-content:center;align-items:center;color:var(--sd-text-color-medium);padding-left:6px;font-size:12px}.container_active_call_options{display:flex;flex-direction:row}.container_active_call_options .button_active_call_options{display:flex;flex-basis:auto;justify-content:right}.container_active_call_options .button_active_call_options_highlighted{font-size:16px;color:#29abe0}.container_active_call_options_button{display:flex;border-radius:26px;border:none;padding:0;font-size:11px;color:var(--sd-text-color);width:32px;height:32px;justify-content:center;align-items:center}.container_active_call_options_button:hover{background:#f1f1f1}.container_conference_contact_list{position:relative;width:100%;background:#f7f7f7;border-top:1px solid #eee;border-bottom:1px solid #eee;height:149px;padding:0;margin-top:16px}.container_swap_merge_contact_list{position:relative;width:100%;background:var(--sd-background-color);height:149px;padding:0;margin-top:32px}.container_conference_contact_list_inner{margin:0;padding:0;position:relative;width:100%;height:100%}.container_conference_contact_list_scrollbox{padding:12px 15px}.container_conference_contact_item{width:100%;position:relative;display:flex;flex-direction:row;align-items:center;padding:0 10px;overflow:hidden;cursor:pointer}.button_disconnect_call{display:block;width:42px;height:42px;display:flex;margin:0;align-items:center;justify-content:center;line-height:normal;border-radius:50%;outline:none;border:none;color:#e0261f;background:#f7f7f7;-webkit-transition-duration:.3s;transition-duration:.3s}.button_disconnect_call:hover{color:var(--sd-text-color-inverse);background:#e0261f;-webkit-transition-duration:.3s;transition-duration:.3s}.container_separator{height:1px;width:100%;background:#ededed;margin:11px 0}.container_transfer_call{position:absolute;z-index:99999;left:0;right:0;bottom:-51px;width:100%;background:var(--sd-background-color)}.container_transfer_call_inner{background:var(--sd-background-color);box-shadow:#11111a1a 0 4px 16px,#11111a0d 0 8px 32px;padding:20px 15px 10px;border-radius:0;width:100%;position:relative;height:596px;overflow:hidden}.container_transfer_call_inner h2{font-family:var(--sd-text-font-family);font-size:20px;font-weight:700;color:var(--sd-text-color-dark);letter-spacing:-1px;padding:0;line-height:normal;text-transform:capitalize;margin-bottom:15px}.container_button_close{position:absolute;right:4px;top:4px}.container_button_close span{width:36px;height:36px;background:var(--sd-background-color);display:flex;align-items:center;justify-content:center;border-radius:50%;cursor:pointer}.container_button_close span:hover{background:var(--sd-background-color)}.container_button_close .fa-xmark{font-size:1.6em;font-weight:400;color:var(--sd-text-color-light)}.container_button_close span:hover .fa-xmark:hover{color:var(--sd-text-color-dark)}.container_transfer_call_content{margin:0;padding:5px 0 0;width:100%;background:var(--sd-background-color);min-height:485px}.container_transfer_call_content h3{font-family:var(--sd-text-font-family);font-size:14px;font-weight:700;color:var(--sd-text-color);letter-spacing:-.26px;padding:8px 0 0;line-height:normal;text-transform:capitalize;margin-bottom:15px}.container_transfer_call_content h3 span{color:var(--sd-text-color-dark)}.container_transfer_call_details{width:100%;margin:0;padding:10px 15px 69px;position:relative}.container_transfer_tab_buttons{display:flex;gap:10px;align-items:center;margin-bottom:15px}.button_transfer_tab{padding:10px;border:none;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color);background-color:var(--sd-border-color-light);cursor:pointer;width:105px;border-radius:28px;outline:none}.button_transfer_tab.active{background-color:var(--sd-app-color);color:#fff}.container_transfer_tab_content{margin:0;padding:0;width:100%}.container_transfer_internal_search{margin:0 0 15px;padding:0;width:100%}.container_transfer_internal_search input{padding:0 16px;width:100%;outline:none;display:block;border:1px solid var(--sd-border-color-dark);color:var(--sd-text-color-medium);font-size:12px;letter-spacing:-.25px;font-family:var(--sd-text-font-family);background:var(--sd-background-color);font-style:italic;font-weight:400;position:relative;border-radius:27px;height:48px}.container_transfer_contact_list{width:100%;margin:0;padding:0;position:relative;height:336px}.container_transfer_contact_list_inner{width:100%;position:relative;height:100%}.container_transfer_internal_contact_list{position:absolute;width:100%;left:0;right:0;background:var(--sd-background-color);height:332px}.container_transfer_disconnect{width:100%;display:flex;justify-content:center;padding-top:3px;margin-bottom:6px}.container_avaya_footer{width:100%;padding:0;background:#f7f7f7;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;color:var(--sd-text-color-medium);position:relative;display:flex;height:51px;justify-content:center;align-items:center;border-top:1px solid var(--sd-border-color-light);-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:999;position:absolute;bottom:0;left:0}.margin_bottom_16{margin-bottom:16px}.margin_bottom_nt{margin-bottom:10px}.padding_top_nt{padding-top:7px}.shadow_st{box-shadow:#00000026 0 2px 8px}.call_animation{animation:play 2s ease infinite;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.mini-call-switcher{display:flex;justify-content:center;margin-top:10px}.mini-call{padding:6px 12px;margin:0 6px;background:#eaeaea;border-radius:8px;cursor:pointer;font-size:14px}.mini-call.active{background-color:#c6f6d5;font-weight:700}.history-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;z-index:999}.history-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--sd-background-color);padding:20px;z-index:1000;box-shadow:0 2px 10px #0000004d;border-radius:5px;width:600px;max-height:80vh;overflow-y:auto}.history-content{position:relative}.history-content h3{margin-top:0}.close-btn{background:transparent;border:none;font-size:1.5rem;position:absolute;top:0;right:0;cursor:pointer}.history-content table{width:100%;border-collapse:collapse;margin-top:1rem}.history-content th,.history-content td{padding:.5rem;border:1px solid var(--sd-text-color-light)}@keyframes play{0%{transform:scale(1)}15%{box-shadow:0 0 0 4px #57b84680}25%{box-shadow:0 0 0 5px #98d48266,0 0 0 20px #fff3}25%{box-shadow:0 0 0 10px #c2e5b180,0 0 0 30px #fff3}}::-webkit-input-placeholder{color:#ddd}::-moz-placeholder{color:var(--sd-text-color-dark)}:-ms-input-placeholder{color:var(--sd-text-color-dark)}:-moz-placeholder{color:var(--sd-text-color-dark)}.slide_st{left:-100px;-webkit-animation:slide .5s forwards;-webkit-animation-delay:2s;animation:slide .5s forwards;animation-delay:0s}@-webkit-keyframes slide{to{left:0}}@keyframes slide{to{left:0}}.tabs_sd{width:100%;position:absolute;bottom:0;left:0;right:0;display:flex;height:51px;border-top:1px solid var(--sd-border-color-light);background:#f9f9f9;z-index:999999}.tab_heading_btn{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1;justify-content:center;min-width:0;align-items:center;padding:0;border:none;cursor:pointer;width:25%;font-family:var(--sd-text-font-family);font-size:11px;font-weight:600;line-height:normal;color:var(--sd-text-color-medium);background:none;transition:background-color .3s linear;-webkit-transition:background-color .3s linear;-o-transition:background-color .3s linear;-ms-transition:background-color .3s linear}.nav_icon{display:flex;align-items:center;justify-content:center;height:22px;margin-bottom:1px}.nav_heading_sd{display:flex;align-items:center}.tab_heading_btn.active{color:var(--sd-app-color);background:url(data:image/gif;base64,R0lGODlhNwACAIAAAP9mMwAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgNzkuMTQ2Mjg5OTc3NywgMjAyMy8wNi8yNS0yMzo1NzoxNCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI1LjAgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODA1QUIyRjkwRDVFMTFGMDg4RUU4ODJGQTgxQUNDOEMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODA1QUIyRkEwRDVFMTFGMDg4RUU4ODJGQTgxQUNDOEMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MDVBQjJGNzBENUUxMUYwODhFRTg4MkZBODFBQ0M4QyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4MDVBQjJGODBENUUxMUYwODhFRTg4MkZBODFBQ0M4QyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAAAAAAALAAAAAA3AAIAAAIJhI+py+0Po0wFADs=) top center no-repeat}.tab-content_sd{width:100%;height:100%;font-family:var(--sd-text-font-family);font-size:13px;font-weight:600;line-height:normal;background:var(--sd-background-color);-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative}.container_transfer_fav_list{width:100%;margin:0;padding:0;position:relative;height:376px}.outer_container_swap_merge{width:100%;margin:0;padding:0}.container_swap_merge_item{width:100%;position:relative;display:flex;flex-direction:row;height:72px;border-radius:8px;overflow:hidden}.container_recent_item_image{display:flex;align-items:center}.container_swap_merge_item_image_inner{margin:0 auto;padding:0;width:50px;height:50px;position:relative;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--sd-text-font-family);font-size:26px;color:var(--sd-text-color-inverse);font-weight:400}.container_recent_item_left{display:flex;flex-basis:auto;flex-direction:column;flex-grow:1;justify-content:center;min-width:0;position:relative;border-top:1px solid #e9edef}.container_recent_item_left_inner{display:flex;flex-basis:1;flex-direction:column;padding:0 0 0 10px}.container_recent_item_left .contact_field{font-size:13px;color:var(--sd-text-color-dark);margin-bottom:2px}.onhold_st{font-family:var(--sd-text-font-family);font-size:12px;color:var(--sd-text-color-medium);font-weight:600}.container_recent_item_right{display:flex;flex-direction:row;position:absolute;right:0}.container_recent_item_right .right_field{display:flex;flex-basis:auto;justify-content:right}.button_swap_merge{display:block;width:32px;height:45px;display:flex;flex-direction:column;flex-shrink:0;column-gap:0px;margin:0 0 0 28px;align-items:center;justify-content:center;line-height:normal;outline:none;border:none;font-size:12px;font-weight:600;color:var(--sd-text-color-dark);background:none;-webkit-transition-duration:.3s;transition-duration:.3s;position:relative;pointer-events:all;cursor:pointer}.button_swap_merge .button_icon{display:flex;justify-content:center;align-items:center;height:40px}.button_swap_merge .button_text{display:flex;justify-content:center;color:var(--sd-text-color-dark)}@media only screen and (max-width: 767px){.previewcontent{width:95%!important}.bgSecWrap .numberArrow{left:0!important;top:-20px!important}.transcription-popup{position:fixed;bottom:20px;right:20px;width:320px;max-height:250px;background:#fff;border-radius:10px;box-shadow:0 4px 12px #0003;padding:12px;z-index:1000;display:flex;flex-direction:column}.transcription-header{display:flex;justify-content:space-between;align-items:center;font-weight:700;font-size:14px;margin-bottom:8px}.transcription-body{overflow-y:auto;font-size:13px;line-height:1.4;color:#333}.close-btn{border:none;background:transparent;font-size:18px;cursor:pointer}}\n"] }]
2818
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1$1.FormBuilder }, { type: CountryService }, { type: PhoneNumberLookupService }, { type: AvayaIPOService }, { type: RecordingManagerService }, { type: CallSocketService }, { type: i8.SnugdeskAuthenticationService }, { type: i8.TenantService }, { type: i8.UserService }], propDecorators: { tenantId: [{
2819
+ type: Input,
2820
+ args: ['tenantId']
2821
+ }], userId: [{
2822
+ type: Input,
2823
+ args: ['userId']
2824
+ }], isVisible: [{
2825
+ type: Input,
2826
+ args: ['isVisible']
2827
+ }], containerHeightObservable: [{
2828
+ type: Input,
2829
+ args: ['containerHeightObservable']
2830
+ }], containerWidthObservable: [{
2831
+ type: Input,
2832
+ args: ['containerWidthObservable']
2833
+ }], notificationEvent: [{
2834
+ type: Output
2835
+ }] } });
2836
+
2837
+ class AvayaIPOWidgetModule {
2838
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AvayaIPOWidgetModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2839
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.9", ngImport: i0, type: AvayaIPOWidgetModule, declarations: [AvayaIPOWidgetComponent,
2840
+ CallHistoryComponent,
2841
+ DialpadComponent,
2842
+ DeviceSelectorComponent], imports: [CommonModule,
2843
+ FormsModule,
2844
+ ReactiveFormsModule,
2845
+ MatFormFieldModule,
2846
+ MatInputModule,
2847
+ MatError,
2848
+ MatFormField,
2849
+ MatLabel,
2850
+ NgxIntlTelInputModule], exports: [AvayaIPOWidgetComponent] });
2851
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AvayaIPOWidgetModule, imports: [CommonModule,
2852
+ FormsModule,
2853
+ ReactiveFormsModule,
2854
+ MatFormFieldModule,
2855
+ MatInputModule,
2856
+ MatFormField,
2857
+ NgxIntlTelInputModule] });
2858
+ }
2859
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AvayaIPOWidgetModule, decorators: [{
2860
+ type: NgModule,
2861
+ args: [{
2862
+ declarations: [
2863
+ AvayaIPOWidgetComponent,
2864
+ CallHistoryComponent,
2865
+ DialpadComponent,
2866
+ DeviceSelectorComponent,
2867
+ ],
2868
+ imports: [
2869
+ CommonModule,
2870
+ FormsModule,
2871
+ ReactiveFormsModule,
2872
+ MatFormFieldModule,
2873
+ MatInputModule,
2874
+ MatError,
2875
+ MatFormField,
2876
+ MatLabel,
2877
+ NgxIntlTelInputModule,
2878
+ ],
2879
+ exports: [AvayaIPOWidgetComponent],
2880
+ }]
2881
+ }] });
2882
+
2883
+ /*
2884
+ * Public API Surface of avaya-ipo-widget
2885
+ */
2886
+
2887
+ /**
2888
+ * Generated bundle index. Do not edit.
2889
+ */
2890
+
2891
+ export { AvayaIPOWidgetComponent, AvayaIPOWidgetModule };
2892
+ //# sourceMappingURL=snugdesk-avaya-ipo-widget.mjs.map