tas-uell-sdk 0.0.3 → 0.0.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"tas-uell-sdk.mjs","sources":["../../../projects/tas-uell-sdk/src/lib/config/tas.config.ts","../../../projects/tas-uell-sdk/src/lib/interfaces/tas.interfaces.ts","../../../projects/tas-uell-sdk/src/lib/services/tas.service.ts","../../../projects/tas-uell-sdk/src/lib/components/tas-videocall/tas-videocall.component.ts","../../../projects/tas-uell-sdk/src/lib/components/tas-videocall/tas-videocall.component.html","../../../projects/tas-uell-sdk/src/lib/components/tas-waiting-room/tas-waiting-room.component.ts","../../../projects/tas-uell-sdk/src/lib/components/tas-waiting-room/tas-waiting-room.component.html","../../../projects/tas-uell-sdk/src/lib/components/tas-btn/tas-btn.component.ts","../../../projects/tas-uell-sdk/src/lib/components/tas-btn/tas-btn.component.html","../../../projects/tas-uell-sdk/src/lib/components/tas-floating-call/tas-floating-call.component.ts","../../../projects/tas-uell-sdk/src/lib/components/tas-floating-call/tas-floating-call.component.html","../../../projects/tas-uell-sdk/src/lib/tas-uell-sdk.module.ts","../../../projects/tas-uell-sdk/src/public-api.ts","../../../projects/tas-uell-sdk/src/tas-uell-sdk.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Configuration interface for the TAS module\n */\nexport interface TasConfig {\n\t/** TokBox/Vonage API Key */\n\ttokBoxApiKey: string;\n\t/** Optional API base URL for room/token endpoints */\n\tapiBaseUrl?: string;\n}\n\n/**\n * HTTP client interface that consuming apps must implement\n */\nexport interface TasHttpClient {\n\tpost<T>(url: string, options: { body: any; headers?: Record<string, string> }): Observable<T>;\n}\n\n/**\n * Injection token for TAS configuration\n */\nexport const TAS_CONFIG = new InjectionToken<TasConfig>('TAS_CONFIG');\n\n/**\n * Injection token for HTTP client adapter\n */\nexport const TAS_HTTP_CLIENT = new InjectionToken<TasHttpClient>('TAS_HTTP_CLIENT');\n\n","export interface CreateRoomUser {\n\tuserExternalId: number;\n\trol: TasUserRole;\n}\n\nexport interface CreateRoomRequest {\n\troomType: TasRoomType;\n\ttype: TasSessionType;\n\tutcScheduled?: string;\n\tproduct: string;\n\ttenant: string;\n\tappointmentId: number;\n\tusers: CreateRoomUser[];\n}\n\nexport interface CreateRoomResponse {\n\tcontent: {\n\t\troomType: string | null;\n\t\ttenant: string | null;\n\t\tuser_id: string | null;\n\t\tproduct: string | null;\n\t\trecord: boolean | null;\n\t\tsessionId: string;\n\t\troomId: number;\n\t\tstatus: TasSessionType;\n\t};\n}\n\nexport enum TasRoomType {\n\tTAS = \"TAS\",\n\tJM = \"JM\",\n\tWEBINAR = \"WEBINAR\"\n}\n\nexport enum TasSessionType {\n\tSPONTANEOUS = \"SPONTANEOUS\",\n\tSCHEDULED = \"SCHEDULED\"\n}\n\nexport enum TasUserRole {\n\tOWNER = \"OWNER\",\n\tUSER = \"USER\",\n\tMODERATOR = \"MODERATOR\"\n}\n\nexport interface TasCurrentUser {\n\tname: string;\n\tlastname: string;\n\trole: TasUserRole;\n}\n\nexport interface GenerateTokenRequest {\n\tsessionId: string;\n\tname: string;\n\tlastname: string;\n\troleVC: TasUserRole;\n}\n\nexport interface GenerateTokenResponse {\n\tcontent: {\n\t\ttoken: string;\n\t};\n}\n\n// Enums for TAS Service state management\nexport enum CallState {\n\tIDLE = 'IDLE',\n\tCONNECTING = 'CONNECTING',\n\tCONNECTED = 'CONNECTED',\n\tDISCONNECTED = 'DISCONNECTED',\n\tERROR = 'ERROR'\n}\n\nexport enum ViewMode {\n\tFULLSCREEN = 'FULLSCREEN',\n\tPIP = 'PIP'\n}\n\n","import { Injectable, Inject } from \"@angular/core\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\nimport { catchError, map } from \"rxjs/operators\";\nimport * as OT from \"@opentok/client\";\nimport {\n\tCreateRoomRequest,\n\tCreateRoomResponse,\n\tGenerateTokenRequest,\n\tGenerateTokenResponse,\n\tCallState,\n\tViewMode,\n} from \"../interfaces/tas.interfaces\";\nimport { TAS_CONFIG, TAS_HTTP_CLIENT, TasConfig, TasHttpClient } from \"../config/tas.config\";\n\n// Re-export enums for backward compatibility\nexport { CallState, ViewMode };\n\n@Injectable({\n\tprovidedIn: \"root\",\n})\nexport class TasService {\n\tprivate session: OT.Session | null = null;\n\tprivate publisher: OT.Publisher | null = null;\n\tprivate subscribers: OT.Subscriber[] = [];\n\n\tprivate callStateSubject = new BehaviorSubject<CallState>(CallState.IDLE);\n\tpublic callState$ = this.callStateSubject.asObservable();\n\n\tprivate viewModeSubject = new BehaviorSubject<ViewMode>(ViewMode.FULLSCREEN);\n\tpublic viewMode$ = this.viewModeSubject.asObservable();\n\n\tprivate isMutedSubject = new BehaviorSubject<boolean>(false);\n\tpublic isMuted$ = this.isMutedSubject.asObservable();\n\n\t// Session info for PiP mode restoration\n\tprivate currentSessionId: string | null = null;\n\tprivate currentToken: string | null = null;\n\n\tconstructor(\n\t\t@Inject(TAS_HTTP_CLIENT) private httpClient: TasHttpClient,\n\t\t@Inject(TAS_CONFIG) private config: TasConfig\n\t) {}\n\n\t// Getters\n\tpublic get currentSession(): OT.Session | null {\n\t\treturn this.session;\n\t}\n\n\tpublic get currentPublisher(): OT.Publisher | null {\n\t\treturn this.publisher;\n\t}\n\n\tpublic get currentSubscribers(): OT.Subscriber[] {\n\t\treturn this.subscribers;\n\t}\n\n\tpublic get sessionId(): string | null {\n\t\treturn this.currentSessionId;\n\t}\n\n\tpublic get token(): string | null {\n\t\treturn this.currentToken;\n\t}\n\n\tpublic get isMuted(): boolean {\n\t\treturn this.isMutedSubject.getValue();\n\t}\n\n\t// View Mode Methods\n\tpublic setViewMode(mode: ViewMode): void {\n\t\tthis.viewModeSubject.next(mode);\n\t}\n\n\tpublic enterPipMode(): void {\n\t\tthis.viewModeSubject.next(ViewMode.PIP);\n\t}\n\n\tpublic exitPipMode(): void {\n\t\tthis.viewModeSubject.next(ViewMode.FULLSCREEN);\n\t}\n\n\tpublic isPipMode(): boolean {\n\t\treturn this.viewModeSubject.getValue() === ViewMode.PIP;\n\t}\n\n\t// Audio Control\n\tpublic toggleMute(): void {\n\t\tif (this.publisher) {\n\t\t\tconst newMuteState = !this.isMutedSubject.getValue();\n\t\t\tconst shouldEnableAudio = !newMuteState;\n\t\t\t\n\t\t\t// Use OpenTok's publishAudio\n\t\t\tthis.publisher.publishAudio(shouldEnableAudio);\n\t\t\t\n\t\t\t// Also directly control the MediaStreamTrack as backup\n\t\t\tconst audioTrack = this.publisher.getAudioSource?.();\n\t\t\tif (audioTrack) {\n\t\t\t\taudioTrack.enabled = shouldEnableAudio;\n\t\t\t}\n\t\t\t\n\t\t\tthis.isMutedSubject.next(newMuteState);\n\t\t}\n\t}\n\n\tpublic setMute(muted: boolean): void {\n\t\tif (this.publisher) {\n\t\t\tthis.publisher.publishAudio(!muted);\n\t\t\tthis.isMutedSubject.next(muted);\n\t\t}\n\t}\n\n\t// Session Management\n\tpublic disconnectSession(): void {\n\t\tif (this.session) {\n\t\t\tthis.session.disconnect();\n\t\t\tthis.session = null;\n\t\t}\n\t\tthis.publisher = null;\n\t\tthis.subscribers = [];\n\t\tthis.currentSessionId = null;\n\t\tthis.currentToken = null;\n\t\tthis.isMutedSubject.next(false); // Reset mute state\n\t\tthis.viewModeSubject.next(ViewMode.FULLSCREEN);\n\t\tthis.callStateSubject.next(CallState.DISCONNECTED);\n\t}\n\n\tpublic isCallActive(): boolean {\n\t\treturn this.callStateSubject.getValue() === CallState.CONNECTED;\n\t}\n\n\t// API Methods\n\tpublic createRoom(payload: CreateRoomRequest): Observable<CreateRoomResponse> {\n\t\treturn this.httpClient.post<CreateRoomResponse>(\"v2/room\", { body: payload, headers: {} }).pipe(\n\t\t\tmap((response) => response as CreateRoomResponse),\n\t\t\tcatchError((error) => {\n\t\t\t\tconsole.error(\"TAS Service: createRoom failed\", error);\n\t\t\t\tthrow error;\n\t\t\t})\n\t\t);\n\t}\n\n\tpublic generateToken(payload: GenerateTokenRequest): Observable<GenerateTokenResponse> {\n\t\treturn this.httpClient.post<GenerateTokenResponse>(\"v2/room/token\", { body: payload, headers: {} }).pipe(\n\t\t\tmap((response: any) => response as GenerateTokenResponse),\n\t\t\tcatchError((error) => {\n\t\t\t\tconsole.error(\"TAS Service: generateToken failed\", error);\n\t\t\t\tthrow error;\n\t\t\t})\n\t\t);\n\t}\n\n\t/**\n\t * Connects to a TokBox video session\n\t */\n\tpublic connectSession(\n\t\tsessionId: string,\n\t\ttoken: string,\n\t\tpublisherElement: string,\n\t\tsubscriberElement: string\n\t): Promise<void> {\n\t\tthis.callStateSubject.next(CallState.CONNECTING);\n\t\tthis.currentSessionId = sessionId;\n\t\tthis.currentToken = token;\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!OT.checkSystemRequirements()) {\n\t\t\t\tthis.callStateSubject.next(CallState.ERROR);\n\t\t\t\treject(new Error(\"Browser not compatible with TokBox\"));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.session = OT.initSession(this.config.tokBoxApiKey, sessionId);\n\n\t\t\t// Handle new streams (remote participants joining)\n\t\t\tthis.session.on(\"streamCreated\", (event) => {\n\t\t\t\tconst subscriber = this.session?.subscribe(\n\t\t\t\t\tevent.stream,\n\t\t\t\t\tsubscriberElement,\n\t\t\t\t\t{\n\t\t\t\t\t\tinsertMode: \"append\",\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t},\n\t\t\t\t\t(error) => {\n\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\tconsole.error(\"Error subscribing to stream:\", error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (subscriber) {\n\t\t\t\t\tthis.subscribers.push(subscriber);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Handle streams ending (remote participants leaving)\n\t\t\tthis.session.on(\"streamDestroyed\", (event) => {\n\t\t\t\tthis.subscribers = this.subscribers.filter(\n\t\t\t\t\t(sub) => sub.stream?.streamId !== event.stream.streamId\n\t\t\t\t);\n\t\t\t});\n\n\t\t\t// Handle session disconnection\n\t\t\tthis.session.on(\"sessionDisconnected\", () => {\n\t\t\t\tthis.callStateSubject.next(CallState.DISCONNECTED);\n\t\t\t});\n\n\t\t\t// Connect to session\n\t\t\tthis.session.connect(token, (error) => {\n\t\t\t\tif (error) {\n\t\t\t\t\tconsole.error(\"Error connecting to session:\", error);\n\t\t\t\t\tthis.callStateSubject.next(CallState.ERROR);\n\t\t\t\t\treject(error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Initialize publisher (local video)\n\t\t\t\tthis.publisher = OT.initPublisher(\n\t\t\t\t\tpublisherElement,\n\t\t\t\t\t{\n\t\t\t\t\t\tinsertMode: \"append\",\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t},\n\t\t\t\t\t(err) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\tconsole.error(\"Error initializing publisher:\", err);\n\t\t\t\t\t\t\tthis.callStateSubject.next(CallState.ERROR);\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Publish to session\n\t\t\t\t\t\tthis.session?.publish(this.publisher, (pubErr) => {\n\t\t\t\t\t\t\tif (pubErr) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error publishing stream:\", pubErr);\n\t\t\t\t\t\t\t\tthis.callStateSubject.next(CallState.ERROR);\n\t\t\t\t\t\t\t\treject(pubErr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.callStateSubject.next(CallState.CONNECTED);\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n\n\t// Video Element Movement Methods\n\tpublic movePublisherTo(newContainerId: string): void {\n\t\tif (!this.publisher) return;\n\t\t\n\t\tconst publisherElement = this.publisher.element;\n\t\tconst newContainer = document.getElementById(newContainerId);\n\t\t\n\t\tif (publisherElement && newContainer) {\n\t\t\tnewContainer.appendChild(publisherElement);\n\t\t}\n\t}\n\n\tpublic moveSubscribersTo(newContainerId: string): void {\n\t\tconst newContainer = document.getElementById(newContainerId);\n\t\tif (!newContainer) return;\n\t\t\n\t\tthis.subscribers.forEach((subscriber) => {\n\t\t\tconst subscriberElement = subscriber.element;\n\t\t\tif (subscriberElement) {\n\t\t\t\tnewContainer.appendChild(subscriberElement);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Moves the main video (subscriber if available, otherwise publisher) to a container.\n\t * Used for PiP mode to show only one video.\n\t */\n\tpublic moveMainVideoTo(newContainerId: string): void {\n\t\tconst newContainer = document.getElementById(newContainerId);\n\t\tif (!newContainer) return;\n\n\t\t// Prefer remote video (subscriber) as main\n\t\tif (this.subscribers.length > 0 && this.subscribers[0].element) {\n\t\t\tnewContainer.appendChild(this.subscribers[0].element);\n\t\t\treturn;\n\t\t}\n\n\t\t// Fall back to local video (publisher)\n\t\tif (this.publisher?.element) {\n\t\t\tnewContainer.appendChild(this.publisher.element);\n\t\t}\n\t}\n\n\t/**\n\t * Moves videos back to fullscreen containers\n\t */\n\tpublic moveVideosToFullscreen(): void {\n\t\tthis.moveSubscribersTo('subscriber-container');\n\t\tthis.movePublisherTo('publisher-container');\n\t}\n}\n\n","import { Component, OnInit, OnDestroy, Input, ViewChild, ElementRef, AfterViewInit } from '@angular/core';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { TasService } from '../../services/tas.service';\nimport { CallState, ViewMode } from '../../interfaces/tas.interfaces';\nimport { Subscription } from 'rxjs';\nimport interact from 'interactjs';\n\n@Component({\n\tselector: 'tas-videocall',\n\ttemplateUrl: './tas-videocall.component.html',\n\tstyleUrls: ['./tas-videocall.component.scss']\n})\nexport class TasVideocallComponent implements OnInit, OnDestroy, AfterViewInit {\n\n\t@Input() sessionId!: string;\n\t@Input() token!: string;\n\t@Input() isReturningFromPip: boolean = false;\n\t\n\t@ViewChild('publisherContainer') publisherContainer!: ElementRef;\n\t@ViewChild('subscriberContainer') subscriberContainer!: ElementRef;\n\n\tpublic isPublisherSmall = true;\n\tpublic callState = CallState.IDLE;\n\tpublic isMuted = false;\n\n\tprivate subscriptions = new Subscription();\n\n\tconstructor(\n\t\tpublic activeModal: NgbActiveModal,\n\t\tprivate tasService: TasService\n\t) { }\n\n\tngOnInit(): void {\n\t\tthis.setupSubscriptions();\n\t\tthis.initializeCall();\n\t}\n\n\tngAfterViewInit(): void {\n\t\tthis.initInteract();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscriptions.unsubscribe();\n\t\t\n\t\t// Only disconnect if not in PiP mode (keep session alive for floating window)\n\t\tif (!this.tasService.isPipMode()) {\n\t\t\tthis.tasService.disconnectSession();\n\t\t}\n\t\t\n\t\tinteract('.publisher-view').unset();\n\t}\n\n\t// Public Methods\n\thangUp(): void {\n\t\tthis.tasService.disconnectSession();\n\t}\n\n\ttoggleMute(): void {\n\t\tthis.tasService.toggleMute();\n\t}\n\n\tminimize(): void {\n\t\tthis.tasService.moveMainVideoTo('pip-main-video');\n\t\t// Small delay to ensure video is moved before closing modal\n\t\tsetTimeout(() => this.tasService.enterPipMode(), 50);\n\t}\n\n\ttoggleSwap(): void {\n\t\tthis.isPublisherSmall = !this.isPublisherSmall;\n\t\tthis.resetVideoPositions();\n\t\tsetTimeout(() => this.initInteract());\n\t}\n\n\tonDoubleClick(): void {\n\t\tthis.toggleSwap();\n\t}\n\n\t// Private Methods\n\tprivate setupSubscriptions(): void {\n\t\t// Call state subscription\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.callState$.subscribe(state => {\n\t\t\t\tthis.callState = state;\n\t\t\t\tif (state === CallState.DISCONNECTED) {\n\t\t\t\t\tthis.activeModal.close('hangup');\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\t// View mode subscription\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.viewMode$.subscribe(mode => {\n\t\t\t\tif (mode === ViewMode.PIP) {\n\t\t\t\t\tthis.activeModal.close('pip');\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\t// Mute state subscription\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.isMuted$.subscribe(muted => {\n\t\t\t\tthis.isMuted = muted;\n\t\t\t})\n\t\t);\n\t}\n\n\tprivate initializeCall(): void {\n\t\tif (this.isReturningFromPip) {\n\t\t\t// Returning from PiP - just move videos back\n\t\t\tsetTimeout(() => this.tasService.moveVideosToFullscreen(), 100);\n\t\t} else if (this.sessionId && this.token) {\n\t\t\t// New call - connect to session\n\t\t\tthis.tasService.connectSession(\n\t\t\t\tthis.sessionId,\n\t\t\t\tthis.token,\n\t\t\t\t'publisher-container',\n\t\t\t\t'subscriber-container'\n\t\t\t).catch(err => {\n\t\t\t\tconsole.error('Error connecting to video call:', err);\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate resetVideoPositions(): void {\n\t\tconst publisherEl = this.publisherContainer?.nativeElement as HTMLElement;\n\t\tconst subscriberEl = this.subscriberContainer?.nativeElement as HTMLElement;\n\n\t\tif (publisherEl) {\n\t\t\tpublisherEl.removeAttribute('style');\n\t\t\tpublisherEl.removeAttribute('data-x');\n\t\t\tpublisherEl.removeAttribute('data-y');\n\t\t}\n\n\t\tif (subscriberEl) {\n\t\t\tsubscriberEl.removeAttribute('style');\n\t\t\tsubscriberEl.removeAttribute('data-x');\n\t\t\tsubscriberEl.removeAttribute('data-y');\n\t\t}\n\t}\n\n\tprivate initInteract(): void {\n\t\tinteract('.publisher-view').unset();\n\n\t\tinteract('.publisher-view')\n\t\t\t.draggable({\n\t\t\t\tinertia: true,\n\t\t\t\tmodifiers: [\n\t\t\t\t\tinteract.modifiers.restrictRect({\n\t\t\t\t\t\trestriction: 'parent',\n\t\t\t\t\t\tendOnly: true\n\t\t\t\t\t})\n\t\t\t\t],\n\t\t\t\tautoScroll: true,\n\t\t\t\tlisteners: {\n\t\t\t\t\tmove: (event) => {\n\t\t\t\t\t\tconst target = event.target;\n\t\t\t\t\t\tconst x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;\n\t\t\t\t\t\tconst y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;\n\n\t\t\t\t\t\ttarget.style.transform = `translate(${x}px, ${y}px)`;\n\t\t\t\t\t\ttarget.setAttribute('data-x', String(x));\n\t\t\t\t\t\ttarget.setAttribute('data-y', String(y));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.resizable({\n\t\t\t\tedges: { left: false, right: true, bottom: true, top: false },\n\t\t\t\tlisteners: {\n\t\t\t\t\tmove: (event) => {\n\t\t\t\t\t\tconst target = event.target;\n\t\t\t\t\t\tlet x = parseFloat(target.getAttribute('data-x')) || 0;\n\t\t\t\t\t\tlet y = parseFloat(target.getAttribute('data-y')) || 0;\n\n\t\t\t\t\t\ttarget.style.width = `${event.rect.width}px`;\n\t\t\t\t\t\ttarget.style.height = `${event.rect.height}px`;\n\n\t\t\t\t\t\tx += event.deltaRect.left;\n\t\t\t\t\t\ty += event.deltaRect.top;\n\n\t\t\t\t\t\ttarget.style.transform = `translate(${x}px, ${y}px)`;\n\t\t\t\t\t\ttarget.setAttribute('data-x', String(x));\n\t\t\t\t\t\ttarget.setAttribute('data-y', String(y));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmodifiers: [\n\t\t\t\t\tinteract.modifiers.restrictEdges({ outer: 'parent' }),\n\t\t\t\t\tinteract.modifiers.restrictSize({ min: { width: 150, height: 100 } }),\n\t\t\t\t\tinteract.modifiers.aspectRatio({ ratio: 'preserve' })\n\t\t\t\t],\n\t\t\t\tinertia: true\n\t\t\t});\n\t}\n}\n\n","<div class=\"tas-videocall-container\">\n\t<div id=\"subscriber-container\" \n\t\t[class.subscriber-view]=\"isPublisherSmall\" \n\t\t[class.publisher-view]=\"!isPublisherSmall\"\n\t\t#subscriberContainer\n\t\t(dblclick)=\"onDoubleClick()\">\n\t</div>\n\n\t<div id=\"publisher-container\" \n\t\t[class.publisher-view]=\"isPublisherSmall\" \n\t\t[class.subscriber-view]=\"!isPublisherSmall\"\n\t\t#publisherContainer \n\t\t(dblclick)=\"onDoubleClick()\">\n\t</div>\n\t\n\t<div class=\"controls-container\">\n\t\t<button class=\"btn swap-btn\" (click)=\"toggleSwap()\" title=\"Swap view\">\n\t\t\t<i class=\"fa fa-refresh\"></i>\n\t\t</button>\n\t\t<button class=\"btn pip-btn\" (click)=\"minimize()\" title=\"Minimize (Picture in Picture)\">\n\t\t\t<i class=\"fa fa-compress\"></i>\n\t\t</button>\n\t\t<button class=\"btn mute-btn\" [class.muted]=\"isMuted\" (click)=\"toggleMute()\" [title]=\"isMuted ? 'Unmute microphone' : 'Mute microphone'\">\n\t\t\t<i class=\"fa\" [class.fa-microphone]=\"!isMuted\" [class.fa-microphone-slash]=\"isMuted\"></i>\n\t\t</button>\n\t\t<button class=\"btn hangup-btn\" (click)=\"hangUp()\" title=\"Hang up\">\n\t\t\t<i class=\"fa fa-phone\" style=\"transform: rotate(135deg);\"></i>\n\t\t</button>\n\t</div>\n</div>\n\n","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\nimport { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';\nimport { TasService } from '../../services/tas.service';\nimport { Subscription } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport {\n\tCreateRoomRequest,\n\tCreateRoomUser,\n\tTasCurrentUser,\n\tTasRoomType,\n\tTasSessionType,\n\tTasUserRole,\n\tViewMode\n} from '../../interfaces/tas.interfaces';\nimport { TasVideocallComponent } from '../tas-videocall/tas-videocall.component';\n\nexport enum WaitingRoomState {\n\tIDLE = 'IDLE',\n\tCREATING_ROOM = 'CREATING_ROOM',\n\tGETTING_TOKEN = 'GETTING_TOKEN',\n\tREADY = 'READY',\n\tERROR = 'ERROR'\n}\n\n@Component({\n\tselector: 'tas-waiting-room',\n\ttemplateUrl: './tas-waiting-room.component.html',\n\tstyleUrls: ['./tas-waiting-room.component.scss']\n})\nexport class TasWaitingRoomComponent implements OnInit, OnDestroy {\n\t// Room configuration inputs\n\t@Input() appointmentId: number = 1;\n\t@Input() product: string = 'uell';\n\t@Input() tenantId: string = '';\n\t@Input() currentUser!: TasCurrentUser;\n\t@Input() ownerUserIds!: number[];\n\t@Input() regularUserIds: number[] = [];\n\t@Input() moderatorUserIds: number[] = [];\n\n\t// Component state\n\tpublic state: WaitingRoomState = WaitingRoomState.IDLE;\n\tpublic WaitingRoomState = WaitingRoomState; // Expose enum to template\n\tpublic errorMessage: string = '';\n\n\t// Session data\n\tprivate sessionId: string = '';\n\tprivate token: string = '';\n\tprivate users: CreateRoomUser[] = [];\n\tprivate subscriptions = new Subscription();\n\tprivate videoCallModalRef: NgbModalRef | null = null;\n\n\tconstructor(\n\t\tpublic activeModal: NgbActiveModal,\n\t\tprivate tasService: TasService,\n\t\tprivate modalService: NgbModal\n\t) {}\n\n\tngOnInit(): void {\n\t\tthis.buildUsersArray();\n\t\tthis.setupViewModeSubscription();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscriptions.unsubscribe();\n\t}\n\n\t/**\n\t * Creates the room and fetches the token\n\t */\n\tcreateRoom(): void {\n\t\tif (!this.tenantId || !this.currentUser?.name) {\n\t\t\tthis.state = WaitingRoomState.ERROR;\n\t\t\tthis.errorMessage = 'Missing configuration data (tenant or user)';\n\t\t\treturn;\n\t\t}\n\n\t\tthis.state = WaitingRoomState.CREATING_ROOM;\n\t\tthis.errorMessage = '';\n\n\t\tconst body: CreateRoomRequest = {\n\t\t\troomType: TasRoomType.TAS,\n\t\t\ttype: TasSessionType.SPONTANEOUS,\n\t\t\ttenant: this.tenantId,\n\t\t\tappointmentId: this.appointmentId,\n\t\t\tusers: this.users,\n\t\t\tproduct: this.product\n\t\t};\n\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.createRoom(body).pipe(\n\t\t\t\tswitchMap(response => {\n\t\t\t\t\tthis.sessionId = response.content.sessionId;\n\t\t\t\t\tthis.state = WaitingRoomState.GETTING_TOKEN;\n\n\t\t\t\t\treturn this.tasService.generateToken({\n\t\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\t\tname: this.currentUser.name,\n\t\t\t\t\t\tlastname: this.currentUser.lastname,\n\t\t\t\t\t\troleVC: this.currentUser.role\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t).subscribe({\n\t\t\t\tnext: (tokenResponse) => {\n\t\t\t\t\tthis.token = tokenResponse.content.token;\n\t\t\t\t\tthis.state = WaitingRoomState.READY;\n\t\t\t\t},\n\t\t\t\terror: (err) => {\n\t\t\t\t\tconsole.error('Error creating room or getting token:', err);\n\t\t\t\t\tthis.state = WaitingRoomState.ERROR;\n\t\t\t\t\tthis.errorMessage = 'Error creating room. Please try again.';\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\t/**\n\t * Joins the video call session\n\t */\n\tjoinSession(): void {\n\t\tif (!this.sessionId || !this.token) {\n\t\t\tthis.errorMessage = 'Cannot join session. Incomplete data.';\n\t\t\treturn;\n\t\t}\n\n\t\t// Close waiting room and open video call\n\t\tthis.activeModal.close('joining');\n\t\tthis.openVideoCallModal();\n\t}\n\n\t/**\n\t * Closes the waiting room\n\t */\n\tcancel(): void {\n\t\tthis.activeModal.dismiss('cancel');\n\t}\n\n\t/**\n\t * Retry after an error\n\t */\n\tretry(): void {\n\t\tthis.state = WaitingRoomState.IDLE;\n\t\tthis.errorMessage = '';\n\t\tthis.sessionId = '';\n\t\tthis.token = '';\n\t}\n\n\t// Private Methods\n\tprivate buildUsersArray(): void {\n\t\tthis.users = [];\n\n\t\t// Add owners from input\n\t\tthis.ownerUserIds.forEach(id => {\n\t\t\tthis.users.push({ userExternalId: id, rol: TasUserRole.OWNER });\n\t\t});\n\n\t\t// Add regular users from input\n\t\tthis.regularUserIds.forEach(id => {\n\t\t\tthis.users.push({ userExternalId: id, rol: TasUserRole.USER });\n\t\t});\n\n\t\t// Add moderators from input\n\t\tthis.moderatorUserIds.forEach(id => {\n\t\t\tthis.users.push({ userExternalId: id, rol: TasUserRole.MODERATOR });\n\t\t});\n\t}\n\n\tprivate setupViewModeSubscription(): void {\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.viewMode$.subscribe(mode => {\n\t\t\t\t// Re-open video call modal when returning from PiP mode\n\t\t\t\tif (mode === ViewMode.FULLSCREEN && \n\t\t\t\t\tthis.tasService.isCallActive() && \n\t\t\t\t\t!this.videoCallModalRef) {\n\t\t\t\t\tconst sessionId = this.tasService.sessionId;\n\t\t\t\t\tconst token = this.tasService.token;\n\t\t\t\t\tif (sessionId && token) {\n\t\t\t\t\t\tthis.openVideoCallModal(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\tprivate openVideoCallModal(isReturningFromPip: boolean = false): void {\n\t\tthis.videoCallModalRef = this.modalService.open(TasVideocallComponent, {\n\t\t\tsize: 'xl',\n\t\t\twindowClass: 'tas-video-modal',\n\t\t\tbackdrop: 'static',\n\t\t\tkeyboard: false\n\t\t});\n\n\t\tconst sessionIdToUse = this.sessionId || this.tasService.sessionId;\n\t\tconst tokenToUse = this.token || this.tasService.token;\n\n\t\tthis.videoCallModalRef.componentInstance.sessionId = sessionIdToUse;\n\t\tthis.videoCallModalRef.componentInstance.token = tokenToUse;\n\t\tthis.videoCallModalRef.componentInstance.isReturningFromPip = isReturningFromPip;\n\n\t\tthis.videoCallModalRef.result.then(\n\t\t\t() => { this.videoCallModalRef = null; },\n\t\t\t() => { this.videoCallModalRef = null; }\n\t\t);\n\t}\n}\n\n","<div class=\"tas-waiting-room\">\n\t<!-- Header -->\n\t<div class=\"waiting-room-header\">\n\t\t<div class=\"header-icon\">\n\t\t\t<i class=\"fa fa-video-camera\"></i>\n\t\t</div>\n\t\t<h2 class=\"header-title\">Waiting Room</h2>\n\t\t<p class=\"header-subtitle\">Prepare for your video call</p>\n\t\t<button type=\"button\" class=\"close-btn\" (click)=\"cancel()\" aria-label=\"Close\">\n\t\t\t<span aria-hidden=\"true\">&times;</span>\n\t\t</button>\n\t</div>\n\n\t<!-- Content -->\n\t<div class=\"waiting-room-content\">\n\t\t<!-- IDLE State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.IDLE\">\n\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t<i class=\"fa fa-plus-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreate a new video call room\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tPress the button to begin\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t(click)=\"createRoom()\">\n\t\t\t\t<i class=\"fa fa-plus\"></i>\n\t\t\t\tCreate Room\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- CREATING_ROOM State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.CREATING_ROOM\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreating video call room...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Creating</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tPreparing room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- READY State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tRoom is ready!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- ERROR State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.ERROR\">\n\t\t\t<div class=\"state-icon error\">\n\t\t\t\t<i class=\"fa fa-exclamation-triangle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message error\">\n\t\t\t\tAn error occurred\n\t\t\t</p>\n\t\t\t<p class=\"error-details\" *ngIf=\"errorMessage\">\n\t\t\t\t{{ errorMessage }}\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn retry-btn\"\n\t\t\t\t(click)=\"retry()\">\n\t\t\t\t<i class=\"fa fa-refresh\"></i>\n\t\t\t\tRetry\n\t\t\t</button>\n\t\t</div>\n\t</div>\n\n\t<!-- Footer -->\n\t<div class=\"waiting-room-footer\">\n\t\t<button \n\t\t\ttype=\"button\" \n\t\t\tclass=\"btn cancel-btn\"\n\t\t\t(click)=\"cancel()\">\n\t\t\tCancel\n\t\t</button>\n\t</div>\n</div>\n\n","import { Component, OnInit, OnDestroy, Input } from \"@angular/core\";\nimport { NgbModal, NgbModalRef } from \"@ng-bootstrap/ng-bootstrap\";\nimport { Subscription } from \"rxjs\";\nimport { TasCurrentUser, ViewMode } from \"../../interfaces/tas.interfaces\";\nimport { TasWaitingRoomComponent } from \"../tas-waiting-room/tas-waiting-room.component\";\nimport { TasVideocallComponent } from \"../tas-videocall/tas-videocall.component\";\nimport { TasService } from \"../../services/tas.service\";\n\n@Component({\n\tselector: \"tas-btn\",\n\ttemplateUrl: \"./tas-btn.component.html\",\n\tstyleUrls: [\"./tas-btn.component.scss\"],\n})\nexport class TasButtonComponent implements OnInit, OnDestroy {\n\t@Input() appointmentId: number = 1;\n\t@Input() product: string = \"uell\";\n\t@Input() tenantId: string = \"\";\n\t@Input() currentUser!: TasCurrentUser;\n\t@Input() ownerUserIds!: number[];\n\t@Input() regularUserIds: number[] = [];\n\t@Input() moderatorUserIds: number[] = [];\n\t\n\tpublic isLoading = false;\n\t\n\tprivate subscriptions = new Subscription();\n\tprivate currentModalRef: NgbModalRef | null = null;\n\tprivate videoCallModalRef: NgbModalRef | null = null;\n\n\tconstructor(\n\t\tprivate modalService: NgbModal,\n\t\tprivate tasService: TasService\n\t) {}\n\n\tngOnInit(): void {\n\t\tif (!this.ownerUserIds || this.ownerUserIds.length !== 1) {\n\t\t\tthrow new Error('tas-btn: ownerUserIds input is required and must contain exactly one user');\n\t\t}\n\t\t\n\t\t// Subscribe to viewMode to handle PiP return\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.viewMode$.subscribe(mode => {\n\t\t\t\t// Reopen video call modal when returning from PiP\n\t\t\t\tif (mode === ViewMode.FULLSCREEN && \n\t\t\t\t\tthis.tasService.isCallActive() && \n\t\t\t\t\t!this.videoCallModalRef) {\n\t\t\t\t\tconst sessionId = this.tasService.sessionId;\n\t\t\t\t\tconst token = this.tasService.token;\n\t\t\t\t\tif (sessionId && token) {\n\t\t\t\t\t\tthis.openVideoCallModal(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// When entering PiP, clear the videoCallModalRef since modal will close\n\t\t\t\tif (mode === ViewMode.PIP) {\n\t\t\t\t\tthis.videoCallModalRef = null;\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscriptions.unsubscribe();\n\t}\n\n\tonClick(): void {\n\t\tif (!this.tenantId || !this.currentUser?.name) {\n\t\t\tconsole.error(\"Tenant ID or current user not available\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.openWaitingRoomModal();\n\t}\n\n\tprivate openWaitingRoomModal(): void {\n\t\tthis.currentModalRef = this.modalService.open(TasWaitingRoomComponent, {\n\t\t\tsize: \"lg\",\n\t\t\twindowClass: \"tas-waiting-room-modal\",\n\t\t\tbackdrop: \"static\",\n\t\t\tkeyboard: false,\n\t\t\tcentered: true\n\t\t});\n\n\t\t// Pass all necessary inputs to the waiting room component\n\t\tthis.currentModalRef.componentInstance.appointmentId = this.appointmentId;\n\t\tthis.currentModalRef.componentInstance.product = this.product;\n\t\tthis.currentModalRef.componentInstance.tenantId = this.tenantId;\n\t\tthis.currentModalRef.componentInstance.currentUser = this.currentUser;\n\t\tthis.currentModalRef.componentInstance.ownerUserIds = this.ownerUserIds;\n\t\tthis.currentModalRef.componentInstance.regularUserIds = this.regularUserIds;\n\t\tthis.currentModalRef.componentInstance.moderatorUserIds = this.moderatorUserIds;\n\n\t\tthis.currentModalRef.result.then(\n\t\t\t() => { this.currentModalRef = null; },\n\t\t\t() => { this.currentModalRef = null; }\n\t\t);\n\t}\n\n\tprivate openVideoCallModal(isReturningFromPip: boolean = false): void {\n\t\tthis.videoCallModalRef = this.modalService.open(TasVideocallComponent, {\n\t\t\tsize: 'xl',\n\t\t\twindowClass: 'tas-video-modal',\n\t\t\tbackdrop: 'static',\n\t\t\tkeyboard: false\n\t\t});\n\n\t\tthis.videoCallModalRef.componentInstance.sessionId = this.tasService.sessionId;\n\t\tthis.videoCallModalRef.componentInstance.token = this.tasService.token;\n\t\tthis.videoCallModalRef.componentInstance.isReturningFromPip = isReturningFromPip;\n\n\t\tthis.videoCallModalRef.result.then(\n\t\t\t() => { this.videoCallModalRef = null; },\n\t\t\t() => { this.videoCallModalRef = null; }\n\t\t);\n\t}\n}\n\n","<button\n\ttype=\"button\"\n\tclass=\"btn btn-primary tas-btn\"\n\t(click)=\"onClick()\"\n\t[disabled]=\"isLoading\"\n>\n\t<i class=\"fa fa-video-camera\" aria-hidden=\"true\" *ngIf=\"!isLoading\"></i>\n\t<span *ngIf=\"!isLoading\"> Iniciar TAS</span>\n\t<span *ngIf=\"isLoading\"> Processing...</span>\n</button>\n\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { TasService } from '../../services/tas.service';\nimport { CallState, ViewMode } from '../../interfaces/tas.interfaces';\nimport { Subscription } from 'rxjs';\nimport interact from 'interactjs';\n\n@Component({\n\tselector: 'tas-floating-call',\n\ttemplateUrl: './tas-floating-call.component.html',\n\tstyleUrls: ['./tas-floating-call.component.scss']\n})\nexport class TasFloatingCallComponent implements OnInit, OnDestroy {\n\n\tpublic isVisible = false;\n\tpublic isMuted = false;\n\n\tprivate subscriptions = new Subscription();\n\n\tconstructor(private tasService: TasService) { }\n\n\tngOnInit(): void {\n\t\tthis.setupSubscriptions();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscriptions.unsubscribe();\n\t\tinteract('.tas-floating-container').unset();\n\t}\n\n\t// Public Methods\n\tonExpand(): void {\n\t\tthis.tasService.exitPipMode();\n\t}\n\n\tonHangUp(): void {\n\t\tthis.tasService.disconnectSession();\n\t}\n\n\ttoggleMute(): void {\n\t\tthis.tasService.toggleMute();\n\t}\n\n\t// Private Methods\n\tprivate setupSubscriptions(): void {\n\t\t// Call state subscription\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.callState$.subscribe(state => {\n\t\t\t\tif (state === CallState.DISCONNECTED) {\n\t\t\t\t\tthis.isVisible = false;\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\t// View mode subscription\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.viewMode$.subscribe(mode => {\n\t\t\t\tthis.isVisible = mode === ViewMode.PIP && this.tasService.isCallActive();\n\t\t\t\tif (this.isVisible) {\n\t\t\t\t\tsetTimeout(() => this.initInteract(), 100);\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\t// Mute state subscription\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.isMuted$.subscribe(muted => {\n\t\t\t\tthis.isMuted = muted;\n\t\t\t})\n\t\t);\n\t}\n\n\t// Margin from screen edges (in pixels)\n\tprivate readonly PIP_MARGIN = 20;\n\n\tprivate initInteract(): void {\n\t\tinteract('.tas-floating-container').unset();\n\n\t\t// Create restriction area with margin\n\t\tconst margin = this.PIP_MARGIN;\n\t\tconst restrictToBodyWithMargin = {\n\t\t\trestriction: () => {\n\t\t\t\treturn {\n\t\t\t\t\tleft: margin,\n\t\t\t\t\ttop: margin,\n\t\t\t\t\tright: window.innerWidth - margin,\n\t\t\t\t\tbottom: window.innerHeight - margin\n\t\t\t\t};\n\t\t\t},\n\t\t\telementRect: { left: 0, right: 1, top: 0, bottom: 1 }\n\t\t};\n\n\t\tinteract('.tas-floating-container')\n\t\t\t.draggable({\n\t\t\t\tinertia: true,\n\t\t\t\tmodifiers: [\n\t\t\t\t\tinteract.modifiers.restrict(restrictToBodyWithMargin)\n\t\t\t\t],\n\t\t\t\tautoScroll: false,\n\t\t\t\tlisteners: {\n\t\t\t\t\tmove: (event) => {\n\t\t\t\t\t\tconst target = event.target;\n\t\t\t\t\t\tconst x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;\n\t\t\t\t\t\tconst y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;\n\n\t\t\t\t\t\ttarget.style.transform = `translate(${x}px, ${y}px)`;\n\t\t\t\t\t\ttarget.setAttribute('data-x', String(x));\n\t\t\t\t\t\ttarget.setAttribute('data-y', String(y));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.resizable({\n\t\t\t\tedges: { left: false, right: true, bottom: true, top: false },\n\t\t\t\tlisteners: {\n\t\t\t\t\tmove: (event) => {\n\t\t\t\t\t\tconst target = event.target;\n\t\t\t\t\t\tlet x = parseFloat(target.getAttribute('data-x')) || 0;\n\t\t\t\t\t\tlet y = parseFloat(target.getAttribute('data-y')) || 0;\n\n\t\t\t\t\t\t// Update element size\n\t\t\t\t\t\ttarget.style.width = `${event.rect.width}px`;\n\t\t\t\t\t\ttarget.style.height = `${event.rect.height}px`;\n\n\t\t\t\t\t\t// Translate when resizing from top or left edges\n\t\t\t\t\t\tx += event.deltaRect.left;\n\t\t\t\t\t\ty += event.deltaRect.top;\n\n\t\t\t\t\t\ttarget.style.transform = `translate(${x}px, ${y}px)`;\n\t\t\t\t\t\ttarget.setAttribute('data-x', String(x));\n\t\t\t\t\t\ttarget.setAttribute('data-y', String(y));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmodifiers: [\n\t\t\t\t\tinteract.modifiers.restrictEdges({\n\t\t\t\t\t\touter: {\n\t\t\t\t\t\t\tleft: margin,\n\t\t\t\t\t\t\ttop: margin,\n\t\t\t\t\t\t\tright: window.innerWidth - margin,\n\t\t\t\t\t\t\tbottom: window.innerHeight - margin\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tinteract.modifiers.restrictSize({\n\t\t\t\t\t\tmin: { width: 200, height: 130 },\n\t\t\t\t\t\tmax: { width: 500, height: 350 }\n\t\t\t\t\t}),\n\t\t\t\t\tinteract.modifiers.aspectRatio({ ratio: 'preserve' })\n\t\t\t\t],\n\t\t\t\tinertia: true\n\t\t\t});\n\t}\n}\n\n","<div class=\"tas-floating-container\" [class.visible]=\"isVisible\">\n\t<!-- Video content area - shows main video only -->\n\t<div class=\"floating-content\">\n\t\t<!-- Main video container (subscriber if available, otherwise publisher) -->\n\t\t<div id=\"pip-main-video\" class=\"pip-main-video\"></div>\n\n\t\t<!-- Bottom controls -->\n\t\t<div class=\"floating-controls\">\n\t\t\t<button class=\"action-btn expand-btn\" (click)=\"onExpand()\" title=\"Expand to fullscreen\">\n\t\t\t\t<i class=\"fa fa-expand\"></i>\n\t\t\t</button>\n\t\t\t<button class=\"action-btn mute-btn\" [class.muted]=\"isMuted\" (click)=\"toggleMute()\" [title]=\"isMuted ? 'Unmute microphone' : 'Mute microphone'\">\n\t\t\t\t<i class=\"fa\" [class.fa-microphone]=\"!isMuted\" [class.fa-microphone-slash]=\"isMuted\"></i>\n\t\t\t</button>\n\t\t\t<button class=\"action-btn hangup-btn\" (click)=\"onHangUp()\" title=\"Hang up call\">\n\t\t\t\t<i class=\"fa fa-phone\" style=\"transform: rotate(135deg);\"></i>\n\t\t\t</button>\n\t\t</div>\n\t</div>\n</div>\n\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TasButtonComponent } from './components/tas-btn/tas-btn.component';\nimport { TasVideocallComponent } from './components/tas-videocall/tas-videocall.component';\nimport { TasFloatingCallComponent } from './components/tas-floating-call/tas-floating-call.component';\nimport { TasWaitingRoomComponent } from './components/tas-waiting-room/tas-waiting-room.component';\nimport { TasService } from './services/tas.service';\nimport { TAS_CONFIG, TAS_HTTP_CLIENT, TasConfig, TasHttpClient } from './config/tas.config';\n\n@NgModule({\n declarations: [\n TasButtonComponent,\n TasVideocallComponent,\n TasFloatingCallComponent,\n TasWaitingRoomComponent\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n TasButtonComponent,\n TasVideocallComponent,\n TasFloatingCallComponent,\n TasWaitingRoomComponent\n ]\n})\nexport class TasUellSdkModule {\n /**\n * Use forRoot() to configure the TAS SDK module with required dependencies.\n * This should only be called once in your root AppModule.\n * \n * @example\n * ```typescript\n * import { TasUellSdkModule, TasHttpClient } from 'tas-uell-sdk';\n * \n * // Create an adapter that implements TasHttpClient\n * @Injectable({ providedIn: 'root' })\n * export class MyHttpAdapter implements TasHttpClient {\n * constructor(private http: HttpClient) {}\n * post<T>(url: string, options: { body: any; headers?: Record<string, string> }): Observable<T> {\n * return this.http.post<T>(url, options.body, { headers: options.headers });\n * }\n * }\n * \n * // In your AppModule\n * @NgModule({\n * imports: [\n * TasUellSdkModule.forRoot({\n * config: { tokBoxApiKey: 'YOUR_TOKBOX_API_KEY' },\n * httpClient: MyHttpAdapter\n * })\n * ]\n * })\n * export class AppModule { }\n * ```\n */\n static forRoot(options: {\n config: TasConfig;\n httpClient: new (...args: any[]) => TasHttpClient;\n }): ModuleWithProviders<TasUellSdkModule> {\n return {\n ngModule: TasUellSdkModule,\n providers: [\n { provide: TAS_CONFIG, useValue: options.config },\n { provide: TAS_HTTP_CLIENT, useClass: options.httpClient },\n TasService\n ]\n };\n }\n}\n\n","/*\n * Public API Surface of tas-uell-sdk\n */\n\n// Configuration and tokens\nexport * from './lib/config/tas.config';\n\n// Interfaces\nexport * from './lib/interfaces/tas.interfaces';\n\n// Service\nexport * from './lib/services/tas.service';\n\n// Components\nexport * from './lib/components/tas-btn/tas-btn.component';\nexport * from './lib/components/tas-waiting-room/tas-waiting-room.component';\nexport * from './lib/components/tas-videocall/tas-videocall.component';\nexport * from './lib/components/tas-floating-call/tas-floating-call.component';\n\n// Module\nexport * from './lib/tas-uell-sdk.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.TasService","i1.TasService"],"mappings":"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"}
1
+ {"version":3,"file":"tas-uell-sdk.mjs","sources":["../../../projects/tas-uell-sdk/src/lib/config/tas.config.ts","../../../projects/tas-uell-sdk/src/lib/interfaces/tas.interfaces.ts","../../../projects/tas-uell-sdk/src/lib/services/tas.service.ts","../../../projects/tas-uell-sdk/src/lib/components/tas-videocall/tas-videocall.component.ts","../../../projects/tas-uell-sdk/src/lib/components/tas-videocall/tas-videocall.component.html","../../../projects/tas-uell-sdk/src/lib/components/tas-waiting-room/tas-waiting-room.component.ts","../../../projects/tas-uell-sdk/src/lib/components/tas-waiting-room/tas-waiting-room.component.html","../../../projects/tas-uell-sdk/src/lib/components/tas-btn/tas-btn.component.ts","../../../projects/tas-uell-sdk/src/lib/components/tas-btn/tas-btn.component.html","../../../projects/tas-uell-sdk/src/lib/components/tas-floating-call/tas-floating-call.component.ts","../../../projects/tas-uell-sdk/src/lib/components/tas-floating-call/tas-floating-call.component.html","../../../projects/tas-uell-sdk/src/lib/tas-uell-sdk.module.ts","../../../projects/tas-uell-sdk/src/public-api.ts","../../../projects/tas-uell-sdk/src/tas-uell-sdk.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Configuration interface for the TAS module\n */\nexport interface TasConfig {\n\t/** TokBox/Vonage API Key */\n\ttokBoxApiKey: string;\n\t/** Optional API base URL for room/token endpoints */\n\tapiBaseUrl?: string;\n}\n\n/**\n * HTTP client interface that consuming apps must implement\n */\nexport interface TasHttpClient {\n\tpost<T>(url: string, options: { body: any; headers?: Record<string, string> }): Observable<T>;\n}\n\n/**\n * Injection token for TAS configuration\n */\nexport const TAS_CONFIG = new InjectionToken<TasConfig>('TAS_CONFIG');\n\n/**\n * Injection token for HTTP client adapter\n */\nexport const TAS_HTTP_CLIENT = new InjectionToken<TasHttpClient>('TAS_HTTP_CLIENT');\n\n","export interface CreateRoomUser {\n\tuserExternalId: number;\n\trol: TasUserRole;\n}\n\nexport interface CreateRoomRequest {\n\troomType: TasRoomType;\n\ttype: TasSessionType;\n\tutcScheduled?: string;\n\tproduct: string;\n\ttenant: string;\n\tappointmentId: number;\n\tusers: CreateRoomUser[];\n}\n\nexport interface CreateRoomResponse {\n\tcontent: {\n\t\troomType: string | null;\n\t\ttenant: string | null;\n\t\tuser_id: string | null;\n\t\tproduct: string | null;\n\t\trecord: boolean | null;\n\t\tsessionId: string;\n\t\troomId: number;\n\t\tstatus: TasSessionType;\n\t};\n}\n\nexport enum TasRoomType {\n\tTAS = \"TAS\",\n\tJM = \"JM\",\n\tWEBINAR = \"WEBINAR\"\n}\n\nexport enum TasSessionType {\n\tSPONTANEOUS = \"SPONTANEOUS\",\n\tSCHEDULED = \"SCHEDULED\"\n}\n\nexport enum TasUserRole {\n\tOWNER = \"OWNER\",\n\tUSER = \"USER\",\n\tMODERATOR = \"MODERATOR\"\n}\n\nexport interface TasCurrentUser {\n\tname: string;\n\tlastname: string;\n\trole: TasUserRole;\n}\n\nexport interface GenerateTokenRequest {\n\tsessionId: string;\n\tname: string;\n\tlastname: string;\n\troleVC: TasUserRole;\n}\n\nexport interface GenerateTokenResponse {\n\tcontent: {\n\t\ttoken: string;\n\t};\n}\n\n// Enums for TAS Service state management\nexport enum CallState {\n\tIDLE = 'IDLE',\n\tCONNECTING = 'CONNECTING',\n\tCONNECTED = 'CONNECTED',\n\tDISCONNECTED = 'DISCONNECTED',\n\tERROR = 'ERROR'\n}\n\nexport enum ViewMode {\n\tFULLSCREEN = 'FULLSCREEN',\n\tPIP = 'PIP'\n}\n\n","import { Injectable, Inject } from \"@angular/core\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\nimport { catchError, map } from \"rxjs/operators\";\nimport * as OT from \"@opentok/client\";\nimport {\n\tCreateRoomRequest,\n\tCreateRoomResponse,\n\tGenerateTokenRequest,\n\tGenerateTokenResponse,\n\tCallState,\n\tViewMode,\n} from \"../interfaces/tas.interfaces\";\nimport { TAS_CONFIG, TAS_HTTP_CLIENT, TasConfig, TasHttpClient } from \"../config/tas.config\";\n\n// Re-export enums for backward compatibility\nexport { CallState, ViewMode };\n\n@Injectable({\n\tprovidedIn: \"root\",\n})\nexport class TasService {\n\tprivate session: OT.Session | null = null;\n\tprivate publisher: OT.Publisher | null = null;\n\tprivate subscribers: OT.Subscriber[] = [];\n\n\tprivate callStateSubject = new BehaviorSubject<CallState>(CallState.IDLE);\n\tpublic callState$ = this.callStateSubject.asObservable();\n\n\tprivate viewModeSubject = new BehaviorSubject<ViewMode>(ViewMode.FULLSCREEN);\n\tpublic viewMode$ = this.viewModeSubject.asObservable();\n\n\tprivate isMutedSubject = new BehaviorSubject<boolean>(false);\n\tpublic isMuted$ = this.isMutedSubject.asObservable();\n\n\t// Session info for PiP mode restoration\n\tprivate currentSessionId: string | null = null;\n\tprivate currentToken: string | null = null;\n\n\tconstructor(\n\t\t@Inject(TAS_HTTP_CLIENT) private httpClient: TasHttpClient,\n\t\t@Inject(TAS_CONFIG) private config: TasConfig\n\t) {}\n\n\t// Getters\n\tpublic get currentSession(): OT.Session | null {\n\t\treturn this.session;\n\t}\n\n\tpublic get currentPublisher(): OT.Publisher | null {\n\t\treturn this.publisher;\n\t}\n\n\tpublic get currentSubscribers(): OT.Subscriber[] {\n\t\treturn this.subscribers;\n\t}\n\n\tpublic get sessionId(): string | null {\n\t\treturn this.currentSessionId;\n\t}\n\n\tpublic get token(): string | null {\n\t\treturn this.currentToken;\n\t}\n\n\tpublic get isMuted(): boolean {\n\t\treturn this.isMutedSubject.getValue();\n\t}\n\n\t// View Mode Methods\n\tpublic setViewMode(mode: ViewMode): void {\n\t\tthis.viewModeSubject.next(mode);\n\t}\n\n\tpublic enterPipMode(): void {\n\t\tthis.viewModeSubject.next(ViewMode.PIP);\n\t}\n\n\tpublic exitPipMode(): void {\n\t\tthis.viewModeSubject.next(ViewMode.FULLSCREEN);\n\t}\n\n\tpublic isPipMode(): boolean {\n\t\treturn this.viewModeSubject.getValue() === ViewMode.PIP;\n\t}\n\n\t// Audio Control\n\tpublic toggleMute(): void {\n\t\tif (this.publisher) {\n\t\t\tconst newMuteState = !this.isMutedSubject.getValue();\n\t\t\tconst shouldEnableAudio = !newMuteState;\n\t\t\t\n\t\t\t// Use OpenTok's publishAudio\n\t\t\tthis.publisher.publishAudio(shouldEnableAudio);\n\t\t\t\n\t\t\t// Also directly control the MediaStreamTrack as backup\n\t\t\tconst audioTrack = this.publisher.getAudioSource?.();\n\t\t\tif (audioTrack) {\n\t\t\t\taudioTrack.enabled = shouldEnableAudio;\n\t\t\t}\n\t\t\t\n\t\t\tthis.isMutedSubject.next(newMuteState);\n\t\t}\n\t}\n\n\tpublic setMute(muted: boolean): void {\n\t\tif (this.publisher) {\n\t\t\tthis.publisher.publishAudio(!muted);\n\t\t\tthis.isMutedSubject.next(muted);\n\t\t}\n\t}\n\n\t// Session Management\n\tpublic disconnectSession(): void {\n\t\tif (this.session) {\n\t\t\tthis.session.disconnect();\n\t\t\tthis.session = null;\n\t\t}\n\t\tthis.publisher = null;\n\t\tthis.subscribers = [];\n\t\tthis.currentSessionId = null;\n\t\tthis.currentToken = null;\n\t\tthis.isMutedSubject.next(false); // Reset mute state\n\t\tthis.viewModeSubject.next(ViewMode.FULLSCREEN);\n\t\tthis.callStateSubject.next(CallState.DISCONNECTED);\n\t}\n\n\tpublic isCallActive(): boolean {\n\t\treturn this.callStateSubject.getValue() === CallState.CONNECTED;\n\t}\n\n\t// API Methods\n\tpublic createRoom(payload: CreateRoomRequest): Observable<CreateRoomResponse> {\n\t\treturn this.httpClient.post<CreateRoomResponse>(\"v2/room\", { body: payload, headers: {} }).pipe(\n\t\t\tmap((response) => response as CreateRoomResponse),\n\t\t\tcatchError((error) => {\n\t\t\t\tconsole.error(\"TAS Service: createRoom failed\", error);\n\t\t\t\tthrow error;\n\t\t\t})\n\t\t);\n\t}\n\n\tpublic generateToken(payload: GenerateTokenRequest): Observable<GenerateTokenResponse> {\n\t\treturn this.httpClient.post<GenerateTokenResponse>(\"v2/room/token\", { body: payload, headers: {} }).pipe(\n\t\t\tmap((response: any) => response as GenerateTokenResponse),\n\t\t\tcatchError((error) => {\n\t\t\t\tconsole.error(\"TAS Service: generateToken failed\", error);\n\t\t\t\tthrow error;\n\t\t\t})\n\t\t);\n\t}\n\n\t/**\n\t * Connects to a TokBox video session\n\t */\n\tpublic connectSession(\n\t\tsessionId: string,\n\t\ttoken: string,\n\t\tpublisherElement: string,\n\t\tsubscriberElement: string\n\t): Promise<void> {\n\t\tthis.callStateSubject.next(CallState.CONNECTING);\n\t\tthis.currentSessionId = sessionId;\n\t\tthis.currentToken = token;\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!OT.checkSystemRequirements()) {\n\t\t\t\tthis.callStateSubject.next(CallState.ERROR);\n\t\t\t\treject(new Error(\"Browser not compatible with TokBox\"));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.session = OT.initSession(this.config.tokBoxApiKey, sessionId);\n\n\t\t\t// Handle new streams (remote participants joining)\n\t\t\tthis.session.on(\"streamCreated\", (event) => {\n\t\t\t\tconst subscriber = this.session?.subscribe(\n\t\t\t\t\tevent.stream,\n\t\t\t\t\tsubscriberElement,\n\t\t\t\t\t{\n\t\t\t\t\t\tinsertMode: \"append\",\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t},\n\t\t\t\t\t(error) => {\n\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\tconsole.error(\"Error subscribing to stream:\", error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (subscriber) {\n\t\t\t\t\tthis.subscribers.push(subscriber);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Handle streams ending (remote participants leaving)\n\t\t\tthis.session.on(\"streamDestroyed\", (event) => {\n\t\t\t\tthis.subscribers = this.subscribers.filter(\n\t\t\t\t\t(sub) => sub.stream?.streamId !== event.stream.streamId\n\t\t\t\t);\n\t\t\t});\n\n\t\t\t// Handle session disconnection\n\t\t\tthis.session.on(\"sessionDisconnected\", () => {\n\t\t\t\tthis.callStateSubject.next(CallState.DISCONNECTED);\n\t\t\t});\n\n\t\t\t// Connect to session\n\t\t\tthis.session.connect(token, (error) => {\n\t\t\t\tif (error) {\n\t\t\t\t\tconsole.error(\"Error connecting to session:\", error);\n\t\t\t\t\tthis.callStateSubject.next(CallState.ERROR);\n\t\t\t\t\treject(error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Initialize publisher (local video)\n\t\t\t\tthis.publisher = OT.initPublisher(\n\t\t\t\t\tpublisherElement,\n\t\t\t\t\t{\n\t\t\t\t\t\tinsertMode: \"append\",\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t},\n\t\t\t\t\t(err) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\tconsole.error(\"Error initializing publisher:\", err);\n\t\t\t\t\t\t\tthis.callStateSubject.next(CallState.ERROR);\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Publish to session\n\t\t\t\t\t\tthis.session?.publish(this.publisher, (pubErr) => {\n\t\t\t\t\t\t\tif (pubErr) {\n\t\t\t\t\t\t\t\tconsole.error(\"Error publishing stream:\", pubErr);\n\t\t\t\t\t\t\t\tthis.callStateSubject.next(CallState.ERROR);\n\t\t\t\t\t\t\t\treject(pubErr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.callStateSubject.next(CallState.CONNECTED);\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n\n\t// Video Element Movement Methods\n\tpublic movePublisherTo(newContainerId: string): void {\n\t\tif (!this.publisher) return;\n\t\t\n\t\tconst publisherElement = this.publisher.element;\n\t\tconst newContainer = document.getElementById(newContainerId);\n\t\t\n\t\tif (publisherElement && newContainer) {\n\t\t\tnewContainer.appendChild(publisherElement);\n\t\t}\n\t}\n\n\tpublic moveSubscribersTo(newContainerId: string): void {\n\t\tconst newContainer = document.getElementById(newContainerId);\n\t\tif (!newContainer) return;\n\t\t\n\t\tthis.subscribers.forEach((subscriber) => {\n\t\t\tconst subscriberElement = subscriber.element;\n\t\t\tif (subscriberElement) {\n\t\t\t\tnewContainer.appendChild(subscriberElement);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Moves the main video (subscriber if available, otherwise publisher) to a container.\n\t * Used for PiP mode to show only one video.\n\t */\n\tpublic moveMainVideoTo(newContainerId: string): void {\n\t\tconst newContainer = document.getElementById(newContainerId);\n\t\tif (!newContainer) return;\n\n\t\t// Prefer remote video (subscriber) as main\n\t\tif (this.subscribers.length > 0 && this.subscribers[0].element) {\n\t\t\tnewContainer.appendChild(this.subscribers[0].element);\n\t\t\treturn;\n\t\t}\n\n\t\t// Fall back to local video (publisher)\n\t\tif (this.publisher?.element) {\n\t\t\tnewContainer.appendChild(this.publisher.element);\n\t\t}\n\t}\n\n\t/**\n\t * Moves videos back to fullscreen containers\n\t */\n\tpublic moveVideosToFullscreen(): void {\n\t\tthis.moveSubscribersTo('subscriber-container');\n\t\tthis.movePublisherTo('publisher-container');\n\t}\n}\n\n","import { Component, OnInit, OnDestroy, Input, ViewChild, ElementRef, AfterViewInit } from '@angular/core';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { TasService } from '../../services/tas.service';\nimport { CallState, ViewMode } from '../../interfaces/tas.interfaces';\nimport { Subscription } from 'rxjs';\nimport interact from 'interactjs';\n\n@Component({\n\tselector: 'tas-videocall',\n\ttemplateUrl: './tas-videocall.component.html',\n\tstyleUrls: ['./tas-videocall.component.scss']\n})\nexport class TasVideocallComponent implements OnInit, OnDestroy, AfterViewInit {\n\n\t@Input() sessionId!: string;\n\t@Input() token!: string;\n\t@Input() isReturningFromPip: boolean = false;\n\t\n\t@ViewChild('publisherContainer') publisherContainer!: ElementRef;\n\t@ViewChild('subscriberContainer') subscriberContainer!: ElementRef;\n\n\tpublic isPublisherSmall = true;\n\tpublic callState = CallState.IDLE;\n\tpublic isMuted = false;\n\n\tprivate subscriptions = new Subscription();\n\n\tconstructor(\n\t\tpublic activeModal: NgbActiveModal,\n\t\tprivate tasService: TasService\n\t) { }\n\n\tngOnInit(): void {\n\t\tthis.setupSubscriptions();\n\t\tthis.initializeCall();\n\t}\n\n\tngAfterViewInit(): void {\n\t\tthis.initInteract();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscriptions.unsubscribe();\n\t\t\n\t\t// Only disconnect if not in PiP mode (keep session alive for floating window)\n\t\tif (!this.tasService.isPipMode()) {\n\t\t\tthis.tasService.disconnectSession();\n\t\t}\n\t\t\n\t\tinteract('.publisher-view').unset();\n\t}\n\n\t// Public Methods\n\thangUp(): void {\n\t\tthis.tasService.disconnectSession();\n\t}\n\n\ttoggleMute(): void {\n\t\tthis.tasService.toggleMute();\n\t}\n\n\tminimize(): void {\n\t\tthis.tasService.moveMainVideoTo('pip-main-video');\n\t\t// Small delay to ensure video is moved before closing modal\n\t\tsetTimeout(() => this.tasService.enterPipMode(), 50);\n\t}\n\n\ttoggleSwap(): void {\n\t\tthis.isPublisherSmall = !this.isPublisherSmall;\n\t\tthis.resetVideoPositions();\n\t\tsetTimeout(() => this.initInteract());\n\t}\n\n\tonDoubleClick(): void {\n\t\tthis.toggleSwap();\n\t}\n\n\t// Private Methods\n\tprivate setupSubscriptions(): void {\n\t\t// Call state subscription\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.callState$.subscribe(state => {\n\t\t\t\tthis.callState = state;\n\t\t\t\tif (state === CallState.DISCONNECTED) {\n\t\t\t\t\tthis.activeModal.close('hangup');\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\t// View mode subscription\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.viewMode$.subscribe(mode => {\n\t\t\t\tif (mode === ViewMode.PIP) {\n\t\t\t\t\tthis.activeModal.close('pip');\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\t// Mute state subscription\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.isMuted$.subscribe(muted => {\n\t\t\t\tthis.isMuted = muted;\n\t\t\t})\n\t\t);\n\t}\n\n\tprivate initializeCall(): void {\n\t\tif (this.isReturningFromPip) {\n\t\t\t// Returning from PiP - just move videos back\n\t\t\tsetTimeout(() => this.tasService.moveVideosToFullscreen(), 100);\n\t\t} else if (this.sessionId && this.token) {\n\t\t\t// New call - connect to session\n\t\t\tthis.tasService.connectSession(\n\t\t\t\tthis.sessionId,\n\t\t\t\tthis.token,\n\t\t\t\t'publisher-container',\n\t\t\t\t'subscriber-container'\n\t\t\t).catch(err => {\n\t\t\t\tconsole.error('Error connecting to video call:', err);\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate resetVideoPositions(): void {\n\t\tconst publisherEl = this.publisherContainer?.nativeElement as HTMLElement;\n\t\tconst subscriberEl = this.subscriberContainer?.nativeElement as HTMLElement;\n\n\t\tif (publisherEl) {\n\t\t\tpublisherEl.removeAttribute('style');\n\t\t\tpublisherEl.removeAttribute('data-x');\n\t\t\tpublisherEl.removeAttribute('data-y');\n\t\t}\n\n\t\tif (subscriberEl) {\n\t\t\tsubscriberEl.removeAttribute('style');\n\t\t\tsubscriberEl.removeAttribute('data-x');\n\t\t\tsubscriberEl.removeAttribute('data-y');\n\t\t}\n\t}\n\n\tprivate initInteract(): void {\n\t\tinteract('.publisher-view').unset();\n\n\t\tinteract('.publisher-view')\n\t\t\t.draggable({\n\t\t\t\tinertia: true,\n\t\t\t\tmodifiers: [\n\t\t\t\t\tinteract.modifiers.restrictRect({\n\t\t\t\t\t\trestriction: 'parent',\n\t\t\t\t\t\tendOnly: true\n\t\t\t\t\t})\n\t\t\t\t],\n\t\t\t\tautoScroll: true,\n\t\t\t\tlisteners: {\n\t\t\t\t\tmove: (event) => {\n\t\t\t\t\t\tconst target = event.target;\n\t\t\t\t\t\tconst x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;\n\t\t\t\t\t\tconst y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;\n\n\t\t\t\t\t\ttarget.style.transform = `translate(${x}px, ${y}px)`;\n\t\t\t\t\t\ttarget.setAttribute('data-x', String(x));\n\t\t\t\t\t\ttarget.setAttribute('data-y', String(y));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.resizable({\n\t\t\t\tedges: { left: false, right: true, bottom: true, top: false },\n\t\t\t\tlisteners: {\n\t\t\t\t\tmove: (event) => {\n\t\t\t\t\t\tconst target = event.target;\n\t\t\t\t\t\tlet x = parseFloat(target.getAttribute('data-x')) || 0;\n\t\t\t\t\t\tlet y = parseFloat(target.getAttribute('data-y')) || 0;\n\n\t\t\t\t\t\ttarget.style.width = `${event.rect.width}px`;\n\t\t\t\t\t\ttarget.style.height = `${event.rect.height}px`;\n\n\t\t\t\t\t\tx += event.deltaRect.left;\n\t\t\t\t\t\ty += event.deltaRect.top;\n\n\t\t\t\t\t\ttarget.style.transform = `translate(${x}px, ${y}px)`;\n\t\t\t\t\t\ttarget.setAttribute('data-x', String(x));\n\t\t\t\t\t\ttarget.setAttribute('data-y', String(y));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmodifiers: [\n\t\t\t\t\tinteract.modifiers.restrictEdges({ outer: 'parent' }),\n\t\t\t\t\tinteract.modifiers.restrictSize({ min: { width: 150, height: 100 } }),\n\t\t\t\t\tinteract.modifiers.aspectRatio({ ratio: 'preserve' })\n\t\t\t\t],\n\t\t\t\tinertia: true\n\t\t\t});\n\t}\n}\n\n","<div class=\"tas-videocall-container\">\n\t<div id=\"subscriber-container\" \n\t\t[class.subscriber-view]=\"isPublisherSmall\" \n\t\t[class.publisher-view]=\"!isPublisherSmall\"\n\t\t#subscriberContainer\n\t\t(dblclick)=\"onDoubleClick()\">\n\t</div>\n\n\t<div id=\"publisher-container\" \n\t\t[class.publisher-view]=\"isPublisherSmall\" \n\t\t[class.subscriber-view]=\"!isPublisherSmall\"\n\t\t#publisherContainer \n\t\t(dblclick)=\"onDoubleClick()\">\n\t</div>\n\t\n\t<div class=\"controls-container\">\n\t\t<button class=\"btn swap-btn\" (click)=\"toggleSwap()\" title=\"Swap view\">\n\t\t\t<i class=\"fa fa-refresh\"></i>\n\t\t</button>\n\t\t<button class=\"btn pip-btn\" (click)=\"minimize()\" title=\"Minimize (Picture in Picture)\">\n\t\t\t<i class=\"fa fa-compress\"></i>\n\t\t</button>\n\t\t<button class=\"btn mute-btn\" [class.muted]=\"isMuted\" (click)=\"toggleMute()\" [title]=\"isMuted ? 'Unmute microphone' : 'Mute microphone'\">\n\t\t\t<i class=\"fa\" [class.fa-microphone]=\"!isMuted\" [class.fa-microphone-slash]=\"isMuted\"></i>\n\t\t</button>\n\t\t<button class=\"btn hangup-btn\" (click)=\"hangUp()\" title=\"Hang up\">\n\t\t\t<i class=\"fa fa-phone\" style=\"transform: rotate(135deg);\"></i>\n\t\t</button>\n\t</div>\n</div>\n\n","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\nimport { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';\nimport { TasService } from '../../services/tas.service';\nimport { Subscription } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport {\n\tCreateRoomRequest,\n\tCreateRoomUser,\n\tTasCurrentUser,\n\tTasRoomType,\n\tTasSessionType,\n\tTasUserRole,\n\tViewMode\n} from '../../interfaces/tas.interfaces';\nimport { TasVideocallComponent } from '../tas-videocall/tas-videocall.component';\n\nexport enum WaitingRoomState {\n\tIDLE = 'IDLE',\n\tCREATING_ROOM = 'CREATING_ROOM',\n\tGETTING_TOKEN = 'GETTING_TOKEN',\n\tREADY = 'READY',\n\tERROR = 'ERROR'\n}\n\n@Component({\n\tselector: 'tas-waiting-room',\n\ttemplateUrl: './tas-waiting-room.component.html',\n\tstyleUrls: ['./tas-waiting-room.component.scss']\n})\nexport class TasWaitingRoomComponent implements OnInit, OnDestroy {\n\t// Room configuration inputs\n\t@Input() appointmentId: number = 1;\n\t@Input() product: string = 'uell';\n\t@Input() tenantId: string = '';\n\t@Input() currentUser!: TasCurrentUser;\n\t@Input() ownerUserIds!: number[];\n\t@Input() regularUserIds: number[] = [];\n\t@Input() moderatorUserIds: number[] = [];\n\t\n\t/** Optional: If provided, skips room creation and goes directly to getting a token */\n\t@Input() existingSessionId: string = '';\n\n\t// Component state\n\tpublic state: WaitingRoomState = WaitingRoomState.IDLE;\n\tpublic WaitingRoomState = WaitingRoomState; // Expose enum to template\n\tpublic errorMessage: string = '';\n\t\n\t/** Whether we have an existing session (passed via input) */\n\tpublic hasExistingSession: boolean = false;\n\t\n\t/** UI toggle: show \"Join Existing\" input vs \"Create New\" */\n\tpublic showJoinExistingUI: boolean = false;\n\t\n\t/** Manual session ID input by user */\n\tpublic manualSessionId: string = '';\n\t\n\t/** Track if we're joining an existing session (for UI display) */\n\tpublic isJoiningExisting: boolean = false;\n\n\t// Session data\n\tprivate sessionId: string = '';\n\tprivate token: string = '';\n\tprivate users: CreateRoomUser[] = [];\n\tprivate subscriptions = new Subscription();\n\tprivate videoCallModalRef: NgbModalRef | null = null;\n\n\tconstructor(\n\t\tpublic activeModal: NgbActiveModal,\n\t\tprivate tasService: TasService,\n\t\tprivate modalService: NgbModal\n\t) {}\n\n\tngOnInit(): void {\n\t\tthis.buildUsersArray();\n\t\tthis.setupViewModeSubscription();\n\t\t\n\t\t// Check if we have an existing session passed via input\n\t\tif (this.existingSessionId && this.existingSessionId.trim() !== '') {\n\t\t\tthis.hasExistingSession = true;\n\t\t\tthis.sessionId = this.existingSessionId;\n\t\t\tthis.isJoiningExisting = true;\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscriptions.unsubscribe();\n\t}\n\n\t/**\n\t * Creates the room and fetches the token (new session flow)\n\t */\n\tcreateRoom(): void {\n\t\tif (!this.tenantId || !this.currentUser?.name) {\n\t\t\tthis.state = WaitingRoomState.ERROR;\n\t\t\tthis.errorMessage = 'Missing configuration data (tenant or user)';\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isJoiningExisting = false;\n\t\tthis.state = WaitingRoomState.CREATING_ROOM;\n\t\tthis.errorMessage = '';\n\n\t\tconst body: CreateRoomRequest = {\n\t\t\troomType: TasRoomType.TAS,\n\t\t\ttype: TasSessionType.SPONTANEOUS,\n\t\t\ttenant: this.tenantId,\n\t\t\tappointmentId: this.appointmentId,\n\t\t\tusers: this.users,\n\t\t\tproduct: this.product\n\t\t};\n\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.createRoom(body).pipe(\n\t\t\t\tswitchMap(response => {\n\t\t\t\t\tthis.sessionId = response.content.sessionId;\n\t\t\t\t\tthis.state = WaitingRoomState.GETTING_TOKEN;\n\n\t\t\t\t\treturn this.tasService.generateToken({\n\t\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\t\tname: this.currentUser.name,\n\t\t\t\t\t\tlastname: this.currentUser.lastname,\n\t\t\t\t\t\troleVC: this.currentUser.role\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t).subscribe({\n\t\t\t\tnext: (tokenResponse) => {\n\t\t\t\t\tthis.token = tokenResponse.content.token;\n\t\t\t\t\tthis.state = WaitingRoomState.READY;\n\t\t\t\t},\n\t\t\t\terror: (err) => {\n\t\t\t\t\tconsole.error('Error creating room or getting token:', err);\n\t\t\t\t\tthis.state = WaitingRoomState.ERROR;\n\t\t\t\t\tthis.errorMessage = 'Error creating room. Please try again.';\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\t/**\n\t * Join existing room with manually entered session ID\n\t */\n\tjoinExistingWithManualId(): void {\n\t\tif (!this.manualSessionId || this.manualSessionId.trim() === '') {\n\t\t\tthis.state = WaitingRoomState.ERROR;\n\t\t\tthis.errorMessage = 'Please enter a valid Session ID';\n\t\t\treturn;\n\t\t}\n\n\t\tthis.sessionId = this.manualSessionId.trim();\n\t\tthis.isJoiningExisting = true;\n\t\tthis.getTokenForExistingSession();\n\t}\n\n\t/**\n\t * Gets a token for an existing session (existing session flow)\n\t */\n\tgetTokenForExistingSession(): void {\n\t\tif (!this.sessionId || !this.currentUser?.name) {\n\t\t\tthis.state = WaitingRoomState.ERROR;\n\t\t\tthis.errorMessage = 'Missing session ID or user data';\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isJoiningExisting = true;\n\t\tthis.state = WaitingRoomState.GETTING_TOKEN;\n\t\tthis.errorMessage = '';\n\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.generateToken({\n\t\t\t\tsessionId: this.sessionId,\n\t\t\t\tname: this.currentUser.name,\n\t\t\t\tlastname: this.currentUser.lastname,\n\t\t\t\troleVC: this.currentUser.role\n\t\t\t}).subscribe({\n\t\t\t\tnext: (tokenResponse) => {\n\t\t\t\t\tthis.token = tokenResponse.content.token;\n\t\t\t\t\tthis.state = WaitingRoomState.READY;\n\t\t\t\t},\n\t\t\t\terror: (err) => {\n\t\t\t\t\tconsole.error('Error getting token:', err);\n\t\t\t\t\tthis.state = WaitingRoomState.ERROR;\n\t\t\t\t\tthis.errorMessage = 'Error getting session token. Please check the Session ID and try again.';\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\t/**\n\t * Joins the video call session\n\t */\n\tjoinSession(): void {\n\t\tif (!this.sessionId || !this.token) {\n\t\t\tthis.errorMessage = 'Cannot join session. Incomplete data.';\n\t\t\treturn;\n\t\t}\n\n\t\t// Close waiting room and open video call\n\t\tthis.activeModal.close('joining');\n\t\tthis.openVideoCallModal();\n\t}\n\n\t/**\n\t * Closes the waiting room\n\t */\n\tcancel(): void {\n\t\tthis.activeModal.dismiss('cancel');\n\t}\n\n\t/**\n\t * Retry after an error\n\t */\n\tretry(): void {\n\t\tthis.state = WaitingRoomState.IDLE;\n\t\tthis.errorMessage = '';\n\t\tthis.token = '';\n\t\tthis.isJoiningExisting = false;\n\t\t\n\t\t// Only reset sessionId if we don't have an existing one from input\n\t\tif (!this.hasExistingSession) {\n\t\t\tthis.sessionId = '';\n\t\t}\n\t}\n\n\t// Private Methods\n\tprivate buildUsersArray(): void {\n\t\tthis.users = [];\n\n\t\t// Add owners from input\n\t\tthis.ownerUserIds.forEach(id => {\n\t\t\tthis.users.push({ userExternalId: id, rol: TasUserRole.OWNER });\n\t\t});\n\n\t\t// Add regular users from input\n\t\tthis.regularUserIds.forEach(id => {\n\t\t\tthis.users.push({ userExternalId: id, rol: TasUserRole.USER });\n\t\t});\n\n\t\t// Add moderators from input\n\t\tthis.moderatorUserIds.forEach(id => {\n\t\t\tthis.users.push({ userExternalId: id, rol: TasUserRole.MODERATOR });\n\t\t});\n\t}\n\n\tprivate setupViewModeSubscription(): void {\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.viewMode$.subscribe(mode => {\n\t\t\t\t// Re-open video call modal when returning from PiP mode\n\t\t\t\tif (mode === ViewMode.FULLSCREEN && \n\t\t\t\t\tthis.tasService.isCallActive() && \n\t\t\t\t\t!this.videoCallModalRef) {\n\t\t\t\t\tconst sessionId = this.tasService.sessionId;\n\t\t\t\t\tconst token = this.tasService.token;\n\t\t\t\t\tif (sessionId && token) {\n\t\t\t\t\t\tthis.openVideoCallModal(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\tprivate openVideoCallModal(isReturningFromPip: boolean = false): void {\n\t\tthis.videoCallModalRef = this.modalService.open(TasVideocallComponent, {\n\t\t\tsize: 'xl',\n\t\t\twindowClass: 'tas-video-modal',\n\t\t\tbackdrop: 'static',\n\t\t\tkeyboard: false\n\t\t});\n\n\t\tconst sessionIdToUse = this.sessionId || this.tasService.sessionId;\n\t\tconst tokenToUse = this.token || this.tasService.token;\n\n\t\tthis.videoCallModalRef.componentInstance.sessionId = sessionIdToUse;\n\t\tthis.videoCallModalRef.componentInstance.token = tokenToUse;\n\t\tthis.videoCallModalRef.componentInstance.isReturningFromPip = isReturningFromPip;\n\n\t\tthis.videoCallModalRef.result.then(\n\t\t\t() => { this.videoCallModalRef = null; },\n\t\t\t() => { this.videoCallModalRef = null; }\n\t\t);\n\t}\n}\n","<div class=\"tas-waiting-room\">\n\t<!-- Header -->\n\t<div class=\"waiting-room-header\">\n\t\t<div class=\"header-icon\">\n\t\t\t<i class=\"fa fa-video-camera\"></i>\n\t\t</div>\n\t\t<h2 class=\"header-title\">Waiting Room</h2>\n\t\t<p class=\"header-subtitle\">Prepare for your video call</p>\n\t\t<button type=\"button\" class=\"close-btn\" (click)=\"cancel()\" aria-label=\"Close\">\n\t\t\t<span aria-hidden=\"true\">&times;</span>\n\t\t</button>\n\t</div>\n\n\t<!-- Content -->\n\t<div class=\"waiting-room-content\">\n\t\t<!-- IDLE State - Show options -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.IDLE\">\n\t\t\t\n\t\t\t<!-- Tab switcher (only if no existingSessionId was passed) -->\n\t\t\t<div class=\"mode-tabs\" *ngIf=\"!hasExistingSession\">\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"mode-tab\" \n\t\t\t\t\t[class.active]=\"!showJoinExistingUI\"\n\t\t\t\t\t(click)=\"showJoinExistingUI = false\">\n\t\t\t\t\t<i class=\"fa fa-plus-circle\"></i>\n\t\t\t\t\tCreate New\n\t\t\t\t</button>\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"mode-tab\" \n\t\t\t\t\t[class.active]=\"showJoinExistingUI\"\n\t\t\t\t\t(click)=\"showJoinExistingUI = true\">\n\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t\tJoin Existing\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<!-- Create New Room UI -->\n\t\t\t<div class=\"mode-content\" *ngIf=\"!showJoinExistingUI && !hasExistingSession\">\n\t\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t\t<i class=\"fa fa-plus-circle\"></i>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"state-message\">\n\t\t\t\t\tCreate a new video call room\n\t\t\t\t</p>\n\t\t\t\t<p class=\"state-submessage\">\n\t\t\t\t\tStart a new session for this appointment\n\t\t\t\t</p>\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t\t(click)=\"createRoom()\">\n\t\t\t\t\t<i class=\"fa fa-plus\"></i>\n\t\t\t\t\tCreate Room\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<!-- Join Existing Room UI (manual input) -->\n\t\t\t<div class=\"mode-content\" *ngIf=\"showJoinExistingUI && !hasExistingSession\">\n\t\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"state-message\">\n\t\t\t\t\tJoin an existing room\n\t\t\t\t</p>\n\t\t\t\t<p class=\"state-submessage\">\n\t\t\t\t\tEnter the session ID to join\n\t\t\t\t</p>\n\t\t\t\t<div class=\"session-input-container\">\n\t\t\t\t\t<input \n\t\t\t\t\t\ttype=\"text\" \n\t\t\t\t\t\tclass=\"session-input\"\n\t\t\t\t\t\t[(ngModel)]=\"manualSessionId\"\n\t\t\t\t\t\tplaceholder=\"Enter Session ID\"\n\t\t\t\t\t\t(keyup.enter)=\"joinExistingWithManualId()\">\n\t\t\t\t\t<button \n\t\t\t\t\t\ttype=\"button\" \n\t\t\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t\t\t[disabled]=\"!manualSessionId || manualSessionId.trim() === ''\"\n\t\t\t\t\t\t(click)=\"joinExistingWithManualId()\">\n\t\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t\t\tJoin Room\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- Join Existing Room UI (pre-filled session ID) -->\n\t\t\t<div class=\"mode-content\" *ngIf=\"hasExistingSession\">\n\t\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"state-message\">\n\t\t\t\t\tJoin existing video call room\n\t\t\t\t</p>\n\t\t\t\t<p class=\"state-submessage\">\n\t\t\t\t\tPress the button to get access\n\t\t\t\t</p>\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t\t(click)=\"getTokenForExistingSession()\">\n\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t\tJoin Room\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- CREATING_ROOM State (only for new sessions) -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.CREATING_ROOM\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreating video call room...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Creating</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State - New Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN && !isJoiningExisting\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tPreparing room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State - Joining Existing Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN && isJoiningExisting\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tGetting room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Connecting</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- READY State - New Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY && !isJoiningExisting\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tRoom is ready!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- READY State - Joining Existing Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY && isJoiningExisting\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tReady to join!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Connected</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- ERROR State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.ERROR\">\n\t\t\t<div class=\"state-icon error\">\n\t\t\t\t<i class=\"fa fa-exclamation-triangle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message error\">\n\t\t\t\tAn error occurred\n\t\t\t</p>\n\t\t\t<p class=\"error-details\" *ngIf=\"errorMessage\">\n\t\t\t\t{{ errorMessage }}\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn retry-btn\"\n\t\t\t\t(click)=\"retry()\">\n\t\t\t\t<i class=\"fa fa-refresh\"></i>\n\t\t\t\tRetry\n\t\t\t</button>\n\t\t</div>\n\t</div>\n\n\t<!-- Footer -->\n\t<div class=\"waiting-room-footer\">\n\t\t<button \n\t\t\ttype=\"button\" \n\t\t\tclass=\"btn cancel-btn\"\n\t\t\t(click)=\"cancel()\">\n\t\t\tCancel\n\t\t</button>\n\t</div>\n</div>\n","import { Component, OnInit, OnDestroy, Input } from \"@angular/core\";\nimport { NgbModal, NgbModalRef } from \"@ng-bootstrap/ng-bootstrap\";\nimport { Subscription } from \"rxjs\";\nimport { TasCurrentUser, ViewMode } from \"../../interfaces/tas.interfaces\";\nimport { TasWaitingRoomComponent } from \"../tas-waiting-room/tas-waiting-room.component\";\nimport { TasVideocallComponent } from \"../tas-videocall/tas-videocall.component\";\nimport { TasService } from \"../../services/tas.service\";\n\n@Component({\n\tselector: \"tas-btn\",\n\ttemplateUrl: \"./tas-btn.component.html\",\n\tstyleUrls: [\"./tas-btn.component.scss\"],\n})\nexport class TasButtonComponent implements OnInit, OnDestroy {\n\t@Input() appointmentId: number = 1;\n\t@Input() product: string = \"uell\";\n\t@Input() tenantId: string = \"\";\n\t@Input() currentUser!: TasCurrentUser;\n\t@Input() ownerUserIds!: number[];\n\t@Input() regularUserIds: number[] = [];\n\t@Input() moderatorUserIds: number[] = [];\n\t\n\t/** Optional: If provided, skips room creation and goes directly to getting a token */\n\t@Input() existingSessionId: string = \"\";\n\t\n\t/** Optional: Custom button text */\n\t@Input() buttonText: string = \"Iniciar TAS\";\n\t\n\tpublic isLoading = false;\n\t\n\tprivate subscriptions = new Subscription();\n\tprivate currentModalRef: NgbModalRef | null = null;\n\tprivate videoCallModalRef: NgbModalRef | null = null;\n\n\tconstructor(\n\t\tprivate modalService: NgbModal,\n\t\tprivate tasService: TasService\n\t) {}\n\n\tngOnInit(): void {\n\t\tif (!this.ownerUserIds || this.ownerUserIds.length !== 1) {\n\t\t\tthrow new Error('tas-btn: ownerUserIds input is required and must contain exactly one user');\n\t\t}\n\t\t\n\t\t// Subscribe to viewMode to handle PiP return\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.viewMode$.subscribe(mode => {\n\t\t\t\t// Reopen video call modal when returning from PiP\n\t\t\t\tif (mode === ViewMode.FULLSCREEN && \n\t\t\t\t\tthis.tasService.isCallActive() && \n\t\t\t\t\t!this.videoCallModalRef) {\n\t\t\t\t\tconst sessionId = this.tasService.sessionId;\n\t\t\t\t\tconst token = this.tasService.token;\n\t\t\t\t\tif (sessionId && token) {\n\t\t\t\t\t\tthis.openVideoCallModal(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// When entering PiP, clear the videoCallModalRef since modal will close\n\t\t\t\tif (mode === ViewMode.PIP) {\n\t\t\t\t\tthis.videoCallModalRef = null;\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscriptions.unsubscribe();\n\t}\n\n\tonClick(): void {\n\t\tif (!this.tenantId || !this.currentUser?.name) {\n\t\t\tconsole.error(\"Tenant ID or current user not available\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.openWaitingRoomModal();\n\t}\n\n\tprivate openWaitingRoomModal(): void {\n\t\tthis.currentModalRef = this.modalService.open(TasWaitingRoomComponent, {\n\t\t\tsize: \"lg\",\n\t\t\twindowClass: \"tas-waiting-room-modal\",\n\t\t\tbackdrop: \"static\",\n\t\t\tkeyboard: false,\n\t\t\tcentered: true\n\t\t});\n\n\t\t// Pass all necessary inputs to the waiting room component\n\t\tthis.currentModalRef.componentInstance.appointmentId = this.appointmentId;\n\t\tthis.currentModalRef.componentInstance.product = this.product;\n\t\tthis.currentModalRef.componentInstance.tenantId = this.tenantId;\n\t\tthis.currentModalRef.componentInstance.currentUser = this.currentUser;\n\t\tthis.currentModalRef.componentInstance.ownerUserIds = this.ownerUserIds;\n\t\tthis.currentModalRef.componentInstance.regularUserIds = this.regularUserIds;\n\t\tthis.currentModalRef.componentInstance.moderatorUserIds = this.moderatorUserIds;\n\t\t\n\t\t// Pass existing session ID if provided\n\t\tthis.currentModalRef.componentInstance.existingSessionId = this.existingSessionId;\n\n\t\tthis.currentModalRef.result.then(\n\t\t\t() => { this.currentModalRef = null; },\n\t\t\t() => { this.currentModalRef = null; }\n\t\t);\n\t}\n\n\tprivate openVideoCallModal(isReturningFromPip: boolean = false): void {\n\t\tthis.videoCallModalRef = this.modalService.open(TasVideocallComponent, {\n\t\t\tsize: 'xl',\n\t\t\twindowClass: 'tas-video-modal',\n\t\t\tbackdrop: 'static',\n\t\t\tkeyboard: false\n\t\t});\n\n\t\tthis.videoCallModalRef.componentInstance.sessionId = this.tasService.sessionId;\n\t\tthis.videoCallModalRef.componentInstance.token = this.tasService.token;\n\t\tthis.videoCallModalRef.componentInstance.isReturningFromPip = isReturningFromPip;\n\n\t\tthis.videoCallModalRef.result.then(\n\t\t\t() => { this.videoCallModalRef = null; },\n\t\t\t() => { this.videoCallModalRef = null; }\n\t\t);\n\t}\n}\n","<button\n\ttype=\"button\"\n\tclass=\"btn btn-primary tas-btn\"\n\t(click)=\"onClick()\"\n\t[disabled]=\"isLoading\"\n>\n\t<i class=\"fa fa-video-camera\" aria-hidden=\"true\" *ngIf=\"!isLoading\"></i>\n\t<span *ngIf=\"!isLoading\"> {{ buttonText }}</span>\n\t<span *ngIf=\"isLoading\"> Processing...</span>\n</button>\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { TasService } from '../../services/tas.service';\nimport { CallState, ViewMode } from '../../interfaces/tas.interfaces';\nimport { Subscription } from 'rxjs';\nimport interact from 'interactjs';\n\n@Component({\n\tselector: 'tas-floating-call',\n\ttemplateUrl: './tas-floating-call.component.html',\n\tstyleUrls: ['./tas-floating-call.component.scss']\n})\nexport class TasFloatingCallComponent implements OnInit, OnDestroy {\n\n\tpublic isVisible = false;\n\tpublic isMuted = false;\n\n\tprivate subscriptions = new Subscription();\n\n\tconstructor(private tasService: TasService) { }\n\n\tngOnInit(): void {\n\t\tthis.setupSubscriptions();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscriptions.unsubscribe();\n\t\tinteract('.tas-floating-container').unset();\n\t}\n\n\t// Public Methods\n\tonExpand(): void {\n\t\tthis.tasService.exitPipMode();\n\t}\n\n\tonHangUp(): void {\n\t\tthis.tasService.disconnectSession();\n\t}\n\n\ttoggleMute(): void {\n\t\tthis.tasService.toggleMute();\n\t}\n\n\t// Private Methods\n\tprivate setupSubscriptions(): void {\n\t\t// Call state subscription\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.callState$.subscribe(state => {\n\t\t\t\tif (state === CallState.DISCONNECTED) {\n\t\t\t\t\tthis.isVisible = false;\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\t// View mode subscription\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.viewMode$.subscribe(mode => {\n\t\t\t\tthis.isVisible = mode === ViewMode.PIP && this.tasService.isCallActive();\n\t\t\t\tif (this.isVisible) {\n\t\t\t\t\tsetTimeout(() => this.initInteract(), 100);\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\t// Mute state subscription\n\t\tthis.subscriptions.add(\n\t\t\tthis.tasService.isMuted$.subscribe(muted => {\n\t\t\t\tthis.isMuted = muted;\n\t\t\t})\n\t\t);\n\t}\n\n\t// Margin from screen edges (in pixels)\n\tprivate readonly PIP_MARGIN = 20;\n\n\tprivate initInteract(): void {\n\t\tinteract('.tas-floating-container').unset();\n\n\t\t// Create restriction area with margin\n\t\tconst margin = this.PIP_MARGIN;\n\t\tconst restrictToBodyWithMargin = {\n\t\t\trestriction: () => {\n\t\t\t\treturn {\n\t\t\t\t\tleft: margin,\n\t\t\t\t\ttop: margin,\n\t\t\t\t\tright: window.innerWidth - margin,\n\t\t\t\t\tbottom: window.innerHeight - margin\n\t\t\t\t};\n\t\t\t},\n\t\t\telementRect: { left: 0, right: 1, top: 0, bottom: 1 }\n\t\t};\n\n\t\tinteract('.tas-floating-container')\n\t\t\t.draggable({\n\t\t\t\tinertia: true,\n\t\t\t\tmodifiers: [\n\t\t\t\t\tinteract.modifiers.restrict(restrictToBodyWithMargin)\n\t\t\t\t],\n\t\t\t\tautoScroll: false,\n\t\t\t\tlisteners: {\n\t\t\t\t\tmove: (event) => {\n\t\t\t\t\t\tconst target = event.target;\n\t\t\t\t\t\tconst x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;\n\t\t\t\t\t\tconst y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;\n\n\t\t\t\t\t\ttarget.style.transform = `translate(${x}px, ${y}px)`;\n\t\t\t\t\t\ttarget.setAttribute('data-x', String(x));\n\t\t\t\t\t\ttarget.setAttribute('data-y', String(y));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.resizable({\n\t\t\t\tedges: { left: false, right: true, bottom: true, top: false },\n\t\t\t\tlisteners: {\n\t\t\t\t\tmove: (event) => {\n\t\t\t\t\t\tconst target = event.target;\n\t\t\t\t\t\tlet x = parseFloat(target.getAttribute('data-x')) || 0;\n\t\t\t\t\t\tlet y = parseFloat(target.getAttribute('data-y')) || 0;\n\n\t\t\t\t\t\t// Update element size\n\t\t\t\t\t\ttarget.style.width = `${event.rect.width}px`;\n\t\t\t\t\t\ttarget.style.height = `${event.rect.height}px`;\n\n\t\t\t\t\t\t// Translate when resizing from top or left edges\n\t\t\t\t\t\tx += event.deltaRect.left;\n\t\t\t\t\t\ty += event.deltaRect.top;\n\n\t\t\t\t\t\ttarget.style.transform = `translate(${x}px, ${y}px)`;\n\t\t\t\t\t\ttarget.setAttribute('data-x', String(x));\n\t\t\t\t\t\ttarget.setAttribute('data-y', String(y));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmodifiers: [\n\t\t\t\t\tinteract.modifiers.restrictEdges({\n\t\t\t\t\t\touter: {\n\t\t\t\t\t\t\tleft: margin,\n\t\t\t\t\t\t\ttop: margin,\n\t\t\t\t\t\t\tright: window.innerWidth - margin,\n\t\t\t\t\t\t\tbottom: window.innerHeight - margin\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tinteract.modifiers.restrictSize({\n\t\t\t\t\t\tmin: { width: 200, height: 130 },\n\t\t\t\t\t\tmax: { width: 500, height: 350 }\n\t\t\t\t\t}),\n\t\t\t\t\tinteract.modifiers.aspectRatio({ ratio: 'preserve' })\n\t\t\t\t],\n\t\t\t\tinertia: true\n\t\t\t});\n\t}\n}\n\n","<div class=\"tas-floating-container\" [class.visible]=\"isVisible\">\n\t<!-- Video content area - shows main video only -->\n\t<div class=\"floating-content\">\n\t\t<!-- Main video container (subscriber if available, otherwise publisher) -->\n\t\t<div id=\"pip-main-video\" class=\"pip-main-video\"></div>\n\n\t\t<!-- Bottom controls -->\n\t\t<div class=\"floating-controls\">\n\t\t\t<button class=\"action-btn expand-btn\" (click)=\"onExpand()\" title=\"Expand to fullscreen\">\n\t\t\t\t<i class=\"fa fa-expand\"></i>\n\t\t\t</button>\n\t\t\t<button class=\"action-btn mute-btn\" [class.muted]=\"isMuted\" (click)=\"toggleMute()\" [title]=\"isMuted ? 'Unmute microphone' : 'Mute microphone'\">\n\t\t\t\t<i class=\"fa\" [class.fa-microphone]=\"!isMuted\" [class.fa-microphone-slash]=\"isMuted\"></i>\n\t\t\t</button>\n\t\t\t<button class=\"action-btn hangup-btn\" (click)=\"onHangUp()\" title=\"Hang up call\">\n\t\t\t\t<i class=\"fa fa-phone\" style=\"transform: rotate(135deg);\"></i>\n\t\t\t</button>\n\t\t</div>\n\t</div>\n</div>\n\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TasButtonComponent } from './components/tas-btn/tas-btn.component';\nimport { TasVideocallComponent } from './components/tas-videocall/tas-videocall.component';\nimport { TasFloatingCallComponent } from './components/tas-floating-call/tas-floating-call.component';\nimport { TasWaitingRoomComponent } from './components/tas-waiting-room/tas-waiting-room.component';\nimport { TasService } from './services/tas.service';\nimport { TAS_CONFIG, TAS_HTTP_CLIENT, TasConfig, TasHttpClient } from './config/tas.config';\n\n@NgModule({\n declarations: [\n TasButtonComponent,\n TasVideocallComponent,\n TasFloatingCallComponent,\n TasWaitingRoomComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ],\n exports: [\n TasButtonComponent,\n TasVideocallComponent,\n TasFloatingCallComponent,\n TasWaitingRoomComponent\n ]\n})\nexport class TasUellSdkModule {\n /**\n * Use forRoot() to configure the TAS SDK module with required dependencies.\n * This should only be called once in your root AppModule.\n * \n * @example\n * ```typescript\n * import { TasUellSdkModule, TasHttpClient } from 'tas-uell-sdk';\n * \n * // Create an adapter that implements TasHttpClient\n * @Injectable({ providedIn: 'root' })\n * export class MyHttpAdapter implements TasHttpClient {\n * constructor(private http: HttpClient) {}\n * post<T>(url: string, options: { body: any; headers?: Record<string, string> }): Observable<T> {\n * return this.http.post<T>(url, options.body, { headers: options.headers });\n * }\n * }\n * \n * // In your AppModule\n * @NgModule({\n * imports: [\n * TasUellSdkModule.forRoot({\n * config: { tokBoxApiKey: 'YOUR_TOKBOX_API_KEY' },\n * httpClient: MyHttpAdapter\n * })\n * ]\n * })\n * export class AppModule { }\n * ```\n */\n static forRoot(options: {\n config: TasConfig;\n httpClient: new (...args: any[]) => TasHttpClient;\n }): ModuleWithProviders<TasUellSdkModule> {\n return {\n ngModule: TasUellSdkModule,\n providers: [\n { provide: TAS_CONFIG, useValue: options.config },\n { provide: TAS_HTTP_CLIENT, useClass: options.httpClient },\n TasService\n ]\n };\n }\n}\n\n","/*\n * Public API Surface of tas-uell-sdk\n */\n\n// Configuration and tokens\nexport * from './lib/config/tas.config';\n\n// Interfaces\nexport * from './lib/interfaces/tas.interfaces';\n\n// Service\nexport * from './lib/services/tas.service';\n\n// Components\nexport * from './lib/components/tas-btn/tas-btn.component';\nexport * from './lib/components/tas-waiting-room/tas-waiting-room.component';\nexport * from './lib/components/tas-videocall/tas-videocall.component';\nexport * from './lib/components/tas-floating-call/tas-floating-call.component';\n\n// Module\nexport * from './lib/tas-uell-sdk.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.TasService","i1.TasService"],"mappings":"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"}