ahs-cti 1.0.1-beta.2 → 1.0.1-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agentDetailReport-XUNWPSQW.mjs +10 -0
- package/dist/agentDetailReport-XUNWPSQW.mjs.map +1 -0
- package/dist/agentPerformanceReport-4WNLHIFT.mjs +597 -0
- package/dist/agentPerformanceReport-4WNLHIFT.mjs.map +1 -0
- package/dist/{callHistory-A5CBDPZR.mjs → callHistory-3CMW24B6.mjs} +27 -34
- package/dist/callHistory-3CMW24B6.mjs.map +1 -0
- package/dist/campaigns-FR7EIRXI.mjs +2664 -0
- package/dist/campaigns-FR7EIRXI.mjs.map +1 -0
- package/dist/cdrReport-6OBRKAYS.mjs +965 -0
- package/dist/cdrReport-6OBRKAYS.mjs.map +1 -0
- package/dist/chunk-AEDSLIHI.mjs +49 -0
- package/dist/chunk-AEDSLIHI.mjs.map +1 -0
- package/dist/chunk-FVNDPJUU.mjs +95 -0
- package/dist/chunk-FVNDPJUU.mjs.map +1 -0
- package/dist/chunk-I4CJTHZR.mjs +138 -0
- package/dist/chunk-I4CJTHZR.mjs.map +1 -0
- package/dist/chunk-RZZQ42MG.mjs +115 -0
- package/dist/chunk-RZZQ42MG.mjs.map +1 -0
- package/dist/chunk-U2DJ5WRK.mjs +1219 -0
- package/dist/chunk-U2DJ5WRK.mjs.map +1 -0
- package/dist/{chunk-FFYJ4LWU.mjs → chunk-YREOEULC.mjs} +127 -12
- package/dist/chunk-YREOEULC.mjs.map +1 -0
- package/dist/index.d.mts +630 -527
- package/dist/index.d.ts +631 -528
- package/dist/index.js +7409 -602
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +406 -512
- package/dist/index.mjs.map +1 -1
- package/dist/loginReport-MHNHB5F6.mjs +969 -0
- package/dist/loginReport-MHNHB5F6.mjs.map +1 -0
- package/package.json +16 -1
- package/dist/callHistory-A5CBDPZR.mjs.map +0 -1
- package/dist/chunk-FFYJ4LWU.mjs.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../call-control-sdk/lib/utils/storage.ts","../call-control-sdk/lib/permissions/sdk-constants.ts","../call-control-sdk/lib/permissions/index.ts","../call-control-sdk/lib/hooks/sdk-state.ts","../call-control-sdk/lib/services/endPoint.ts","../call-control-sdk/lib/services/axios.ts","../call-control-sdk/lib/services/toastMessage.tsx","../call-control-sdk/lib/components/SDKProvider.tsx","../call-control-sdk/lib/pages/callHistory/useCallHistory.ts","../call-control-sdk/lib/pages/callHistory/index.tsx","../call-control-sdk/index.ts","../call-control-sdk/lib/hooks/eventsTracker.ts","../call-control-sdk/lib/hooks/useLogout.ts","../call-control-sdk/lib/hooks/useEndCall.ts","../call-control-sdk/lib/hooks/useClickToCall.ts","../call-control-sdk/lib/hooks/useGetCallerData.ts","../call-control-sdk/lib/hooks/useGetAuthorizationToken.ts","../call-control-sdk/lib/hooks/useSDKState.ts","../call-control-sdk/lib/hooks/useCallMonitoring.ts","../call-control-sdk/lib/components/callControlPanel.tsx","../call-control-sdk/lib/components/callControls.tsx","../call-control-sdk/lib/components/dialog.tsx","../call-control-sdk/lib/services/request.ts","../call-control-sdk/lib/components/styles.ts","../call-control-sdk/lib/hooks/useDraggable.ts","../call-control-sdk/lib/services/micController.ts","../call-control-sdk/lib/utils/audioLoader.ts","../call-control-sdk/lib/pages/sdkPages.tsx","../call-control-sdk/lib/hooks/useSDKPermissions.ts","../call-control-sdk/lib/components/SDKAccessDenied.tsx","../call-control-sdk/lib/components/SDKPermissionGuard.tsx","../call-control-sdk/lib/hooks/useClickToConference.ts","../call-control-sdk/lib/angular-services/index.ts"],"sourcesContent":["export const STORAGE_KEY = \"call-control-sdk-state\";\r\n","/**\r\n * SDK Permission Constants\r\n *\r\n * Defines permission codes for call control features.\r\n * These codes match the 'items' in the backend entitlements response.\r\n */\r\n\r\nexport const SDK_WILDCARD = \"*\" as const;\r\n\r\n/** Menu entitlement codes from userInfo.entitlements.menus */\r\nexport const SDK_MENU_CODES = {\r\n WILDCARD: SDK_WILDCARD,\r\n CALL_HISTORY: \"call_history\",\r\n} as const;\r\n\r\nexport const SDK_PERMISSIONS = {\r\n WILDCARD: SDK_WILDCARD,\r\n // main object key constants\r\n\r\n CALLS: \"calls\",\r\n CALL_TRANSFER: \"call_transfer\",\r\n CALL_CONFERENCE: \"call_conference\",\r\n\r\n // in each object has items list of objects\r\n\r\n CALL_INBOUND: \"call_inbound\",\r\n CALL_OUTBOUND: \"call_outbound\",\r\n\r\n CONFERENCE: \"call_conference\",\r\n\r\n TRANSFER_BLIND: \"call_transfer_blind\",\r\n TRANSFER_ATTENDED: \"call_transfer_attended\",\r\n TRANSFER_WARM: \"call_transfer_warm\",\r\n} as const;\r\n","/**\r\n * SDK Permissions Module\r\n *\r\n * Exports all permission-related utilities for the call-control SDK.\r\n */\r\n\r\n// Types and constants\r\nexport { SDK_PERMISSIONS, SDK_MENU_CODES, SDK_WILDCARD } from \"./sdk-constants\";\r\nexport {\r\n type SDKBit,\r\n type SDKEntitlements,\r\n type SDKPermissionState,\r\n type PermissionCheckResult,\r\n type ControlsFromPermissions,\r\n type SDKPermissionContextValue,\r\n} from \"./types\";\r\n\r\n// React hooks\r\n","import { getSession, removeSession, setSession } from \"@react-solutions/vault\";\r\nimport type {\r\n SDKState,\r\n CallData,\r\n ConferenceLineTypes,\r\n SDKConfig,\r\n InitSDKRes,\r\n URLConfig,\r\n ConsultInfo,\r\n} from \"../../types\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\nimport {\r\n SDK_PERMISSIONS,\r\n type SDKEntitlements,\r\n type ControlsFromPermissions,\r\n SDK_MENU_CODES,\r\n} from \"../permissions\";\r\n\r\nclass SDKStateManager {\r\n private state: SDKState;\r\n private listeners: Array<() => void> = [];\r\n private readonly STORAGE_KEY = STORAGE_KEY;\r\n\r\n private apiKey: string | undefined;\r\n private tenantId: string | undefined;\r\n\r\n constructor() {\r\n this.state = this.getInitialState();\r\n this.loadFromStorage();\r\n }\r\n\r\n private getInitialState(): SDKState {\r\n return {\r\n authorization: undefined,\r\n process: null,\r\n agentId: \"\",\r\n openConferenceDialog: false,\r\n openCallTransferDialog: false,\r\n isInitialized: false,\r\n sdkConfig: {\r\n disableEndCallButton: false,\r\n disabledDialButton: false,\r\n disabledMoreOptionsButton: false,\r\n enableSmsServices: false,\r\n enableQueueName: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n },\r\n urlConfig: {\r\n baseURL: \"\",\r\n iframeURL: \"\",\r\n iframeAPIURL: \"\",\r\n webSocketURL: \"\",\r\n coreBaseURL: \"\",\r\n id: \"\",\r\n password: \"\",\r\n },\r\n callStartTime: null,\r\n controlPanelPosition: { x: 10, y: 10 },\r\n iframePosition: {\r\n x: window.screen?.availWidth - 460,\r\n y: window.screen?.height - 580,\r\n },\r\n callData: {\r\n agent_id: -1,\r\n queue_name: \"\",\r\n hold: 0,\r\n mute: 0,\r\n status: \"\",\r\n type: \"\",\r\n event_time: \"\",\r\n phone_number: \"\",\r\n },\r\n conferenceLine: [\r\n {\r\n line: 1,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 2,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 3,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 4,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 5,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n ],\r\n hold: 0,\r\n mute: 0,\r\n agentStatus: \"\",\r\n sdk: null,\r\n isPermissionsLoaded: false,\r\n userPermissions: null,\r\n menuEntitlements: null,\r\n consultInfo: null,\r\n };\r\n }\r\n\r\n private loadFromStorage(): void {\r\n try {\r\n const stored = <SDKState>getSession(this.STORAGE_KEY);\r\n if (stored) {\r\n const parsedState = stored;\r\n this.state = {\r\n ...this.state,\r\n agentId: parsedState.agentId || \"\",\r\n authorization: parsedState.authorization || undefined,\r\n process: parsedState.process || null,\r\n openConferenceDialog: parsedState?.openConferenceDialog || false,\r\n openCallTransferDialog: parsedState?.openCallTransferDialog || false,\r\n isInitialized: parsedState.isInitialized || false,\r\n sdkConfig: parsedState.sdkConfig || {\r\n disableEndCallButton: false,\r\n disabledMoreOptionsButton: false,\r\n enableSmsServices: false,\r\n enableQueueName: false,\r\n disabledDialButton: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n },\r\n urlConfig: parsedState.urlConfig || {\r\n id: \"\",\r\n baseURL: \"\",\r\n iframeURL: \"\",\r\n iframeAPIURL: \"\",\r\n webSocketURL: \"\",\r\n coreBaseURL: \"\",\r\n password: \"\",\r\n },\r\n callStartTime: parsedState.callStartTime || null,\r\n controlPanelPosition: parsedState.controlPanelPosition || {\r\n x: 10,\r\n y: 10,\r\n },\r\n iframePosition: parsedState.iframePosition || {\r\n x: window.screen?.availWidth - 460,\r\n y: window.screen?.height - 580,\r\n },\r\n callData: parsedState.callData || {\r\n mobileNumber: \"\",\r\n callReferenceId: \"\",\r\n agent_id: \"\",\r\n status: \"\",\r\n type: \"\",\r\n event_time: \"\",\r\n phone_number: \"\",\r\n },\r\n conferenceLine:\r\n parsedState.conferenceLine &&\r\n Array.isArray(parsedState.conferenceLine) &&\r\n parsedState.conferenceLine.length > 0\r\n ? parsedState.conferenceLine\r\n : this.state.conferenceLine,\r\n agentStatus: parsedState.agentStatus,\r\n sdk: parsedState.sdk || null,\r\n isPermissionsLoaded: parsedState.isPermissionsLoaded || false,\r\n userPermissions: parsedState.userPermissions || null,\r\n menuEntitlements: parsedState.menuEntitlements || null,\r\n };\r\n }\r\n } catch (error) {\r\n console.warn(\"Failed to load SDK state:\", error);\r\n }\r\n }\r\n\r\n private saveToStorage(): void {\r\n try {\r\n const persistentState = {\r\n agentId: this.state.agentId,\r\n authorization: this.state.authorization,\r\n process: this.state.process,\r\n isInitialized: this.state.isInitialized,\r\n openConferenceDialog: this.state.openConferenceDialog,\r\n openCallTransferDialog: this.state.openCallTransferDialog,\r\n sdkConfig: this.state.sdkConfig,\r\n urlConfig: this.state.urlConfig,\r\n callStartTime: this.state.callStartTime,\r\n controlPanelPosition: this.state.controlPanelPosition,\r\n iframePosition: this.state.iframePosition,\r\n callData: this.state.callData,\r\n conferenceLine: this.state.conferenceLine,\r\n agentStatus: this.state.agentStatus,\r\n sdk: this.state.sdk,\r\n isPermissionsLoaded: this.state.isPermissionsLoaded,\r\n userPermissions: this.state.userPermissions,\r\n menuEntitlements: this.state.menuEntitlements,\r\n };\r\n setSession(this.STORAGE_KEY, persistentState);\r\n } catch (error) {\r\n console.warn(\"Failed to save SDK state:\", error);\r\n }\r\n }\r\n\r\n private notifyListeners(): void {\r\n this.listeners.forEach((listener) => listener());\r\n }\r\n\r\n private validateCredentials(apiKey: string, tenantId: string): void {\r\n if (!apiKey || typeof apiKey !== \"string\" || apiKey.trim().length === 0) {\r\n throw new Error(\"API key not available\");\r\n }\r\n if (\r\n !tenantId ||\r\n typeof tenantId !== \"string\" ||\r\n tenantId.trim().length === 0\r\n ) {\r\n throw new Error(\"Tenant ID not available\");\r\n }\r\n this.apiKey = apiKey.trim();\r\n this.tenantId = tenantId.trim();\r\n }\r\n\r\n public initialize(\r\n apiKey: string,\r\n tenantId: string,\r\n agentId: string,\r\n urlConfig?: URLConfig,\r\n initResult?: InitSDKRes,\r\n sdkConfig?: SDKConfig,\r\n ): void {\r\n this.validateCredentials(apiKey, tenantId);\r\n if (\r\n !agentId ||\r\n typeof agentId !== \"string\" ||\r\n agentId.trim().length === 0\r\n ) {\r\n throw new Error(\"Agent ID not available\");\r\n } else {\r\n this.state.agentId = agentId;\r\n this.state.openConferenceDialog = false;\r\n this.state.openCallTransferDialog = false;\r\n this.state.authorization = initResult;\r\n this.state.sdkConfig = {\r\n disableEndCallButton: false,\r\n disabledDialButton: false,\r\n disabledMoreOptionsButton: false,\r\n enableQueueName: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n ...sdkConfig,\r\n ...initResult?.callControls,\r\n };\r\n this.state.urlConfig = {\r\n baseURL: urlConfig?.baseURL || \"\",\r\n iframeURL: urlConfig?.iframeURL || \"\",\r\n iframeAPIURL: urlConfig?.iframeAPIURL || \"\",\r\n webSocketURL: urlConfig?.webSocketURL || \"\",\r\n coreBaseURL: urlConfig?.coreBaseURL || \"\",\r\n id: initResult?.userInfo?.id ? String(initResult.userInfo.id) : \"\",\r\n password: urlConfig?.password || \"\",\r\n };\r\n this.state.isInitialized = true;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n }\r\n\r\n public getState(): SDKState {\r\n return { ...this.state };\r\n }\r\n\r\n public getCredentials(): {\r\n apiKey: string | undefined;\r\n tenantId: string | undefined;\r\n } {\r\n return { apiKey: this.apiKey, tenantId: this.tenantId };\r\n }\r\n public getSdkAuthToken(): string | undefined {\r\n return this.state.authorization?.accessToken;\r\n }\r\n\r\n public subscribe(listener: () => void): () => void {\r\n this.listeners.push(listener);\r\n return () => {\r\n const index = this.listeners.indexOf(listener);\r\n if (index > -1) {\r\n this.listeners.splice(index, 1);\r\n }\r\n };\r\n }\r\n\r\n // public setHolding(isHolding: boolean): void {\r\n // \tthis.state.isHolding = isHolding;\r\n // \tthis.saveToStorage();\r\n // \tthis.notifyListeners();\r\n // }\r\n\r\n // public setMuted(isMuted: boolean): void {\r\n // \tthis.state.isMuted = isMuted;\r\n // \tthis.saveToStorage();\r\n // \tthis.notifyListeners();\r\n // }\r\n\r\n public setProcess(process: {\r\n process_id: number;\r\n process_name: string;\r\n }): void {\r\n this.state.process = process;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setControlPanelPosition(position: { x: number; y: number }): void {\r\n this.state.controlPanelPosition = position;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setIframePosition(position: { x: number; y: number }): void {\r\n this.state.iframePosition = position;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public startCall(): void {\r\n this.state.callStartTime = Date.now();\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public endCall(): void {\r\n this.state.callStartTime = null;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setInitCheck(): void {\r\n this.state.isInitialized = false;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setOpenConferenceDialog(open: boolean): void {\r\n this.state.openConferenceDialog = open;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setOpenCallTransferDialog(open: boolean): void {\r\n this.state.openCallTransferDialog = open;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setConsultInfo(info: ConsultInfo | null): void {\r\n this.state.consultInfo = info;\r\n this.notifyListeners();\r\n }\r\n\r\n public setAgentStatus(status: string): void {\r\n this.state.agentStatus = status;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public updateCallData(data: Partial<CallData>): void {\r\n this.state.callData = { ...this.state.callData, ...data };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public updateConferenceData(data: ConferenceLineTypes[]): void {\r\n this.state.conferenceLine = [...data];\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setConferenceLine(line: ConferenceLineTypes): void {\r\n if (\r\n !this.state.conferenceLine ||\r\n !Array.isArray(this.state.conferenceLine)\r\n ) {\r\n this.state.conferenceLine = this.getInitialState().conferenceLine;\r\n }\r\n\r\n const conferenceLineData = this.state.conferenceLine?.map(\r\n (each: ConferenceLineTypes) => {\r\n if (each.line === line.line) {\r\n return line;\r\n }\r\n return each;\r\n },\r\n );\r\n this.state.conferenceLine = conferenceLineData;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public resetConferenceLines(): void {\r\n this.state.conferenceLine = [\r\n {\r\n line: 1,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 2,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 3,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 4,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 5,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n ];\r\n\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public clearStorageAndReset(): void {\r\n try {\r\n removeSession(this.STORAGE_KEY);\r\n this.state = this.getInitialState();\r\n this.notifyListeners();\r\n } catch (error) {\r\n console.warn(\"Failed to clear:\", error);\r\n }\r\n }\r\n\r\n public getConferenceLines(): ConferenceLineTypes[] {\r\n return this.state.conferenceLine || [];\r\n }\r\n\r\n /**\r\n * Update SDK config with permission-based controls.\r\n * Merges the provided controls with existing config.\r\n */\r\n public updateSDKConfigFromPermissions(\r\n permissionControls: Partial<SDKConfig>,\r\n ): void {\r\n this.state.sdkConfig = {\r\n ...this.state.sdkConfig,\r\n ...permissionControls,\r\n };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n /**\r\n * Revert call consult controls back to the base permission-derived values.\r\n * Called when a CALL_STATE event arrives without call_consult_controls.\r\n */\r\n public resetConsultControls(): void {\r\n const base = this.getControlsConfig();\r\n this.state.sdkConfig = {\r\n ...this.state.sdkConfig,\r\n disableEndCallButton: base.disableEndCallButton,\r\n disableCallTransferButton: base.disableCallTransferButton,\r\n disableConferenceButton: base.disableConferenceButton,\r\n disableHoldButton: base.disableHoldButton,\r\n disableMuteButton: base.disableMuteButton,\r\n };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n // ============ Entitlement Logic (Ported from SDKPermissionManager) ============\r\n\r\n /**\r\n * Set user information (entitlements) from login response\r\n */\r\n public setSDKPermissions(userInfo: any): void {\r\n if (!userInfo) return;\r\n\r\n // In a real scenario, this would come from userInfo.entitlements?.sdk\r\n // For now, we use the structured format expected by the SDK\r\n\r\n const sdk: SDKEntitlements = userInfo.entitlements?.sdk;\r\n const sdkPermissions = Array.isArray(userInfo.permissions) ? userInfo.permissions : null;\r\n const sdkMenus = Array.isArray(userInfo.entitlements?.menus)\r\n ? userInfo.entitlements.menus\r\n : null;\r\n\r\n // const sdkMenus:any[] = [\r\n // {\r\n // \"code\": SDK_MENU_CODES.WILDCARD,\r\n // \"name\": \"Role Management\",\r\n // \"enabled\": true\r\n // },\r\n // // {\r\n // // \"code\": SDK_MENU_CODES.CALL_HISTORY,\r\n // // \"name\": \"Role Management\",\r\n // // \"enabled\": true\r\n // // }\r\n // ]\r\n\r\n // const sdk: SDKEntitlements = {\r\n // calls: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.CALL_OUTBOUND,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.CALL_INBOUND,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // call_transfer: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_BLIND,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_ATTENDED,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_WARM,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // call_conference: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.CONFERENCE,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // };\r\n\r\n this.state.sdk = sdk;\r\n this.state.userPermissions = sdkPermissions\r\n this.state.menuEntitlements = sdkMenus\r\n this.state.isPermissionsLoaded = true;\r\n\r\n // Automatically update SDK config based on these new entitlements\r\n const permissionControls = this.getControlsConfig();\r\n this.updateSDKConfigFromPermissions(permissionControls);\r\n\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n /**\r\n * Check if a bit is enabled in entitlements\r\n */\r\n public isBitEnabled(\r\n category: keyof SDKEntitlements,\r\n bitCode: string,\r\n ): boolean {\r\n const sdk = this.state.sdk;\r\n if (!sdk) return false;\r\n\r\n const categoryEntitlement = sdk[category];\r\n if (!categoryEntitlement) return false;\r\n if (!categoryEntitlement.enabled) return false;\r\n\r\n if (!bitCode) return true; // Just checking category enabledness\r\n\r\n const bit = categoryEntitlement.items?.find(\r\n (item: any) => item.code === bitCode,\r\n );\r\n return bit ? bit.enabled : false;\r\n }\r\n\r\n /** Check if the user has a specific flat permission (e.g. \"calls:inbound\") */\r\n public hasPermission(permission: string): boolean {\r\n const perms = this.state.userPermissions;\r\n if (!perms) return false;\r\n return perms.includes(\"*\") || perms.includes(permission);\r\n }\r\n\r\n /** Check if any of the provided permissions is granted */\r\n public hasAnyPermission(permissions: string[]): boolean {\r\n return permissions.some((p) => this.hasPermission(p));\r\n }\r\n\r\n /** Check if all of the provided permissions are granted */\r\n public hasAllPermissions(permissions: string[]): boolean {\r\n return permissions.every((p) => this.hasPermission(p));\r\n }\r\n\r\n /** Check if a menu entitlement is enabled (e.g. \"campaign\"). Supports \"*\" wildcard. */\r\n public hasMenuFeature(code: string): boolean {\r\n const menus = this.state.menuEntitlements;\r\n if (!menus) return false;\r\n if (menus.some((m) => m.code === \"*\" && m.enabled)) return true;\r\n const entry = menus.find((m) => m.code === code);\r\n return entry ? entry.enabled : false;\r\n }\r\n\r\n /**\r\n * Get SDK controls configuration derived exclusively from structured entitlements.\r\n */\r\n public getControlsConfig(): ControlsFromPermissions {\r\n const { sdk, isPermissionsLoaded } = this.state;\r\n\r\n // If entitlements not loaded yet or missing, disable everything (Fail Closed)\r\n if (!isPermissionsLoaded || !sdk) {\r\n return {\r\n disabledDialButton: true,\r\n disableEndCallButton: true,\r\n disableCallTransferButton: true,\r\n disableBlindTransfer: true,\r\n disableAttendedTransfer: true,\r\n disableWarmTransfer: true,\r\n disableConferenceButton: true,\r\n disableHoldButton: true,\r\n disableMuteButton: true,\r\n disabledMoreOptionsButton: true,\r\n };\r\n }\r\n\r\n // --- Dial/Inbound Checks ---\r\n const isDialAllowed = this.isBitEnabled(\r\n \"calls\",\r\n SDK_PERMISSIONS.CALL_OUTBOUND,\r\n );\r\n const isInboundAllowed = this.isBitEnabled(\r\n \"calls\",\r\n SDK_PERMISSIONS.CALL_INBOUND,\r\n );\r\n const isAnyCallAllowed = isDialAllowed || isInboundAllowed;\r\n\r\n // --- Call Controls ---\r\n const isHoldAllowed = isAnyCallAllowed;\r\n const isMuteAllowed = isAnyCallAllowed;\r\n const isEndCallAllowed = isAnyCallAllowed;\r\n const isConferenceAllowed = this.isBitEnabled(\"call_conference\", \"\");\r\n const isTransferEnabled = this.isBitEnabled(\"call_transfer\", \"\");\r\n\r\n // --- Transfer Controls ---\r\n const isBlindAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_BLIND,\r\n );\r\n const isAttendedAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_ATTENDED,\r\n );\r\n const isWarmAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_WARM,\r\n );\r\n\r\n return {\r\n disabledDialButton: !isDialAllowed,\r\n disableEndCallButton: !isEndCallAllowed,\r\n disableCallTransferButton: !isTransferEnabled,\r\n disableBlindTransfer: !isBlindAllowed,\r\n disableAttendedTransfer: !isAttendedAllowed,\r\n disableWarmTransfer: !isWarmAllowed,\r\n disableConferenceButton: !isConferenceAllowed,\r\n disableHoldButton: !isHoldAllowed,\r\n disableMuteButton: !isMuteAllowed,\r\n disabledMoreOptionsButton: false,\r\n };\r\n }\r\n}\r\n\r\nexport const sdkStateManager = new SDKStateManager();\r\n\r\nexport type { SDKStateManager };\r\n","import { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\n\r\n// export const IP = \"192.168.100.254\";\r\n\r\n// export const IFRAME_IP = \"10.10.95.25\"\r\n// export const IFRAME_URL = `https://${IFRAME_IP}:8089`;\r\n// export const IFRAME_API_URL = `https://${IFRAME_IP}:8000`;\r\n\r\n\r\n// export const BASE_URL = `http://${IP}:8095`;\r\n// export const WS_BASE_URL = `ws://${IP}:8095`;\r\n\r\n// export const IFRAME_URL = sdkStateManager?.getState()?.urlConfig?.iframeURL\r\n// export const IFRAME_API_URL = sdkStateManager?.getState()?.urlConfig?.iframeAPIURL\r\n\r\n// Dynamically get URLs from SDK state\r\nconst getBaseURL = () => sdkStateManager?.getState()?.urlConfig?.baseURL || \"\";\r\nconst getCoreURL = () => sdkStateManager?.getState()?.urlConfig?.coreBaseURL || \"\";\r\n\r\nexport const BASE_URL = getBaseURL();\r\nexport const CORE_URL = getCoreURL();\r\n\r\nexport const VERSION = {\r\n\tv1: \"/api/v1\",\r\n};\r\n\r\n// Dynamic endpoint getters that fetch URLs from SDK state at runtime\r\nexport const END_POINT = {\r\n\tget LOGIN() { return `${getBaseURL()}${VERSION.v1}/cti/login?provider=convox`; },\r\n\tget READY_AGENT() { return `${getCoreURL()}${VERSION.v1}/agents/ready`; },\r\n\tget UPDATE_AGENT_BREAK() { return `${getCoreURL()}${VERSION.v1}/agents/status`; },\r\n\tget CLICK_TO_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/dial`; },\r\n\tget HOLD_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hold`; },\r\n\tget MUTE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/mute`; },\r\n\tget UNMUTE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/mute`; },\r\n\tget END_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget LOGOUT() { return `${getBaseURL()}${VERSION.v1}/cti/logout?provider=convox`; },\r\n\r\n\tget CONFERENCE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/add`; },\r\n\tget CONFERENCE_MERGE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/merge`; },\r\n\tget CONFERENCE_CALL_HOLD_OR_UN_HOLD() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hold`; },\r\n\tget CONFERENCE_CALL_MUTE_OT_UN_MUTE() { return `${getCoreURL()}${VERSION.v1}/cti/calls/mute`; },\r\n\tget CONFERENCE_CALL_END() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget CONFERENCE_CALL_END_ALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget CONFERENCE_CALL_TRANSFER() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/transfer`; },\r\n\tget TRANSFER_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer-call`; },\r\n\tget TRANSFER_COMPLETE() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer/complete`; },\r\n\tget TRANSFER_CANCEL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer/cancel`; },\r\n\r\n\tget AGENTS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/users`; },\r\n\tget PROCESS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/processes-list`; },\r\n\tget BREAKS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/breaks`; },\r\n\tget TRANSFER_TO_DETAILS() { return `${getBaseURL()}${VERSION.v1}/cti/transfer-to-details?provider=convox`; },\r\n\tget SEND_NOTIFICATIONS() { return `${getBaseURL()}${VERSION.v1}/cti/notifications/send`; },\r\n\r\n\tget CALL_HISTORY() { return `${getBaseURL()}${VERSION.v1}/dashboard/call-history`; },\r\n\tget SENTIMENTAL_ANALYSIS() { return `${getBaseURL()}${VERSION.v1}/users/get_sentiment_analysis`; },\r\n\tget DISPOSITIONS() { return `${getBaseURL()}${VERSION.v1}/cti/calls/dispositions`; },\r\n\tget HOSPITALS_SERVICES() { return `${getBaseURL()}${VERSION.v1}/cti/hospital/services`; },\r\n\tget BLIEND_TRANSFER() { return `${getBaseURL()}${VERSION.v1}/cti/calls/blind_transfer?provider=convox`; },\r\n\r\n\tget AUTH_LOGOUT() { return `${getBaseURL()}${VERSION.v1}/auth/logout`; },\r\n\r\n\t// Permissions\r\n\tget USER_PERMISSIONS() { return `${getBaseURL()}${VERSION.v1}/rbac/users/me/permissions`; },\r\n\r\n\t// Supervisor Call Monitoring (Listen / Whisper / Barge via ChanSpy)\r\n\tget SUPERVISOR_CALL_LISTEN() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/listen`; },\r\n\tget SUPERVISOR_CALL_LEAVE() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/leave`; },\r\n\tget SUPERVISOR_CALL_CHANGE_MODE() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/mode`; },\r\n\r\n\t// Call History pages\r\n\tget CALLS_HISTORY() { return `${getBaseURL()}${VERSION.v1}/calls/history`; },\r\n\tget MISSED_CALLS() { return `${getBaseURL()}${VERSION.v1}/supervisor/missed-calls`; },\r\n\tRECORDING_BY_CALL: (call_uuid: string) => `${getBaseURL()}${VERSION.v1}/recordings/call/${call_uuid}`,\r\n};\r\n\r\n// export const WS_END_POINT = {\r\n// \tWS: `${WS_BASE_URL}${VERSION.v1}/cti/ws`,\r\n// };\r\n\r\n// export const STORAGE_KEY = \"call-control-sdk-state\";\r\n","import axios, { AxiosInstance, AxiosResponse, AxiosError, InternalAxiosRequestConfig } from \"axios\";\r\nimport { BASE_URL } from \"./endPoint\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\nconst DEFAULT_TOKEN = sdkStateManager.getSdkAuthToken() ?? \"\";\r\n\r\nconst REQUEST_TIMEOUT = 60000;\r\n\r\nfunction getAuthToken(): string {\r\n\treturn sdkStateManager.getSdkAuthToken() ?? \"\";\r\n}\r\n\r\nfunction createAxiosInstance(): AxiosInstance {\r\n\tconst instance = axios.create({\r\n\t\t// baseURL: sdkStateManager.getState()?.urlConfig?.baseURL,\r\n\t\theaders: {\r\n\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\tAccept: \"application/json\",\r\n\t\t\t\"x-tenant-id\": sdkStateManager.getCredentials()?.tenantId ?? \"\",\r\n\t\t\t\"x-api-key\": sdkStateManager.getCredentials()?.apiKey ?? \"\",\r\n\t\t\tAuthorization: DEFAULT_TOKEN\r\n\t\t\t\t? (DEFAULT_TOKEN.startsWith(\"Bearer \") ? DEFAULT_TOKEN : `Bearer ${DEFAULT_TOKEN}`)\r\n\t\t\t\t: \"\",\r\n\t\t},\r\n\t\ttimeout: REQUEST_TIMEOUT,\r\n\t\twithCredentials: false,\r\n\t});\r\n\r\n\tinstance.interceptors.request.use(\r\n\t\t(config: InternalAxiosRequestConfig) => {\r\n\t\t\tconst token = getAuthToken();\r\n\r\n\t\t\tif (token && config.headers) {\r\n\t\t\t\t// Only add \"Bearer \" prefix if the token doesn't already have it\r\n\t\t\t\tconst authToken = token.startsWith(\"Bearer \") ? token : `Bearer ${token}`;\r\n\t\t\t\tconfig.headers.Authorization = authToken;\r\n\t\t\t}\r\n\r\n\t\t\t// Debug log for API calls\r\n\t\t\tconsole.log(\"API Request:\", {\r\n\t\t\t\turl: config.url,\r\n\t\t\t\tmethod: config.method,\r\n\t\t\t\thasToken: !!token,\r\n\t\t\t\ttokenStartsWithBearer: token?.startsWith(\"Bearer \"),\r\n\t\t\t\theaders: {\r\n\t\t\t\t\tAuthorization: config.headers.Authorization,\r\n\t\t\t\t\t\"x-tenant-id\": config.headers[\"x-tenant-id\"],\r\n\t\t\t\t\t\"x-api-key\": config.headers[\"x-api-key\"],\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t(config as any).metadata = { startTime: new Date().getTime() };\r\n\r\n\t\t\treturn config;\r\n\t\t},\r\n\t\t(error: AxiosError) => {\r\n\t\t\tconsole.error(\"Request interceptor error:\", error);\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n\r\n\tinstance.interceptors.response.use(\r\n\t\t(response: AxiosResponse) => {\r\n\t\t\treturn response;\r\n\t\t},\r\n\t\tasync (error: AxiosError) => {\r\n\t\t\tconst originalRequest = error.config as InternalAxiosRequestConfig & { _retry?: boolean };\r\n\r\n\t\t\tif (error.response?.status === 401 && !originalRequest._retry) {\r\n\t\t\t\tsdkStateManager.setInitCheck();\r\n\t\t\t\tconsole.warn(\"Unauthorized request, attempting retry...\");\r\n\t\t\t}\r\n\r\n\t\t\tif (!error.response) {\r\n\t\t\t\tconsole.error(\"Network error:\", error.message);\r\n\t\t\t\terror.message = \"Network error: Please check your internet connection\";\r\n\t\t\t}\r\n\r\n\t\t\tif (error.response && error.response.status >= 500) {\r\n\t\t\t\tconsole.error(\"Server error:\", error.response.status, error.response.data);\r\n\t\t\t\terror.message = \"Server error: Please try again later\";\r\n\t\t\t}\r\n\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n\r\n\treturn instance;\r\n}\r\n\r\nconst axiosInstance: AxiosInstance = createAxiosInstance();\r\n\r\nexport default axiosInstance;\r\n","import { createContext, useContext, useState, ReactNode } from \"react\";\r\nimport { Snackbar, Alert, AlertColor } from \"@mui/material\";\r\n\r\ntype ToastContextType = {\r\n\tshowToast: (message: string, severity?: AlertColor) => void;\r\n};\r\n\r\nconst ToastContext = createContext<ToastContextType | undefined>(undefined);\r\n\r\nconst noopToast: ToastContextType = {\r\n\tshowToast: (message, severity) => {\r\n\t\tconsole.warn(`[Toast outside provider] ${severity ?? \"info\"}: ${message}`);\r\n\t},\r\n};\r\n\r\nexport const useToast = () => {\r\n\tconst ctx = useContext(ToastContext);\r\n\treturn ctx ?? noopToast;\r\n};\r\n\r\nexport const ToastProvider = ({ children }: { children: ReactNode }) => {\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst [message, setMessage] = useState(\"\");\r\n\tconst [severity, setSeverity] = useState<AlertColor>(\"info\");\r\n\r\n\tconst showToast = (msg: string, sev: AlertColor = \"info\") => {\r\n\t\tsetMessage(msg);\r\n\t\tsetSeverity(sev);\r\n\t\tsetOpen(true);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<ToastContext.Provider value={{ showToast }}>\r\n\t\t\t{children}\r\n\t\t\t<Snackbar\r\n\t\t\t\topen={open}\r\n\t\t\t\tcolor={severity}\r\n\t\t\t\tautoHideDuration={3000}\r\n\t\t\t\tonClose={() => setOpen(false)}\r\n\t\t\t\tanchorOrigin={{ vertical: \"top\", horizontal: \"right\" }}\r\n\t\t\t>\r\n\t\t\t\t<Alert\r\n\t\t\t\t\tvariant=\"filled\"\r\n\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\tonClose={() => setOpen(false)}\r\n\t\t\t\t\tsx={{ width: \"100%\" }}\r\n\t\t\t\t>\r\n\t\t\t\t\t{message}\r\n\t\t\t\t</Alert>\r\n\t\t\t</Snackbar>\r\n\t\t</ToastContext.Provider>\r\n\t);\r\n};\r\n","import { memo } from \"react\";\r\nimport { ToastProvider } from \"../services/toastMessage\";\r\nimport React from \"react\";\r\nimport { SDKProviderProps } from \"../../types\";\r\n\r\nexport const SDKProvider = memo<SDKProviderProps>(({ children }) => {\r\n\treturn <ToastProvider>{children}</ToastProvider>;\r\n});\r\n\r\nSDKProvider.displayName = \"SDKProvider\";\r\n","import { useState, useCallback } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type { CallHistoryItem, MissedCallDetails } from \"./types\";\r\n\r\nexport function useCallHistory() {\r\n\tconst [calls, setCalls] = useState<CallHistoryItem[]>([]);\r\n\tconst [missedCalls, setMissedCalls] = useState<MissedCallDetails[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchCallHistory = useCallback(async () => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.post(END_POINT.CALLS_HISTORY, {});\r\n\t\t\tsetCalls(Array.isArray(res.data?.records) ? res.data.records : []);\r\n\t\t} catch {\r\n\t\t\tsetCalls([]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchMissedCalls = useCallback(async () => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get(END_POINT.MISSED_CALLS);\r\n\t\t\tsetMissedCalls(Array.isArray(res.data?.data) ? res.data.data : []);\r\n\t\t} catch {\r\n\t\t\tsetMissedCalls([]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchRecording = useCallback(async (call_uuid: string): Promise<Blob> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(call_uuid), {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tcalls,\r\n\t\tmissedCalls,\r\n\t\tloading,\r\n\t\tfetchCallHistory,\r\n\t\tfetchMissedCalls,\r\n\t\tfetchRecording,\r\n\t};\r\n}\r\n","import React, { memo, useEffect, useState } from \"react\";\r\nimport {\r\n\tBox,\r\n\tTypography,\r\n\tTable,\r\n\tTableBody,\r\n\tTableCell,\r\n\tTableContainer,\r\n\tTableHead,\r\n\tTableRow,\r\n\tTablePagination,\r\n\tToggleButton,\r\n\tToggleButtonGroup,\r\n\tIconButton,\r\n\tCollapse,\r\n\tCircularProgress,\r\n\tChip,\r\n\tStack,\r\n\tSwitch,\r\n\tFormControlLabel,\r\n\tTooltip,\r\n\tInputAdornment,\r\n\tOutlinedInput,\r\n\tuseTheme,\r\n\tPaper,\r\n} from \"@mui/material\";\r\nimport {\r\n\tKeyboardArrowDown,\r\n\tPlayArrow,\r\n\tExpandLess,\r\n\tSearch,\r\n\tPhone,\r\n} from \"@mui/icons-material\";\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { useToast } from \"../../services/toastMessage\";\r\nimport { useCallHistory } from \"./useCallHistory\";\r\nimport type { CallHistoryItem, MissedCallDetails, CallFilter } from \"./types\";\r\n\r\n// ──── Header cell columns ────────────────────────────────────────────────────\r\n\r\nconst CALL_HISTORY_COLS = [\"Call UID\", \"Mobile\", \"Type\", \"Start Time\", \"End Time\", \"Recording\", \"Agent\", \"Details\"] as const;\r\nconst MISSED_CALLS_COLS = [\"Agent ID\", \"Agent Name\", \"Mobile No\", \"Type\", \"Actions\"] as const;\r\nconst CENTER_COLS = new Set([\"Type\", \"Recording\", \"Agent\", \"Details\", \"Actions\"]);\r\n\r\n// ──── Main content (needs SDKProvider above it for useToast) ─────────────────\r\n\r\nconst CallHistoryContent = memo(() => {\r\n\tconst theme = useTheme();\r\n\tconst { showToast } = useToast();\r\n\tconst { calls, missedCalls, loading, fetchCallHistory, fetchMissedCalls, fetchRecording } =\r\n\t\tuseCallHistory();\r\n\r\n\tconst [filter, setFilter] = useState<CallFilter>(\"ALL\");\r\n\tconst [search, setSearch] = useState(\"\");\r\n\tconst [showMissedCalls, setShowMissedCalls] = useState(false);\r\n\tconst [page, setPage] = useState(0);\r\n\tconst [rowsPerPage, setRowsPerPage] = useState(10);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (showMissedCalls) {\r\n\t\t\tfetchMissedCalls();\r\n\t\t} else {\r\n\t\t\tfetchCallHistory();\r\n\t\t}\r\n\t}, [showMissedCalls, fetchCallHistory, fetchMissedCalls]);\r\n\r\n\tconst filteredCalls = calls\r\n\t\t.filter((c) => filter === \"ALL\" || c.call_type === filter)\r\n\t\t.filter((c) => c.mobile_no.toLowerCase().includes(search.toLowerCase()));\r\n\r\n\tconst filteredMissedCalls = missedCalls\r\n\t\t.filter((c) => filter === \"ALL\" || c.callType?.toUpperCase() === filter)\r\n\t\t.filter((c) => {\r\n\t\t\tconst q = search.toLowerCase();\r\n\t\t\treturn (\r\n\t\t\t\tc.agentId?.toLowerCase().includes(q) ||\r\n\t\t\t\tc.username?.toLowerCase().includes(q) ||\r\n\t\t\t\tc.mobileNumber?.toLowerCase().includes(q)\r\n\t\t\t);\r\n\t\t});\r\n\r\n\treturn (\r\n\t\t<Box>\r\n\t\t\t{/* PAGE HEADER */}\r\n\t\t\t<Box\r\n\t\t\t\tdisplay=\"flex\"\r\n\t\t\t\talignItems=\"center\"\r\n\t\t\t\tjustifyContent=\"space-between\"\r\n\t\t\t\tpx={2}\r\n\t\t\t\tpy={1.5}\r\n\t\t\t\tborderBottom=\"1px solid #eee\"\r\n\t\t\t>\r\n\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\">\r\n\t\t\t\t\tCall History\r\n\t\t\t\t</Typography>\r\n\t\t\t\t<OutlinedInput\r\n\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\tvalue={search}\r\n\t\t\t\t\tonChange={(e) => { setSearch(e.target.value); setPage(0); }}\r\n\t\t\t\t\tplaceholder=\"Search\"\r\n\t\t\t\t\tsx={{ width: 220, fontSize: \"0.82rem\", height: 36 }}\r\n\t\t\t\t\tendAdornment={\r\n\t\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t\t<Search sx={{ fontSize: 18, color: \"#999\" }} />\r\n\t\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t\t}\r\n\t\t\t\t/>\r\n\t\t\t</Box>\r\n\r\n\t\t\t<Box py={1.5} px={2}>\r\n\t\t\t\t{/* FILTER BAR */}\r\n\t\t\t\t<Stack direction=\"row\" spacing={2} alignItems=\"center\" mb={2}>\r\n\t\t\t\t\t<FormControlLabel\r\n\t\t\t\t\t\tcontrol={\r\n\t\t\t\t\t\t\t<Switch\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tchecked={showMissedCalls}\r\n\t\t\t\t\t\t\t\tonChange={(_, checked) => { setShowMissedCalls(checked); setPage(0); }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlabel={\r\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.8rem\", color: \"#555\" }}>\r\n\t\t\t\t\t\t\t\tMissed Calls\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsx={{ ml: 0 }}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<ToggleButtonGroup\r\n\t\t\t\t\t\tvalue={filter}\r\n\t\t\t\t\t\texclusive\r\n\t\t\t\t\t\tonChange={(_, v) => { if (v) { setFilter(v); setPage(0); } }}\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tborder: \"1px solid #ccc\",\r\n\t\t\t\t\t\t\tborderRadius: \"50px\",\r\n\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\"& .MuiToggleButton-root\": {\r\n\t\t\t\t\t\t\t\tborder: \"none\",\r\n\t\t\t\t\t\t\t\tborderRight: \"1px solid #ccc\",\r\n\t\t\t\t\t\t\t\tcolor: \"#555\",\r\n\t\t\t\t\t\t\t\tfontWeight: 600,\r\n\t\t\t\t\t\t\t\ttextTransform: \"uppercase\",\r\n\t\t\t\t\t\t\t\tfontSize: \"0.72rem\",\r\n\t\t\t\t\t\t\t\tpx: 2,\r\n\t\t\t\t\t\t\t\tpy: 0.5,\r\n\t\t\t\t\t\t\t\tborderRadius: 0,\r\n\t\t\t\t\t\t\t\t\"&:last-of-type\": { borderRight: \"none\" },\r\n\t\t\t\t\t\t\t\t\"&.Mui-selected\": {\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette.primary.main,\r\n\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: theme.palette.primary.dark },\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<ToggleButton value=\"ALL\">All</ToggleButton>\r\n\t\t\t\t\t\t<ToggleButton value=\"INCOMING\">Inbound</ToggleButton>\r\n\t\t\t\t\t\t<ToggleButton value=\"OUTGOING\">Outbound</ToggleButton>\r\n\t\t\t\t\t</ToggleButtonGroup>\r\n\t\t\t\t</Stack>\r\n\r\n\t\t\t\t{/* TABLE */}\r\n\t\t\t\t<TableContainer component={Paper} variant=\"outlined\" sx={{ display: 'flex', flexDirection: 'column' }}>\r\n\t\t\t\t <Box sx={{ overflowY: 'auto', maxHeight: 600 }}>\r\n\t\t\t\t\t<Table stickyHeader size=\"small\">\r\n\t\t\t\t\t\t{showMissedCalls ? (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t{MISSED_CALLS_COLS.map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={col}\r\n\t\t\t\t\t\t\t\t\t\t\t\talign={CENTER_COLS.has(col) ? \"center\" : \"left\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ fontWeight: 600, backgroundColor: \"#f1f1f1\", fontSize: \"0.8rem\" }}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{col}\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{loading ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={5} align=\"center\" sx={{ py: 4 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size={24} />\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : filteredMissedCalls.length === 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={5} align=\"center\" sx={{ py: 4, color: \"#999\", fontSize: \"0.82rem\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Records Found\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\tfilteredMissedCalls.slice(page * rowsPerPage, (page + 1) * rowsPerPage).map((row, i) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<MissedCallRow key={`${row.agentId}-${row.mobileNumber}-${i}`} row={row} />\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t{CALL_HISTORY_COLS.map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={col}\r\n\t\t\t\t\t\t\t\t\t\t\t\talign={CENTER_COLS.has(col) ? \"center\" : \"left\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ fontWeight: 600, backgroundColor: \"#f1f1f1\", fontSize: \"0.8rem\" }}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{col}\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{loading ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={8} align=\"center\" sx={{ py: 4 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress />\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : filteredCalls.length === 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={8} align=\"center\" sx={{ py: 4, color: \"#999\", fontSize: \"0.82rem\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Records Found\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\tfilteredCalls.slice(page * rowsPerPage, (page + 1) * rowsPerPage).map((row, i) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<ExpandableRow\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={row.call_uuid}\r\n\t\t\t\t\t\t\t\t\t\t\t\trow={row}\r\n\t\t\t\t\t\t\t\t\t\t\t\tstriped={i % 2 === 0}\r\n\t\t\t\t\t\t\t\t\t\t\t\tfetchRecording={fetchRecording}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonError={(msg) => showToast(msg, \"error\")}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Table>\r\n\t\t\t\t </Box>\r\n\t\t\t\t <TablePagination\r\n\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\tcount={showMissedCalls ? filteredMissedCalls.length : filteredCalls.length}\r\n\t\t\t\t\t\tpage={page}\r\n\t\t\t\t\t\trowsPerPage={rowsPerPage}\r\n\t\t\t\t\t\tonPageChange={(_, p) => setPage(p)}\r\n\t\t\t\t\t\tonRowsPerPageChange={(e) => { setRowsPerPage(parseInt(e.target.value, 10)); setPage(0); }}\r\n\t\t\t\t\t\trowsPerPageOptions={[10, 25, 50]}\r\n\t\t\t\t\t\tsx={{ borderTop: '1px solid #e0e0e0' }}\r\n\t\t\t\t />\r\n\t\t\t\t</TableContainer>\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n});\r\n\r\nCallHistoryContent.displayName = \"CallHistoryContent\";\r\n\r\n// ──── Missed Call Row ─────────────────────────────────────────────────────────\r\n\r\nconst MissedCallRow = memo(({ row }: { row: MissedCallDetails }) => {\r\n\tconst theme = useTheme();\r\n\treturn (\r\n\t\t<TableRow hover>\r\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\", color: theme.palette.primary.main }}>\r\n\t\t\t\t{row.agentId}\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\" }}>{row.username}</TableCell>\r\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\" }}>\r\n\t\t\t\t{row.mobileNumber} ({row.callCount})\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\", textTransform: \"uppercase\" }}>\r\n\t\t\t\t{row.callType}\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell align=\"center\">\r\n\t\t\t\t<Phone sx={{ color: \"#c0392b\", fontSize: 20, cursor: \"pointer\" }} />\r\n\t\t\t</TableCell>\r\n\t\t</TableRow>\r\n\t);\r\n});\r\n\r\nMissedCallRow.displayName = \"MissedCallRow\";\r\n\r\n// ──── Expandable Row ──────────────────────────────────────────────────────────\r\n\r\nfunction ExpandableRow({\r\n\trow,\r\n\tstriped,\r\n\tfetchRecording,\r\n\tonError,\r\n}: {\r\n\trow: CallHistoryItem;\r\n\tstriped: boolean;\r\n\tfetchRecording: (call_uuid: string) => Promise<Blob>;\r\n\tonError: (msg: string) => void;\r\n}) {\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst [audioURL, setAudioURL] = useState<string | null>(null);\r\n\tconst [loadingAudio, setLoadingAudio] = useState(false);\r\n\r\n\tconst handlePlay = async () => {\r\n\t\tif (!row.recording.available) return;\r\n\t\tsetLoadingAudio(true);\r\n\t\ttry {\r\n\t\t\tconst blob = await fetchRecording(row.call_uuid);\r\n\t\t\tsetAudioURL(URL.createObjectURL(blob));\r\n\t\t} catch {\r\n\t\t\tonError(\"Recording not available\");\r\n\t\t} finally {\r\n\t\t\tsetLoadingAudio(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst bg = striped ? \"#fafafa\" : \"white\";\r\n\tconst cellSx = { fontSize: \"0.82rem\", backgroundColor: bg };\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<TableRow hover>\r\n\t\t\t\t<TableCell sx={{ ...cellSx, maxWidth: 130 }}>\r\n\t\t\t\t\t<Tooltip title={row.call_uuid} arrow>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tnoWrap\r\n\t\t\t\t\t\t\tsx={{ fontSize: 13, maxWidth: 130, overflow: \"hidden\", textOverflow: \"ellipsis\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{row.call_uuid}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell sx={cellSx}>{row.mobile_no}</TableCell>\r\n\r\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tlabel={row.call_type}\r\n\t\t\t\t\t\tcolor={row.call_type === \"INCOMING\" ? \"success\" : \"primary\"}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell sx={cellSx}>\r\n\t\t\t\t\t{new Date(row.start_time).toLocaleString()}\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell sx={cellSx}>\r\n\t\t\t\t\t{row.end_time ? new Date(row.end_time).toLocaleString() : \"—\"}\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\r\n\t\t\t\t\t{row.recording.available ? (\r\n\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\tonClick={handlePlay}\r\n\t\t\t\t\t\t\tdisabled={loadingAudio}\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{loadingAudio ? <CircularProgress size={18} /> : <PlayArrow />}\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<Chip size=\"small\" label=\"No File\" />\r\n\t\t\t\t\t)}\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\r\n\t\t\t\t\t{row.agent_id ?? \"—\"}\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\r\n\t\t\t\t\t<IconButton onClick={() => setOpen((o) => !o)} size=\"small\">\r\n\t\t\t\t\t\t{open ? <ExpandLess /> : <KeyboardArrowDown />}\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</TableCell>\r\n\t\t\t</TableRow>\r\n\r\n\t\t\t{/* Audio player row */}\r\n\t\t\t{audioURL && (\r\n\t\t\t\t<TableRow>\r\n\t\t\t\t\t<TableCell colSpan={8} sx={{ p: 0 }}>\r\n\t\t\t\t\t\t<Box p={2}>\r\n\t\t\t\t\t\t\t<audio\r\n\t\t\t\t\t\t\t\tcontrols\r\n\t\t\t\t\t\t\t\tautoPlay\r\n\t\t\t\t\t\t\t\tsrc={audioURL}\r\n\t\t\t\t\t\t\t\tonEnded={() => {\r\n\t\t\t\t\t\t\t\t\tURL.revokeObjectURL(audioURL);\r\n\t\t\t\t\t\t\t\t\tsetAudioURL(null);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tstyle={{ width: \"100%\" }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</TableCell>\r\n\t\t\t\t</TableRow>\r\n\t\t\t)}\r\n\r\n\t\t\t{/* Details collapse row */}\r\n\t\t\t<TableRow>\r\n\t\t\t\t<TableCell colSpan={8} sx={{ p: 0 }}>\r\n\t\t\t\t\t<Collapse in={open} unmountOnExit>\r\n\t\t\t\t\t\t<Box p={2} bgcolor=\"#f9fafc\" borderTop=\"1px solid #eee\">\r\n\t\t\t\t\t\t\t<Typography fontWeight={600} fontSize=\"0.85rem\" mb={0.5}>\r\n\t\t\t\t\t\t\t\tCall Details\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t<Typography variant=\"body2\" fontSize=\"0.82rem\">\r\n\t\t\t\t\t\t\t\tCall UID: {row.call_uuid}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t<Typography variant=\"body2\" fontSize=\"0.82rem\">\r\n\t\t\t\t\t\t\t\tAgent: {row.agent_id ?? \"Unassigned\"}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Collapse>\r\n\t\t\t\t</TableCell>\r\n\t\t\t</TableRow>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\n// ──── Default Export — wraps with SDKProvider for toast context ───────────────\r\n\r\nconst CallHistory: React.FC = () => (\r\n\t<SDKProvider>\r\n\t\t<CallHistoryContent />\r\n\t</SDKProvider>\r\n);\r\n\r\nexport default CallHistory;\r\n","import { eventTracker } from \"./lib/hooks/eventsTracker\";\r\nimport { sdkStateManager } from \"./lib/hooks/sdk-state\";\r\nimport { useLogout } from \"./lib/hooks/useLogout\";\r\nimport { useEndCall } from \"./lib/hooks/useEndCall\";\r\nimport { SDKConfig, URLConfig } from \"./types\";\r\nimport { useClickToCall } from \"./lib/hooks/useClickToCall\";\r\nimport { useGetCallerData } from \"./lib/hooks/useGetCallerData\";\r\nimport { useGetAuthorizationToken } from \"./lib/hooks/useGetAuthorizationToken\";\r\nimport { useSDKState } from \"./lib/hooks/useSDKState\";\r\nimport { useCallMonitoring } from \"./lib/hooks/useCallMonitoring\";\r\nimport {\r\n SDK_PERMISSIONS,\r\n SDK_MENU_CODES,\r\n SDK_WILDCARD,\r\n type SDKPermissionState,\r\n type ControlsFromPermissions,\r\n type SDKPermissionContextValue,\r\n} from \"./lib/permissions\";\r\n\r\nexport { CallControlPanel } from \"./lib/components/callControlPanel\";\r\nexport { SDKPages } from \"./lib/pages\";\r\nexport { SDKPermissionGuard } from \"./lib/components/SDKPermissionGuard\";\r\nexport { SDKAccessDenied } from \"./lib/components/SDKAccessDenied\";\r\nexport { useSDKPermissions } from \"./lib/hooks/useSDKPermissions\";\r\nexport type { SDKPermissionsHook } from \"./lib/hooks/useSDKPermissions\";\r\n\r\nexport type { CallControlPanelProps, CallData, SDKConfig } from \"./types\";\r\nexport type {\r\n SDKPermissionState,\r\n ControlsFromPermissions,\r\n SDKPermissionContextValue,\r\n};\r\n\r\ninterface InitSDKParams {\r\n apiKey: string;\r\n tenantId: string;\r\n agentId: string;\r\n sessionId?: string;\r\n sdkConfig?: SDKConfig;\r\n urlConfig?: URLConfig;\r\n}\r\n\r\nexport async function initSDK({\r\n apiKey,\r\n tenantId,\r\n agentId,\r\n sdkConfig,\r\n urlConfig,\r\n}: InitSDKParams): Promise<void> {\r\n if (!apiKey || typeof apiKey !== \"string\" || apiKey.trim().length === 0) {\r\n throw new Error(\"SDK initialization failed: API key is required\");\r\n }\r\n\r\n if (\r\n !tenantId ||\r\n typeof tenantId !== \"string\" ||\r\n tenantId.trim().length === 0\r\n ) {\r\n throw new Error(\"SDK initialization failed: Tenant ID is required\");\r\n }\r\n\r\n if (!agentId || typeof agentId !== \"string\" || agentId.trim().length === 0) {\r\n throw new Error(\"SDK initialization failed: Agent ID is required\");\r\n }\r\n\r\n try {\r\n const initResult = await eventTracker.init({\r\n apiKey: apiKey.trim(),\r\n tenantId: tenantId.trim(),\r\n agentId: agentId.trim(),\r\n password: urlConfig?.password,\r\n accessToken: urlConfig?.accessToken,\r\n baseUrl: urlConfig?.coreBaseURL,\r\n });\r\n\r\n if (!initResult) {\r\n sdkStateManager.setInitCheck();\r\n throw new Error(\"SDK initialization failed\");\r\n }\r\n\r\n // Set entitlements from the init response\r\n if (initResult.userInfo) {\r\n sdkStateManager.setSDKPermissions(initResult.userInfo);\r\n }\r\n\r\n // Get entitlement-based controls config\r\n const permissionControlsConfig = sdkStateManager.getControlsConfig();\r\n\r\n // Merge configs: backend callControls < entitlement-based config < explicit sdkConfig\r\n const callcontrolConfig = {\r\n ...(initResult.callControls || {}),\r\n ...permissionControlsConfig,\r\n ...(sdkConfig || {}),\r\n // sdkPosition: 'vertical'\r\n };\r\n\r\n const res = {\r\n accessToken: initResult.accessToken,\r\n expiration: initResult.expiration,\r\n ticketId: initResult.ticketId,\r\n callControls: callcontrolConfig,\r\n userInfo: initResult.userInfo,\r\n };\r\n\r\n console.info(\"SDK initialized successfully\");\r\n\r\n sdkStateManager.initialize(\r\n apiKey.trim(),\r\n tenantId.trim(),\r\n agentId.trim(),\r\n urlConfig,\r\n res,\r\n callcontrolConfig,\r\n );\r\n } catch (error) {\r\n sdkStateManager.setInitCheck();\r\n\r\n if (error instanceof Error) {\r\n throw error;\r\n }\r\n\r\n throw new Error(`SDK initialization failed: ${String(error)}`);\r\n }\r\n}\r\n\r\nexport function getSDKVersion(): string {\r\n return \"6.x.x\";\r\n}\r\n\r\nexport function isSDKInitialized(): boolean {\r\n return sdkStateManager.getState().isInitialized;\r\n}\r\n\r\nexport {\r\n useLogout,\r\n useEndCall,\r\n useClickToCall,\r\n useGetCallerData,\r\n useGetAuthorizationToken,\r\n useSDKState,\r\n useCallMonitoring,\r\n};\r\nexport type { UseClickToCallReturn, CallInitiationFunction, StartCalltHookStateTypes } from \"./lib/hooks/useClickToCall\";\r\nexport type { UseEndCallReturn, HookStateTypes, CallTerminationFunction } from \"./lib/hooks/useEndCall\";\r\nexport type { UseLogoutReturn, LogoutFunction, LogoutHookStateTypes } from \"./lib/hooks/useLogout\";\r\nexport { useClickToConference } from \"./lib/hooks/useClickToConference\";\r\nexport type { UseClickToConferenceReturn, ConferenceCallPayload as ConferenceCallHookPayload } from \"./lib/hooks/useClickToConference\";\r\n\r\nexport { sdkStateManager } from \"./lib/hooks/sdk-state\";\r\n\r\nexport {\r\n clickToCall,\r\n clickToConference,\r\n endCall,\r\n logout,\r\n startMonitoring,\r\n stopMonitoring,\r\n changeMonitorMode,\r\n} from \"./lib/angular-services\";\r\nexport type {\r\n StartCallPayload,\r\n ConferenceCallPayload,\r\n EndCallOptions,\r\n SupervisorMonitorMode,\r\n StartMonitoringPayload,\r\n StopMonitoringPayload,\r\n ChangeModePayload,\r\n} from \"./lib/angular-services\";\r\n\r\nexport type {\r\n UseCallMonitoringReturn,\r\n} from \"./lib/hooks/useCallMonitoring\";\r\n\r\n// Entitlement exports\r\nexport { SDK_PERMISSIONS, SDK_MENU_CODES, SDK_WILDCARD };\r\n","import { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport interface EventTrackerConfig {\r\n\tapiKey: string;\r\n\ttenantId: string;\r\n\tagentId: string;\r\n\tpassword?: string;\r\n\taccessToken?: string;\r\n\tbaseUrl?: string;\r\n\r\n\tretryAttempts?: number;\r\n\tqueueSize?: number;\r\n\tflushInterval?: number;\r\n}\r\n\r\nexport interface EventData {\r\n\t[key: string]: any;\r\n}\r\n\r\nexport interface EventTrackerInstance {\r\n\tinit(config: EventTrackerConfig): Promise<string | null>;\r\n\tisInitialized(): boolean;\r\n\tgetConfig(): EventTrackerConfig | null;\r\n}\r\n\r\nclass EventTrackerSDK implements EventTrackerInstance {\r\n\tprivate config: EventTrackerConfig | null = null;\r\n\tprivate ticketId: string | null = null;\r\n\tprivate baseUrl: string = \"\";\r\n\tprivate flushTimer: ReturnType<typeof setInterval> | null = null;\r\n\r\n\tasync init(config: EventTrackerConfig): Promise<any | null> {\r\n\t\tthis.config = {\r\n\t\t\tretryAttempts: 3,\r\n\t\t\tqueueSize: 100,\r\n\t\t\tflushInterval: 5000,\r\n\t\t\t...config,\r\n\t\t};\r\n\r\n\t\tthis.baseUrl = config.baseUrl || (typeof window !== \"undefined\" ? window.location.origin : \"\");\r\n\r\n\t\tconst ticket = await this.createTicket();\r\n\r\n\t\tthis.startPeriodicFlush();\r\n\r\n\t\treturn ticket;\r\n\t}\r\n\r\n\tisInitialized(): boolean {\r\n\t\treturn this.config !== null && this.ticketId !== null;\r\n\t}\r\n\r\n\tgetConfig(): EventTrackerConfig | null {\r\n\t\treturn this.config;\r\n\t}\r\n\r\n\tgetTicketId(): string | null {\r\n\t\treturn this.ticketId;\r\n\t}\r\n\r\n\tprivate async createTicket(): Promise<any | null> {\r\n\t\tif (!this.config) {\r\n\t\t\tthrow new Error(\"EventTracker not initialized\");\r\n\t\t}\r\n\r\n\t\t// If an accessToken is already provided, skip the login API call\r\n\t\t// if (this.config.accessToken) {\r\n\t\t// \treturn { accessToken: this.config.accessToken };\r\n\t\t// }\r\n\r\n\t\ttry {\r\n\t\t\t\tconst response = await this.makeRequest(\"/api/v1/auth/login\", { // login with base url - same as main application\r\n\t\t\t\tmethod: \"POST\",\r\n\t\t\t\theaders: {\r\n\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t},\r\n\t\t\t\tbody: JSON.stringify({\r\n\t\t\t\t\tuserId: this.config.agentId,\r\n\t\t\t\t\t// sessionId: this.config.sessionId,\r\n\t\t\t\t\tpassword: this.config.password\r\n\t\t\t\t}),\r\n\t\t\t});\r\n\r\n\t\t\t// if (!response.ok) {\r\n\t\t\t// \tsdkStateManager.setInitCheck();\r\n\t\t\t// \tthrow new Error(`Failed to initialize: ${response.status} ${response.statusText}`);\r\n\t\t\t// }\r\n\r\n\t\t\tconst data = await response.json();\r\n\t\t\tthis.ticketId = data.ticketId;\r\n\r\n\r\n\t\t\treturn data;\r\n\t\t} catch (error) {\r\n\r\n\t\t\tthrow error;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async makeRequest(url: string, options: RequestInit): Promise<Response> {\r\n\t\tconst fullUrl = `${this.baseUrl}${url}`;\r\n\t\tconst maxRetries = this.config?.retryAttempts || 3;\r\n\r\n\t\tfor (let attempt = 1; attempt <= maxRetries; attempt++) {\r\n\t\t\ttry {\r\n\t\t\t\tconst response = await fetch(fullUrl, options);\r\n\t\t\t\treturn response;\r\n\t\t\t} catch (error) {\r\n\t\t\t\tif (attempt === maxRetries) {\r\n\t\t\t\t\tthrow error;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);\r\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, delay));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthrow new Error(\"Max retries exceeded\");\r\n\t}\r\n\r\n\tprivate startPeriodicFlush(): void {\r\n\t\tif (this.flushTimer) {\r\n\t\t\tclearInterval(this.flushTimer);\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n}\r\n\r\nexport const eventTracker = new EventTrackerSDK();\r\n\r\nif (typeof window !== \"undefined\") {\r\n\t(window as any).EventTracker = eventTracker;\r\n}\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nimport axiosInstance from \"../services/axios\";\r\nimport { removeSession } from \"@react-solutions/vault\";\r\n// import { USB_LIGHT_ALL_OFF, USB_LIGHT_REQUEST } from \"../services/usbLight\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\nimport { useToast } from \"../services/toastMessage\";\r\n\r\nexport type LogoutFunction = () => Promise<any>;\r\n\r\nexport type LogoutHookStateTypes = {\r\n\tisLoading: boolean;\r\n\tisSuccess: boolean;\r\n\tisError: boolean;\r\n\terror: any;\r\n\tdata: any;\r\n};\r\n\r\nexport interface UseLogoutReturn extends LogoutHookStateTypes {\r\n\tlogout: LogoutFunction;\r\n}\r\n\r\nexport interface LogoutPayload {\r\n\taction: string;\r\n\tuserId: string;\r\n}\r\n\r\nexport const useLogout = () => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst [success, setSuccess] = useState(false);\r\n\r\n\tconst [isError, setIsError] = useState(false);\r\n\r\n\tconst [error, setError] = useState(null);\r\n\r\n\tconst [data, setData] = useState(null);\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst handleLogout = useCallback(async () => {\r\n\t\tsetLoading(true);\r\n\r\n\t\ttry {\r\n\t\t\tawait axiosInstance.post(END_POINT.AUTH_LOGOUT);\r\n\t\t} catch (err: any) {\r\n\t\t\tconst message = err?.response?.data?.message || \"Logout failed. Please try again.\";\r\n\t\t\tshowToast(message, \"error\");\r\n\t\t} finally {\r\n\t\t\tsdkStateManager.clearStorageAndReset();\r\n\t\t\tremoveSession(STORAGE_KEY);\r\n\t\t\tsetSuccess(true);\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tlogout: handleLogout,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError: isError,\r\n\t\terror: error,\r\n\t\tdata: data,\r\n\t};\r\n};\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nimport axiosInstance from \"../services/axios\";\r\nimport { getSession } from \"@react-solutions/vault\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\n\r\nexport type HookStateTypes = {\r\n\tisLoading: boolean;\r\n\tisSuccess: boolean;\r\n\tisError: boolean;\r\n\terror: any;\r\n\tdata: any;\r\n};\r\n\r\nexport type CallTerminationFunction = (data: {\r\n\tdisposition?: string;\r\n\tfollowUp?: string;\r\n\tcallbackDate?: string;\r\n\tcallbackHrs?: string;\r\n\tcallbackMins?: string;\r\n\tisBreak?: boolean;\r\n\tpatientLog?: any;\r\n}) => Promise<any>;\r\n\r\nexport interface UseEndCallReturn extends HookStateTypes {\r\n\thandleEndCall: CallTerminationFunction;\r\n}\r\n\r\nexport interface EndCallPayload {\r\n\tconvox_id: string;\r\n\tagent_id: string;\r\n\tset_followUp: string;\r\n\tcallback_date: string;\r\n\tcallback_hrs: number;\r\n\tcallback_mins: number;\r\n\tmobile_number: string;\r\n\tlist_comments: string;\r\n\tcall_reference_id: string;\r\n\tdisposition: string;\r\n\tline_number: number;\r\n\treason: string;\r\n}\r\n\r\nexport const useEndCall = () => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst [success, setSuccess] = useState(false);\r\n\r\n\tconst [isError, setIsError] = useState(false);\r\n\r\n\tconst [error, setError] = useState(null);\r\n\r\n\tconst [data, setData] = useState(null);\r\n\r\n\tconst handleEndCall = useCallback(\r\n\t\tasync (data: {\r\n\t\t\tdisposition?: string;\r\n\t\t\tfollowUp?: string;\r\n\t\t\tcallbackDate?: string;\r\n\t\t\tcallbackHrs?: string;\r\n\t\t\tcallbackMins?: string;\r\n\t\t\tisBreak?: boolean;\r\n\t\t\tpatientLog?: any;\r\n\t\t}) => {\r\n\t\t\tconst state = getSession(STORAGE_KEY) as any;\r\n\r\n\t\t\tsetLoading(true);\r\n\r\n\t\t\tconst payload = {\r\n\t\t\t\tconvox_id: state?.callData?.convox_id ?? \"\",\r\n\t\t\t\tagent_id: state?.agentId ?? \"\",\r\n\t\t\t\tset_followUp: data?.followUp ?? \"N\",\r\n\t\t\t\tcallback_date: data?.callbackDate ?? \"\",\r\n\t\t\t\tcallback_hrs: Number(data?.callbackHrs) || 0,\r\n\t\t\t\tcallback_mins: Number(data?.callbackMins) || 0,\r\n\t\t\t\tmobile_number: state?.callData?.phone_number ?? \"\",\r\n\t\t\t\tlist_comments: \"\",\r\n\t\t\t\tcall_reference_id: state?.callData?.convox_id ?? \"\",\r\n\t\t\t\tdisposition: data?.disposition ?? \"RES\",\r\n\t\t\t\tline_number: 0,\r\n\t\t\t\treason: \"normal\",\r\n\t\t\t};\r\n\r\n\t\t\treturn axiosInstance\r\n\t\t\t\t.post(END_POINT.END_CALL, payload, {\r\n\t\t\t\t\tparams: {\r\n\t\t\t\t\t\tisBreak: data?.isBreak ?? false,\r\n\t\t\t\t\t},\r\n\t\t\t\t})\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\t\tsdkStateManager.endCall();\r\n\r\n\t\t\t\t\tsetData(res?.data);\r\n\r\n\t\t\t\t\tsetSuccess(true);\r\n\r\n\t\t\t\t\treturn res?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tsetIsError(true);\r\n\r\n\t\t\t\t\tsetError(err);\r\n\r\n\t\t\t\t\treturn err?.response?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tsetLoading(false);\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[]\r\n\t);\r\n\r\n\treturn {\r\n\t\thandleEndCall,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError: isError,\r\n\t\terror: error,\r\n\t\tdata: data,\r\n\t};\r\n};\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport { getSession } from \"@react-solutions/vault\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\n\r\nexport interface StartCallPayload {\r\n\tmobileNumber: string;\r\n\tuser?: string;\r\n\tauto_answer?: boolean;\r\n\tconvox_id?: string;\r\n\treference_id?: string;\r\n\tcall_source?: string;\r\n\tcaseId?: string;\r\n}\r\n\r\nexport type CallInitiationFunction = (data: StartCallPayload) => Promise<any>;\r\n\r\nexport type StartCalltHookStateTypes = {\r\n\tisLoading: boolean;\r\n\tisSuccess: boolean;\r\n\tisError: boolean;\r\n\terror: any;\r\n\tdata: any;\r\n};\r\n\r\nexport interface UseClickToCallReturn extends StartCalltHookStateTypes {\r\n\thandleStartCall: CallInitiationFunction;\r\n}\r\n\r\nexport const useClickToCall = () => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst [success, setSuccess] = useState(false);\r\n\r\n\tconst [isError, setIsError] = useState(false);\r\n\r\n\tconst [error, setError] = useState(null);\r\n\r\n\tconst [data, setData] = useState(null);\r\n\r\n\tconst handleStartCall = useCallback(async (data: StartCallPayload) => {\r\n\t\tconst state = getSession(STORAGE_KEY) as any;\r\n\t\tconst status = state?.callData?.status;\r\n\r\n\t\tsetLoading(true);\r\n\r\n\t\tif (status === \"IDLE\" || status === \"ONCALL\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tphone_number: data?.mobileNumber,\r\n\t\t\t\tuser: data?.user ?? state?.agentId ?? \"\",\r\n\t\t\t\tauto_answer: data?.auto_answer ?? false,\r\n\t\t\t\tconvox_id: state?.callData?.convox_id ?? data?.convox_id ?? \"\",\r\n\t\t\t\treference_id: data?.reference_id ?? \"\",\r\n\t\t\t\tcall_source: data?.call_source ?? \"\",\r\n\t\t\t\tcaseId: data?.caseId ?? \"\",\r\n\t\t\t};\r\n\r\n\t\t\treturn axiosInstance\r\n\t\t\t\t.post(END_POINT.CLICK_TO_CALL, payload)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\t\tsetData(res?.data);\r\n\r\n\t\t\t\t\tsetSuccess(true);\r\n\r\n\t\t\t\t\treturn res?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tsetIsError(true);\r\n\r\n\t\t\t\t\tsetError(err);\r\n\r\n\t\t\t\t\treturn err?.response?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tsetLoading(false);\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\tsetLoading(false);\r\n\t\t\talert(\"Agent is not ready\");\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\thandleStartCall,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError: isError,\r\n\t\terror: error,\r\n\t\tdata: data,\r\n\t};\r\n};\r\n","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { CallData } from \"../../types\";\r\n\r\nexport const useGetCallerData = (): CallData => {\r\n\tconst { process_id, process_name, status, phone_number, agent_id, convox_id, call_details } =\r\n\t\tsdkStateManager.getState().callData;\r\n\tconst initialCallData = {\r\n\t\tphone_number,\r\n\t\tstatus,\r\n\t\tcallReferenceId: convox_id,\r\n\t\tagent_id,\r\n\t\tprocess_id,\r\n\t\tprocess_name,\r\n\t\tcall_details\r\n\t};\r\n\tconst [callData, setCallData] = useState<CallData>(initialCallData);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tconst { process_id, process_name, status, phone_number, agent_id, convox_id, call_details } =\r\n\t\t\t\tsdkStateManager.getState().callData;\r\n\t\t\tconst currentCallData = {\r\n\t\t\t\tphone_number,\r\n\t\t\t\tstatus,\r\n\t\t\t\tcallReferenceId: convox_id,\r\n\t\t\t\tagent_id,\r\n\t\t\t\tprocess_id,\r\n\t\t\t\tprocess_name,\r\n\t\t\t\tcall_details\r\n\t\t\t};\r\n\t\t\tsetCallData(currentCallData);\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn callData;\r\n};\r\n","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport const useGetAuthorizationToken = () => {\r\n\tconst [token, setToken] = useState<string | undefined>(sdkStateManager.getSdkAuthToken());\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tsetToken(sdkStateManager.getSdkAuthToken());\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn token;\r\n};\r\n","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { SDKState } from \"../../types\";\r\n\r\nexport function useSDKState(): SDKState {\r\n\tconst [state, setState] = useState<SDKState>(sdkStateManager.getState());\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tsetState(sdkStateManager.getState());\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn state;\r\n}\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport type SupervisorMonitorMode = \"listen\" | \"whisper\" | \"barge\";\r\n\r\nexport interface StartMonitoringPayload {\r\n\t/** UUID of the active call to monitor */\r\n\tcall_id: string;\r\n\t/** Monitoring mode: listen (hear only), whisper (speak to agent), barge (full 3-way) */\r\n\tmode: SupervisorMonitorMode;\r\n\t/** Optional: supervisor's SIP/WebRTC extension. Auto-detected from logged-in user if omitted */\r\n\tsupervisor_extension?: string;\r\n\t/** Optional: agent's extension. Auto-detected if omitted */\r\n\tagent_extension?: string;\r\n}\r\n\r\nexport interface StopMonitoringPayload {\r\n\t/** UUID of the call being monitored */\r\n\tcall_uuid: string;\r\n\t/** Legacy field – ignored by the backend but kept for compatibility */\r\n\tsession_id?: string;\r\n}\r\n\r\nexport interface ChangeModePayload {\r\n\t/** UUID of the call being monitored */\r\n\tcall_uuid: string;\r\n\t/** New monitoring mode to switch to */\r\n\tmode: SupervisorMonitorMode;\r\n\t/** Legacy field – ignored by the backend but kept for compatibility */\r\n\tsession_id?: string;\r\n}\r\n\r\nexport interface UseCallMonitoringReturn {\r\n\tstartMonitoring: (payload: StartMonitoringPayload) => Promise<any>;\r\n\tstopMonitoring: (payload: StopMonitoringPayload) => Promise<any>;\r\n\tchangeMode: (payload: ChangeModePayload) => Promise<any>;\r\n\tisLoading: boolean;\r\n\tisSuccess: boolean;\r\n\tisError: boolean;\r\n\terror: any;\r\n\tdata: any;\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport const useCallMonitoring = (): UseCallMonitoringReturn => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [success, setSuccess] = useState(false);\r\n\tconst [isError, setIsError] = useState(false);\r\n\tconst [error, setError] = useState<any>(null);\r\n\tconst [data, setData] = useState<any>(null);\r\n\r\n\tconst resetState = () => {\r\n\t\tsetSuccess(false);\r\n\t\tsetIsError(false);\r\n\t\tsetError(null);\r\n\t};\r\n\r\n\t/** Start supervisor monitoring on an active agent call (Listen / Whisper / Barge) */\r\n\tconst startMonitoring = useCallback(async (payload: StartMonitoringPayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_LISTEN, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\t/** Stop supervisor monitoring and disconnect from the call */\r\n\tconst stopMonitoring = useCallback(async (payload: StopMonitoringPayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_LEAVE, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\t/**\r\n\t * Change supervisor monitoring mode (e.g. listen → whisper → barge).\r\n\t * The backend hangs up the current ChanSpy call and originates a new one\r\n\t * with the updated mode – the supervisor's phone will ring again.\r\n\t */\r\n\tconst changeMode = useCallback(async (payload: ChangeModePayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_CHANGE_MODE, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tstartMonitoring,\r\n\t\tstopMonitoring,\r\n\t\tchangeMode,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError,\r\n\t\terror,\r\n\t\tdata,\r\n\t};\r\n};\r\n","import { memo, useCallback } from \"react\";\r\nimport type { CallControlPanelProps } from \"../../types\";\r\nimport { CallControls } from \"./callControls\";\r\nimport { SDKProvider } from \"./SDKProvider\";\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\nimport { SDK_PERMISSIONS } from \"../permissions\";\r\n\r\nexport const CallControlPanel = memo<CallControlPanelProps>(({ onDataChange }) => {\r\n\tconst { sdk } = useSDKState();\r\n\r\n\tconst handleDataChange = useCallback(\r\n\t\t(data: any) => {\r\n\t\t\ttry {\r\n\t\t\t\tif (onDataChange && typeof onDataChange === \"function\") {\r\n\t\t\t\t\tonDataChange(data);\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {\r\n\t\t\t\tconsole.error(\"Error in CallControlPanel data change handler:\", error);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onDataChange]\r\n\t);\r\n\r\n\tconst sdkObject = sdk?.calls;\r\n\tconst hasDialerAccess =\r\n\t\tsdkObject?.enabled &&\r\n\t\tsdkObject?.items?.some(\r\n\t\t\t(item: any) =>\r\n\t\t\t\titem.code === SDK_PERMISSIONS.CALL_OUTBOUND ||\r\n\t\t\t\titem.code === SDK_PERMISSIONS.CALL_INBOUND,\r\n\t\t);\r\n\r\n\tif (!hasDialerAccess) return null;\r\n\r\n\treturn (\r\n\t\t<SDKProvider>\r\n\t\t\t<CallControls onDataChange={handleDataChange} />\r\n\t\t</SDKProvider>\r\n\t);\r\n});\r\n\r\nCallControlPanel.displayName = \"CallControlPanel\";\r\n","import {\r\n\tCallEnd,\r\n\tClose,\r\n\tDragIndicator,\r\n\tGroup,\r\n\tKeyboardArrowDown,\r\n\tLayers,\r\n\tMic,\r\n\tMicOff,\r\n\tPause,\r\n\tPending,\r\n\tPhone,\r\n\tPlayArrow,\r\n\tSupportAgent,\r\n\tTransferWithinAStation,\r\n\tUpcoming,\r\n\tWifiCalling3,\r\n\tSendRounded,\r\n\tSmsSharp,\r\n\tMoreVert,\r\n} from \"@mui/icons-material\";\r\nimport {\r\n\tBox,\r\n\tButton,\r\n\tChip,\r\n\tCircularProgress,\r\n\tFade,\r\n\tIconButton,\r\n\tMenu,\r\n\tMenuItem,\r\n\tPaper,\r\n\tTextField,\r\n\tTooltip,\r\n\tTypography,\r\n\tuseTheme,\r\n} from \"@mui/material\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\n\r\nimport {\r\n\tCallHistoryDialog,\r\n\tCallTransferDialog,\r\n\tConferenceDialog,\r\n\tEndCallDispositionDialog,\r\n\tProcessorListDialog,\r\n} from \"./dialog\";\r\n\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\nimport { useDraggable } from \"../hooks/useDraggable\";\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport { usePostRequest } from \"../services/request\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { useToast } from \"../services/toastMessage\";\r\nimport { createMicController, MicController } from \"../services/micController\";\r\nimport useStyles from \"./styles\";\r\n\r\nimport { CallControlPanelProps, CallStatus } from \"../../types\";\r\n\r\nimport { createAudioElement, cleanupAudioResources } from \"../utils/audioLoader\";\r\nimport { getSession } from \"@react-solutions/vault\";\r\n// import { USB_LIGHT_FLASH, USB_LIGHT_ON, USB_LIGHT_REQUEST } from \"../services/usbLight\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\n\r\nconst getCombineConfrenceData = (localState: any, apiData: any) => {\r\n\tconst localConfrenceData = localState?.conferenceLine;\r\n\tconst apiConferenceData = apiData?.conferencestatus;\r\n\tconst updatedConferenceData = localConfrenceData.map((item: any) => {\r\n\t\tif (item?.line === 1) {\r\n\t\t\tconst statusKey = `line_${item.line}_status`;\r\n\t\t\treturn {\r\n\t\t\t\t...item,\r\n\t\t\t\tline: 1,\r\n\t\t\t\tstatus: apiConferenceData?.[statusKey] ?? localState?.callData?.status,\r\n\t\t\t\tphone: localState?.callData?.phone_number ?? \"\",\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tconst statusKey = `line_${item.line}_status`;\r\n\t\t\tconst phoneKey = `line_${item.line}_phonenumber`;\r\n\r\n\t\t\tconst newStatus = apiConferenceData ? (apiConferenceData[statusKey] ?? \"IDLE\") : item.status;\r\n\t\t\tlet newPhone = apiConferenceData?.[phoneKey];\r\n\r\n\t\t\tif (newPhone === null || newPhone === \"0\" || newPhone === undefined) {\r\n\t\t\t\tnewPhone = newStatus === \"IDLE\" ? \"\" : item.phone;\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\t...item,\r\n\t\t\t\tstatus: newStatus,\r\n\t\t\t\tphone: newPhone,\r\n\t\t\t};\r\n\t\t}\r\n\t});\r\n\r\n\treturn updatedConferenceData;\r\n};\r\n\r\nconst formatDuration = (seconds: number): string => {\r\n\tconst mins = Math.floor(seconds / 60);\r\n\tconst secs = seconds % 60;\r\n\treturn `${mins.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}`;\r\n};\r\n\r\nexport function CallControls({ onDataChange }: CallControlPanelProps) {\r\n\tconst theme = useTheme();\r\n\tconst state = useSDKState();\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst { disabled, enabled, outlined } = useStyles({\r\n\t\tdisabled: state.sdkConfig?.disabled || {},\r\n\t\tenabled: state.sdkConfig?.enabled || {},\r\n\t\toutlined: state.sdkConfig?.outlined || {},\r\n\t});\r\n\r\n\tconst micRef = useRef<MicController | null>(null);\r\n\tconst webSocketRef = useRef<WebSocket | null>(null);\r\n\tconst audioRef = useRef<HTMLAudioElement | null>(null);\r\n\tconst reconnectTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\tconst pingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\r\n\tconst reconnectAttemptsRef = useRef<number>(0);\r\n\tconst hasFlashedRef = useRef(false);\r\n\tconst lastEventTimeRef = useRef<string | null>(null);\r\n\tconst conferenceAutoOpenedRef = useRef<boolean>(false);\r\n\t// ── NEW: ref to record when hold started ──────────────────────────────────\r\n\tconst holdStartTimeRef = useRef<number | null>(null);\r\n\t// ── NEW: ref to record when mute started ──────────────────────────────────\r\n\tconst muteStartTimeRef = useRef<number | null>(null);\r\n\r\n\tconst maxReconnectAttempts = 60;\r\n\tconst baseReconnectDelay = 2000;\r\n\tconst maxReconnectDelay = 30000;\r\n\r\n\tconst [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [statusAnchorEl, setStatusAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [dialerAnchorEl, setDialerAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [ambulanceAnchorEl, setAmbulanceAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [moreOptionsAnchorEl, setMoreOptionsAnchorEl] = useState<null | HTMLElement>(null);\r\n\r\n\tconst [showIframe, setShowIframe] = useState<boolean>(true);\r\n\tconst [openCallDisposition, setOpenCallDisposition] = useState<boolean>(false);\r\n\tconst [openProcessorDialog, setOpenProcessorDialog] = useState<boolean>(false);\r\n\tconst [openCallHistoryDialog, setOpenCallHistoryDialog] = useState<boolean>(false);\r\n\r\n\tconst [processList, setProcessList] = useState<\r\n\t\t| {\r\n\t\t\tprocess_id: number;\r\n\t\t\tprocess_name: string;\r\n\t\t}[]\r\n\t\t| null\r\n\t>(null);\r\n\r\n\tconst [breaksList, setBreaksList] = useState<\r\n\t\t| {\r\n\t\t\ttype: string;\r\n\t\t\tduration: string;\r\n\t\t\tdescription: string;\r\n\t\t\tactive: boolean;\r\n\t\t}[]\r\n\t\t| null\r\n\t>(null);\r\n\r\n\r\n\tconst [phoneNumber, setPhoneNumber] = useState<string>(\"\");\r\n\tconst [callDuration, setCallDuration] = useState<number>(0);\r\n\tconst [callWrapuptime, setCallWrapuptime] = useState<number | null>(null);\r\n\t// Hold duration state\r\n\tconst [holdDuration, setHoldDuration] = useState<number>(0);\r\n\t// ── NEW: mute duration state ──────────────────────────────────────────────\r\n\tconst [muteDuration, setMuteDuration] = useState<number>(0);\r\n\r\n\tconst { position, isDragging, dragRef, handleMouseDown, handleTouchStart } = useDraggable(\r\n\t\tstate.controlPanelPosition,\r\n\t\t(newPosition) => sdkStateManager.setControlPanelPosition(newPosition)\r\n\t);\r\n\r\n\tconst {\r\n\t\tposition: iframePosition,\r\n\t\tisDragging: iframeIsDragging,\r\n\t\tdragRef: iframeDragRef,\r\n\t\thandleMouseDown: iframeHandleMouseDown,\r\n\t\thandleTouchStart: iframeHandleTouchStart,\r\n\t} = useDraggable(state.iframePosition, (newPosition) =>\r\n\t\tsdkStateManager.setIframePosition(newPosition)\r\n\t);\r\n\r\n\tconst [clickToCall, { isLoading: clickToCallLoading }] = usePostRequest<{\r\n\t\tphone_number: string;\r\n\t\tuser: string;\r\n\t\tauto_answer: boolean;\r\n\t\tconvox_id: string;\r\n\t\treference_id: string;\r\n\t\tcall_source: string;\r\n\t\tcaseId: string;\r\n\t}>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsetPhoneNumber(\"\");\r\n\t\t\tsetDialerAnchorEl(null);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [holdOrUnHold, { isLoading: holdOrUnHoldLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tuserId: string;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst [muteOrUnMute, { isLoading: muteOrUnMuteLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tuserId: string;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst [readyAgentStatus, { isLoading: agentReadyLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\trefno?: string;\r\n\t\tuserId: string;\r\n\t}>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setAgentStatus(\"\");\r\n\t\t},\r\n\t});\r\n\r\n\tconst [updateAgentStatus, { isLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tbreak_type: string;\r\n\t\tuserId: string;\r\n\t}>();\r\n\r\n\tconst [sendNotification] = usePostRequest<{\r\n\t\tphone_number: string;\r\n\t\ttype: string;\r\n\t}>();\r\n\r\n\tconst [endCall, { isLoading: endCallLoading }] = usePostRequest<{\r\n\t\tconvox_id: string;\r\n\t\tagent_id: string;\r\n\t\tset_followUp: string;\r\n\t\tcallback_date: string;\r\n\t\tcallback_hrs: number;\r\n\t\tcallback_mins: number;\r\n\t\tmobile_number: string;\r\n\t\tlist_comments: string;\r\n\t\tcall_reference_id: string;\r\n\t\tdisposition: string;\r\n\t\tline_number: number;\r\n\t\treason: string;\r\n\t}>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.endCall();\r\n\t\t\tsetOpenCallDisposition(false);\r\n\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t},\r\n\t});\r\n\r\n\tconst handleCloseQueueCounts = () => {\r\n\t\tsetAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleOpenDialer = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetShowIframe(true);\r\n\t\tsetDialerAnchorEl(event.currentTarget);\r\n\t};\r\n\tconst handleOpenAbulanceServices = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetAmbulanceAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleOpenMoreOptions = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetMoreOptionsAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleCloseDialer = () => {\r\n\t\tsetDialerAnchorEl(null);\r\n\t};\r\n\tconst handleCloseAmbulance = () => {\r\n\t\tsetAmbulanceAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleCloseMoreOptions = () => {\r\n\t\tsetMoreOptionsAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleOpenAgentStatus = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetStatusAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleCloseAgentStatus = () => {\r\n\t\tsetStatusAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleAgentReady = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: \"READYAGENT\",\r\n\t\t\tuserId: state.agentId,\r\n\t\t};\r\n\r\n\t\treadyAgentStatus(END_POINT.READY_AGENT, payload);\r\n\t};\r\n\r\n\tconst handleUpdateAgentStatus = (status: string) => {\r\n\t\tsetStatusAnchorEl(null);\r\n\t\tconst currentStatus = state.callData?.status?.toUpperCase() as CallStatus;\r\n\t\tif ([CallStatus.ONCALL, CallStatus.RINGING, CallStatus.DIALING, CallStatus.WRAPUP].includes(currentStatus)) {\r\n\t\t\tshowToast(\"Cannot put agent on break while on a call\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst payload = {\r\n\t\t\taction: \"AGENTBREAK\",\r\n\t\t\tbreak_type: status,\r\n\t\t\tuserId: state.agentId,\r\n\t\t};\r\n\t\tupdateAgentStatus(END_POINT.UPDATE_AGENT_BREAK, payload).then(() => {\r\n\t\t\tsdkStateManager.setAgentStatus(status);\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleStartCall = (number: string) => {\r\n\t\tif (number.length !== 10) {\r\n\t\t\tshowToast(\"Invalid phone number\", \"error\");\r\n\t\t} else if (!/^\\d+$/.test(number)) {\r\n\t\t\tshowToast(\"Invalid phone number\", \"error\");\r\n\t\t} else {\r\n\t\t\tconst payload = {\r\n\t\t\t\tphone_number: number,\r\n\t\t\t\tuser: state.agentId,\r\n\t\t\t\tauto_answer: false,\r\n\t\t\t\tconvox_id: \"\",\r\n\t\t\t\treference_id: \"\",\r\n\t\t\t\tcall_source: \"\",\r\n\t\t\t\tcaseId: \"\",\r\n\t\t\t};\r\n\r\n\t\t\tclickToCall(END_POINT.CLICK_TO_CALL, payload);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleHoldToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.hold === 1 ? CallStatus.UNHOLD : CallStatus.HOLD,\r\n\t\t\tuserId: state.agentId,\r\n\t\t};\r\n\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t};\r\n\r\n\tconst handleMuteToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.mute === 1 ? CallStatus.UNMUTE : CallStatus.MUTE,\r\n\t\t\tuserId: state.agentId,\r\n\t\t};\r\n\r\n\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t};\r\n\r\n\tconst handleEndCall = (data: {\r\n\t\tdisposition: { label: string; value: string; id?: number };\r\n\t\tfollowUp: { label: string; value: string };\r\n\t\tcallbackDate: string;\r\n\t\tcallbackHrs: string;\r\n\t\tcallbackMins: string;\r\n\t\tselected_break?: boolean;\r\n\t\tnotes?: string;\r\n\t}) => {\r\n\t\tconst payload = {\r\n\t\t\tconvox_id: state.callData?.convox_id ?? \"\",\r\n\t\t\tagent_id: state.agentId ?? \"\",\r\n\t\t\tset_followUp: data?.followUp?.value ?? \"\",\r\n\t\t\tcallback_date: data?.callbackDate ?? \"\",\r\n\t\t\tcallback_hrs: Number(data?.callbackHrs) || 0,\r\n\t\t\tcallback_mins: Number(data?.callbackMins) || 0,\r\n\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\tlist_comments: data?.notes ?? \"\",\r\n\t\t\tcall_reference_id: state.callData?.convox_id ?? \"\",\r\n\t\t\tdisposition: data?.disposition?.value ?? \"\",\r\n\t\t\tline_number: 0,\r\n\t\t\treason: \"normal\",\r\n\t\t};\r\n\r\n\t\tsetPhoneNumber(\"\");\r\n\t\tendCall(END_POINT.END_CALL, payload, {\r\n\t\t\tparams: {\r\n\t\t\t\tisBreak: data?.selected_break ?? false,\r\n\t\t\t},\r\n\t\t});\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tconst handleBeforeUnload = (e: BeforeUnloadEvent) => {\r\n\t\t\te.preventDefault();\r\n\t\t};\r\n\r\n\t\twindow.addEventListener(\"beforeunload\", handleBeforeUnload);\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener(\"beforeunload\", handleBeforeUnload);\r\n\t\t};\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst mic = createMicController();\r\n\t\tmicRef.current = mic;\r\n\r\n\t\tmic.start().catch((err) => {\r\n\t\t\tconsole.error(\"Failed to start mic:\", err);\r\n\t\t});\r\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\r\n\t\t\tconst fullState = getSession(STORAGE_KEY) as any;\r\n\t\t\tconst key = event.key?.toLowerCase();\r\n\r\n\t\t\tif (!event.altKey || fullState?.callData?.status !== CallStatus.ONCALL) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"m\" && String(fullState?.callData?.mute) === \"0\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tmicRef.current?.mute();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.MUTE,\r\n\t\t\t\t\tuserId: fullState.agentId,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"u\" && String(fullState?.callData?.mute) === \"1\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.UNMUTE,\r\n\t\t\t\t\tuserId: fullState.agentId,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t\t\t\tmicRef.current?.unmute();\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"h\" && String(fullState?.callData?.hold) === \"0\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.HOLD,\r\n\t\t\t\t\tuserId: fullState.agentId,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"r\" && String(fullState?.callData?.hold) === \"1\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.UNHOLD,\r\n\t\t\t\t\tuserId: fullState.agentId,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\twindow.addEventListener(\"keydown\", handleKeyDown);\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener(\"keydown\", handleKeyDown);\r\n\t\t};\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tlet interval: ReturnType<typeof setInterval>;\r\n\t\tlet wrapUpinterval: ReturnType<typeof setInterval>;\r\n\r\n\t\tif (state.callData.status && state.callData.status === CallStatus.ONCALL) {\r\n\t\t\tinterval = setInterval(() => {\r\n\t\t\t\tconst elapsed = state.callStartTime\r\n\t\t\t\t\t? Math.floor((Date.now() - Number(state.callStartTime)) / 1000)\r\n\t\t\t\t\t: 0;\r\n\r\n\t\t\t\tsetCallDuration(elapsed);\r\n\t\t\t}, 1000);\r\n\t\t} else {\r\n\t\t\tsetCallDuration(0);\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tstate.callData.status &&\r\n\t\t\tstate.callData.status === CallStatus.WRAPUP &&\r\n\t\t\tcallWrapuptime !== null\r\n\t\t) {\r\n\t\t\twrapUpinterval = setInterval(() => {\r\n\t\t\t\tsetCallWrapuptime((prevTime) => {\r\n\t\t\t\t\tif (prevTime === null || prevTime <= 1) {\r\n\t\t\t\t\t\tclearInterval(wrapUpinterval);\r\n\t\t\t\t\t\thandleEndCall({\r\n\t\t\t\t\t\t\tdisposition: { label: \"Auto Wrapup\", value: \"AUTO_WRAPUP\" },\r\n\t\t\t\t\t\t\tfollowUp: { label: \"No\", value: \"N\" },\r\n\t\t\t\t\t\t\tcallbackDate: \"\",\r\n\t\t\t\t\t\t\tcallbackHrs: \"\",\r\n\t\t\t\t\t\t\tcallbackMins: \"\",\r\n\t\t\t\t\t\t\tselected_break: false,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn prevTime - 1;\r\n\t\t\t\t});\r\n\t\t\t}, 1000);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (interval) clearInterval(interval);\r\n\t\t\tif (wrapUpinterval) clearInterval(wrapUpinterval);\r\n\t\t};\r\n\t}, [state.callData.status]);\r\n\r\n\t// Hold duration timer\r\n\tuseEffect(() => {\r\n\t\tlet holdInterval: ReturnType<typeof setInterval>;\r\n\r\n\t\tconst isOnCall =\r\n\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL;\r\n\t\tconst isOnHold = state.callData?.hold === 1;\r\n\r\n\t\tif (isOnHold && isOnCall) {\r\n\t\t\tif (!holdStartTimeRef.current) {\r\n\t\t\t\tholdStartTimeRef.current = Date.now();\r\n\t\t\t}\r\n\t\t\tholdInterval = setInterval(() => {\r\n\t\t\t\tsetHoldDuration(\r\n\t\t\t\t\tMath.floor((Date.now() - holdStartTimeRef.current!) / 1000)\r\n\t\t\t\t);\r\n\t\t\t}, 1000);\r\n\t\t} else {\r\n\t\t\tholdStartTimeRef.current = null;\r\n\t\t\tsetHoldDuration(0);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (holdInterval) clearInterval(holdInterval);\r\n\t\t};\r\n\t}, [state.callData?.hold, state.callData?.status]);\r\n\r\n\t// ── NEW: mute duration timer ──────────────────────────────────────────────\r\n\tuseEffect(() => {\r\n\t\tlet muteInterval: ReturnType<typeof setInterval>;\r\n\r\n\t\tconst isOnCall =\r\n\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL;\r\n\t\tconst isMuted = state.callData?.mute === 1;\r\n\t\tconst isHeld = state.callData?.hold === 1;\r\n\r\n\t\tif (isMuted && isOnCall && !isHeld) {\r\n\t\t\t// Record start time only once when mute begins\r\n\t\t\tif (!muteStartTimeRef.current) {\r\n\t\t\t\tmuteStartTimeRef.current = Date.now();\r\n\t\t\t}\r\n\t\t\tmuteInterval = setInterval(() => {\r\n\t\t\t\tsetMuteDuration(\r\n\t\t\t\t\tMath.floor((Date.now() - muteStartTimeRef.current!) / 1000)\r\n\t\t\t\t);\r\n\t\t\t}, 1000);\r\n\t\t} else {\r\n\t\t\t// Reset when mute is released or call ends\r\n\t\t\tmuteStartTimeRef.current = null;\r\n\t\t\tsetMuteDuration(0);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (muteInterval) clearInterval(muteInterval);\r\n\t\t};\r\n\t}, [state.callData?.mute, state.callData?.status]);\r\n\t// ─────────────────────────────────────────────────────────────────────────\r\n\r\n\tuseEffect(() => {\r\n\t\tcreateAudioElement()\r\n\t\t\t.then((audio) => {\r\n\t\t\t\taudioRef.current = audio;\r\n\t\t\t})\r\n\t\t\t.catch((error) => {\r\n\t\t\t\tconsole.error(\"Failed to load audio element:\", error);\r\n\t\t\t});\r\n\r\n\t\treturn () => {\r\n\t\t\tif (audioRef.current) {\r\n\t\t\t\taudioRef.current.pause();\r\n\t\t\t\taudioRef.current.currentTime = 0;\r\n\t\t\t\taudioRef.current.src = \"\"; // Clear source\r\n\t\t\t\taudioRef.current = null;\r\n\t\t\t}\r\n\t\t\t// Cleanup blob URLs\r\n\t\t\tcleanupAudioResources();\r\n\t\t};\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onDataChange && state.callData) {\r\n\t\t\tconst { process_id, process_name, status, phone_number, agent_id, convox_id, call_details } =\r\n\t\t\t\tstate.callData;\r\n\t\t\tconst callData = {\r\n\t\t\t\tphone_number,\r\n\t\t\t\tstatus,\r\n\t\t\t\tcallReferenceId: convox_id,\r\n\t\t\t\tagent_id,\r\n\t\t\t\tprocess_id,\r\n\t\t\t\tprocess_name,\r\n\t\t\t\tcall_details\r\n\t\t\t};\r\n\t\t\tonDataChange(callData);\r\n\t\t}\r\n\t}, [state.callData, onDataChange]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (state.agentId) {\r\n\t\t\t// axiosInstance\r\n\t\t\t// \t.post(END_POINT.PROCESS_LIST, {\r\n\t\t\t// \t\tuserId: state.agentId,\r\n\t\t\t// \t\taction: \"GETAGENTPROCESSLIST\",\r\n\t\t\t// \t\trefno: \"1234221233\",\r\n\t\t\t// \t})\r\n\t\t\t// \t.then((res) => {\r\n\t\t\t// \t\t// if (res && res.data?.data && res?.data?.data?.length > 1) {\r\n\t\t\t// \t\t// \tsetProcessList(res.data.data);\r\n\t\t\t// \t\t// \tsetOpenProcessorDialog(true);\r\n\t\t\t// \t\t// } else {\r\n\t\t\t// \t\t\tconst data = {\r\n\t\t\t// \t\t\t\"process_id\": 101,\r\n\t\t\t// \t\t\t\"process_name\": \"ConVoxProcess\"\r\n\t\t\t// \t\t}\r\n\t\t\t// \t\t\tsetProcessList([data]);\r\n\r\n\t\t\t// \t\t\tsdkStateManager.setProcess(data);\r\n\t\t\t// \t\t\t// setOpenProcessorDialog(false);\r\n\t\t\t// \t\t// }\r\n\t\t\t// \t})\r\n\t\t\t// \t.catch((err) => {\r\n\t\t\t// \t\t\tconst data = {\r\n\t\t\t// \t\t\t\"process_id\": 101,\r\n\t\t\t// \t\t\t\"process_name\": \"ConVoxProcess\"\r\n\t\t\t// \t\t}\r\n\t\t\t// \t\t\tsetProcessList([data]);\r\n\r\n\t\t\t// \t\t\tsdkStateManager.setProcess(data);\r\n\t\t\t// \t\tshowToast(err.response.data.message, \"error\");\r\n\t\t\t// \t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.get(END_POINT.BREAKS_LIST)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res && res.data?.data && res?.data?.data?.length) {\r\n\t\t\t\t\t\tsetBreaksList(res.data.data);\r\n\t\t\t\t\t\tconst liveStatus = sdkStateManager.getState().callData?.status;\r\n\t\t\t\t\t\tif (!liveStatus) {\r\n\t\t\t\t\t\t\thandleUpdateAgentStatus(res.data.data[0].type);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tshowToast(err.response.data.message, \"error\");\r\n\t\t\t\t});\r\n\t\t}\r\n\t}, [state.agentId]);\r\n\r\n\tconst connectWebSocket = () => {\r\n\t\tif (!state.agentId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (reconnectTimeoutRef.current) {\r\n\t\t\tclearTimeout(reconnectTimeoutRef.current);\r\n\t\t\treconnectTimeoutRef.current = null;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\twebSocketRef.current = new WebSocket(`${state.urlConfig?.webSocketURL}/api/v1/ws/agent/events?token=${state.authorization?.accessToken}`);\r\n\r\n\t\t\twebSocketRef.current.onopen = () => {\r\n\t\t\t\tconsole.log(\"🌐 WebSocket connection established\");\r\n\t\t\t\treconnectAttemptsRef.current = 0;\r\n\r\n\t\t\t\tif (pingIntervalRef.current) {\r\n\t\t\t\t\tclearInterval(pingIntervalRef.current);\r\n\t\t\t\t}\r\n\t\t\t\tpingIntervalRef.current = setInterval(() => {\r\n\t\t\t\t\tif (webSocketRef.current && webSocketRef.current.readyState === WebSocket.OPEN) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\twebSocketRef.current.send(JSON.stringify({ type: \"ping\" }));\r\n\t\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t\tconsole.error(\"Failed to send ping:\", error);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 30000);\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onmessage = (event) => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst data = JSON.parse(event.data);\r\n\r\n\t\t\t\t\tif (data.type === \"pong\") {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst sdkState = getSession(STORAGE_KEY) as any;\r\n\t\t\t\t\tconst confrence = getCombineConfrenceData(sdkState, data);\r\n\t\t\t\t\t// console.log( \"📊 Parsed JSON:\", data);\r\n\t\t\t\t\tconst callData = {\r\n\t\t\t\t\t\tagent_id: data?.agent_id,\r\n\t\t\t\t\t\tstatus: data?.status,\r\n\t\t\t\t\t\ttype: data?.type,\r\n\t\t\t\t\t\tevent_time: data?.event_time,\r\n\t\t\t\t\t\tphone_number: data?.phone_number,\r\n\t\t\t\t\t\tconvox_id: data?.convox_id,\r\n\t\t\t\t\t\tprocess_id: data?.process_id,\r\n\t\t\t\t\t\tprocess_name: data?.process_name,\r\n\t\t\t\t\t\thold: data?.hold,\r\n\t\t\t\t\t\tmute: data?.mute,\r\n\t\t\t\t\t\tmode: data?.mode,\r\n\t\t\t\t\t\tqueue_name: data?.queue_name,\r\n\t\t\t\t\t\t...(data?.call_details !== undefined && { call_details: data.call_details }),\r\n\t\t\t\t\t};\r\n\t\t\t\t\tsdkStateManager.updateCallData(callData);\r\n\t\t\t\t\tsdkStateManager.updateConferenceData([...confrence]);\r\n\t\t\t\t\tsdkStateManager.setConsultInfo(data.consult_info ?? null);\r\n\r\n\t\t\t\t\tconst conferenceStatus = data?.conferencestatus;\r\n\t\t\t\t\tif (conferenceStatus) {\r\n\t\t\t\t\t\tconst hasAnsweredSecondaryLine = Object.keys(conferenceStatus).some((key) => {\r\n\t\t\t\t\t\t\tconst match = key.match(/^line_(\\d+)_status$/);\r\n\t\t\t\t\t\t\tif (!match) return false;\r\n\t\t\t\t\t\t\tconst lineNum = Number(match[1]);\r\n\t\t\t\t\t\t\tif (lineNum <= 1) return false;\r\n\t\t\t\t\t\t\tconst status = String(conferenceStatus[key] ?? \"\").toUpperCase();\r\n\t\t\t\t\t\t\treturn status === CallStatus.ONCALL;\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif (hasAnsweredSecondaryLine) {\r\n\t\t\t\t\t\t\tif (!conferenceAutoOpenedRef.current) {\r\n\t\t\t\t\t\t\t\tsdkStateManager.setOpenConferenceDialog(true);\r\n\t\t\t\t\t\t\t\tconferenceAutoOpenedRef.current = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tconferenceAutoOpenedRef.current = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconferenceAutoOpenedRef.current = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (data?.call_consult_controls) {\r\n\t\t\t\t\t\tsdkStateManager.updateSDKConfigFromPermissions(data.call_consult_controls);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsdkStateManager.resetConsultControls();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ([CallStatus.RINGING, CallStatus.DIALING].includes(data.status as CallStatus)) {\r\n\t\t\t\t\t\tsetShowIframe(true);\r\n\t\t\t\t\t\tsetCallWrapuptime(sdkState?.sdkConfig?.auto_wrapup_time ?? null);\r\n\t\t\t\t\t\tsdkStateManager.updateConferenceData([\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 1,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 2,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 3,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 4,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 5,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t]);\r\n\r\n\t\t\t\t\t\tif (data?.mode !== \"manual\" && audioRef.current && state?.sdkConfig?.enableRingtone) {\r\n\t\t\t\t\t\t\taudioRef.current.play().catch((error) => {\r\n\t\t\t\t\t\t\t\tconsole.error(\"Failed to play ringtone:\", error);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (audioRef.current) {\r\n\t\t\t\t\t\t\taudioRef.current.pause();\r\n\t\t\t\t\t\t\taudioRef.current.currentTime = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (data.status === CallStatus.IDLE) {\r\n\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_ON(\"green\"));\r\n\t\t\t\t\t} else if (data.status === CallStatus.ONCALL) {\r\n\r\n\t\t\t\t\t\t// Start timer for new call OR transfer\r\n\t\t\t\t\t\tif (data.status === CallStatus.ONCALL) {\r\n\t\t\t\t\t\t\tsdkStateManager.startCall();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!showIframe) {\r\n\t\t\t\t\t\t\tsetShowIframe(true);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (data?.mute !== 1 && data?.hold !== 1) {\r\n\t\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_ON(\"red\"));\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"red\", 1));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (\r\n\t\t\t\t\t\t(data?.mute === 1 || data?.hold === 1) &&\r\n\t\t\t\t\t\tdata.status === CallStatus.ONCALL\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"red\", 1));\r\n\t\t\t\t\t} else if (data.status === CallStatus.BREAK) {\r\n\t\t\t\t\t\tconst breakTime = sdkState?.sdkConfig?.break_time;\r\n\t\t\t\t\t\tconst eventTime = data?.event_time ?? null;\r\n\r\n\t\t\t\t\t\tif (eventTime !== lastEventTimeRef.current) {\r\n\t\t\t\t\t\t\thasFlashedRef.current = false;\r\n\t\t\t\t\t\t\tlastEventTimeRef.current = eventTime;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlet isOverLimit = false;\r\n\t\t\t\t\t\tif (breakTime && eventTime) {\r\n\t\t\t\t\t\t\tconst differenceInMinutes =\r\n\t\t\t\t\t\t\t\t(new Date().getTime() - new Date(eventTime).getTime()) / 60000;\r\n\r\n\t\t\t\t\t\t\tif (Number(differenceInMinutes.toFixed(0)) >= Number(breakTime)) {\r\n\t\t\t\t\t\t\t\tisOverLimit = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (isOverLimit) {\r\n\t\t\t\t\t\t\tif (!hasFlashedRef.current) {\r\n\t\t\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"yellow\", 1));\r\n\t\t\t\t\t\t\t\thasFlashedRef.current = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_ON(\"yellow\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (data.status === CallStatus.WRAPUP) {\r\n\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"green\", 1));\r\n\t\t\t\t\t\tsdkStateManager.endCall();\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch {\r\n\t\t\t\t\tconsole.error(\"📨 Raw message:\", event.data);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onclose = (event) => {\r\n\t\t\t\tif (pingIntervalRef.current) {\r\n\t\t\t\t\tclearInterval(pingIntervalRef.current);\r\n\t\t\t\t\tpingIntervalRef.current = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.code !== 1000 && reconnectAttemptsRef.current < maxReconnectAttempts) {\r\n\t\t\t\t\treconnectAttemptsRef.current += 1;\r\n\t\t\t\t\tconst delay = Math.min(\r\n\t\t\t\t\t\tbaseReconnectDelay * Math.pow(2, reconnectAttemptsRef.current - 1),\r\n\t\t\t\t\t\tmaxReconnectDelay\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t`🔄 Attempting to reconnect WebSocket (attempt ${reconnectAttemptsRef.current}/${maxReconnectAttempts}) in ${delay}ms`\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\treconnectTimeoutRef.current = setTimeout(() => {\r\n\t\t\t\t\t\tconnectWebSocket();\r\n\t\t\t\t\t}, delay);\r\n\t\t\t\t} else if (reconnectAttemptsRef.current >= maxReconnectAttempts) {\r\n\t\t\t\t\tshowToast(\"WebSocket connection failed. Please refresh the page.\", \"error\");\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onerror = (error) => {\r\n\t\t\t\tconsole.error(\"❌ WebSocket error:\", error);\r\n\t\t\t};\r\n\t\t} catch (error) {\r\n\t\t\tif (reconnectAttemptsRef.current < maxReconnectAttempts) {\r\n\t\t\t\treconnectAttemptsRef.current += 1;\r\n\t\t\t\tconst delay = Math.min(\r\n\t\t\t\t\tbaseReconnectDelay * Math.pow(2, reconnectAttemptsRef.current - 1),\r\n\t\t\t\t\tmaxReconnectDelay\r\n\t\t\t\t);\r\n\t\t\t\treconnectTimeoutRef.current = setTimeout(() => {\r\n\t\t\t\t\tconnectWebSocket();\r\n\t\t\t\t}, delay);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (state.agentId) {\r\n\t\t\tconnectWebSocket();\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (reconnectTimeoutRef.current) {\r\n\t\t\t\tclearTimeout(reconnectTimeoutRef.current);\r\n\t\t\t\treconnectTimeoutRef.current = null;\r\n\t\t\t}\r\n\t\t\tif (pingIntervalRef.current) {\r\n\t\t\t\tclearInterval(pingIntervalRef.current);\r\n\t\t\t\tpingIntervalRef.current = null;\r\n\t\t\t}\r\n\t\t\tif (webSocketRef.current) {\r\n\t\t\t\twebSocketRef.current.close(1000, \"Component unmounting\");\r\n\t\t\t\twebSocketRef.current = null;\r\n\t\t\t}\r\n\t\t\treconnectAttemptsRef.current = 0;\r\n\t\t};\r\n\t}, [state.agentId]);\r\n\r\n\tconst handleSendSMS = (data: any) => {\r\n\t\tsendNotification(END_POINT.SEND_NOTIFICATIONS, {\r\n\t\t\tphone_number: data?.phone_number ?? \"\",\r\n\t\t\ttype: \"ambulance\",\r\n\t\t});\r\n\t};\r\n\r\n\tif (!state.isInitialized) {\r\n\t\treturn (\r\n\t\t\t<Box>\r\n\t\t\t\t{Boolean(openProcessorDialog) && (\r\n\t\t\t\t\t<ProcessorListDialog\r\n\t\t\t\t\t\tprocessList={processList}\r\n\t\t\t\t\t\topen={openProcessorDialog}\r\n\t\t\t\t\t\tsetOpen={setOpenProcessorDialog}\r\n\t\t\t\t\t\thandleSelectedProcessor={(data: { process_id: number; process_name: string }) => {\r\n\t\t\t\t\t\t\tsdkStateManager.setProcess(data);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\t// Derived flags used in JSX\r\n\tconst isOnHold =\r\n\t\tstate.callData?.hold === 1 &&\r\n\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL;\r\n\r\n\t// ── NEW: derived mute flag ────────────────────────────────────────────────\r\n\tconst isMuted =\r\n\t\tstate.callData?.mute === 1 &&\r\n\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL;\r\n\t// ─────────────────────────────────────────────────────────────────────────\r\n\r\n\tconst isVertical = state.sdkConfig?.sdkPosition === \"vertical\";\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Box>\r\n\t\t\t\t<Fade in={true} timeout={300}>\r\n\t\t\t\t\t<Paper\r\n\t\t\t\t\t\tref={state.sdkConfig?.isDraggable ? dragRef : null}\r\n\t\t\t\t\t\televation={\r\n\t\t\t\t\t\t\tisDragging ? 4\r\n\t\t\t\t\t\t\t\t: state.sdkConfig?.isDraggable ? 1\r\n\t\t\t\t\t\t\t\t\t: 0\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tposition: state.sdkConfig?.isDraggable ? \"fixed\" : \"relative\",\r\n\t\t\t\t\t\t\tleft: state.sdkConfig?.isDraggable ? position.x : \"auto\",\r\n\t\t\t\t\t\t\ttop: state.sdkConfig?.isDraggable ? position.y : \"auto\",\r\n\t\t\t\t\t\t\tdisplay: \"inline-block\",\r\n\t\t\t\t\t\t\twidth: isVertical ? \"180px\" : \"auto\",\r\n\t\t\t\t\t\t\tflexShrink: 0,\r\n\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\tp: 0.5,\r\n\t\t\t\t\t\t\tborderRadius: 3,\r\n\t\t\t\t\t\t\tbgcolor: \"background.paper\",\r\n\t\t\t\t\t\t\tzIndex: state.sdkConfig?.isDraggable ? Number.MAX_SAFE_INTEGER : 0,\r\n\t\t\t\t\t\t\ttransition: theme.transitions.create([\"box-shadow\", \"transform\"], {\r\n\t\t\t\t\t\t\t\tduration: theme.transitions.duration.short,\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\tuserSelect: \"none\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\tflexDirection: isVertical ? \"column\" : \"row\",\r\n\t\t\t\t\t\t\t\talignItems: isVertical ? \"stretch\" : \"center\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\tflexDirection: isVertical ? \"column\" : \"row\",\r\n\t\t\t\t\t\t\t\t\talignItems: isVertical ? \"stretch\" : \"center\",\r\n\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\tmargin: isVertical ? \"10px 8px 4px 8px\" : \"0px 10px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{state.sdkConfig?.isDraggable && (\r\n\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tcursor: \"all-scroll\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tonMouseDown={handleMouseDown}\r\n\t\t\t\t\t\t\t\t\t\tonTouchStart={handleTouchStart}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<DragIndicator />\r\n\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{state.sdkConfig?.enableQueueName &&\r\n\t\t\t\t\t\t\t\t\tstate?.callData?.queue_name &&\r\n\t\t\t\t\t\t\t\t\tstate?.callData?.mode !== \"manual\" && (\r\n\t\t\t\t\t\t\t\t\t\t<Chip label={state?.callData?.queue_name} />\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disabledDialButton ? \"Outbound call feature is disabled\" : \"Dial\"}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t{isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstartIcon={<WifiCalling3 />}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disabledDialButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenDialer(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpx: 2,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) ? \"action.selected\" : \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderColor: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) ? \"action.selected\" : \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tDial\r\n\t\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disabledDialButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenDialer(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<WifiCalling3\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor:\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t([\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"action.selected\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t{/* ── UPDATED: call duration + hold duration + mute duration display ── */}\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tonClick={() => setShowIframe(true)}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\r\n\t\t\t\t\t\t\t\t\t\tminWidth: \"52px\",\r\n\t\t\t\t\t\t\t\t\t\tmarginRight: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tcolor: isOnHold\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"warning.main\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: isMuted\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"error.main\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontSize: \"18px\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1.2,\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{state.callData.status === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\tcallWrapuptime !== null\r\n\t\t\t\t\t\t\t\t\t\t\t? formatDuration(callWrapuptime)\r\n\t\t\t\t\t\t\t\t\t\t\t: formatDuration(callDuration)}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t\t\t\t{/* Hold badge — only visible while call is on hold */}\r\n\t\t\t\t\t\t\t\t\t{isOnHold && (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tgap: \"3px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"warning.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpx: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpy: \"1px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tmt: \"2px\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Pause sx={{ fontSize: \"11px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"11px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{formatDuration(holdDuration)}\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{/* ── NEW: Mute badge — only visible while call is muted ── */}\r\n\t\t\t\t\t\t\t\t\t{isMuted && !isOnHold && (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tgap: \"3px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"error.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpx: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpy: \"1px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tmt: \"2px\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<MicOff sx={{ fontSize: \"11px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"11px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{formatDuration(muteDuration)}\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t{/* ─────────────────────────────────────────────────────── */}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t{/* ─────────────────────────────────────────────────── */}\r\n\r\n\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\tsx={{ padding: \"18px 0px\" }}\r\n\t\t\t\t\t\t\t\t\tlabel={\r\n\t\t\t\t\t\t\t\t\t\tisLoading || agentReadyLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"60px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" />\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"60px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{state.callData?.status?.toUpperCase() ?? \"N/A\"}\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tonClick={handleOpenAgentStatus}\r\n\t\t\t\t\t\t\t\t\tdeleteIcon={<KeyboardArrowDown color=\"primary\" />}\r\n\t\t\t\t\t\t\t\t\tonDelete={handleOpenAgentStatus}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\tflexDirection: isVertical ? \"column\" : \"row\",\r\n\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\talignItems: isVertical ? \"stretch\" : \"center\",\r\n\t\t\t\t\t\t\t\t\tmargin: isVertical ? \"0px 8px 8px 8px\" : \"0px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Tooltip title={\"Agent Ready\"}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"contained\"\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <SupportAgent /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleAgentReady();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tclasses={{\r\n\t\t\t\t\t\t\t\t\t\t\troot:\r\n\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"enabled\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t...(\r\n\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? outlined\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: enabled\r\n\t\t\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t\t\t\t...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }),\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={agentReadyLoading}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Agent Ready\" : <SupportAgent />}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={\r\n\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableHoldButton ? \"Hold feature is disabled\" :\r\n\t\t\t\t\t\t\t\t\t\t(state.callData?.hold === 1 ? \"Resume\" : \"Hold\")\r\n\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"contained\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tholdOrUnHoldLoading ? undefined :\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 ? <PlayArrow /> : <Pause />\r\n\t\t\t\t\t\t\t\t\t\t\t) : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!state.sdkConfig?.disableHoldButton) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleHoldToggle();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableHoldButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t((state.callData?.status?.toUpperCase() as CallStatus) !==\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold !== 1) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tholdOrUnHoldLoading ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableHoldButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{holdOrUnHoldLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ color: theme.palette.primary.main }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t) : isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 ? \"Resume\" : \"Hold\"\r\n\t\t\t\t\t\t\t\t\t\t\t) : state.callData?.hold === 1 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<PlayArrow />\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Pause />\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={\r\n\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableMuteButton ? \"Mute feature is disabled\" :\r\n\t\t\t\t\t\t\t\t\t\t(state.callData?.mute === 1 ? \"Unmute\" : \"Mute\")\r\n\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"contained\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tmuteOrUnMuteLoading ? undefined :\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 ? <MicOff /> : <Mic />\r\n\t\t\t\t\t\t\t\t\t\t\t) : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!state.sdkConfig?.disableMuteButton) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleMuteToggle();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableMuteButton || state.callData?.hold === 1\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: (state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t((state.callData?.status?.toUpperCase() as CallStatus) !==\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute !== 1) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tmuteOrUnMuteLoading ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableMuteButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{muteOrUnMuteLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ color: theme.palette.primary.main }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t) : isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 ? \"Unmute\" : \"Mute\"\r\n\t\t\t\t\t\t\t\t\t\t\t) : state.callData?.mute === 1 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<MicOff />\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Mic />\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disableCallTransferButton ? \"Transfer Call feature is disabled\" : \"Transfer Call\"}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={state.openCallTransferDialog ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <TransferWithinAStation /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableCallTransferButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsdkStateManager.setOpenCallTransferDialog(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.openCallTransferDialog\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL && !state.sdkConfig?.disableCallTransferButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) !== CallStatus.ONCALL ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableCallTransferButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Transfer\" : <TransferWithinAStation />}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disableConferenceButton ? \"Conference Call feature is disabled\" : \"Conference Call\"}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={state.openConferenceDialog ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <Group /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableConferenceButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsdkStateManager.setOpenConferenceDialog(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.openConferenceDialog\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL && !state.sdkConfig?.disableConferenceButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) !== CallStatus.ONCALL ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableConferenceButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Conference\" : <Group />}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t{state.sdkConfig?.enableSmsServices && (\r\n\t\t\t\t\t\t\t\t\t<Tooltip title={\"Send SMS\"}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={Boolean(ambulanceAnchorEl) ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <SmsSharp /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.ONCALL, CallStatus.WRAPUP].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenAbulanceServices(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tBoolean(ambulanceAnchorEl)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: [CallStatus.ONCALL, CallStatus.WRAPUP].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t![CallStatus.ONCALL, CallStatus.WRAPUP].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Send SMS\" : <SmsSharp />}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disableEndCallButton ? \"End Call feature is disabled\" : \"End Call\"}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableEndCallButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"contained\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical && !endCallLoading ? <CallEnd /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableEndCallButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetOpenCallDisposition(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableEndCallButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRight: \"1px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"error.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminWidth: \"60px !important\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \" 0px 2px 1px #5f3f3f\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `1px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"40px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \" 0px 2px 1px #5f3f3f\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:active\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...disabled,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminWidth: \"60px !important\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tendCallLoading ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableEndCallButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{endCallLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" color=\"error\" />\r\n\t\t\t\t\t\t\t\t\t\t\t) : isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"End Call\"\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CallEnd />\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t{!state.sdkConfig?.disabledMoreOptionsButton &&\r\n\t\t\t\t\t\t\t\t\tprocessList &&\r\n\t\t\t\t\t\t\t\t\tprocessList?.length > 1 && (\r\n\t\t\t\t\t\t\t\t\t\t<Tooltip title={\"Switch Process\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant={Boolean(moreOptionsAnchorEl) ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <MoreVert /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.IDLE].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenMoreOptions(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={Boolean(moreOptionsAnchorEl)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t![CallStatus.BREAK, CallStatus.IDLE].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Switch Process\" : <MoreVert />}\r\n\t\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Paper>\r\n\t\t\t\t</Fade>\r\n\t\t\t</Box>\r\n\r\n\t\t\t<Fade\r\n\t\t\t\tin={true}\r\n\t\t\t\ttimeout={300}\r\n\t\t\t>\r\n\t\t\t\t<Paper\r\n\t\t\t\t\tref={iframeDragRef}\r\n\t\t\t\t\televation={iframeIsDragging ? 4 : 1}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\tleft: iframePosition.x,\r\n\t\t\t\t\t\ttop: iframePosition.y,\r\n\t\t\t\t\t\tborderRadius: 2,\r\n\t\t\t\t\t\tbgcolor: \"background.paper\",\r\n\t\t\t\t\t\tzIndex: Number.MAX_SAFE_INTEGER,\r\n\t\t\t\t\t\ttransition: theme.transitions.create([\"box-shadow\", \"transform\"], {\r\n\t\t\t\t\t\t\tduration: theme.transitions.duration.short,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tvisibility: showIframe && !state.sdkConfig?.disableSoftPhone ? \"visible\" : \"hidden\",\r\n\t\t\t\t\t\tuserSelect: \"none\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\tcursor: \"all-scroll\",\r\n\t\t\t\t\t\t\tpadding: \"0px 10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonMouseDown={iframeHandleMouseDown}\r\n\t\t\t\t\t\tonTouchStart={iframeHandleTouchStart}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<DragIndicator\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\ttransform: \"rotate(90deg)\",\r\n\t\t\t\t\t\t\t\tcolor: \"#7b7b7b\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>{\" \"}\r\n\t\t\t\t\t\t<Typography variant=\"subtitle1\" fontWeight={600} textAlign=\"center\">\r\n\t\t\t\t\t\t\tahs-cti\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t<IconButton onClick={() => setShowIframe(false)}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<iframe\r\n\t\t\t\t\t\t\t// src={`https://localhost:8443/index.html?user_id=${state.urlConfig?.id}&api_url=${state.urlConfig?.iframeAPIURL}&token=${state.authorization?.accessToken}`}\r\n\t\t\t\t\t\t\tsrc={`${state.urlConfig?.iframeURL}/static/phone/index.html?user_id=${state.urlConfig?.id}&api_url=${state.urlConfig?.iframeAPIURL}&token=${state.authorization?.accessToken}`}\r\n\t\t\t\t\t\t\t// src={`${state.urlConfig?.iframeURL}/static/phone/cti_index.html?user_id=${state.urlConfig?.id}&api_url=${state.urlConfig?.iframeAPIURL}`}\r\n\t\t\t\t\t\t\theight={380}\r\n\r\n\t\t\t\t\t\t\twidth={420}\r\n\t\t\t\t\t\t\tallow=\"camera; microphone; autoplay\"\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\tborder: \"none\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t></iframe>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Fade>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={dialerAnchorEl}\r\n\t\t\t\topen={Boolean(dialerAnchorEl)}\r\n\t\t\t\tonClose={handleCloseDialer}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tall: \"unset\",\r\n\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tvalue={phoneNumber}\r\n\t\t\t\t\t\tplaceholder=\"Enter Mobile No.\"\r\n\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\tconst value = e.target.value;\r\n\t\t\t\t\t\t\tsetPhoneNumber(value);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonKeyDown={(e) => {\r\n\t\t\t\t\t\t\tif (e.key === \"Enter\") {\r\n\t\t\t\t\t\t\t\thandleStartCall(phoneNumber);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\tcolor=\"info\"\r\n\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\thandleStartCall(phoneNumber);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{clickToCallLoading ? (\r\n\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tcolor: theme.palette.success.main,\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<Phone color=\"success\" />\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={ambulanceAnchorEl}\r\n\t\t\t\topen={Boolean(ambulanceAnchorEl)}\r\n\t\t\t\tonClose={handleCloseAmbulance}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tall: \"unset\",\r\n\t\t\t\t\t\tpadding: \" 0px 20px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Tooltip title=\"Ambulance Service\">\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\thandleSendSMS(state.callData);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tAmbulance\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: \"green\",\r\n\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\tmarginLeft: \"14px\",\r\n\t\t\t\t\t\t\t\t\tpadding: \"2px 6px\",\r\n\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tSend\r\n\t\t\t\t\t\t\t\t<SendRounded\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tmarginLeft: \"8px\",\r\n\t\t\t\t\t\t\t\t\t\twidth: \"18px\",\r\n\t\t\t\t\t\t\t\t\t\ttransform: \"rotate(-16deg)\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={moreOptionsAnchorEl}\r\n\t\t\t\topen={Boolean(moreOptionsAnchorEl)}\r\n\t\t\t\tonClose={handleCloseMoreOptions}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tall: \"unset\",\r\n\t\t\t\t\t\tpadding: \" 0px 20px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{processList?.map((item) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tkey={item?.process_id}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Tooltip title={item?.process_name ?? \"\"}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\tstate?.process?.process_id === item?.process_id ? \"contained\" : \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\tsdkStateManager.setProcess(item);\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{item?.process_name ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={statusAnchorEl}\r\n\t\t\t\topen={Boolean(statusAnchorEl)}\r\n\t\t\t\tonClose={handleCloseAgentStatus}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{!breaksList || breaksList?.length === 0 ? (\r\n\t\t\t\t\t<MenuItem onClick={() => handleUpdateAgentStatus(\"Lunch\")}>- Break</MenuItem>\r\n\t\t\t\t) : (\r\n\t\t\t\t\tbreaksList?.map((item) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tkey={item?.type}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t// hilight background of selected\r\n\t\t\t\t\t\t\t\t\tbackgroundColor:\r\n\t\t\t\t\t\t\t\t\t\tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t\t\"primary.main\"\r\n\t\t\t\t\t\t\t\t\t\t\t: \"transparent\",\r\n\t\t\t\t\t\t\t\t\tcolor:\r\n\t\t\t\t\t\t\t\t\t\tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t\t\"white\"\r\n\t\t\t\t\t\t\t\t\t\t\t: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\":hover\": {\r\n\t\t\t\t\t\t\t\t\t\tbackgroundColor:\r\n\t\t\t\t\t\t\t\t\t\t\tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"primary.dark\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"selected.hover\",\r\n\t\t\t\t\t\t\t\t\t\t// color:\r\n\t\t\t\t\t\t\t\t\t\t// \tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t// \t\t\"primary.main\"\r\n\t\t\t\t\t\t\t\t\t\t// \t:\t\"primary.main\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tonClick={() => handleUpdateAgentStatus(item?.type)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t- {item?.type}\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})\r\n\t\t\t\t)}\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={anchorEl}\r\n\t\t\t\topen={Boolean(anchorEl)}\r\n\t\t\t\tonClose={handleCloseQueueCounts}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\tpadding: \"0px 10px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\ticon={<Layers color=\"secondary\" />}\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tlabel=\"Waiting - 25\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"4px 2px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\ticon={<Pending color=\"info\" />}\r\n\t\t\t\t\t\tlabel=\"Pending - 99+\"\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"4px 2px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\ticon={<Upcoming color=\"success\" />}\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tlabel=\"Upcoming - 66\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"4px 2px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t{Boolean(state.openConferenceDialog) && <ConferenceDialog />}\r\n\r\n\t\t\t{Boolean(state.openCallTransferDialog) && (\r\n\t\t\t\t<CallTransferDialog open={state.openCallTransferDialog} />\r\n\t\t\t)}\r\n\r\n\t\t\t{Boolean(openCallDisposition) && (\r\n\t\t\t\t<EndCallDispositionDialog\r\n\t\t\t\t\topen={openCallDisposition}\r\n\t\t\t\t\tsetOpen={setOpenCallDisposition}\r\n\t\t\t\t\tonSubmitDisposition={handleEndCall}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\r\n\t\t\t{Boolean(openCallHistoryDialog) && (\r\n\t\t\t\t<CallHistoryDialog\r\n\t\t\t\t\topen={openCallHistoryDialog}\r\n\t\t\t\t\tsetOpen={setOpenCallHistoryDialog}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport {\r\n\tAirlines,\r\n\tCall,\r\n\tCallEnd,\r\n\tCallSplit,\r\n\tClose,\r\n\tMemoryOutlined,\r\n\tPause,\r\n\tPhoneDisabled,\r\n\tPlayArrow,\r\n\tRecordVoiceOver,\r\n\tRoofing,\r\n\tSupportAgent,\r\n\tTransferWithinAStation,\r\n\tUpcoming,\r\n} from \"@mui/icons-material\";\r\nimport {\r\n\tBox,\r\n\tButton,\r\n\tDialog,\r\n\tIconButton,\r\n\tMenu,\r\n\tMenuItem,\r\n\tPaper,\r\n\tTextField,\r\n\tTypography,\r\n\tAutocomplete,\r\n\tTooltip,\r\n\tuseTheme,\r\n\tTableContainer,\r\n\tTable,\r\n\tTableHead,\r\n\tTableRow,\r\n\tTableCell,\r\n\tTableBody,\r\n\tCircularProgress,\r\n\tCheckbox,\r\n} from \"@mui/material\";\r\n\r\nimport React, { useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\nimport { useGetRequest, usePostRequest } from \"../services/request\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { useToast } from \"../services/toastMessage\";\r\nimport useStyles from \"./styles\";\r\n\r\nimport { ConferenceLineTypes, CallStatus } from \"../../types\";\r\n\r\ntype TransferCallRequest = {\r\n\tmobile_number?: string;\r\n\tuserid?: number;\r\n\ttype?: string;\r\n\ttransfer_to?: string;\r\n\tcallreferenceid?: string;\r\n\tprocessid?: string;\r\n\tprocess_name?: string;\r\n};\r\n\r\ntype BlindTransferCallRequest = {\r\n\taction: string;\r\n\tuserid: string;\r\n\tcallreferenceid: string;\r\n\tblind_transfer_no: any;\r\n};\r\n\r\nconst ConferenceTableRow = ({ each, isLineDialing }: any) => {\r\n\tconst state = useSDKState();\r\n\tconst theme = useTheme();\r\n\tconst { showToast } = useToast();\r\n\tconst { disabled, enabled, outlined } = useStyles({\r\n\t\tdisabled: state.sdkConfig?.disabled || {},\r\n\t\tenabled: state.sdkConfig?.enabled || {},\r\n\t\toutlined: state.sdkConfig?.outlined || {},\r\n\t});\r\n\r\n\tconst [conferenceCallStart, setConferenceCallStart] = useState(false);\r\n\tconst [conferenceCallMerge, setConferenceCallMerge] = useState(false);\r\n\tconst [conferenceCallHoldOrUnHold, setConferenceCallHoldOrUnHold] = useState(false);\r\n\tconst [conferenceCallEnd, setConferenceCallEnd] = useState(false);\r\n\r\n\t// Check if the entered phone number is same as the active call number (used only as a call guard, not for UI error)\r\n\tconst isSameAsActiveCall = each?.phone === state.callData?.phone_number && !!each?.phone;\r\n\r\n\t// Show error on the DUPLICATE occurrence: any lower-numbered conference line already has the same phone\r\n\tconst isDuplicateInConference =\r\n\t\t!!each?.phone &&\r\n\t\teach?.line !== 1 &&\r\n\t\t(state.conferenceLine as ConferenceLineTypes[])?.some(\r\n\t\t\t(line) => line.line < each.line && line.phone === each?.phone && !!line.phone,\r\n\t\t);\r\n\r\n\t// Only flag duplicates — no error on line 1 (active call) and no error on the first use of a number\r\n\tconst hasPhoneConflict = isDuplicateInConference;\r\n\r\n\tconst phoneConflictHelperText = isDuplicateInConference ? \"Number already used in another conference line\" : \"\";\r\n\r\n\tconst onConferenceLineUpdate = (line: ConferenceLineTypes, data: any) => {\r\n\t\tsdkStateManager.setConferenceLine({ ...line, ...data });\r\n\t};\r\n\r\n\tconst onConferenceCallStart = (line: ConferenceLineTypes, data: any) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\r\n\t\t// Block dialing the same number as the active call\r\n\t\tif (line_used.phone === state.callData?.phone_number) {\r\n\t\t\tshowToast(\"Cannot conference with the active call number\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Block dialing a number already used in another conference line\r\n\t\tconst isDuplicateNumber = (state.conferenceLine as ConferenceLineTypes[])?.some(\r\n\t\t\t(l) => l.line !== line_used.line && l.phone === line_used.phone && !!l.phone,\r\n\t\t);\r\n\t\tif (isDuplicateNumber) {\r\n\t\t\tshowToast(\"Number already used in another conference line\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!line_used.phone || line_used.phone.length < 10) {\r\n\t\t\tshowToast(\"Invalid phone number\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetConferenceCallStart(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: `CALL${line_used.line}`,\r\n\t\t\t// line_used: Number(line_used.line),\r\n\t\t\t// thirdparty_no: line_used.phone,\r\n\t\t\ttarget: line_used.phone,\r\n\t\t\tline_number: Number(line_used.line),\r\n\t\t\tuserid: state.callData?.agent_id ?? -1,\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallStart(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst onMergeConferenceCall = (line: ConferenceLineTypes, data: any) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\t\tsetConferenceCallMerge(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: `CONFERENCE`,\r\n\t\t\tline_used: String(line_used.line),\r\n\t\t\tthirdparty_no: line_used.phone,\r\n\t\t\tuserid: state.callData?.agent_id ?? -1,\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t\tconvox_id: state.callData?.convox_id ?? \"\",\r\n\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_MERGE_CALL, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tif (state.callData?.hold === 1) {\r\n\t\t\t\t\thandleHoldToggle();\r\n\t\t\t\t}\r\n\t\t\t\tif (state.callData?.mute === 1) {\r\n\t\t\t\t\thandleMuteToggle();\r\n\t\t\t\t}\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallMerge(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst onHoldOrUnHoldConferenceCall = (line: ConferenceLineTypes, data: any, type: string) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\t\tsetConferenceCallHoldOrUnHold(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: type === \"HOLDUSER\" ? \"HOLD\" : \"UNHOLD\",\r\n\t\t\toperation: type,\r\n\t\t\thold_channel_no: type === \"HOLDUSER\" ? `hold${line_used.line}` : `unhold${line_used.line}`,\r\n\t\t\tuserid: state.callData?.agent_id ?? -1,\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\r\n\t\t\tconvox_id: state.callData?.convox_id ?? \"\",\r\n\t\t\tline_number: Number(line_used.line),\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_HOLD_OR_UN_HOLD, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallHoldOrUnHold(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst onEndConferenceCall = (line: ConferenceLineTypes, data: any) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\r\n\t\t// ✅ FIX: Prevent accidental hangup of the primary call channel via conference controls\r\n\t\tif (line_used.line === 1) {\r\n\t\t\tshowToast(\"Cannot end the primary call from conference controls\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetConferenceCallEnd(true);\r\n\r\n\t\t// Backend HangupRequest schema: convox_id (required), agent_id, mobile_number,\r\n\t\t// line_number, reason. Pass line_number = the conference line being dropped\r\n\t\t// (line_number = 0 means full-call hangup, so it must be > 0 here).\r\n\t\tconst payload = {\r\n\t\t\tconvox_id: state.callData?.convox_id ?? \"\",\r\n\t\t\tagent_id: state.agentId ?? \"\",\r\n\t\t\tmobile_number: line_used.phone ?? \"\",\r\n\t\t\tline_number: Number(line_used.line),\r\n\t\t\treason: \"normal\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_END, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallEnd(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst [holdOrUnHold] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tuserId: string;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst [muteOrUnMute] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tuserId: string;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst handleHoldToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.hold === 1 ? CallStatus.UNHOLD : CallStatus.HOLD,\r\n\t\t\tuserId: state.agentId,\r\n\t\t};\r\n\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t};\r\n\r\n\tconst handleMuteToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.mute === 1 ? CallStatus.UNMUTE : CallStatus.MUTE,\r\n\t\t\tuserId: state.agentId,\r\n\t\t};\r\n\r\n\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<TableRow\r\n\t\t\tkey={each.line}\r\n\t\t\tsx={{\r\n\t\t\t\tborder: \"2px solid #fff\",\r\n\t\t\t}}\r\n\t\t>\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\tflex: 1,\r\n\t\t\t\t\twidth: \"100px\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Typography>Line {each?.line ?? \"\"}. </Typography>\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\twidth: \"150px\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Typography\r\n\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tpx: 1,\r\n\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\twidth: \"150px\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{each?.status ?? \"\"}\r\n\t\t\t\t</Typography>\r\n\t\t\t</TableCell>\r\n\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\tflex: 1,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<TextField\r\n\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\tplaceholder=\"Phone Number\"\r\n\t\t\t\t\tfullWidth\r\n\t\t\t\t\tvalue={each?.phone || \"\"}\r\n\t\t\t\t\terror={hasPhoneConflict}\r\n\t\t\t\t\thelperText={phoneConflictHelperText}\r\n\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\teach?.line === 1 ||\r\n\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\tCallStatus.DISCONNECTED,\r\n\t\t\t\t\t\t\tCallStatus.CONFERENCE,\r\n\t\t\t\t\t\t\tCallStatus.HOLD,\r\n\t\t\t\t\t\t\tCallStatus.MUTE,\r\n\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t].includes(each?.status ?? \"\") ||\r\n\t\t\t\t\t\tisLineDialing\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\tonConferenceLineUpdate(each, { phone: e.target.value });\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\tflex: 1,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\tgap: \"10px\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{each?.line === 1 && (\r\n\t\t\t\t\t\t<Tooltip title={each?.status !== CallStatus.HOLD ? \"Hold\" : \"Resume\"}>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={each?.status === CallStatus.HOLD ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={each?.status === CallStatus.CONFERENCE ? { ...outlined } : { ...disabled }}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tif (each.status === CallStatus.HOLD) {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: false }, \"UNHOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: true }, \"HOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t(each?.status !== CallStatus.CONFERENCE && each?.status !== CallStatus.HOLD) ||\r\n\t\t\t\t\t\t\t\t\tconferenceCallHoldOrUnHold\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{each.status === CallStatus.HOLD ? (\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tgap: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"98px\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: each.status === CallStatus.HOLD ? \"#fff\" : \"initial\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tUnhold\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t{conferenceCallHoldOrUnHold ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"16px\" sx={{ color: theme.palette.primary.main }} />\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<PlayArrow />\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tgap: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"98px\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ color: each.status === CallStatus.HOLD ? \"#fff\" : \"#000\", fontSize: \"12px\" }}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tHold\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t{conferenceCallHoldOrUnHold ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"16px\" sx={{ color: theme.palette.primary.main }} />\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<Pause />\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t\t\thasPhoneConflict\r\n\t\t\t\t\t\t\t\t\t? phoneConflictHelperText || \"Cannot dial this number\"\r\n\t\t\t\t\t\t\t\t\t: \"Call\"\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tvariant={each?.status !== CallStatus.IDLE ? \"outlined\" : \"contained\"}\r\n\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE || hasPhoneConflict\r\n\t\t\t\t\t\t\t\t\t\t\t? { ...disabled }\r\n\t\t\t\t\t\t\t\t\t\t\t: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.success.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"success.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `0px 2px 1px ${theme.palette.success.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.success.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"&:active\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"success.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\tonConferenceCallStart(each, {});\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE ||\r\n\t\t\t\t\t\t\t\t\t\tisLineDialing ||\r\n\t\t\t\t\t\t\t\t\t\thasPhoneConflict\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{conferenceCallStart ? (\r\n\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" color=\"success\" />\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Call\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor:\r\n\t\t\t\t\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE || hasPhoneConflict ? \"default\" : \"#f3f2f2\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title=\"Merge Call\">\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={each?.status === CallStatus.ONCALL ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={each?.status === CallStatus.ONCALL ? { ...enabled } : { ...disabled }}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tonMergeConferenceCall(each, { isMergeCall: true });\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={each?.status !== CallStatus.ONCALL}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallMerge ? <CircularProgress size=\"20px\" /> : <CallSplit />}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title={each?.status !== CallStatus.HOLD ? \"Hold\" : \"Resume\"}>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={each?.status === CallStatus.HOLD ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={each?.status === CallStatus.CONFERENCE ? { ...outlined } : { ...disabled }}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tif (each.status === CallStatus.HOLD) {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: false }, \"UNHOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: true }, \"HOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t(each?.status !== CallStatus.CONFERENCE && each?.status !== CallStatus.HOLD) ||\r\n\t\t\t\t\t\t\t\t\tconferenceCallHoldOrUnHold\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallHoldOrUnHold ? (\r\n\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" sx={{ color: theme.palette.primary.main }} />\r\n\t\t\t\t\t\t\t\t) : each.status === CallStatus.HOLD ? (\r\n\t\t\t\t\t\t\t\t\t<PlayArrow />\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t<Pause />\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title=\"End Call\">\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE && each?.status !== CallStatus.DISCONNECTED\r\n\t\t\t\t\t\t\t\t\t\t? \"contained\"\r\n\t\t\t\t\t\t\t\t\t\t: \"outlined\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE && each?.status !== CallStatus.DISCONNECTED ?\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `0px 2px 1px ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\"&:active\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t: {\r\n\t\t\t\t\t\t\t\t\t\t\t...disabled,\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tonEndConferenceCall(each, {\r\n\t\t\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\teach?.status === CallStatus.IDLE ||\r\n\t\t\t\t\t\t\t\t\teach?.status === CallStatus.DISCONNECTED ||\r\n\t\t\t\t\t\t\t\t\tconferenceCallEnd\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallEnd ? <CircularProgress size=\"20px\" color=\"error\" /> : <CallEnd />}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t</TableCell>\r\n\t\t</TableRow>\r\n\t);\r\n};\r\n\r\nexport function ConferenceDialog() {\r\n\tconst state = useSDKState();\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [conferenceCallEndAll, setConferenceCallEndAll] = useState(false);\r\n\r\n\tconst handleClose = () => {\r\n\t\tsdkStateManager.setOpenConferenceDialog(false);\r\n\t};\r\n\r\n\tconst onEndAllConferenceCalls = () => {\r\n\t\tsetConferenceCallEndAll(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: \"ENDCONFERENCE\",\r\n\t\t\tuserid: state.callData?.agent_id ?? -1,\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t\tprocessid: state.process?.process_id?.toString() ?? \"\",\r\n\t\t\tprocess_name: state.process?.process_name ?? \"\",\r\n\t\t\tcallreferenceid: state.callData?.convox_id ?? \"\",\r\n\t\t\tconvox_id: state.callData?.convox_id ?? \"\",\r\n\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_END_ALL, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\thandleClose();\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallEndAll(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst handleTransferConferenceCall = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: \"TRANSFERAPI\",\r\n\t\t\tuserid: state.callData?.agent_id ?? -1,\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t\tprocessid: state.process?.process_id?.toString() ?? \"\",\r\n\t\t\tprocess_name: state.process?.process_name ?? \"\",\r\n\t\t\tcallreferenceid: state.callData?.convox_id ?? \"\",\r\n\t\t\tconvox_id: state.callData?.convox_id ?? \"\",\r\n\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_TRANSFER, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\thandleClose();\r\n\t\t\t\t// ✅ FIX: Do NOT call sdkStateManager.endCall() here.\r\n\t\t\t\t// The WebSocket will push the correct WRAPUP event — let it drive state.\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst isLineDialing = state?.conferenceLine?.some((item) => item?.status === CallStatus.DIALING);\r\n\tconst conferenceLineCount =\r\n\t\tstate?.conferenceLine?.filter((item) => item?.status === CallStatus.CONFERENCE)?.length ?? 0;\r\n\r\n\tconst isHold = state?.conferenceLine?.some((item) => item?.status === CallStatus.HOLD);\r\n\tconst isOnCall = state?.conferenceLine?.some((item) => item?.status === CallStatus.ONCALL);\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={state.openConferenceDialog}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"md\"}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 800 } } }}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"0px 16px\",\r\n\t\t\t\t\t\t\tpaddingBottom: \"6px\",\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 2px #e7e5e5ff\",\r\n\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\tcolor=\"primary.main\"\r\n\t\t\t\t\t\t\tsx={{ textTransform: \"uppercase\", fontWeight: \"bold\", fontSize: \"14px\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{state?.agentId ?? \"\"} conference\r\n\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t{/* <Button\r\n\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\tonClick={handleTransferConferenceCall}\r\n\t\t\t\t\t\t\t\tdisabled={conferenceLineCount <= 1 || isHold || isLineDialing || isOnCall}\r\n\t\t\t\t\t\t\t\tstartIcon={<TransferWithinAStation />}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tExit Conference\r\n\t\t\t\t\t\t\t</Button> */}\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tonClick={handleClose}\r\n\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Close sx={{ color: \"primary.main\" }} />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 2px #e7e5e5ff\",\r\n\t\t\t\t\t\t\tmargin: \"0px 15px\",\r\n\t\t\t\t\t\t\tborderRadius: \"20px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<TableContainer\r\n\t\t\t\t\t\t\tcomponent={Paper}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\toutline: \"0px solid gray !important\",\r\n\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 6px #e7e5e5ff\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Table sx={{ border: \"4px solid #ffffff !important\" }}>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow sx={{ border: \"2px solid #f3f3f3ff !important\" }}>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ padding: \"6px\" }}>Line</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ padding: \"6px\" }}>Status</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ padding: \"6px\" }}>Mobile Number</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ padding: \"6px\" }}>Call Actions</TableCell>\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{state?.conferenceLine.map((each: any) => (\r\n\t\t\t\t\t\t\t\t\t\t<ConferenceTableRow key={each.line} each={each} isLineDialing={isLineDialing} />\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t</TableContainer>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box textAlign=\"center\" m={2}>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\tsize=\"large\"\r\n\t\t\t\t\t\t\tonClick={onEndAllConferenceCalls}\r\n\t\t\t\t\t\t\tdisabled={conferenceCallEndAll || conferenceLineCount <= 0}\r\n\t\t\t\t\t\t\tsx={{ px: 2, borderRadius: \"20px\", textTransform: \"capitalize\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{conferenceCallEndAll ? (\r\n\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\t\tsx={{ marginRight: \"8px\" }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.main\",\r\n\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"error.dark\" },\r\n\t\t\t\t\t\t\t\t\t\tmarginRight: \"8px\",\r\n\t\t\t\t\t\t\t\t\t\twidth: \"28px\",\r\n\t\t\t\t\t\t\t\t\t\theight: \"28px\",\r\n\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\tlineHeight: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\tcolor: \"white\",\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<PhoneDisabled sx={{ color: \"white\", fontSize: \"16px\", fontWeight: \"600\" }} />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\tEnd Conference\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function CallTransferDialog({ open }: any) {\r\n\tconst state = useSDKState();\r\n\tconst [mobileNumber, setMobileNumber] = useState(\"\");\r\n\r\n\t// ✅ FIX: Removed sdkStateManager.endCall() and sdkStateManager.resetConferenceLines()\r\n\t// from onSuccess. These were forcing the initial agent to IDLE immediately on the\r\n\t// client side, before the WebSocket pushed the correct WRAPUP event.\r\n\t// For a blind transfer the server will push:\r\n\t// - Initial agent → WRAPUP (via WebSocket)\r\n\t// - Transferred-to agent → RINGING → ONCALL (via WebSocket)\r\n\t// We must NOT touch local call state here — only close the dialog.\r\n\tconst [transferCall, { isLoading: isTransferLoading }] = usePostRequest<TransferCallRequest>({\r\n\t\tonSuccess: () => {\r\n\t\t\t// Close dialog only. Let WebSocket events drive all state transitions.\r\n\t\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [initiateConsultCall] = usePostRequest<any>({});\r\n\r\n\tconst [completeConsultTransfer, { isLoading: isCompleteConsultLoading }] = usePostRequest<any>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setConsultInfo(null);\r\n\t\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [cancelConsultTransfer, { isLoading: isCancelConsultLoading }] = usePostRequest<any>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setConsultInfo(null);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [currentselecteTab, setCurrentselecteTab] = useState(\"queues\");\r\n\tconst [transferMenuAnchor, setTransferMenuAnchor] = useState<null | HTMLElement>(null);\r\n\tconst [pendingTransferData, setPendingTransferData] = useState<{ data: any; type: string } | null>(null);\r\n\r\n\tconst blindEnabled = !state.sdkConfig?.disableBlindTransfer;\r\n\tconst attendedEnabled = !state.sdkConfig?.disableAttendedTransfer;\r\n\tconst enabledTransferModeCount = (blindEnabled ? 1 : 0) + (attendedEnabled ? 1 : 0);\r\n\tconst singleTransferMode: \"DEFAULT\" | \"CONSULT\" | null =\r\n\t\tenabledTransferModeCount === 1 ? (blindEnabled ? \"DEFAULT\" : \"CONSULT\") : null;\r\n\r\n\tconst [getIdelAgentsList, { data: idleAgentsList, isLoading: isIdleAgentsListLoading }] =\r\n\t\tusePostRequest<any>({ disabledSuccessToast: true });\r\n\r\n\tconst [\r\n\t\tgetHospitalsServicesList,\r\n\t\t{ data: hospitalsServicesList, isLoading: isHospitalsServicesListLoading },\r\n\t] = useGetRequest<any>({ disabledSuccessToast: true });\r\n\r\n\tconst [\r\n\t\tgetProcessAndQueuesList,\r\n\t\t{ data: processAndQueuesList, isLoading: isProcessAndQueuesListLoading },\r\n\t] = usePostRequest<{\r\n\t\tstatus: string;\r\n\t\tactive: boolean;\r\n\t\tprocess?: any[];\r\n\t\tqueue?: any[];\r\n\t}>({ disabledSuccessToast: true });\r\n\r\n\tconst handleClose = () => {\r\n\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t};\r\n\r\n\tconst handleTransferCall = (data: any, type: string, mode: \"CONSULT\" | \"DEFAULT\" = \"DEFAULT\") => {\r\n\t\tif (type === \"PROCESS\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\t\tuserid: state.callData?.agent_id ?? -1,\r\n\t\t\t\ttype: \"PROCESS\",\r\n\t\t\t\ttransfer_to: data?.process_name ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.convox_id ?? \"\",\r\n\t\t\t\tprocessid: String(state.callData?.process_id ?? \"\"),\r\n\t\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t\t};\r\n\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t} else if (type === \"QUEUE\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\t\tuserid: state.callData?.agent_id ?? -1,\r\n\t\t\t\ttype: \"QUEUE\",\r\n\t\t\t\ttransfer_to: data?.queue_name ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.convox_id ?? \"\",\r\n\t\t\t\tprocessid: String(state.callData?.process_id ?? \"\"),\r\n\t\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t\t};\r\n\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t} else if (type === \"AGENT\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\t\tuserid: state.callData?.agent_id ?? \"\",\r\n\t\t\t\ttype: \"AGENT\",\r\n\t\t\t\ttransfer_type: mode === \"CONSULT\" ? \"ATTENDED\" : \"BLIND\",\r\n\t\t\t\ttransfer_to: data?.id?.toString() ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.convox_id ?? \"\",\r\n\t\t\t\tprocessid: String(state.callData?.process_id ?? \"\"),\r\n\t\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t\t};\r\n\t\t\tif (mode === \"CONSULT\") {\r\n\t\t\t\tinitiateConsultCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t\t} else {\r\n\t\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t\t}\r\n\t\t} else if (type === \"OTHER\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\taction: mode === \"CONSULT\" ? \"ATTENDED\" : \"BLIND_TRANSFER\",\r\n\t\t\t\ttransfer_type: mode === \"CONSULT\" ? \"ATTENDED\" : \"BLIND\",\r\n\t\t\t\ttype: \"OTHER\",\r\n\t\t\t\ttransfer_to: data?.mobile_number ?? \"\",\r\n\t\t\t\tuserid: state.callData?.agent_id ?? -1,\r\n\t\t\t\tcallreferenceid: state.callData?.convox_id ?? \"\",\r\n\t\t\t\tblind_transfer_no: data?.mobile_number ?? \"\",\r\n\t\t\t};\r\n\t\t\tif (mode === \"CONSULT\") {\r\n\t\t\t\tinitiateConsultCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t\t} else {\r\n\t\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleTransferClick = (e: React.MouseEvent<HTMLElement>, data: any, type: string) => {\r\n\t\tif (singleTransferMode) {\r\n\t\t\thandleTransferCall(data, type, singleTransferMode);\r\n\t\t} else {\r\n\t\t\tsetPendingTransferData({ data, type });\r\n\t\t\tsetTransferMenuAnchor(e.currentTarget);\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tgetIdelAgentsList(END_POINT.AGENTS_LIST, { status: \"IDLE\", active: true });\r\n\t\tgetProcessAndQueuesList(END_POINT.TRANSFER_TO_DETAILS, { status: \"ACTIVE\", active: true });\r\n\t\tgetHospitalsServicesList(END_POINT.HOSPITALS_SERVICES);\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"md\"}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 600 } } }}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t\tposition: \"relative\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography variant=\"body1\" sx={{ flex: 1 }}> Call Transfer</Typography>\r\n\t\t\t\t\t\t<Box sx={{ position: \"absolute\", left: \"50%\", transform: \"translateX(-50%)\" }}>\r\n\t\t\t\t\t\t\t{state.consultInfo && (state.consultInfo.status?.toUpperCase() as CallStatus) === CallStatus.RINGING && (\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Typography variant=\"body1\" sx={{ whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\tTrying to consult\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={{ display: \"inline-flex\", gap: \"3px\", alignItems: \"flex-end\", height: \"14px\" }}>\r\n\t\t\t\t\t\t\t\t\t\t{[0, 1, 2].map((i) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box key={i} component=\"span\" sx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"@keyframes jumpDot\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"0%, 60%, 100%\": { transform: \"translateY(0)\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"30%\": { transform: \"translateY(-5px)\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\tanimation: \"jumpDot 1s ease-in-out infinite\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tanimationDelay: `${i * 0.15}s`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"inline-block\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}>.</Box>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{state.consultInfo && (state.consultInfo.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL && (\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tstartIcon={isCompleteConsultLoading ? <CircularProgress size={14} /> : <TransferWithinAStation sx={{ fontSize: 16 }} />}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={isCompleteConsultLoading || isCancelConsultLoading}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (state.consultInfo) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tcompleteConsultTransfer(END_POINT.TRANSFER_COMPLETE, {}, {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tparams: { call_uuid: state.consultInfo.call_uuid },\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\tTransfer\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\t\t\tstartIcon={isCancelConsultLoading ? <CircularProgress size={14} /> : <PhoneDisabled sx={{ fontSize: 16 }} />}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={isCancelConsultLoading || isCompleteConsultLoading}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (state.consultInfo) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tcancelConsultTransfer(END_POINT.TRANSFER_CANCEL, {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstatus: state.consultInfo.status,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tparticipant_identifier: state.consultInfo.participant_identifier,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tchannel_id: state.consultInfo.channel_id,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcall_uuid: state.consultInfo.call_uuid,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbridge_id: state.consultInfo.bridge_id,\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\tCancel\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={{ flex: 1, display: \"flex\", justifyContent: \"flex-end\" }}>\r\n\t\t\t\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box sx={{ margin: \"10px\", borderRadius: \"10px\" }}>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 1, margin: \"10px\" }}>\r\n\t\t\t\t\t\t\t{/* <Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"process\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => setCurrentselecteTab(\"process\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tProcess\r\n\t\t\t\t\t\t\t</Button> */}\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"queues\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => setCurrentselecteTab(\"queues\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tQueues\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"agents\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetCurrentselecteTab(\"agents\");\r\n\t\t\t\t\t\t\t\t\tgetIdelAgentsList(END_POINT.AGENTS_LIST, { status: \"IDLE\", active: true });\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tAgents\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t{/* {!state.sdkConfig?.disableBlindTransfer && ( */}\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"others\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => setCurrentselecteTab(\"others\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tOthers\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t{/* )} */}\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{(isProcessAndQueuesListLoading ||\r\n\t\t\t\t\t\t\tisIdleAgentsListLoading ||\r\n\t\t\t\t\t\t\tisHospitalsServicesListLoading ||\r\n\t\t\t\t\t\t\tisTransferLoading) && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\theight: \"80px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<CircularProgress />\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!isIdleAgentsListLoading &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\t!isTransferLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"process\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns:\r\n\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process &&\r\n\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"repeat(2, 1fr)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"repeat(1, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{processAndQueuesList?.data?.process &&\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.map((process: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<MemoryOutlined sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{process.process_name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : \"\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleTransferCall(process, \"PROCESS\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tp={2}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Upcoming color=\"primary\" />\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"20px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Process Found\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!isIdleAgentsListLoading &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\t!isTransferLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"queues\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns:\r\n\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue &&\r\n\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue?.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"repeat(2, 1fr)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"repeat(1, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{processAndQueuesList?.data?.queue &&\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue?.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue?.map((queue: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Airlines sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{queue.queue_name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{processAndQueuesList?.data?.process?.find(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(process: any) => process.process_id === queue.process_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)?.process_name ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"gray\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\"(\" +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.find(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(process: any) => process.process_id === queue.process_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)?.process_name +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\")\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : \"\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleTransferCall(queue, \"QUEUE\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tp={2}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Upcoming color=\"primary\" />\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"20px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Queues Found\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!isIdleAgentsListLoading &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\t!isTransferLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"agents\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns:\r\n\t\t\t\t\t\t\t\t\t\t\tidleAgentsList?.data && idleAgentsList?.data?.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"repeat(2, 1fr)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"repeat(1, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{idleAgentsList?.data && idleAgentsList?.data?.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\tidleAgentsList?.data?.map((agent: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SupportAgent sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{agent.name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : \"\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => handleTransferClick(e, agent, \"AGENT\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tp={2}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Upcoming color=\"primary\" />\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"20px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Agents Found\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!isIdleAgentsListLoading &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\t!isTransferLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"others\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns: \"repeat(2, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{hospitalsServicesList?.data &&\r\n\t\t\t\t\t\t\t\t\t\thospitalsServicesList?.data?.length > 0 &&\r\n\t\t\t\t\t\t\t\t\t\thospitalsServicesList?.data?.map((service: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Roofing sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={`${service?.description ?? \"\"}`}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ color: \"text.secondary\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{service.name}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"9px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"gray\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextOverflow: \"ellipsis\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"160px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{service?.description ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : (service?.phone_number ?? \"\")}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => handleTransferClick(e, { mobile_number: service?.phone_number ?? \"\" }, \"OTHER\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tname=\"others\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel=\"Mobile number\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"tel\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={mobileNumber}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst v = e.target.value;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (/^\\d*$/.test(v)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetMobileNumber(v);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thtmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinputMode: \"numeric\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxLength: 11,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Enter mobile number\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tautoComplete=\"off\"\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\t\t\t\t\ttitle={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : (mobileNumber ? `Call To - ${mobileNumber}` : \"Enter mobile number\")}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => handleTransferClick(e, { mobile_number: mobileNumber ?? \"\" }, \"OTHER\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\r\n\t\t\t{/* Transfer Mode Menu */}\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={transferMenuAnchor}\r\n\t\t\t\topen={Boolean(transferMenuAnchor)}\r\n\t\t\t\tonClose={() => setTransferMenuAnchor(null)}\r\n\t\t\t\tanchorOrigin={{ vertical: \"top\", horizontal: \"left\" }}\r\n\t\t\t\ttransformOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n\t\t\t>\r\n\t\t\t\t{blindEnabled && (\r\n\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\tif (pendingTransferData) handleTransferCall(pendingTransferData.data, pendingTransferData.type, \"DEFAULT\");\r\n\t\t\t\t\t\t\tsetTransferMenuAnchor(null);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tsx={{ gap: 1 }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<TransferWithinAStation fontSize=\"small\" color=\"primary\" />\r\n\t\t\t\t\t\tTransfer\r\n\t\t\t\t\t</MenuItem>\r\n\t\t\t\t)}\r\n\t\t\t\t{attendedEnabled && (\r\n\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\tif (pendingTransferData) handleTransferCall(pendingTransferData.data, pendingTransferData.type, \"CONSULT\");\r\n\t\t\t\t\t\t\tsetTransferMenuAnchor(null);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tsx={{ gap: 1 }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<RecordVoiceOver fontSize=\"small\" color=\"primary\" />\r\n\t\t\t\t\t\tConsult then Transfer\r\n\t\t\t\t\t</MenuItem>\r\n\t\t\t\t)}\r\n\t\t\t</Menu>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function EndCallDispositionDialog({ open, setOpen, onSubmitDisposition }: any) {\r\n\tconst [getDispositions, data] = useGetRequest();\r\n\r\n\tconst [formData, setFormData] = useState({\r\n\t\tdisposition: { label: \"\", value: \"\", id: 0 },\r\n\t\tfollowUp: { label: \"No\", value: \"N\" },\r\n\t\tcallbackDate: \"\",\r\n\t\tcallbackHrs: \"\",\r\n\t\tcallbackMins: \"\",\r\n\t\tselected_break: false,\r\n\t\tnotes: \"\",\r\n\t});\r\n\tconst followUpOptions = [\r\n\t\t{ label: \"Yes\", value: \"Y\" },\r\n\t\t{ label: \"No\", value: \"N\" },\r\n\t];\r\n\r\n\tconst handleChange = (\r\n\t\tfield: keyof typeof formData,\r\n\t\tvalue: { label: string } | null | string | boolean\r\n\t) => {\r\n\t\tsetFormData((prev) => ({ ...prev, [field]: value }));\r\n\t};\r\n\r\n\tconst handleReset = () => {\r\n\t\tsetFormData({\r\n\t\t\tdisposition: { label: \"\", value: \"\", id: 0 },\r\n\t\t\tfollowUp: { label: \"No\", value: \"N\" },\r\n\t\t\tcallbackDate: \"\",\r\n\t\t\tcallbackHrs: \"\",\r\n\t\t\tcallbackMins: \"\",\r\n\t\t\tselected_break: false,\r\n\t\t\tnotes: \"\",\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleClose = () => {\r\n\t\thandleReset();\r\n\t\tsetOpen(false);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tgetDispositions(END_POINT.DISPOSITIONS);\r\n\t}, []);\r\n\r\n\tconst dispositionsOptions = useMemo(() => {\r\n\t\treturn (\r\n\t\t\tdata?.data?.data\r\n\t\t\t\t?.filter((item: any) => item.name !== \"Resolved\")\r\n\t\t\t\t?.map((item: any) => ({\r\n\t\t\t\t\tlabel: item.name,\r\n\t\t\t\t\tvalue: item.code,\r\n\t\t\t\t\tid: item.disposition_id,\r\n\t\t\t\t}))\r\n\t\t\t\t?.sort((a: any, b: any) => a.label.localeCompare(b.label)) || []\r\n\t\t);\r\n\t}, [data?.data?.data]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"xs\"}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 600 } } }}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tminWidth: '700px'\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\tm={1}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{\" \"}\r\n\t\t\t\t\t\t\tCall Disposition\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tdisplay=\"flex\"\r\n\t\t\t\t\t\t\tgap={2}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\tvalue={formData.disposition}\r\n\t\t\t\t\t\t\t\toptions={dispositionsOptions}\r\n\t\t\t\t\t\t\t\tgetOptionLabel={(opt) => opt.label}\r\n\t\t\t\t\t\t\t\tonChange={(_, val) => handleChange(\"disposition\", val)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Disposition\"\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\toptions={followUpOptions}\r\n\t\t\t\t\t\t\t\tgetOptionLabel={(opt) => opt.label}\r\n\t\t\t\t\t\t\t\tvalue={formData.followUp}\r\n\t\t\t\t\t\t\t\tonChange={(_, val) => handleChange(\"followUp\", val)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Follow Up\"\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tdisplay=\"flex\"\r\n\t\t\t\t\t\t\tgap={2}\r\n\t\t\t\t\t\t\tmt={2}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{/* <Autocomplete\r\n\t\t\t\t\t\t\t\toptions={breakOptions}\r\n\t\t\t\t\t\t\t\tgetOptionLabel={(opt) => opt.label}\r\n\t\t\t\t\t\t\t\tvalue={formData.selected_break}\r\n\t\t\t\t\t\t\t\tonChange={(_, val) => handleChange(\"selected_break\", val)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Break\"\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t/> */}\r\n\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tflex: \"1\",\r\n\t\t\t\t\t\t\t\t\tborder: \"1px solid #bdbdbd\",\r\n\t\t\t\t\t\t\t\t\tborderRadius: \"5px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\tname=\"selected_break\"\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tchecked={formData.selected_break}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => {\r\n\t\t\t\t\t\t\t\t\t\thandleChange(\"selected_break\", event.target.checked);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\tinput: { \"aria-label\": \"controlled\" },\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>{\" \"}\r\n\t\t\t\t\t\t\t\tMark as break\r\n\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t{formData?.followUp?.label?.toLowerCase() === \"yes\" ? (\r\n\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tlabel=\"Callback Date\"\r\n\t\t\t\t\t\t\t\t\ttype=\"date\"\r\n\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\tinputLabel: { shrink: true },\r\n\t\t\t\t\t\t\t\t\t\thtmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\tmin: new Date().toISOString().split(\"T\")[0],\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tvalue={formData.callbackDate}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\t\thandleChange(\"callbackDate\", e.target.value);\r\n\t\t\t\t\t\t\t\t\t\tconst isToday = e.target.value === new Date().toISOString().split(\"T\")[0];\r\n\t\t\t\t\t\t\t\t\t\tif (isToday) {\r\n\t\t\t\t\t\t\t\t\t\t\tconst now = new Date();\r\n\t\t\t\t\t\t\t\t\t\t\tconst currentHr = now.getHours();\r\n\t\t\t\t\t\t\t\t\t\t\tif (formData.callbackHrs && Number(formData.callbackHrs) < currentHr) {\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleChange(\"callbackHrs\", \"\");\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleChange(\"callbackMins\", \"\");\r\n\t\t\t\t\t\t\t\t\t\t\t} else if (formData.callbackHrs && Number(formData.callbackHrs) === currentHr && formData.callbackMins && Number(formData.callbackMins) < now.getMinutes()) {\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleChange(\"callbackMins\", \"\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<Box sx={{ flex: 1 }}></Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t{formData?.followUp?.label?.toLowerCase() === \"yes\" && (\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tdisplay=\"flex\"\r\n\t\t\t\t\t\t\t\tgap={2}\r\n\t\t\t\t\t\t\t\tmt={2}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\toptions={Array.from({ length: 24 }, (_, i) => String(i).padStart(2, \"0\"))}\r\n\t\t\t\t\t\t\t\t\tgetOptionDisabled={(option) => {\r\n\t\t\t\t\t\t\t\t\t\tconst isToday = formData.callbackDate === new Date().toISOString().split(\"T\")[0];\r\n\t\t\t\t\t\t\t\t\t\treturn isToday && Number(option) < new Date().getHours();\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tvalue={formData.callbackHrs || null}\r\n\t\t\t\t\t\t\t\t\tonChange={(_, value) => handleChange(\"callbackHrs\", value || \"\")}\r\n\t\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t\t<TextField {...params} label=\"Hours (0-23)\" />\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\toptions={Array.from({ length: 60 }, (_, i) => String(i).padStart(2, \"0\"))}\r\n\t\t\t\t\t\t\t\t\tgetOptionDisabled={(option) => {\r\n\t\t\t\t\t\t\t\t\t\tconst isToday = formData.callbackDate === new Date().toISOString().split(\"T\")[0];\r\n\t\t\t\t\t\t\t\t\t\tconst now = new Date();\r\n\t\t\t\t\t\t\t\t\t\tconst isCurrentHr = isToday && formData.callbackHrs === String(now.getHours()).padStart(2, \"0\");\r\n\t\t\t\t\t\t\t\t\t\treturn isCurrentHr && Number(option) < now.getMinutes();\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tvalue={formData.callbackMins || null}\r\n\t\t\t\t\t\t\t\t\tonChange={(_, value) => handleChange(\"callbackMins\", value || \"\")}\r\n\t\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t\t<TextField {...params} label=\"Minutes (0-59)\" />\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t<Box mt={2}>\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tlabel=\"Notes\"\r\n\t\t\t\t\t\t\t\tmultiline\r\n\t\t\t\t\t\t\t\tminRows={2}\r\n\t\t\t\t\t\t\t\tmaxRows={4}\r\n\t\t\t\t\t\t\t\tvalue={formData.notes}\r\n\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"notes\", e.target.value)}\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\ttextAlign=\"right\"\r\n\t\t\t\t\t\tm={2}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\tsize=\"large\"\r\n\t\t\t\t\t\t\tonClick={handleClose}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tpx: 2,\r\n\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tcancel\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"contained\"\r\n\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\tsize=\"large\"\r\n\t\t\t\t\t\t\tonClick={() => onSubmitDisposition(formData)}\r\n\t\t\t\t\t\t\tsx={{ px: 2, borderRadius: \"10px\", textTransform: \"capitalize\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tSubmit\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function ProcessorListDialog({\r\n\topen,\r\n\tsetOpen,\r\n\tprocessList = null,\r\n\thandleSelectedProcessor,\r\n}: any) {\r\n\tconst handleClose = () => {\r\n\t\tsetOpen(false);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"xs\"}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 500 } } }}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography variant=\"body1\"> Process List</Typography>\r\n\t\t\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\tpadding: \"6px 10px\",\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{processList.length > 0 ?\r\n\t\t\t\t\t\t\tprocessList?.map((process: any, index: any) => (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\r\n\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\thandleSelectedProcessor(process);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<SupportAgent sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t{process.process_name}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t: null}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function CallHistoryDialog({ open, setOpen }: any) {\r\n\tconst handleClose = () => {\r\n\t\tsetOpen(false);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"md\"}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 500 } } }}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography variant=\"body1\"> Call History</Typography>\r\n\t\t\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tp={6}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\tComing Soon...\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { type AxiosRequestConfig } from \"axios\";\r\nimport { useCallback, useReducer } from \"react\";\r\n\r\nimport axiosInstance from \"./axios\";\r\nimport { useToast } from \"./toastMessage\";\r\nimport {\r\n\tRequestResult,\r\n\tUseGetRequest,\r\n\tRequestOptions,\r\n\tUsePostRequest,\r\n\tUsePutRequest,\r\n\tUseDeleteRequest,\r\n\tUsePatchRequest,\r\n} from \"../../types\";\r\n\r\nconst initialState = {\r\n\tisLoading: false,\r\n\tisSuccess: false,\r\n\tisError: false,\r\n\terror: null,\r\n\tdata: null,\r\n};\r\n\r\nconst reducer = (state: typeof initialState, action: { type: string; payload: any }) => {\r\n\tif (action.type === \"isLoading\") {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisLoading: action.payload,\r\n\t\t};\r\n\t} else if (action.type === \"isSuccess\") {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisSuccess: true,\r\n\t\t\tdata: action.payload,\r\n\t\t};\r\n\t} else if (action.type === \"isError\") {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisError: true,\r\n\t\t\terror: action.payload,\r\n\t\t};\r\n\t} else if (action.type === \"reset\") {\r\n\t\treturn {\r\n\t\t\tisLoading: false,\r\n\t\t\tisSuccess: false,\r\n\t\t\tisError: false,\r\n\t\t\terror: null,\r\n\t\t\tdata: null,\r\n\t\t};\r\n\t}\r\n\tthrow Error(\"Unknown action.\");\r\n};\r\n\r\nexport const useGetRequest = <T = UseGetRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst getRequest = useCallback(\r\n\t\t(url: string, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.get(url, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, config);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, config);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, config);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [getRequest, state];\r\n};\r\n\r\nexport const usePostRequest = <T = UsePostRequest>(\r\n\tprops: RequestOptions = {}\r\n): [\r\n\t(_url: string, _payload: T, _config?: AxiosRequestConfig) => Promise<any>,\r\n\tRequestResult<T>,\r\n] => {\r\n\tconst { onSuccess = null, onError = null, disabledSuccessToast = false } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst postRequest = useCallback(\r\n\t\tasync (url: string, payload: T, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\ttry {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst res = await axiosInstance.post(url, payload, config);\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonSuccess?.(res.data, payload);\r\n\t\t\t\t\tif (!disabledSuccessToast) {\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (err: any) {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, payload);\r\n\t\t\t\t}\r\n\t\t\t} finally {\r\n\t\t\t\tdispatch({\r\n\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\tpayload: false,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [postRequest, state];\r\n};\r\n\r\nexport const usePutRequest = <T = UsePutRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _payload: T, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst putRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.put(url, payload, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, payload);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, payload);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, payload);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [putRequest, state];\r\n};\r\n\r\nexport const useDeleteRequest = <T = UseDeleteRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst deleteRequest = useCallback(\r\n\t\t(url: string, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.delete(url, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, config);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, config);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, config);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [deleteRequest, state];\r\n};\r\n\r\nexport const usePatchRequest = <T = UsePatchRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _payload: T, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst patchRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.patch(url, payload, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, payload);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, payload);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, payload);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [patchRequest, state];\r\n};\r\n","import { SxProps, useTheme } from \"@mui/material\";\r\n\r\nconst useStyles = ({\r\n disabled,\r\n enabled,\r\n outlined,\r\n}: {\r\n disabled: SxProps;\r\n enabled: SxProps;\r\n outlined: SxProps;\r\n}): {\r\n disabled: SxProps;\r\n enabled: SxProps;\r\n outlined: SxProps;\r\n} => {\r\n const theme = useTheme();\r\n return {\r\n disabled: {\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n minWidth: \"40px !important\",\r\n borderRadius: \"16px\",\r\n border: `1px solid rgb(206, 204, 204)`,\r\n height: \"40px\",\r\n \"&:hover\": {\r\n boxShadow: \" 0px 2px 2px rgba(0, 0, 0, 0.79)\",\r\n border: `1px solid ${theme.palette.primary.main}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"primary.main\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n ...disabled,\r\n },\r\n enabled: {\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n minWidth: \"40px !important\",\r\n borderRadius: \"16px\",\r\n boxShadow: \" 0px 2px 1px rgba(0, 0, 0, 0.507)\",\r\n border: `1px solid ${theme.palette.primary.main}`,\r\n height: \"40px\",\r\n \"&:hover\": {\r\n boxShadow: \" 0px 2px 1px rgba(0, 0, 0, 0.507)\",\r\n border: `1px solid ${theme.palette.primary.main}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"primary.main\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n ...enabled,\r\n },\r\n outlined: {\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n minWidth: \"40px !important\",\r\n borderRadius: \"16px\",\r\n backgroundColor: theme.palette.grey[200],\r\n boxShadow: `0px 2px 1px ${theme.palette.primary.light}`,\r\n border: `0px solid ${theme.palette.primary.main}`,\r\n height: \"40px\",\r\n \"&:hover\": {\r\n boxShadow: `0px 2px 1px ${theme.palette.primary.main}`,\r\n border: `0px solid ${theme.palette.primary.main}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"primary.main\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n ...outlined,\r\n },\r\n };\r\n};\r\n\r\nexport default useStyles;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { type MouseEvent, type TouchEvent, useCallback, useRef, useState } from \"react\";\r\n\r\ninterface Position {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\ninterface UseDraggableReturn {\r\n\tposition: Position;\r\n\tisDragging: boolean;\r\n\tdragRef: any;\r\n\thandleMouseDown: (_e: MouseEvent<HTMLDivElement>) => void;\r\n\thandleTouchStart: (_e: TouchEvent<HTMLDivElement>) => void;\r\n}\r\n\r\nexport function useDraggable(\r\n\tinitialPosition: Position,\r\n\tonPositionChange?: (_position: Position) => void\r\n): UseDraggableReturn {\r\n\tconst [position, setPosition] = useState<Position>(initialPosition);\r\n\r\n\tconst [isDragging, setIsDragging] = useState(false);\r\n\r\n\tconst dragRef = useRef<HTMLDivElement>();\r\n\r\n\tconst dragStart = useRef<Position>({ x: 0, y: 0 });\r\n\r\n\tconst elementStart = useRef<Position>({ x: 0, y: 0 });\r\n\r\n\tconst updatePosition = useCallback(\r\n\t\t(newPosition: Position) => {\r\n\t\t\tconst element = dragRef.current;\r\n\t\t\tif (!element) return;\r\n\r\n\t\t\tconst rect = element.getBoundingClientRect();\r\n\t\t\tconst viewportWidth = window.innerWidth;\r\n\t\t\tconst viewportHeight = window.innerHeight;\r\n\r\n\t\t\tconst constrainedPosition = {\r\n\t\t\t\tx: Math.max(0, Math.min(newPosition.x, viewportWidth - rect.width)),\r\n\t\t\t\ty: Math.max(0, Math.min(newPosition.y, viewportHeight - rect.height)),\r\n\t\t\t};\r\n\r\n\t\t\tsetPosition(constrainedPosition);\r\n\t\t\tonPositionChange?.(constrainedPosition);\r\n\t\t},\r\n\t\t[onPositionChange]\r\n\t);\r\n\r\n\tconst handleStart = useCallback(\r\n\t\t(clientX: number, clientY: number) => {\r\n\t\t\tsetIsDragging(true);\r\n\t\t\tdragStart.current = { x: clientX, y: clientY };\r\n\t\t\telementStart.current = position;\r\n\r\n\t\t\tconst handleMove = (moveClientX: number, moveClientY: number) => {\r\n\t\t\t\tconst deltaX = moveClientX - dragStart.current.x;\r\n\t\t\t\tconst deltaY = moveClientY - dragStart.current.y;\r\n\r\n\t\t\t\tupdatePosition({\r\n\t\t\t\t\tx: elementStart.current.x + deltaX,\r\n\t\t\t\t\ty: elementStart.current.y + deltaY,\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\t\tconst handleMouseMove = (e: globalThis.MouseEvent) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\thandleMove(e.clientX, e.clientY);\r\n\t\t\t};\r\n\r\n\t\t\tconst handleTouchMove = (e: globalThis.TouchEvent) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tconst touch = e.touches[0];\r\n\t\t\t\tif (touch) {\r\n\t\t\t\t\thandleMove(touch.clientX, touch.clientY);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst handleEnd = () => {\r\n\t\t\t\tsetIsDragging(false);\r\n\t\t\t\tdocument.removeEventListener(\"mousemove\", handleMouseMove);\r\n\t\t\t\tdocument.removeEventListener(\"mouseup\", handleEnd);\r\n\t\t\t\tdocument.removeEventListener(\"touchmove\", handleTouchMove);\r\n\t\t\t\tdocument.removeEventListener(\"touchend\", handleEnd);\r\n\t\t\t};\r\n\r\n\t\t\tdocument.addEventListener(\"mousemove\", handleMouseMove);\r\n\t\t\tdocument.addEventListener(\"mouseup\", handleEnd);\r\n\t\t\tdocument.addEventListener(\"touchmove\", handleTouchMove, {\r\n\t\t\t\tpassive: false,\r\n\t\t\t});\r\n\t\t\tdocument.addEventListener(\"touchend\", handleEnd);\r\n\t\t},\r\n\t\t[position, updatePosition]\r\n\t);\r\n\r\n\tconst handleMouseDown = useCallback(\r\n\t\t(e: MouseEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\thandleStart(e.clientX, e.clientY);\r\n\t\t},\r\n\t\t[handleStart]\r\n\t);\r\n\r\n\tconst handleTouchStart = useCallback(\r\n\t\t(e: TouchEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tconst touch = e.touches[0];\r\n\t\t\tif (touch) {\r\n\t\t\t\thandleStart(touch.clientX, touch.clientY);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[handleStart]\r\n\t);\r\n\r\n\treturn {\r\n\t\tposition,\r\n\t\tisDragging,\r\n\t\tdragRef,\r\n\t\thandleMouseDown,\r\n\t\thandleTouchStart,\r\n\t};\r\n}\r\n","// micController.ts\r\n\r\nexport type MicController = {\r\n\tstart: () => Promise<void>;\r\n\tstop: () => void;\r\n\tmute: () => void;\r\n\tunmute: () => void;\r\n\ttoggleMute: () => void;\r\n\tisMuted: () => boolean;\r\n\tgetStream: () => MediaStream | null;\r\n};\r\n\r\nexport function createMicController(\r\n\tconstraints: MediaStreamConstraints = { audio: true }\r\n): MicController {\r\n\tlet stream: MediaStream | null = null;\r\n\tlet muted = false;\r\n\r\n\tasync function start() {\r\n\t\tif (stream) return; // already started\r\n\t\tstream = await navigator.mediaDevices.getUserMedia(constraints);\r\n\t\t// default: unmuted\r\n\t\tstream.getAudioTracks().forEach((track) => (track.enabled = true));\r\n\t\tmuted = false;\r\n\t}\r\n\r\n\tfunction setEnabled(enabled: boolean) {\r\n\t\tif (!stream) return;\r\n\t\tstream.getAudioTracks().forEach((track) => (track.enabled = enabled));\r\n\t\tmuted = !enabled;\r\n\t}\r\n\r\n\tfunction mute() {\r\n\t\tsetEnabled(false);\r\n\t}\r\n\r\n\tfunction unmute() {\r\n\t\tsetEnabled(true);\r\n\t}\r\n\r\n\tfunction toggleMute() {\r\n\t\tif (muted) {\r\n\t\t\tunmute();\r\n\t\t} else {\r\n\t\t\tmute();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction stop() {\r\n\t\tif (!stream) return;\r\n\t\tstream.getTracks().forEach((t) => t.stop());\r\n\t\tstream = null;\r\n\t\tmuted = false;\r\n\t}\r\n\r\n\tfunction isMuted() {\r\n\t\treturn muted;\r\n\t}\r\n\r\n\tfunction getStream() {\r\n\t\treturn stream;\r\n\t}\r\n\r\n\treturn {\r\n\t\tstart,\r\n\t\tstop,\r\n\t\tmute,\r\n\t\tunmute,\r\n\t\ttoggleMute,\r\n\t\tisMuted,\r\n\t\tgetStream,\r\n\t};\r\n}\r\n","/**\r\n * Audio loader utility for handling MP3 files as buffers/blobs\r\n * This ensures the audio works correctly in bundled npm packages\r\n */\r\n\r\n// Import the MP3 file - bundler will handle this\r\n// @ts-ignore - MP3 module declaration\r\nimport incomingRingtoneUrl from \"../ringtones/incoming.mp3\";\r\n\r\nlet audioBlobUrl: string | null = null;\r\nlet audioBuffer: ArrayBuffer | null = null;\r\n\r\n/**\r\n * Loads the audio file as a blob URL for reliable playback\r\n * @returns Promise<string> - Blob URL or direct URL for the audio file\r\n */\r\nexport async function loadAudioAsBlob(): Promise<string> {\r\n\tif (audioBlobUrl) {\r\n\t\treturn audioBlobUrl;\r\n\t}\r\n\r\n\t// If the URL is already a data URL or absolute URL, use it directly\r\n\tif (\r\n\t\tincomingRingtoneUrl.startsWith(\"data:\") ||\r\n\t\tincomingRingtoneUrl.startsWith(\"http://\") ||\r\n\t\tincomingRingtoneUrl.startsWith(\"https://\") ||\r\n\t\tincomingRingtoneUrl.startsWith(\"blob:\")\r\n\t) {\r\n\t\treturn incomingRingtoneUrl;\r\n\t}\r\n\r\n\t// Try to fetch and convert to blob URL\r\n\ttry {\r\n\t\tconst response = await fetch(incomingRingtoneUrl);\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP ${response.status}: ${response.statusText}`);\r\n\t\t}\r\n\r\n\t\tconst blob = await response.blob();\r\n\r\n\t\t// Verify it's a valid blob\r\n\t\tif (blob.size === 0) {\r\n\t\t\tthrow new Error(\"Empty blob\");\r\n\t\t}\r\n\r\n\t\taudioBlobUrl = URL.createObjectURL(blob);\r\n\t\treturn audioBlobUrl;\r\n\t} catch (error) {\r\n\t\t// If fetch fails, the bundler may have already processed the URL\r\n\t\t// Return the original URL - it should work if tsup processed it correctly\r\n\t\tconsole.error(\"Could not create blob URL, using direct URL:\", error);\r\n\t\treturn incomingRingtoneUrl;\r\n\t}\r\n}\r\n\r\n/**\r\n * Loads the audio file as an ArrayBuffer\r\n * @returns Promise<ArrayBuffer> - Audio file as buffer\r\n */\r\nexport async function loadAudioAsBuffer(): Promise<ArrayBuffer> {\r\n\tif (audioBuffer) {\r\n\t\treturn audioBuffer;\r\n\t}\r\n\r\n\ttry {\r\n\t\tconst response = await fetch(incomingRingtoneUrl);\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`Failed to load audio: ${response.statusText}`);\r\n\t\t}\r\n\r\n\t\taudioBuffer = await response.arrayBuffer();\r\n\t\treturn audioBuffer;\r\n\t} catch (error) {\r\n\t\tconsole.error(\"Error loading audio as buffer:\", error);\r\n\t\tthrow error;\r\n\t}\r\n}\r\n\r\n/**\r\n * Creates an Audio element from the blob URL\r\n * @returns Promise<HTMLAudioElement> - Audio element ready to play\r\n */\r\nexport async function createAudioElement(): Promise<HTMLAudioElement> {\r\n\tconst audio = new Audio();\r\n\r\n\t// Set up audio properties before setting source\r\n\taudio.loop = true;\r\n\taudio.volume = 0.7;\r\n\taudio.preload = \"auto\";\r\n\r\n\t// Try multiple approaches to load the audio\r\n\tlet audioUrl: string = \"\";\r\n\r\n\t// First, try to get blob URL\r\n\ttry {\r\n\t\taudioUrl = await loadAudioAsBlob();\r\n\t} catch (error) {\r\n\t\tconsole.warn(\"Failed to load audio as blob, trying direct URL:\", error);\r\n\t\taudioUrl = incomingRingtoneUrl;\r\n\t}\r\n\r\n\t// Set up error handling with retry logic\r\n\tconst tryLoadAudio = async (url: string): Promise<boolean> => {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tconst checkCanPlay = () => {\r\n\t\t\t\t// Check if audio can play\r\n\t\t\t\tconst canPlay = audio.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA;\r\n\t\t\t\tif (canPlay) {\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Check for errors\r\n\t\t\t\tif (audio.error) {\r\n\t\t\t\t\tresolve(false);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Wait a bit and check again\r\n\t\t\t\tsetTimeout(checkCanPlay, 100);\r\n\t\t\t};\r\n\r\n\t\t\taudio.addEventListener(\"canplay\", () => resolve(true), { once: true });\r\n\t\t\taudio.addEventListener(\"error\", () => resolve(false), { once: true });\r\n\t\t\taudio.src = url;\r\n\t\t\taudio.load();\r\n\r\n\t\t\t// Timeout after 2 seconds\r\n\t\t\tsetTimeout(() => resolve(false), 2000);\r\n\t\t});\r\n\t};\r\n\r\n\t// Try loading with the primary URL\r\n\tlet loaded = await tryLoadAudio(audioUrl);\r\n\r\n\t// If that fails, try the original import URL directly\r\n\tif (!loaded && audioUrl !== incomingRingtoneUrl) {\r\n\t\tloaded = await tryLoadAudio(incomingRingtoneUrl);\r\n\t\tif (loaded) {\r\n\t\t\taudioUrl = incomingRingtoneUrl;\r\n\t\t}\r\n\t}\r\n\r\n\treturn audio;\r\n}\r\n\r\n/**\r\n * Cleanup function to revoke blob URLs and free memory\r\n */\r\nexport function cleanupAudioResources(): void {\r\n\tif (audioBlobUrl) {\r\n\t\tURL.revokeObjectURL(audioBlobUrl);\r\n\t\taudioBlobUrl = null;\r\n\t}\r\n\taudioBuffer = null;\r\n}\r\n\r\n/**\r\n * Get the audio URL (blob URL or fallback to direct URL)\r\n * @returns string - Audio URL\r\n */\r\nexport function getAudioUrl(): string {\r\n\treturn audioBlobUrl || incomingRingtoneUrl;\r\n}\r\n","import React from \"react\";\r\nimport { SDKPermissionGuard } from \"../components/SDKPermissionGuard\";\r\nimport { SDK_MENU_CODES } from \"../permissions\";\r\n\r\n// ─── helper ──────────────────────────────────────────────────────────────────\r\n\r\nfunction withGuard(\r\n\tmenuCodes: string | string[],\r\n\tloader: () => Promise<{ default: React.FC<any> }>,\r\n): React.LazyExoticComponent<React.FC<any>> {\r\n\treturn React.lazy(async () => {\r\n\t\tconst mod = await loader();\r\n\t\tconst Page = mod.default;\r\n\t\tconst Guarded: React.FC<any> = (props) => (\r\n\t\t\t<SDKPermissionGuard menuFeature={menuCodes}>\r\n\t\t\t\t<Page {...props} />\r\n\t\t\t</SDKPermissionGuard>\r\n\t\t);\r\n\t\treturn { default: Guarded };\r\n\t});\r\n}\r\n\r\n// ─── page list ────────────────────────────────────────────────────────────────\r\n// Add new SDK pages here — one entry per page, guard is applied automatically.\r\n\r\nexport const SDKPages = {\r\n\tCallHistory: withGuard(SDK_MENU_CODES.CALL_HISTORY, () => import(\"./callHistory\")),\r\n} as const;\r\n","import { useState, useEffect, useCallback } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport interface SDKPermissionsHook {\r\n permissions: string[];\r\n menuEntitlements: Array<{ code: string; name: string; enabled: boolean }>;\r\n isLoaded: boolean;\r\n hasPermission: (permission: string) => boolean;\r\n hasAnyPermission: (permissions: string[]) => boolean;\r\n hasAllPermissions: (permissions: string[]) => boolean;\r\n hasMenuFeature: (code: string) => boolean;\r\n}\r\n\r\nexport function useSDKPermissions(): SDKPermissionsHook {\r\n const [state, setState] = useState(() => sdkStateManager.getState());\r\n\r\n useEffect(() => {\r\n const unsubscribe = sdkStateManager.subscribe(() => {\r\n setState(sdkStateManager.getState());\r\n });\r\n return unsubscribe;\r\n }, []);\r\n\r\n const hasPermission = useCallback(\r\n (permission: string) => sdkStateManager.hasPermission(permission),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.userPermissions],\r\n );\r\n\r\n const hasAnyPermission = useCallback(\r\n (permissions: string[]) => sdkStateManager.hasAnyPermission(permissions),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.userPermissions],\r\n );\r\n\r\n const hasAllPermissions = useCallback(\r\n (permissions: string[]) => sdkStateManager.hasAllPermissions(permissions),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.userPermissions],\r\n );\r\n\r\n const hasMenuFeature = useCallback(\r\n (code: string) => sdkStateManager.hasMenuFeature(code),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.menuEntitlements],\r\n );\r\n\r\n return {\r\n permissions: state.userPermissions ?? [],\r\n menuEntitlements: state.menuEntitlements ?? [],\r\n isLoaded: state.isPermissionsLoaded,\r\n hasPermission,\r\n hasAnyPermission,\r\n hasAllPermissions,\r\n hasMenuFeature,\r\n };\r\n}\r\n","import React from \"react\";\r\nimport { Box, Typography } from \"@mui/material\";\r\nimport LockOutlinedIcon from \"@mui/icons-material/LockOutlined\";\r\n\r\ninterface SDKAccessDeniedProps {\r\n message?: string;\r\n}\r\n\r\nexport const SDKAccessDenied: React.FC<SDKAccessDeniedProps> = ({\r\n message = \"You don't have permission to view this page.\",\r\n}) => (\r\n <Box\r\n display=\"flex\"\r\n flexDirection=\"column\"\r\n alignItems=\"center\"\r\n justifyContent=\"center\"\r\n minHeight={300}\r\n gap={2}\r\n p={4}\r\n >\r\n <LockOutlinedIcon sx={{ fontSize: 56, color: \"text.disabled\" }} />\r\n <Typography variant=\"h6\" fontWeight={600} color=\"text.secondary\">\r\n Access Denied\r\n </Typography>\r\n <Typography variant=\"body2\" color=\"text.disabled\" textAlign=\"center\">\r\n {message}\r\n </Typography>\r\n </Box>\r\n);\r\n","import React from \"react\";\r\nimport { useSDKPermissions } from \"../hooks/useSDKPermissions\";\r\nimport { SDKAccessDenied } from \"./SDKAccessDenied\";\r\n\r\ninterface SDKPermissionGuardProps {\r\n children?: React.ReactNode;\r\n /** Single permission code (e.g. \"calls:inbound\") */\r\n permission?: string;\r\n /** Multiple permission codes — ANY match grants access by default */\r\n permissions?: string[];\r\n /** When true, ALL permissions must be granted */\r\n requireAll?: boolean;\r\n /** One or more menu feature codes — ANY match grants access by default */\r\n menuFeature?: string | string[];\r\n /** When true, ALL menu features must be enabled */\r\n requireAllMenus?: boolean;\r\n /** Custom fallback rendered when access is denied */\r\n fallback?: React.ReactNode;\r\n /** Show the default Access Denied UI when denied. Defaults to true. */\r\n showFallback?: boolean;\r\n /** Callback fired when the guard denies access */\r\n onDenied?: () => void;\r\n}\r\n\r\nexport const SDKPermissionGuard: React.FC<SDKPermissionGuardProps> = ({\r\n children,\r\n permission,\r\n permissions,\r\n requireAll = false,\r\n menuFeature,\r\n requireAllMenus = false,\r\n fallback,\r\n showFallback = true,\r\n onDenied,\r\n}) => {\r\n const { isLoaded, hasPermission, hasAnyPermission, hasAllPermissions, hasMenuFeature } =\r\n useSDKPermissions();\r\n\r\n if (!isLoaded) return null;\r\n\r\n const isAllowed = checkAccess({\r\n permission,\r\n permissions,\r\n requireAll,\r\n menuFeature,\r\n requireAllMenus,\r\n hasPermission,\r\n hasAnyPermission,\r\n hasAllPermissions,\r\n hasMenuFeature,\r\n });\r\n\r\n if (!isAllowed) {\r\n onDenied?.();\r\n if (fallback !== undefined) return <>{fallback}</>;\r\n if (showFallback) return <SDKAccessDenied />;\r\n return null;\r\n }\r\n\r\n return <>{children}</>;\r\n};\r\n\r\nfunction checkAccess({\r\n permission,\r\n permissions,\r\n requireAll,\r\n menuFeature,\r\n requireAllMenus,\r\n hasPermission,\r\n hasAnyPermission,\r\n hasAllPermissions,\r\n hasMenuFeature,\r\n}: {\r\n permission?: string;\r\n permissions?: string[];\r\n requireAll: boolean;\r\n menuFeature?: string | string[];\r\n requireAllMenus: boolean;\r\n hasPermission: (p: string) => boolean;\r\n hasAnyPermission: (p: string[]) => boolean;\r\n hasAllPermissions: (p: string[]) => boolean;\r\n hasMenuFeature: (c: string) => boolean;\r\n}): boolean {\r\n const menuCodes = menuFeature\r\n ? Array.isArray(menuFeature) ? menuFeature : [menuFeature]\r\n : [];\r\n\r\n const hasNoGuards =\r\n !permission &&\r\n (!permissions || permissions.length === 0) &&\r\n menuCodes.length === 0;\r\n\r\n if (hasNoGuards) return true;\r\n\r\n if (menuCodes.length > 0) {\r\n const menuGranted = requireAllMenus\r\n ? menuCodes.every((c) => hasMenuFeature(c))\r\n : menuCodes.some((c) => hasMenuFeature(c));\r\n if (!menuGranted) return false;\r\n }\r\n\r\n if (permission && !hasPermission(permission)) return false;\r\n\r\n if (permissions && permissions.length > 0) {\r\n const granted = requireAll ? hasAllPermissions(permissions) : hasAnyPermission(permissions);\r\n if (!granted) return false;\r\n }\r\n\r\n return true;\r\n}\r\n","import { useCallback, useEffect, useRef, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport { getSession } from \"@react-solutions/vault\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\n\r\nexport interface ConferenceCallPayload {\r\n mobileNumber: string;\r\n lineNumber?: number;\r\n}\r\n\r\nexport interface UseClickToConferenceReturn {\r\n handleStartConferenceCall: (payload: ConferenceCallPayload) => Promise<any>;\r\n isLoading: boolean;\r\n isSuccess: boolean;\r\n isError: boolean;\r\n error: any;\r\n data: any;\r\n}\r\n\r\nexport const useClickToConference = (): UseClickToConferenceReturn => {\r\n const [loading, setLoading] = useState(false);\r\n const [success, setSuccess] = useState(false);\r\n const [isError, setIsError] = useState(false);\r\n const [error, setError] = useState<any>(null);\r\n const [data, setData] = useState<any>(null);\r\n\r\n // Track the line we dialed so we can watch for its socket update\r\n const pendingLineRef = useRef<number | null>(null);\r\n // Track the last seen conference state to detect changes\r\n const prevConferenceRef = useRef<any[]>([]);\r\n\r\n useEffect(() => {\r\n if (pendingLineRef.current === null) return;\r\n\r\n const unsubscribe = sdkStateManager.subscribe(() => {\r\n const state = sdkStateManager.getState();\r\n const targetLine = pendingLineRef.current;\r\n\r\n if (targetLine === null) return;\r\n\r\n const line = (state.conferenceLine as any[])?.find(\r\n (l) => l.line === targetLine,\r\n );\r\n\r\n // Socket has updated the line away from IDLE — conference is live\r\n if (line && line.status !== \"IDLE\") {\r\n pendingLineRef.current = null;\r\n prevConferenceRef.current = [];\r\n sdkStateManager.setOpenConferenceDialog(true);\r\n }\r\n });\r\n\r\n return unsubscribe;\r\n }, [loading]);\r\n\r\n const handleStartConferenceCall = useCallback(\r\n async (payload: ConferenceCallPayload): Promise<any> => {\r\n const state = getSession(STORAGE_KEY) as any;\r\n\r\n if (state?.callData?.status !== \"ONCALL\") {\r\n const msg = \"Conference call requires an active call (ONCALL status)\";\r\n setIsError(true);\r\n setError(new Error(msg));\r\n throw new Error(msg);\r\n }\r\n\r\n const availableLine =\r\n payload.lineNumber != null\r\n ? state?.conferenceLine?.find(\r\n (l: any) => l.line === payload.lineNumber,\r\n )\r\n : state?.conferenceLine\r\n ?.filter((l: any) => l.line !== 1)\r\n ?.find((l: any) => l.status === \"IDLE\" && !l?.isCallStart);\r\n\r\n if (!availableLine) {\r\n const msg = \"No available conference line found\";\r\n setIsError(true);\r\n setError(new Error(msg));\r\n throw new Error(msg);\r\n }\r\n\r\n const requestPayload = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: `CALL${availableLine.line}`,\r\n target: payload.mobileNumber,\r\n line_number: Number(availableLine.line),\r\n userid: state.callData?.agent_id ?? -1,\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n\r\n setLoading(true);\r\n setIsError(false);\r\n setError(null);\r\n setSuccess(false);\r\n\r\n // Record which line we are waiting on so the subscriber can watch it\r\n pendingLineRef.current = availableLine.line;\r\n\r\n return axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL, requestPayload)\r\n .then((res) => {\r\n setData(res?.data);\r\n setSuccess(true);\r\n return res?.data;\r\n })\r\n .catch((err) => {\r\n pendingLineRef.current = null;\r\n setIsError(true);\r\n setError(err);\r\n return err?.response?.data;\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n },\r\n [],\r\n );\r\n\r\n return {\r\n handleStartConferenceCall,\r\n isLoading: loading,\r\n isSuccess: success,\r\n isError,\r\n error,\r\n data,\r\n };\r\n};\r\n","import { getSession, removeSession } from \"@react-solutions/vault\";\r\n\r\nimport axiosInstance from \"../services/axios\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\n\r\n// ─── Types ────────────────────────────────────────────────────────────────────\r\n\r\nexport interface StartCallPayload {\r\n mobileNumber: string;\r\n user?: string;\r\n auto_answer?: boolean;\r\n convox_id?: string;\r\n reference_id?: string;\r\n call_source?: string;\r\n caseId?: string;\r\n}\r\n\r\nexport interface ConferenceCallPayload {\r\n mobileNumber: string;\r\n lineNumber?: number;\r\n}\r\n\r\nexport interface EndCallOptions {\r\n disposition?: string;\r\n followUp?: string;\r\n callbackDate?: string;\r\n callbackHrs?: string;\r\n callbackMins?: string;\r\n isBreak?: boolean;\r\n patientLog?: any;\r\n}\r\n\r\nexport type SupervisorMonitorMode = \"listen\" | \"whisper\" | \"barge\";\r\n\r\nexport interface StartMonitoringPayload {\r\n call_id: string;\r\n mode: SupervisorMonitorMode;\r\n supervisor_extension?: string;\r\n agent_extension?: string;\r\n}\r\n\r\nexport interface StopMonitoringPayload {\r\n call_uuid: string;\r\n session_id?: string;\r\n}\r\n\r\nexport interface ChangeModePayload {\r\n call_uuid: string;\r\n mode: SupervisorMonitorMode;\r\n session_id?: string;\r\n}\r\n\r\n// ─── Actions ──────────────────────────────────────────────────────────────────\r\n\r\nexport function clickToCall(payload: StartCallPayload): Promise<any> {\r\n const state = getSession(STORAGE_KEY) as any;\r\n\r\n if (state?.callData?.status !== \"IDLE\" && state?.callData?.status !== \"ONCALL\"){\r\n return Promise.reject(new Error(\"Agent is not ready\"));\r\n }\r\n\r\n const body = {\r\n phone_number: payload.mobileNumber,\r\n user: payload.user ?? state?.agentId ?? \"\",\r\n auto_answer: payload.auto_answer ?? false,\r\n convox_id: state?.callData?.convox_id ?? payload.convox_id ?? \"\",\r\n reference_id: payload.reference_id ?? \"\",\r\n call_source: payload.call_source ?? \"\",\r\n caseId: payload.caseId ?? \"\",\r\n };\r\n\r\n return axiosInstance\r\n .post(END_POINT.CLICK_TO_CALL, body)\r\n .then((res) => {\r\n try { sdkStateManager.resetConferenceLines(); } catch (_) {}\r\n return res.data;\r\n })\r\n .catch((err) => {\r\n return err?.response?.data;\r\n });\r\n \r\n}\r\n\r\nexport function clickToConference(payload: ConferenceCallPayload): Promise<any> {\r\n const state = getSession(STORAGE_KEY) as any;\r\n\r\n if (state?.callData?.status !== \"ONCALL\") {\r\n return Promise.reject(new Error(\"Conference call requires an active call (ONCALL status)\"));\r\n }\r\n\r\n const availableLine =\r\n payload.lineNumber != null\r\n ? state?.conferenceLine?.find((l: any) => l.line === payload.lineNumber)\r\n : state?.conferenceLine\r\n ?.filter((l: any) => l.line !== 1)\r\n ?.find((l: any) => l.status === \"IDLE\" && !l?.isCallStart);\r\n\r\n if (!availableLine) {\r\n return Promise.reject(new Error(\"No available conference line found\"));\r\n }\r\n\r\n const body = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: `CALL${availableLine.line}`,\r\n target: payload.mobileNumber,\r\n line_number: Number(availableLine.line),\r\n userid: state.callData?.agent_id ?? -1,\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n\r\n return axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL, body)\r\n .then((res) => {\r\n try { sdkStateManager.setOpenConferenceDialog(true); } catch (_) {}\r\n return res.data;\r\n })\r\n .catch((err) => {\r\n return err?.response?.data;\r\n });\r\n}\r\n\r\nexport async function endCall(options: EndCallOptions = {}): Promise<any> {\r\n const state = getSession(STORAGE_KEY) as any;\r\n\r\n const body = {\r\n convox_id: state?.callData?.convox_id ?? \"\",\r\n agent_id: state?.agentId ?? \"\",\r\n set_followUp: options.followUp ?? \"N\",\r\n callback_date: options.callbackDate ?? \"\",\r\n callback_hrs: Number(options.callbackHrs) || 0,\r\n callback_mins: Number(options.callbackMins) || 0,\r\n mobile_number: state?.callData?.phone_number ?? \"\",\r\n list_comments: \"\",\r\n call_reference_id: state?.callData?.convox_id ?? \"\",\r\n disposition: options.disposition ?? \"RES\",\r\n line_number: 0,\r\n reason: \"normal\",\r\n };\r\n\r\n const res = await axiosInstance.post(END_POINT.END_CALL, body, {\r\n params: { isBreak: options.isBreak ?? false },\r\n });\r\n sdkStateManager.resetConferenceLines();\r\n sdkStateManager.endCall();\r\n return res.data;\r\n}\r\n\r\nexport async function logout(): Promise<void> {\r\n let logoutError: Error | undefined;\r\n\r\n try {\r\n await axiosInstance.post(END_POINT.AUTH_LOGOUT);\r\n } catch (err: any) {\r\n logoutError = new Error(err?.response?.data?.message || \"Logout failed. Please try again.\");\r\n } finally {\r\n sdkStateManager.clearStorageAndReset();\r\n removeSession(STORAGE_KEY);\r\n }\r\n\r\n if (logoutError) throw logoutError;\r\n}\r\n\r\nexport async function startMonitoring(payload: StartMonitoringPayload): Promise<any> {\r\n const res = await axiosInstance.post(END_POINT.SUPERVISOR_CALL_LISTEN, payload);\r\n return res.data;\r\n}\r\n\r\nexport async function stopMonitoring(payload: StopMonitoringPayload): Promise<any> {\r\n const res = await axiosInstance.post(END_POINT.SUPERVISOR_CALL_LEAVE, payload);\r\n return res.data;\r\n}\r\n\r\nexport async function changeMonitorMode(payload: ChangeModePayload): Promise<any> {\r\n const res = await axiosInstance.post(END_POINT.SUPERVISOR_CALL_CHANGE_MODE, payload);\r\n return res.data;\r\n}\r\n"],"mappings":"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","names":["_a","_a","_a","axios","import_react","import_jsx_runtime","_a","import_react","_a","import_react","import_material","import_icons_material","import_jsx_runtime","_a","import_react","import_vault","_a","import_react","import_vault","data","_a","import_react","import_vault","data","_a","import_react","process_id","process_name","status","phone_number","agent_id","convox_id","call_details","import_react","import_react","import_react","startMonitoring","_a","stopMonitoring","import_react","import_icons_material","import_material","import_react","import_material","import_react","import_react","_a","import_material","import_jsx_runtime","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","import_react","incomingRingtoneUrl","incomingRingtoneUrl","import_vault","import_jsx_runtime","_a","clickToCall","endCall","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","isOnHold","isMuted","import_jsx_runtime","_a","import_react","import_react","_a","import_material","import_jsx_runtime","LockOutlinedIcon","import_jsx_runtime","import_jsx_runtime","React","import_react","import_vault","_a","import_vault","_a"]}
|
|
1
|
+
{"version":3,"sources":["../call-control-sdk/lib/utils/storage.ts","../call-control-sdk/lib/permissions/sdk-constants.ts","../call-control-sdk/lib/permissions/index.ts","../call-control-sdk/lib/hooks/sdk-state.ts","../call-control-sdk/lib/services/endPoint.ts","../call-control-sdk/lib/services/axios.ts","../call-control-sdk/lib/services/toastMessage.tsx","../call-control-sdk/lib/hooks/useGetCallerData.ts","../call-control-sdk/lib/components/SDKProvider.tsx","../call-control-sdk/lib/hooks/useSDKPermissions.ts","../call-control-sdk/lib/components/SDKAccessDenied.tsx","../call-control-sdk/lib/components/SDKPermissionGuard.tsx","../call-control-sdk/lib/components/SDKPageHeader.tsx","../call-control-sdk/lib/pages/callHistory/useCallHistory.ts","../call-control-sdk/lib/pages/callHistory/index.tsx","../call-control-sdk/lib/components/SDKButton.tsx","../call-control-sdk/lib/pages/campaigns/useCampaigns.ts","../call-control-sdk/lib/pages/campaigns/types.ts","../call-control-sdk/lib/pages/campaigns/styles.ts","../call-control-sdk/lib/pages/campaigns/index.tsx","../call-control-sdk/lib/pages/loginReport/useLoginReport.ts","../call-control-sdk/lib/pages/loginReport/styles.ts","../call-control-sdk/lib/pages/loginReport/index.tsx","../call-control-sdk/lib/pages/cdrReport/useCdrReport.ts","../call-control-sdk/lib/pages/cdrReport/types.ts","../call-control-sdk/lib/pages/cdrReport/styles.ts","../call-control-sdk/lib/pages/cdrReport/index.tsx","../call-control-sdk/lib/pages/agentPerformanceReport/useAgentPerformanceReport.ts","../call-control-sdk/lib/pages/agentDetailReport/useAgentDetailReport.ts","../call-control-sdk/lib/pages/agentDetailReport/styles.ts","../call-control-sdk/lib/pages/agentDetailReport/index.tsx","../call-control-sdk/lib/pages/agentPerformanceReport/types.ts","../call-control-sdk/lib/pages/agentPerformanceReport/styles.ts","../call-control-sdk/lib/pages/agentPerformanceReport/index.tsx","../call-control-sdk/index.ts","../call-control-sdk/lib/hooks/eventsTracker.ts","../call-control-sdk/lib/hooks/useLogout.ts","../call-control-sdk/lib/hooks/useEndCall.ts","../call-control-sdk/lib/hooks/useClickToCall.ts","../call-control-sdk/lib/hooks/useGetAuthorizationToken.ts","../call-control-sdk/lib/hooks/useSDKState.ts","../call-control-sdk/lib/hooks/useCallMonitoring.ts","../call-control-sdk/lib/components/callControlPanel.tsx","../call-control-sdk/lib/components/callControls.tsx","../call-control-sdk/lib/components/dialog.tsx","../call-control-sdk/lib/services/request.ts","../call-control-sdk/lib/components/styles.ts","../call-control-sdk/lib/hooks/useDraggable.ts","../call-control-sdk/lib/services/micController.ts","../call-control-sdk/lib/utils/audioLoader.ts","../call-control-sdk/lib/pages/sdkPages.tsx","../call-control-sdk/lib/hooks/useClickToConference.ts","../call-control-sdk/lib/angular-services/index.ts"],"sourcesContent":["export const STORAGE_KEY = \"call-control-sdk-state\";\r\n","/**\r\n * SDK Permission Constants\r\n *\r\n * Defines permission codes for call control features.\r\n * These codes match the 'items' in the backend entitlements response.\r\n */\r\n\r\nexport const SDK_WILDCARD = \"*\" as const;\r\n\r\n/** Menu entitlement codes from userInfo.entitlements.menus */\r\nexport const SDK_MENU_CODES = {\r\n WILDCARD: SDK_WILDCARD,\r\n CALL_HISTORY: \"call_history\",\r\n CAMPAIGNS: \"dialer_auto\",\r\n LOGIN_REPORT: \"login_report\",\r\n CDR_REPORT: \"cdr_report\",\r\n AGENT_PERFORMANCE_REPORT: \"agent_performance\",\r\n AGENT_DETAIL_REPORT: \"agent_detail\",\r\n} as const;\r\n\r\nexport const SDK_PERMISSIONS = {\r\n WILDCARD: SDK_WILDCARD,\r\n // main object key constants\r\n\r\n CALLS: \"calls\",\r\n CALL_TRANSFER: \"call_transfer\",\r\n CALL_CONFERENCE: \"call_conference\",\r\n\r\n // in each object has items list of objects\r\n\r\n CALL_INBOUND: \"call_inbound\",\r\n CALL_OUTBOUND: \"call_outbound\",\r\n\r\n CONFERENCE: \"call_conference\",\r\n\r\n TRANSFER_BLIND: \"call_transfer_blind\",\r\n TRANSFER_ATTENDED: \"call_transfer_attended\",\r\n TRANSFER_WARM: \"call_transfer_warm\",\r\n\r\n // Campaigns\r\n CAMPAIGNS_CREATE: \"campaigns:create\",\r\n CAMPAIGNS_READ: \"campaigns:read\",\r\n CAMPAIGNS_UPDATE: \"campaigns:update\",\r\n CAMPAIGNS_DELETE: \"campaigns:delete\",\r\n CAMPAIGNS_MANAGE: \"campaigns:manage\",\r\n CAMPAIGNS_CONTROL: \"campaigns:control\",\r\n\r\n // Reports — Agent Login\r\n REPORTS_AGENT_LOGIN_READ: \"reports:agent_login:read\",\r\n REPORTS_AGENT_LOGIN_EXPORT: \"reports:agent_login:export\",\r\n REPORTS_AGENT_LOGIN_MANAGE: \"reports:agent_login:manage\",\r\n\r\n // CDR Report\r\n REPORTS_CDR_READ: \"reports:cdr:read\",\r\n REPORTS_CDR_EXPORT: \"reports:cdr:export\",\r\n REPORTS_CDR_MANAGE: \"reports:cdr:manage\",\r\n} as const;\r\n","/**\r\n * SDK Permissions Module\r\n *\r\n * Exports all permission-related utilities for the call-control SDK.\r\n */\r\n\r\n// Types and constants\r\nexport { SDK_PERMISSIONS, SDK_MENU_CODES, SDK_WILDCARD } from \"./sdk-constants\";\r\nexport {\r\n type SDKBit,\r\n type SDKEntitlements,\r\n type SDKPermissionState,\r\n type PermissionCheckResult,\r\n type ControlsFromPermissions,\r\n type SDKPermissionContextValue,\r\n} from \"./types\";\r\n\r\n// React hooks\r\n","import { getSession, removeSession, setSession } from \"@react-solutions/vault\";\r\nimport type {\r\n SDKState,\r\n CallData,\r\n ConferenceLineTypes,\r\n SDKConfig,\r\n InitSDKRes,\r\n URLConfig,\r\n ConsultInfo,\r\n} from \"../../types\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\nimport {\r\n SDK_PERMISSIONS,\r\n type SDKEntitlements,\r\n type ControlsFromPermissions,\r\n SDK_MENU_CODES,\r\n} from \"../permissions\";\r\n\r\nclass SDKStateManager {\r\n private state: SDKState;\r\n private listeners: Array<() => void> = [];\r\n private readonly STORAGE_KEY = STORAGE_KEY;\r\n\r\n private apiKey: string | undefined;\r\n private tenantId: string | undefined;\r\n\r\n constructor() {\r\n this.state = this.getInitialState();\r\n this.loadFromStorage();\r\n }\r\n\r\n private getInitialState(): SDKState {\r\n return {\r\n authorization: undefined,\r\n process: null,\r\n agentId: \"\",\r\n openConferenceDialog: false,\r\n openCallTransferDialog: false,\r\n isInitialized: false,\r\n sdkConfig: {\r\n disableEndCallButton: false,\r\n disableEndConference: false,\r\n disabledDialButton: false,\r\n disabledMoreOptionsButton: false,\r\n enableSmsServices: false,\r\n enableQueueName: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disableAlternateDialing: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n },\r\n urlConfig: {\r\n baseURL: \"\",\r\n iframeURL: \"\",\r\n iframeAPIURL: \"\",\r\n webSocketURL: \"\",\r\n coreBaseURL: \"\",\r\n id: \"\",\r\n password: \"\",\r\n },\r\n callStartTime: null,\r\n controlPanelPosition: { x: 10, y: 10 },\r\n iframePosition: {\r\n x: window.screen?.availWidth - 460,\r\n y: window.screen?.height - 580,\r\n },\r\n callData: {\r\n agent_id: -1,\r\n queue_name: \"\",\r\n hold: 0,\r\n mute: 0,\r\n status: \"\",\r\n type: \"\",\r\n event_time: \"\",\r\n phone_number: \"\",\r\n },\r\n conferenceLine: [\r\n {\r\n line: 1,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 2,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 3,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 4,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 5,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n ],\r\n hold: 0,\r\n mute: 0,\r\n agentStatus: \"\",\r\n sdk: null,\r\n isPermissionsLoaded: false,\r\n userPermissions: null,\r\n menuEntitlements: null,\r\n consultInfo: null,\r\n rootCallUuid: null,\r\n backendCallControls: null,\r\n };\r\n }\r\n\r\n private loadFromStorage(): void {\r\n try {\r\n const stored = <SDKState>getSession(this.STORAGE_KEY);\r\n if (stored) {\r\n const parsedState = stored;\r\n this.state = {\r\n ...this.state,\r\n agentId: parsedState.agentId || \"\",\r\n authorization: parsedState.authorization || undefined,\r\n process: parsedState.process || null,\r\n openConferenceDialog: parsedState?.openConferenceDialog || false,\r\n openCallTransferDialog: parsedState?.openCallTransferDialog || false,\r\n isInitialized: parsedState.isInitialized || false,\r\n sdkConfig: parsedState.sdkConfig || {\r\n disableEndCallButton: false,\r\n disableEndConference: false,\r\n disabledMoreOptionsButton: false,\r\n enableSmsServices: false,\r\n enableQueueName: false,\r\n disabledDialButton: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disableAlternateDialing: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n },\r\n urlConfig: parsedState.urlConfig || {\r\n id: \"\",\r\n baseURL: \"\",\r\n iframeURL: \"\",\r\n iframeAPIURL: \"\",\r\n webSocketURL: \"\",\r\n coreBaseURL: \"\",\r\n password: \"\",\r\n },\r\n callStartTime: parsedState.callStartTime || null,\r\n controlPanelPosition: parsedState.controlPanelPosition || {\r\n x: 10,\r\n y: 10,\r\n },\r\n iframePosition: parsedState.iframePosition || {\r\n x: window.screen?.availWidth - 460,\r\n y: window.screen?.height - 580,\r\n },\r\n callData: parsedState.callData || {\r\n mobileNumber: \"\",\r\n callReferenceId: \"\",\r\n agent_id: \"\",\r\n status: \"\",\r\n type: \"\",\r\n event_time: \"\",\r\n phone_number: \"\",\r\n },\r\n conferenceLine:\r\n parsedState.conferenceLine &&\r\n Array.isArray(parsedState.conferenceLine) &&\r\n parsedState.conferenceLine.length > 0\r\n ? parsedState.conferenceLine\r\n : this.state.conferenceLine,\r\n agentStatus: parsedState.agentStatus,\r\n sdk: parsedState.sdk || null,\r\n isPermissionsLoaded: parsedState.isPermissionsLoaded || false,\r\n userPermissions: parsedState.userPermissions || null,\r\n menuEntitlements: parsedState.menuEntitlements || null,\r\n rootCallUuid: parsedState.rootCallUuid ?? null,\r\n };\r\n }\r\n } catch (error) {\r\n console.warn(\"Failed to load SDK state:\", error);\r\n }\r\n }\r\n\r\n private saveToStorage(): void {\r\n try {\r\n const persistentState = {\r\n agentId: this.state.agentId,\r\n authorization: this.state.authorization,\r\n process: this.state.process,\r\n isInitialized: this.state.isInitialized,\r\n openConferenceDialog: this.state.openConferenceDialog,\r\n openCallTransferDialog: this.state.openCallTransferDialog,\r\n sdkConfig: this.state.sdkConfig,\r\n urlConfig: this.state.urlConfig,\r\n callStartTime: this.state.callStartTime,\r\n controlPanelPosition: this.state.controlPanelPosition,\r\n iframePosition: this.state.iframePosition,\r\n callData: this.state.callData,\r\n conferenceLine: this.state.conferenceLine,\r\n agentStatus: this.state.agentStatus,\r\n sdk: this.state.sdk,\r\n isPermissionsLoaded: this.state.isPermissionsLoaded,\r\n userPermissions: this.state.userPermissions,\r\n menuEntitlements: this.state.menuEntitlements,\r\n rootCallUuid: this.state.rootCallUuid,\r\n };\r\n setSession(this.STORAGE_KEY, persistentState);\r\n } catch (error) {\r\n console.warn(\"Failed to save SDK state:\", error);\r\n }\r\n }\r\n\r\n private notifyListeners(): void {\r\n this.listeners.forEach((listener) => listener());\r\n }\r\n\r\n private validateCredentials(apiKey: string, tenantId: string): void {\r\n if (!apiKey || typeof apiKey !== \"string\" || apiKey.trim().length === 0) {\r\n throw new Error(\"API key not available\");\r\n }\r\n if (\r\n !tenantId ||\r\n typeof tenantId !== \"string\" ||\r\n tenantId.trim().length === 0\r\n ) {\r\n throw new Error(\"Tenant ID not available\");\r\n }\r\n this.apiKey = apiKey.trim();\r\n this.tenantId = tenantId.trim();\r\n }\r\n\r\n public initialize(\r\n apiKey: string,\r\n tenantId: string,\r\n agentId: string,\r\n urlConfig?: URLConfig,\r\n initResult?: InitSDKRes,\r\n sdkConfig?: SDKConfig,\r\n rawBackendCallControls?: SDKConfig,\r\n ): void {\r\n this.validateCredentials(apiKey, tenantId);\r\n if (\r\n !agentId ||\r\n typeof agentId !== \"string\" ||\r\n agentId.trim().length === 0\r\n ) {\r\n throw new Error(\"Agent ID not available\");\r\n } else {\r\n this.state.agentId = agentId;\r\n this.state.openConferenceDialog = false;\r\n this.state.openCallTransferDialog = false;\r\n this.state.authorization = initResult;\r\n this.state.backendCallControls = rawBackendCallControls ?? null;\r\n this.state.sdkConfig = {\r\n disableEndCallButton: false,\r\n disableEndConference: false,\r\n disabledDialButton: false,\r\n disabledMoreOptionsButton: false,\r\n enableQueueName: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disableAlternateDialing: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n ...sdkConfig,\r\n ...initResult?.callControls,\r\n };\r\n this.state.urlConfig = {\r\n baseURL: urlConfig?.baseURL || \"\",\r\n iframeURL: urlConfig?.iframeURL || \"\",\r\n iframeAPIURL: urlConfig?.iframeAPIURL || \"\",\r\n webSocketURL: urlConfig?.webSocketURL || \"\",\r\n coreBaseURL: urlConfig?.coreBaseURL || \"\",\r\n id: initResult?.userInfo?.id ? String(initResult.userInfo.id) : \"\",\r\n password: urlConfig?.password || \"\",\r\n };\r\n this.state.isInitialized = true;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n }\r\n\r\n public getState(): SDKState {\r\n return { ...this.state };\r\n }\r\n\r\n public getCredentials(): {\r\n apiKey: string | undefined;\r\n tenantId: string | undefined;\r\n } {\r\n return { apiKey: this.apiKey, tenantId: this.tenantId };\r\n }\r\n public getSdkAuthToken(): string | undefined {\r\n return this.state.authorization?.accessToken;\r\n }\r\n\r\n public subscribe(listener: () => void): () => void {\r\n this.listeners.push(listener);\r\n return () => {\r\n const index = this.listeners.indexOf(listener);\r\n if (index > -1) {\r\n this.listeners.splice(index, 1);\r\n }\r\n };\r\n }\r\n\r\n // public setHolding(isHolding: boolean): void {\r\n // \tthis.state.isHolding = isHolding;\r\n // \tthis.saveToStorage();\r\n // \tthis.notifyListeners();\r\n // }\r\n\r\n // public setMuted(isMuted: boolean): void {\r\n // \tthis.state.isMuted = isMuted;\r\n // \tthis.saveToStorage();\r\n // \tthis.notifyListeners();\r\n // }\r\n\r\n public setProcess(process: {\r\n process_id: number;\r\n process_name: string;\r\n }): void {\r\n this.state.process = process;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setControlPanelPosition(position: { x: number; y: number }): void {\r\n this.state.controlPanelPosition = position;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setIframePosition(position: { x: number; y: number }): void {\r\n this.state.iframePosition = position;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public startCall(): void {\r\n this.state.callStartTime = Date.now();\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public endCall(): void {\r\n this.state.callStartTime = null;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setInitCheck(): void {\r\n this.state.isInitialized = false;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setOpenConferenceDialog(open: boolean): void {\r\n this.state.openConferenceDialog = open;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setOpenCallTransferDialog(open: boolean): void {\r\n this.state.openCallTransferDialog = open;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setConsultInfo(info: ConsultInfo | null): void {\r\n this.state.consultInfo = info;\r\n this.notifyListeners();\r\n }\r\n\r\n public setRootCallUuid(uuid: string | null): void {\r\n this.state.rootCallUuid = uuid;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setAgentStatus(status: string): void {\r\n this.state.agentStatus = status;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public updateCallData(data: Partial<CallData>): void {\r\n this.state.callData = { ...this.state.callData, ...data };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public updateConferenceData(data: ConferenceLineTypes[]): void {\r\n this.state.conferenceLine = [...data];\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setConferenceLine(line: ConferenceLineTypes): void {\r\n if (\r\n !this.state.conferenceLine ||\r\n !Array.isArray(this.state.conferenceLine)\r\n ) {\r\n this.state.conferenceLine = this.getInitialState().conferenceLine;\r\n }\r\n\r\n const conferenceLineData = this.state.conferenceLine?.map(\r\n (each: ConferenceLineTypes) => {\r\n if (each.line === line.line) {\r\n return line;\r\n }\r\n return each;\r\n },\r\n );\r\n this.state.conferenceLine = conferenceLineData;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public resetConferenceLines(): void {\r\n this.state.conferenceLine = [\r\n {\r\n line: 1,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 2,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 3,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 4,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 5,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n ];\r\n\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public clearStorageAndReset(): void {\r\n try {\r\n removeSession(this.STORAGE_KEY);\r\n this.state = this.getInitialState();\r\n this.notifyListeners();\r\n } catch (error) {\r\n console.warn(\"Failed to clear:\", error);\r\n }\r\n }\r\n\r\n public getConferenceLines(): ConferenceLineTypes[] {\r\n return this.state.conferenceLine || [];\r\n }\r\n\r\n /**\r\n * Update SDK config with permission-based controls.\r\n * Merges the provided controls with existing config.\r\n */\r\n public updateSDKConfigFromPermissions(\r\n permissionControls: Partial<SDKConfig>,\r\n ): void {\r\n this.state.sdkConfig = {\r\n ...this.state.sdkConfig,\r\n ...permissionControls,\r\n };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n /**\r\n * Revert call consult controls back to the base permission-derived values.\r\n * Called when a CALL_STATE event arrives without call_consult_controls.\r\n */\r\n public resetConsultControls(): void {\r\n const base = this.getControlsConfig();\r\n this.state.sdkConfig = {\r\n ...this.state.sdkConfig,\r\n disableEndCallButton: base.disableEndCallButton,\r\n disableCallTransferButton: base.disableCallTransferButton,\r\n disableConferenceButton: base.disableConferenceButton,\r\n disableHoldButton: base.disableHoldButton,\r\n disableMuteButton: base.disableMuteButton,\r\n };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n // ============ Entitlement Logic (Ported from SDKPermissionManager) ============\r\n\r\n /**\r\n * Set user information (entitlements) from login response\r\n */\r\n public setSDKPermissions(userInfo: any): void {\r\n if (!userInfo) return;\r\n\r\n // In a real scenario, this would come from userInfo.entitlements?.sdk\r\n // For now, we use the structured format expected by the SDK\r\n\r\n const sdk: SDKEntitlements = userInfo.entitlements?.sdk;\r\n const sdkPermissions = Array.isArray(userInfo.permissions) ? userInfo.permissions : null;\r\n // const sdkMenus = Array.isArray(userInfo.entitlements?.menus)\r\n // ? userInfo.entitlements.menus\r\n // : null;\r\n\r\n const sdkMenus:any[] = [\r\n {\r\n \"code\": SDK_MENU_CODES.WILDCARD,\r\n \"name\": \"Role Management\",\r\n \"enabled\": true\r\n },\r\n // {\r\n // \"code\": SDK_MENU_CODES.CALL_HISTORY,\r\n // \"name\": \"Role Management\",\r\n // \"enabled\": true\r\n // }\r\n ]\r\n\r\n // const sdkPermissions: any = [\r\n // \"campaigns:create\"\r\n // ]\r\n\r\n // const sdk: SDKEntitlements = {\r\n // calls: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.CALL_OUTBOUND,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.CALL_INBOUND,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // call_transfer: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_BLIND,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_ATTENDED,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_WARM,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // call_conference: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.CONFERENCE,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // };\r\n\r\n this.state.sdk = sdk;\r\n this.state.userPermissions = sdkPermissions\r\n this.state.menuEntitlements = sdkMenus\r\n this.state.isPermissionsLoaded = true;\r\n\r\n // Automatically update SDK config based on these new entitlements\r\n const permissionControls = this.getControlsConfig();\r\n this.updateSDKConfigFromPermissions(permissionControls);\r\n\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n /**\r\n * Check if a bit is enabled in entitlements\r\n */\r\n public isBitEnabled(\r\n category: keyof SDKEntitlements,\r\n bitCode: string,\r\n ): boolean {\r\n const sdk = this.state.sdk;\r\n if (!sdk) return false;\r\n\r\n const categoryEntitlement = sdk[category];\r\n if (!categoryEntitlement) return false;\r\n if (!categoryEntitlement.enabled) return false;\r\n\r\n if (!bitCode) return true; // Just checking category enabledness\r\n\r\n const bit = categoryEntitlement.items?.find(\r\n (item: any) => item.code === bitCode,\r\n );\r\n return bit ? bit.enabled : false;\r\n }\r\n\r\n /** Check if the user has a specific flat permission (e.g. \"calls:inbound\") */\r\n public hasPermission(permission: string): boolean {\r\n const perms = this.state.userPermissions;\r\n if (!perms) return false;\r\n return perms.includes(\"*\") || perms.includes(permission);\r\n }\r\n\r\n /** Check if any of the provided permissions is granted */\r\n public hasAnyPermission(permissions: string[]): boolean {\r\n return permissions.some((p) => this.hasPermission(p));\r\n }\r\n\r\n /** Check if all of the provided permissions are granted */\r\n public hasAllPermissions(permissions: string[]): boolean {\r\n return permissions.every((p) => this.hasPermission(p));\r\n }\r\n\r\n /** Check if a menu entitlement is enabled (e.g. \"campaign\"). Supports \"*\" wildcard. */\r\n public hasMenuFeature(code: string): boolean {\r\n const menus = this.state.menuEntitlements;\r\n if (!menus) return false;\r\n if (menus.some((m) => m.code === \"*\" && m.enabled)) return true;\r\n const entry = menus.find((m) => m.code === code);\r\n return entry ? entry.enabled : false;\r\n }\r\n\r\n /**\r\n * Get SDK controls configuration derived exclusively from structured entitlements.\r\n */\r\n public getControlsConfig(): ControlsFromPermissions {\r\n const { sdk, isPermissionsLoaded } = this.state;\r\n\r\n // If entitlements not loaded yet or missing, disable everything (Fail Closed)\r\n if (!isPermissionsLoaded || !sdk) {\r\n return {\r\n disabledDialButton: true,\r\n disableEndCallButton: true,\r\n disableCallTransferButton: true,\r\n disableBlindTransfer: true,\r\n disableAttendedTransfer: true,\r\n disableWarmTransfer: true,\r\n disableConferenceButton: true,\r\n disableHoldButton: true,\r\n disableMuteButton: true,\r\n disabledMoreOptionsButton: true,\r\n };\r\n }\r\n\r\n // --- Dial/Inbound Checks ---\r\n const isDialAllowed = this.isBitEnabled(\r\n \"calls\",\r\n SDK_PERMISSIONS.CALL_OUTBOUND,\r\n );\r\n const isInboundAllowed = this.isBitEnabled(\r\n \"calls\",\r\n SDK_PERMISSIONS.CALL_INBOUND,\r\n );\r\n const isAnyCallAllowed = isDialAllowed || isInboundAllowed;\r\n // AND with backend callControls: if backend disabled it, permissions alone can't re-enable it\r\n const backendDisabledEndCall = !!this.state.backendCallControls?.disableEndCallButton;\r\n\r\n // --- Call Controls ---\r\n const isHoldAllowed = isAnyCallAllowed;\r\n const isMuteAllowed = isAnyCallAllowed;\r\n const isEndCallAllowed = isAnyCallAllowed && !backendDisabledEndCall;\r\n const isConferenceAllowed = this.isBitEnabled(\"call_conference\", \"\");\r\n const isTransferEnabled = this.isBitEnabled(\"call_transfer\", \"\");\r\n\r\n // --- Transfer Controls ---\r\n const isBlindAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_BLIND,\r\n );\r\n const isAttendedAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_ATTENDED,\r\n );\r\n const isWarmAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_WARM,\r\n );\r\n\r\n return {\r\n disabledDialButton: !isDialAllowed,\r\n disableEndCallButton: !isEndCallAllowed,\r\n disableCallTransferButton: !isTransferEnabled,\r\n disableBlindTransfer: !isBlindAllowed,\r\n disableAttendedTransfer: !isAttendedAllowed,\r\n disableWarmTransfer: !isWarmAllowed,\r\n disableConferenceButton: !isConferenceAllowed,\r\n disableHoldButton: !isHoldAllowed,\r\n disableMuteButton: !isMuteAllowed,\r\n disabledMoreOptionsButton: false,\r\n };\r\n }\r\n}\r\n\r\nexport const sdkStateManager = new SDKStateManager();\r\n\r\nexport type { SDKStateManager };\r\n","import { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\n\r\n// export const IP = \"192.168.100.254\";\r\n\r\n// export const IFRAME_IP = \"10.10.95.25\"\r\n// export const IFRAME_URL = `https://${IFRAME_IP}:8089`;\r\n// export const IFRAME_API_URL = `https://${IFRAME_IP}:8000`;\r\n\r\n\r\n// export const BASE_URL = `http://${IP}:8095`;\r\n// export const WS_BASE_URL = `ws://${IP}:8095`;\r\n\r\n// export const IFRAME_URL = sdkStateManager?.getState()?.urlConfig?.iframeURL\r\n// export const IFRAME_API_URL = sdkStateManager?.getState()?.urlConfig?.iframeAPIURL\r\n\r\n// Dynamically get URLs from SDK state\r\nconst getBaseURL = () => sdkStateManager?.getState()?.urlConfig?.baseURL || \"\";\r\nconst getCoreURL = () => sdkStateManager?.getState()?.urlConfig?.coreBaseURL || \"\";\r\n\r\nexport const BASE_URL = getBaseURL();\r\nexport const CORE_URL = getCoreURL();\r\n\r\nexport const VERSION = {\r\n\tv1: \"/api/v1\",\r\n};\r\n\r\n// Dynamic endpoint getters that fetch URLs from SDK state at runtime\r\nexport const END_POINT = {\r\n\tget LOGIN() { return `${getBaseURL()}${VERSION.v1}/cti/login?provider=convox`; },\r\n\tget READY_AGENT() { return `${getCoreURL()}${VERSION.v1}/agents/ready`; },\r\n\tget UPDATE_AGENT_BREAK() { return `${getCoreURL()}${VERSION.v1}/agents/status`; },\r\n\tget CLICK_TO_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/dial`; },\r\n\tget HOLD_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hold`; },\r\n\tget MUTE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/mute`; },\r\n\tget UNMUTE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/mute`; },\r\n\tget END_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget LOGOUT() { return `${getBaseURL()}${VERSION.v1}/cti/logout?provider=convox`; },\r\n\r\n\tget CONFERENCE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/add`; },\r\n\tget CONFERENCE_MERGE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/merge`; },\r\n\tget CONFERENCE_CALL_HOLD_OR_UN_HOLD() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hold`; },\r\n\tget CONFERENCE_CALL_MUTE_OT_UN_MUTE() { return `${getCoreURL()}${VERSION.v1}/cti/calls/mute`; },\r\n\tget CONFERENCE_CALL_END() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget CONFERENCE_CALL_END_ALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget CONFERENCE_CALL_TRANSFER() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/transfer`; },\r\n\tget TRANSFER_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer-call`; },\r\n\tget TRANSFER_COMPLETE() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer/complete`; },\r\n\tget TRANSFER_CANCEL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer/cancel`; },\r\n\r\n\tget AGENTS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/users`; },\r\n\tget PROCESS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/processes-list`; },\r\n\tget BREAKS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/breaks`; },\r\n\tget TRANSFER_TO_DETAILS() { return `${getBaseURL()}${VERSION.v1}/cti/transfer-to-details?provider=convox`; },\r\n\tget SEND_NOTIFICATIONS() { return `${getBaseURL()}${VERSION.v1}/cti/notifications/send`; },\r\n\r\n\tget CALL_HISTORY() { return `${getBaseURL()}${VERSION.v1}/dashboard/call-history`; },\r\n\tget SENTIMENTAL_ANALYSIS() { return `${getBaseURL()}${VERSION.v1}/users/get_sentiment_analysis`; },\r\n\tget DISPOSITIONS() { return `${getBaseURL()}${VERSION.v1}/cti/calls/dispositions`; },\r\n\tget HOSPITALS_SERVICES() { return `${getBaseURL()}${VERSION.v1}/cti/hospital/services`; },\r\n\tget BLIEND_TRANSFER() { return `${getBaseURL()}${VERSION.v1}/cti/calls/blind_transfer?provider=convox`; },\r\n\r\n\tget AUTH_LOGOUT() { return `${getBaseURL()}${VERSION.v1}/auth/logout`; },\r\n\r\n\t// Permissions\r\n\tget USER_PERMISSIONS() { return `${getBaseURL()}${VERSION.v1}/rbac/users/me/permissions`; },\r\n\r\n\t// Supervisor Call Monitoring (Listen / Whisper / Barge via ChanSpy)\r\n\tget SUPERVISOR_CALL_LISTEN() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/listen`; },\r\n\tget SUPERVISOR_CALL_LEAVE() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/leave`; },\r\n\tget SUPERVISOR_CALL_CHANGE_MODE() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/mode`; },\r\n\r\n\t// Call History pages\r\n\tget CALLS_HISTORY() { return `${getBaseURL()}${VERSION.v1}/calls/history`; },\r\n\tget MISSED_CALLS() { return `${getBaseURL()}${VERSION.v1}/supervisor/missed-calls`; },\r\n\tRECORDING_BY_CALL: (call_uuid: string) => `${getBaseURL()}${VERSION.v1}/recordings/call/${call_uuid}`,\r\n\r\n\t// Campaigns\r\n\tget CAMPAIGNS_GET_ALL() { return `${getBaseURL()}${VERSION.v1}/dialer/campaigns`; },\r\n\tget CAMPAIGNS_CREATE() { return `${getBaseURL()}${VERSION.v1}/dialer/campaigns`; },\r\n\tCAMPAIGNS_GET_BY_ID: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}`,\r\n\tCAMPAIGNS_UPDATE: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}`,\r\n\tCAMPAIGNS_ACTIVATE: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}/activate`,\r\n\tCAMPAIGNS_PAUSE: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}/pause`,\r\n\tCAMPAIGNS_ARCHIVE: (id: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${id}/archive`,\r\n\tCAMPAIGNS_LEADS: (campaignId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads`,\r\n\tCAMPAIGNS_DELETE_LEAD: (campaignId: number | string, leadId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/${leadId}`,\r\n\tCAMPAIGNS_DIAL_PREVIEW: (campaignId: number | string, leadId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/${leadId}/dial-preview`,\r\n\tCAMPAIGNS_LEADS_UPLOAD_EXCEL: (campaignId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/upload/excel`,\r\n\tCAMPAIGNS_LEADS_TEMPLATE_EXCEL: (campaignId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/template/excel`,\r\n\tCAMPAIGNS_LEADS_EXPORT_EXCEL: (campaignId: number | string) => `${getBaseURL()}${VERSION.v1}/dialer/campaigns/${campaignId}/leads/export/excel`,\r\n\r\n\t// Login Report\r\n\tget LOGIN_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/login-report`; },\r\n\tget LOGIN_REPORT_AGENTS() { return `${getBaseURL()}${VERSION.v1}/reports/login-report/agents`; },\r\n\tLOGIN_REPORT_AGENT_SESSIONS: (agentId: string) => `${getBaseURL()}${VERSION.v1}/reports/login-report/agents/${agentId}/sessions`,\r\n\tLOGIN_REPORT_AGENT_SESSIONS_EXPORT_EXCEL: (agentId: string) => `${getBaseURL()}${VERSION.v1}/reports/login-report/agents/${agentId}/sessions/export/excel`,\r\n\tget LOGIN_REPORT_EXPORT_EXCEL() { return `${getBaseURL()}${VERSION.v1}/reports/login-report/export/excel`; },\r\n\r\n\t// CDR Report\r\n\tget CDR_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report`; },\r\n\tget CDR_REPORT_RECORDS() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report/records`; },\r\n\tget CDR_REPORT_EXPORT_EXCEL() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report/export/excel`; },\r\n\r\n\t// CDR Report filter sources (match what main app's CdrReport calls)\r\n\tget USERS_LIST() { return `${getBaseURL()}${VERSION.v1}/users/`; },\r\n\tget MASTER_QUEUES() { return `${getBaseURL()}${VERSION.v1}/master/queue`; },\r\n\r\n\t// Reports\r\n\tget AGENT_PERFORMANCE_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/agent-performance-report`; },\r\n\tget AGENT_PERFORMANCE_REPORT_AGENTS() { return `${getBaseURL()}${VERSION.v1}/reports/agent-performance-report/agents`; },\r\n\tget AGENT_PERFORMANCE_REPORT_EXPORT_EXCEL() { return `${getBaseURL()}${VERSION.v1}/reports/agent-performance-report/export/excel`; },\r\n\tAGENT_DETAIL_REPORT: (agentId: string) => `${getBaseURL()}${VERSION.v1}/reports/agent-detail-report/${agentId}`,\r\n\t// get CDR_REPORT() { return `${getBaseURL()}${VERSION.v1}/reports/cdr-report`; },\r\n\r\n\t// Queues (used by Campaigns → Queue Linking)\r\n\tget QUEUES_GET_ALL() { return `${getBaseURL()}${VERSION.v1}/master/queue`; },\r\n\tget QUEUES_CREATE() { return `${getBaseURL()}${VERSION.v1}/master/queue`; },\r\n};\r\n\r\n// export const WS_END_POINT = {\r\n// \tWS: `${WS_BASE_URL}${VERSION.v1}/cti/ws`,\r\n// };\r\n\r\n// export const STORAGE_KEY = \"call-control-sdk-state\";\r\n","import axios, { AxiosInstance, AxiosResponse, AxiosError, InternalAxiosRequestConfig } from \"axios\";\r\nimport { BASE_URL } from \"./endPoint\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\nconst DEFAULT_TOKEN = sdkStateManager.getSdkAuthToken() ?? \"\";\r\n\r\nconst REQUEST_TIMEOUT = 60000;\r\n\r\nfunction getAuthToken(): string {\r\n\treturn sdkStateManager.getSdkAuthToken() ?? \"\";\r\n}\r\n\r\nfunction createAxiosInstance(): AxiosInstance {\r\n\tconst instance = axios.create({\r\n\t\t// baseURL: sdkStateManager.getState()?.urlConfig?.baseURL,\r\n\t\theaders: {\r\n\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\tAccept: \"application/json\",\r\n\t\t\t\"x-tenant-id\": sdkStateManager.getCredentials()?.tenantId ?? \"\",\r\n\t\t\t\"x-api-key\": sdkStateManager.getCredentials()?.apiKey ?? \"\",\r\n\t\t\tAuthorization: DEFAULT_TOKEN\r\n\t\t\t\t? (DEFAULT_TOKEN.startsWith(\"Bearer \") ? DEFAULT_TOKEN : `Bearer ${DEFAULT_TOKEN}`)\r\n\t\t\t\t: \"\",\r\n\t\t},\r\n\t\ttimeout: REQUEST_TIMEOUT,\r\n\t\twithCredentials: false,\r\n\t});\r\n\r\n\tinstance.interceptors.request.use(\r\n\t\t(config: InternalAxiosRequestConfig) => {\r\n\t\t\tconst token = getAuthToken();\r\n\r\n\t\t\tif (token && config.headers) {\r\n\t\t\t\t// Only add \"Bearer \" prefix if the token doesn't already have it\r\n\t\t\t\tconst authToken = token.startsWith(\"Bearer \") ? token : `Bearer ${token}`;\r\n\t\t\t\tconfig.headers.Authorization = authToken;\r\n\t\t\t}\r\n\r\n\t\t\t// Debug log for API calls\r\n\t\t\tconsole.log(\"API Request:\", {\r\n\t\t\t\turl: config.url,\r\n\t\t\t\tmethod: config.method,\r\n\t\t\t\thasToken: !!token,\r\n\t\t\t\ttokenStartsWithBearer: token?.startsWith(\"Bearer \"),\r\n\t\t\t\theaders: {\r\n\t\t\t\t\tAuthorization: config.headers.Authorization,\r\n\t\t\t\t\t\"x-tenant-id\": config.headers[\"x-tenant-id\"],\r\n\t\t\t\t\t\"x-api-key\": config.headers[\"x-api-key\"],\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t(config as any).metadata = { startTime: new Date().getTime() };\r\n\r\n\t\t\treturn config;\r\n\t\t},\r\n\t\t(error: AxiosError) => {\r\n\t\t\tconsole.error(\"Request interceptor error:\", error);\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n\r\n\tinstance.interceptors.response.use(\r\n\t\t(response: AxiosResponse) => {\r\n\t\t\treturn response;\r\n\t\t},\r\n\t\tasync (error: AxiosError) => {\r\n\t\t\tconst originalRequest = error.config as InternalAxiosRequestConfig & { _retry?: boolean };\r\n\r\n\t\t\tif (error.response?.status === 401 && !originalRequest._retry) {\r\n\t\t\t\tsdkStateManager.setInitCheck();\r\n\t\t\t\tconsole.warn(\"Unauthorized request, attempting retry...\");\r\n\t\t\t}\r\n\r\n\t\t\tif (!error.response) {\r\n\t\t\t\tconsole.error(\"Network error:\", error.message);\r\n\t\t\t\terror.message = \"Network error: Please check your internet connection\";\r\n\t\t\t}\r\n\r\n\t\t\tif (error.response && error.response.status >= 500) {\r\n\t\t\t\tconsole.error(\"Server error:\", error.response.status, error.response.data);\r\n\t\t\t\terror.message = \"Server error: Please try again later\";\r\n\t\t\t}\r\n\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n\r\n\treturn instance;\r\n}\r\n\r\nconst axiosInstance: AxiosInstance = createAxiosInstance();\r\n\r\nexport default axiosInstance;\r\n","import { createContext, useContext, useState, ReactNode } from \"react\";\r\nimport { Snackbar, Alert, AlertColor } from \"@mui/material\";\r\n\r\ntype ToastContextType = {\r\n\tshowToast: (message: string, severity?: AlertColor) => void;\r\n};\r\n\r\nconst ToastContext = createContext<ToastContextType | undefined>(undefined);\r\n\r\nconst noopToast: ToastContextType = {\r\n\tshowToast: (message, severity) => {\r\n\t\tconsole.warn(`[Toast outside provider] ${severity ?? \"info\"}: ${message}`);\r\n\t},\r\n};\r\n\r\nexport const useToast = () => {\r\n\tconst ctx = useContext(ToastContext);\r\n\treturn ctx ?? noopToast;\r\n};\r\n\r\nexport const ToastProvider = ({ children }: { children: ReactNode }) => {\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst [message, setMessage] = useState(\"\");\r\n\tconst [severity, setSeverity] = useState<AlertColor>(\"info\");\r\n\r\n\tconst showToast = (msg: string, sev: AlertColor = \"info\") => {\r\n\t\tsetMessage(msg);\r\n\t\tsetSeverity(sev);\r\n\t\tsetOpen(true);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<ToastContext.Provider value={{ showToast }}>\r\n\t\t\t{children}\r\n\t\t\t<Snackbar\r\n\t\t\t\topen={open}\r\n\t\t\t\tcolor={severity}\r\n\t\t\t\tautoHideDuration={3000}\r\n\t\t\t\tonClose={() => setOpen(false)}\r\n\t\t\t\tanchorOrigin={{ vertical: \"top\", horizontal: \"right\" }}\r\n\t\t\t>\r\n\t\t\t\t<Alert\r\n\t\t\t\t\tvariant=\"filled\"\r\n\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\tonClose={() => setOpen(false)}\r\n\t\t\t\t\tsx={{ width: \"100%\" }}\r\n\t\t\t\t>\r\n\t\t\t\t\t{message}\r\n\t\t\t\t</Alert>\r\n\t\t\t</Snackbar>\r\n\t\t</ToastContext.Provider>\r\n\t);\r\n};\r\n","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { CallData } from \"../../types\";\r\n\r\nexport const useGetCallerData = (): CallData => {\r\n\tconst sdkState = sdkStateManager.getState();\r\n\tconst { process_id, process_name, status, phone_number, agent_id, call_id, call_details } =\r\n\t\tsdkState.callData;\r\n\tconst initialCallData = {\r\n\t\tphone_number,\r\n\t\tstatus,\r\n\t\tcallReferenceId: call_id,\r\n\t\tagent_id,\r\n\t\tprocess_id,\r\n\t\tprocess_name,\r\n\t\tcall_details,\r\n\t\tauto_wrapup_time: sdkState.backendCallControls?.auto_wrapup_time ?? null,\r\n\t\tsocket_info: sdkState.callData,\r\n\t};\r\n\tconst [callData, setCallData] = useState<CallData>(initialCallData);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tconst state = sdkStateManager.getState();\r\n\t\t\tconst { process_id, process_name, status, phone_number, agent_id, call_id, call_details, auto_wrapup_time } =\r\n\t\t\t\tstate.callData;\r\n\t\t\tconst currentCallData = {\r\n\t\t\t\tphone_number,\r\n\t\t\t\tstatus,\r\n\t\t\t\tcallReferenceId: call_id,\r\n\t\t\t\tagent_id,\r\n\t\t\t\tprocess_id,\r\n\t\t\t\tprocess_name,\r\n\t\t\t\tcall_details,\r\n\t\t\t\tauto_wrapup_time: auto_wrapup_time ?? state.backendCallControls?.auto_wrapup_time ?? null,\r\n\t\t\t\tsocket_info: state.callData,\r\n\t\t\t};\r\n\t\t\tsetCallData(currentCallData);\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn callData;\r\n};\r\n","import { memo } from \"react\";\r\nimport { ToastProvider } from \"../services/toastMessage\";\r\nimport React from \"react\";\r\nimport { SDKProviderProps } from \"../../types\";\r\n\r\nexport const SDKProvider = memo<SDKProviderProps>(({ children }) => {\r\n\treturn <ToastProvider>{children}</ToastProvider>;\r\n});\r\n\r\nSDKProvider.displayName = \"SDKProvider\";\r\n","import { useState, useEffect, useCallback } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport interface SDKPermissionsHook {\r\n permissions: string[];\r\n menuEntitlements: Array<{ code: string; name: string; enabled: boolean }>;\r\n isLoaded: boolean;\r\n hasPermission: (permission: string) => boolean;\r\n hasAnyPermission: (permissions: string[]) => boolean;\r\n hasAllPermissions: (permissions: string[]) => boolean;\r\n hasMenuFeature: (code: string) => boolean;\r\n}\r\n\r\nexport function useSDKPermissions(): SDKPermissionsHook {\r\n const [state, setState] = useState(() => sdkStateManager.getState());\r\n\r\n useEffect(() => {\r\n const unsubscribe = sdkStateManager.subscribe(() => {\r\n setState(sdkStateManager.getState());\r\n });\r\n return unsubscribe;\r\n }, []);\r\n\r\n const hasPermission = useCallback(\r\n (permission: string) => sdkStateManager.hasPermission(permission),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.userPermissions],\r\n );\r\n\r\n const hasAnyPermission = useCallback(\r\n (permissions: string[]) => sdkStateManager.hasAnyPermission(permissions),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.userPermissions],\r\n );\r\n\r\n const hasAllPermissions = useCallback(\r\n (permissions: string[]) => sdkStateManager.hasAllPermissions(permissions),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.userPermissions],\r\n );\r\n\r\n const hasMenuFeature = useCallback(\r\n (code: string) => sdkStateManager.hasMenuFeature(code),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.menuEntitlements],\r\n );\r\n\r\n return {\r\n permissions: state.userPermissions ?? [],\r\n menuEntitlements: state.menuEntitlements ?? [],\r\n isLoaded: state.isPermissionsLoaded,\r\n hasPermission,\r\n hasAnyPermission,\r\n hasAllPermissions,\r\n hasMenuFeature,\r\n };\r\n}\r\n","import React from \"react\";\r\nimport { Box, Typography } from \"@mui/material\";\r\nimport LockOutlinedIcon from \"@mui/icons-material/LockOutlined\";\r\n\r\ninterface SDKAccessDeniedProps {\r\n message?: string;\r\n}\r\n\r\nexport const SDKAccessDenied: React.FC<SDKAccessDeniedProps> = ({\r\n message = \"You don't have permission to view this page.\",\r\n}) => (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n minHeight: 300,\r\n gap: 2,\r\n p: 4,\r\n }}\r\n >\r\n <LockOutlinedIcon sx={{ fontSize: 56, color: \"text.disabled\" }} />\r\n <Typography variant=\"h6\" fontWeight={600} color=\"text.secondary\">\r\n Access Denied\r\n </Typography>\r\n <Typography variant=\"body2\" color=\"text.disabled\" sx={{ textAlign: \"center\" }}>\r\n {message}\r\n </Typography>\r\n </Box>\r\n);\r\n","import React from \"react\";\r\nimport { useSDKPermissions } from \"../hooks/useSDKPermissions\";\r\nimport { SDKAccessDenied } from \"./SDKAccessDenied\";\r\n\r\ninterface SDKPermissionGuardProps {\r\n children?: React.ReactNode;\r\n /** Single permission code (e.g. \"calls:inbound\") */\r\n permission?: string;\r\n /** Multiple permission codes — ANY match grants access by default */\r\n permissions?: string[];\r\n /** When true, ALL permissions must be granted */\r\n requireAll?: boolean;\r\n /** One or more menu feature codes — ANY match grants access by default */\r\n menuFeature?: string | string[];\r\n /** When true, ALL menu features must be enabled */\r\n requireAllMenus?: boolean;\r\n /** Custom fallback rendered when access is denied */\r\n fallback?: React.ReactNode;\r\n /** Show the default Access Denied UI when denied. Defaults to true. */\r\n showFallback?: boolean;\r\n /** Callback fired when the guard denies access */\r\n onDenied?: () => void;\r\n}\r\n\r\nexport const SDKPermissionGuard: React.FC<SDKPermissionGuardProps> = ({\r\n children,\r\n permission,\r\n permissions,\r\n requireAll = false,\r\n menuFeature,\r\n requireAllMenus = false,\r\n fallback,\r\n showFallback = true,\r\n onDenied,\r\n}) => {\r\n const { isLoaded, hasPermission, hasAnyPermission, hasAllPermissions, hasMenuFeature } =\r\n useSDKPermissions();\r\n\r\n if (!isLoaded) return null;\r\n\r\n const isAllowed = checkAccess({\r\n permission,\r\n permissions,\r\n requireAll,\r\n menuFeature,\r\n requireAllMenus,\r\n hasPermission,\r\n hasAnyPermission,\r\n hasAllPermissions,\r\n hasMenuFeature,\r\n });\r\n\r\n if (!isAllowed) {\r\n onDenied?.();\r\n if (fallback !== undefined) return <>{fallback}</>;\r\n if (showFallback) return <SDKAccessDenied />;\r\n return null;\r\n }\r\n\r\n return <>{children}</>;\r\n};\r\n\r\nfunction checkAccess({\r\n permission,\r\n permissions,\r\n requireAll,\r\n menuFeature,\r\n requireAllMenus,\r\n hasPermission,\r\n hasAnyPermission,\r\n hasAllPermissions,\r\n hasMenuFeature,\r\n}: {\r\n permission?: string;\r\n permissions?: string[];\r\n requireAll: boolean;\r\n menuFeature?: string | string[];\r\n requireAllMenus: boolean;\r\n hasPermission: (p: string) => boolean;\r\n hasAnyPermission: (p: string[]) => boolean;\r\n hasAllPermissions: (p: string[]) => boolean;\r\n hasMenuFeature: (c: string) => boolean;\r\n}): boolean {\r\n const menuCodes = menuFeature\r\n ? Array.isArray(menuFeature) ? menuFeature : [menuFeature]\r\n : [];\r\n\r\n const hasNoGuards =\r\n !permission &&\r\n (!permissions || permissions.length === 0) &&\r\n menuCodes.length === 0;\r\n\r\n if (hasNoGuards) return true;\r\n\r\n if (menuCodes.length > 0) {\r\n const menuGranted = requireAllMenus\r\n ? menuCodes.every((c) => hasMenuFeature(c))\r\n : menuCodes.some((c) => hasMenuFeature(c));\r\n if (!menuGranted) return false;\r\n }\r\n\r\n if (permission && !hasPermission(permission)) return false;\r\n\r\n if (permissions && permissions.length > 0) {\r\n const granted = requireAll ? hasAllPermissions(permissions) : hasAnyPermission(permissions);\r\n if (!granted) return false;\r\n }\r\n\r\n return true;\r\n}\r\n","import React from \"react\";\r\nimport { Box, IconButton, Typography } from \"@mui/material\";\r\nimport ArrowBackIcon from \"@mui/icons-material/ArrowBack\";\r\n\r\ninterface SDKPageHeaderProps {\r\n\ttitle: string;\r\n\tsubtitle?: React.ReactNode;\r\n\tavatar?: React.ReactNode;\r\n\tshowBack?: boolean;\r\n\tonBack?: () => void;\r\n\tactions?: React.ReactNode;\r\n\tcount?: number;\r\n\tcountLabel?: string;\r\n}\r\n\r\nexport function SDKPageHeader({\r\n\ttitle,\r\n\tsubtitle,\r\n\tavatar,\r\n\tshowBack = false,\r\n\tonBack,\r\n\tactions,\r\n\tcount,\r\n\tcountLabel = \"items\",\r\n}: SDKPageHeaderProps) {\r\n\treturn (\r\n\t\t<Box sx={{ px: { xs: 2, md: 2.5 }, py: \"14px\" }}>\r\n\t\t\t<Box\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\talignItems: { xs: \"flex-start\", sm: \"center\" },\r\n\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\tflexDirection: { xs: \"column\", sm: \"row\" },\r\n\t\t\t\t\tgap: 1,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{/* Left: back + avatar + title */}\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.25, minWidth: 0 }}>\r\n\t\t\t\t\t{showBack && (\r\n\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\tonClick={onBack}\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\twidth: 30, height: 30, flexShrink: 0,\r\n\t\t\t\t\t\t\t\tborder: \"none\", borderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\tbackgroundColor: \"action.hover\", color: \"text.secondary\",\r\n\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: \"action.selected\", color: \"text.primary\" },\r\n\t\t\t\t\t\t\t\ttransition: \"all 0.15s ease\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<ArrowBackIcon sx={{ fontSize: 15 }} />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{avatar}\r\n\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\tfontSize: { xs: \"1.25rem\", sm: \"1.5rem\", lg: \"1.75rem\" },\r\n\t\t\t\t\t\t\t\tcolor: \"text.primary\",\r\n\t\t\t\t\t\t\t\tlineHeight: 1.3,\r\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\ttextOverflow: \"ellipsis\",\r\n\t\t\t\t\t\t\t\tpl: !showBack ? 0 : 2,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t{subtitle && (\r\n\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tfontSize: \"0.78rem\",\r\n\t\t\t\t\t\t\t\t\tcolor: \"text.secondary\",\r\n\t\t\t\t\t\t\t\t\tpl: !showBack ? 0 : 2,\r\n\t\t\t\t\t\t\t\t\tmt: 0.2,\r\n\t\t\t\t\t\t\t\t\tlineHeight: 1.4,\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{subtitle}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t{/* Right: count chip + actions */}\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flexShrink: 0 }}>\r\n\t\t\t\t\t{count !== undefined && (\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: \"flex\", alignItems: \"center\", gap: \"5px\",\r\n\t\t\t\t\t\t\t\tpx: \"10px\", height: 32,\r\n\t\t\t\t\t\t\t\tborder: \"1px solid\", borderColor: \"divider\",\r\n\t\t\t\t\t\t\t\tborderRadius: \"6px\", backgroundColor: \"background.paper\",\r\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box sx={{ width: 6, height: 6, borderRadius: \"50%\", backgroundColor: \"#1A5F6C\", flexShrink: 0 }} />\r\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\" }}>\r\n\t\t\t\t\t\t\t\t{count} {countLabel}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{actions}\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n}\r\n","import { useState, useCallback } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type { CallHistoryItem, MissedCallDetails } from \"./types\";\r\n\r\nexport function useCallHistory() {\r\n\tconst [calls, setCalls] = useState<CallHistoryItem[]>([]);\r\n\tconst [missedCalls, setMissedCalls] = useState<MissedCallDetails[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchCallHistory = useCallback(async () => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.post(END_POINT.CALLS_HISTORY, {});\r\n\t\t\tsetCalls(Array.isArray(res.data?.records) ? res.data.records : []);\r\n\t\t} catch {\r\n\t\t\tsetCalls([]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchMissedCalls = useCallback(async () => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get(END_POINT.MISSED_CALLS);\r\n\t\t\tsetMissedCalls(Array.isArray(res.data?.data) ? res.data.data : []);\r\n\t\t} catch {\r\n\t\t\tsetMissedCalls([]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchRecording = useCallback(async (call_uuid: string): Promise<Blob> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(call_uuid), {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tcalls,\r\n\t\tmissedCalls,\r\n\t\tloading,\r\n\t\tfetchCallHistory,\r\n\t\tfetchMissedCalls,\r\n\t\tfetchRecording,\r\n\t};\r\n}\r\n","import React, { memo, useEffect, useState } from \"react\";\r\nimport {\r\n\tBox,\r\n\tTypography,\r\n\tTable,\r\n\tTableBody,\r\n\tTableCell,\r\n\tTableContainer,\r\n\tTableHead,\r\n\tTableRow,\r\n\tTablePagination,\r\n\tToggleButton,\r\n\tToggleButtonGroup,\r\n\tIconButton,\r\n\tCollapse,\r\n\tCircularProgress,\r\n\tChip,\r\n\tStack,\r\n\tSwitch,\r\n\tFormControlLabel,\r\n\tTooltip,\r\n\tInputAdornment,\r\n\tOutlinedInput,\r\n\tuseTheme,\r\n\tPaper,\r\n} from \"@mui/material\";\r\nimport KeyboardArrowDown from \"@mui/icons-material/KeyboardArrowDown\";\r\nimport PlayArrow from \"@mui/icons-material/PlayArrow\";\r\nimport ExpandLess from \"@mui/icons-material/ExpandLess\";\r\nimport Search from \"@mui/icons-material/Search\";\r\nimport Phone from \"@mui/icons-material/Phone\";\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPageHeader } from \"../../components/SDKPageHeader\";\r\nimport { useToast } from \"../../services/toastMessage\";\r\nimport { useCallHistory } from \"./useCallHistory\";\r\nimport type { CallHistoryItem, MissedCallDetails, CallFilter } from \"./types\";\r\n\r\n// ──── Header cell columns ────────────────────────────────────────────────────\r\n\r\nconst CALL_HISTORY_COLS = [\"Call UID\", \"Mobile\", \"Type\", \"Start Time\", \"End Time\", \"Recording\", \"Agent\", \"Details\"] as const;\r\nconst MISSED_CALLS_COLS = [\"Agent ID\", \"Agent Name\", \"Mobile No\", \"Type\", \"Actions\"] as const;\r\nconst CENTER_COLS = new Set([\"Type\", \"Recording\", \"Agent\", \"Details\", \"Actions\"]);\r\n\r\n// ──── Main content (needs SDKProvider above it for useToast) ─────────────────\r\n\r\nconst CallHistoryContent = memo(() => {\r\n\tconst theme = useTheme();\r\n\tconst { showToast } = useToast();\r\n\tconst { calls, missedCalls, loading, fetchCallHistory, fetchMissedCalls, fetchRecording } =\r\n\t\tuseCallHistory();\r\n\r\n\tconst [filter, setFilter] = useState<CallFilter>(\"ALL\");\r\n\tconst [search, setSearch] = useState(\"\");\r\n\tconst [showMissedCalls, setShowMissedCalls] = useState(false);\r\n\tconst [page, setPage] = useState(0);\r\n\tconst [rowsPerPage, setRowsPerPage] = useState(10);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (showMissedCalls) {\r\n\t\t\tfetchMissedCalls();\r\n\t\t} else {\r\n\t\t\tfetchCallHistory();\r\n\t\t}\r\n\t}, [showMissedCalls, fetchCallHistory, fetchMissedCalls]);\r\n\r\n\tconst filteredCalls = calls\r\n\t\t.filter((c) => filter === \"ALL\" || c.call_type === filter)\r\n\t\t.filter((c) => c.mobile_no.toLowerCase().includes(search.toLowerCase()));\r\n\r\n\tconst filteredMissedCalls = missedCalls\r\n\t\t.filter((c) => filter === \"ALL\" || c.callType?.toUpperCase() === filter)\r\n\t\t.filter((c) => {\r\n\t\t\tconst q = search.toLowerCase();\r\n\t\t\treturn (\r\n\t\t\t\tc.agentId?.toLowerCase().includes(q) ||\r\n\t\t\t\tc.username?.toLowerCase().includes(q) ||\r\n\t\t\t\tc.mobileNumber?.toLowerCase().includes(q)\r\n\t\t\t);\r\n\t\t});\r\n\r\n\treturn (\r\n\t\t<Box>\r\n\t\t\t{/* PAGE HEADER */}\r\n\t\t\t<SDKPageHeader\r\n\t\t\t\ttitle=\"Call History\"\r\n\t\t\t\tactions={\r\n\t\t\t\t\t<OutlinedInput\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tvalue={search}\r\n\t\t\t\t\t\tonChange={(e) => { setSearch(e.target.value); setPage(0); }}\r\n\t\t\t\t\t\tplaceholder=\"Search\"\r\n\t\t\t\t\t\tsx={{ width: 220, fontSize: \"0.82rem\", height: 36 }}\r\n\t\t\t\t\t\tendAdornment={\r\n\t\t\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t\t\t<Search sx={{ fontSize: 18, color: \"#999\" }} />\r\n\t\t\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t/>\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\r\n\t\t\t<Box py={1.5} px={2}>\r\n\t\t\t\t{/* FILTER BAR */}\r\n\t\t\t\t<Stack direction=\"row\" spacing={2} alignItems=\"center\" mb={2}>\r\n\t\t\t\t\t<FormControlLabel\r\n\t\t\t\t\t\tcontrol={\r\n\t\t\t\t\t\t\t<Switch\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tchecked={showMissedCalls}\r\n\t\t\t\t\t\t\t\tonChange={(_, checked) => { setShowMissedCalls(checked); setPage(0); }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlabel={\r\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.8rem\", color: \"#555\" }}>\r\n\t\t\t\t\t\t\t\tMissed Calls\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsx={{ ml: 0 }}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<ToggleButtonGroup\r\n\t\t\t\t\t\tvalue={filter}\r\n\t\t\t\t\t\texclusive\r\n\t\t\t\t\t\tonChange={(_, v) => { if (v) { setFilter(v); setPage(0); } }}\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tborder: \"1px solid #ccc\",\r\n\t\t\t\t\t\t\tborderRadius: \"50px\",\r\n\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\"& .MuiToggleButton-root\": {\r\n\t\t\t\t\t\t\t\tborder: \"none\",\r\n\t\t\t\t\t\t\t\tborderRight: \"1px solid #ccc\",\r\n\t\t\t\t\t\t\t\tcolor: \"#555\",\r\n\t\t\t\t\t\t\t\tfontWeight: 600,\r\n\t\t\t\t\t\t\t\ttextTransform: \"uppercase\",\r\n\t\t\t\t\t\t\t\tfontSize: \"0.72rem\",\r\n\t\t\t\t\t\t\t\tpx: 2,\r\n\t\t\t\t\t\t\t\tpy: 0.5,\r\n\t\t\t\t\t\t\t\tborderRadius: 0,\r\n\t\t\t\t\t\t\t\t\"&:last-of-type\": { borderRight: \"none\" },\r\n\t\t\t\t\t\t\t\t\"&.Mui-selected\": {\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette.primary.main,\r\n\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: theme.palette.primary.dark },\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<ToggleButton value=\"ALL\">All</ToggleButton>\r\n\t\t\t\t\t\t<ToggleButton value=\"INCOMING\">Inbound</ToggleButton>\r\n\t\t\t\t\t\t<ToggleButton value=\"OUTGOING\">Outbound</ToggleButton>\r\n\t\t\t\t\t</ToggleButtonGroup>\r\n\t\t\t\t</Stack>\r\n\r\n\t\t\t\t{/* TABLE */}\r\n\t\t\t\t<TableContainer component={Paper} variant=\"outlined\" sx={{ display: 'flex', flexDirection: 'column' }}>\r\n\t\t\t\t <Box sx={{ overflowY: 'auto', maxHeight: 600 }}>\r\n\t\t\t\t\t<Table stickyHeader size=\"small\">\r\n\t\t\t\t\t\t{showMissedCalls ? (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t{MISSED_CALLS_COLS.map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={col}\r\n\t\t\t\t\t\t\t\t\t\t\t\talign={CENTER_COLS.has(col) ? \"center\" : \"left\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ fontWeight: 600, backgroundColor: \"#f1f1f1\", fontSize: \"0.8rem\" }}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{col}\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{loading ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={5} align=\"center\" sx={{ py: 4 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size={24} />\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : filteredMissedCalls.length === 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={5} align=\"center\" sx={{ py: 4, color: \"#999\", fontSize: \"0.82rem\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Records Found\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\tfilteredMissedCalls.slice(page * rowsPerPage, (page + 1) * rowsPerPage).map((row, i) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<MissedCallRow key={`${row.agentId}-${row.mobileNumber}-${i}`} row={row} />\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t{CALL_HISTORY_COLS.map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={col}\r\n\t\t\t\t\t\t\t\t\t\t\t\talign={CENTER_COLS.has(col) ? \"center\" : \"left\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ fontWeight: 600, backgroundColor: \"#f1f1f1\", fontSize: \"0.8rem\" }}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{col}\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{loading ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={8} align=\"center\" sx={{ py: 4 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress />\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : filteredCalls.length === 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={8} align=\"center\" sx={{ py: 4, color: \"#999\", fontSize: \"0.82rem\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Records Found\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\tfilteredCalls.slice(page * rowsPerPage, (page + 1) * rowsPerPage).map((row, i) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<ExpandableRow\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={row.call_uuid}\r\n\t\t\t\t\t\t\t\t\t\t\t\trow={row}\r\n\t\t\t\t\t\t\t\t\t\t\t\tstriped={i % 2 === 0}\r\n\t\t\t\t\t\t\t\t\t\t\t\tfetchRecording={fetchRecording}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonError={(msg) => showToast(msg, \"error\")}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Table>\r\n\t\t\t\t </Box>\r\n\t\t\t\t <TablePagination\r\n\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\tcount={showMissedCalls ? filteredMissedCalls.length : filteredCalls.length}\r\n\t\t\t\t\t\tpage={page}\r\n\t\t\t\t\t\trowsPerPage={rowsPerPage}\r\n\t\t\t\t\t\tonPageChange={(_, p) => setPage(p)}\r\n\t\t\t\t\t\tonRowsPerPageChange={(e) => { setRowsPerPage(parseInt(e.target.value, 10)); setPage(0); }}\r\n\t\t\t\t\t\trowsPerPageOptions={[10, 25, 50]}\r\n\t\t\t\t\t\tsx={{ borderTop: '1px solid #e0e0e0' }}\r\n\t\t\t\t />\r\n\t\t\t\t</TableContainer>\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n});\r\n\r\nCallHistoryContent.displayName = \"CallHistoryContent\";\r\n\r\n// ──── Missed Call Row ─────────────────────────────────────────────────────────\r\n\r\nconst MissedCallRow = memo(({ row }: { row: MissedCallDetails }) => {\r\n\tconst theme = useTheme();\r\n\treturn (\r\n\t\t<TableRow hover>\r\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\", color: theme.palette.primary.main }}>\r\n\t\t\t\t{row.agentId}\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\" }}>{row.username}</TableCell>\r\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\" }}>\r\n\t\t\t\t{row.mobileNumber} ({row.callCount})\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell sx={{ fontSize: \"0.82rem\", textTransform: \"uppercase\" }}>\r\n\t\t\t\t{row.callType}\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell align=\"center\">\r\n\t\t\t\t<Phone sx={{ color: \"#c0392b\", fontSize: 20, cursor: \"pointer\" }} />\r\n\t\t\t</TableCell>\r\n\t\t</TableRow>\r\n\t);\r\n});\r\n\r\nMissedCallRow.displayName = \"MissedCallRow\";\r\n\r\n// ──── Expandable Row ──────────────────────────────────────────────────────────\r\n\r\nfunction ExpandableRow({\r\n\trow,\r\n\tstriped,\r\n\tfetchRecording,\r\n\tonError,\r\n}: {\r\n\trow: CallHistoryItem;\r\n\tstriped: boolean;\r\n\tfetchRecording: (call_uuid: string) => Promise<Blob>;\r\n\tonError: (msg: string) => void;\r\n}) {\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst [audioURL, setAudioURL] = useState<string | null>(null);\r\n\tconst [loadingAudio, setLoadingAudio] = useState(false);\r\n\r\n\tconst handlePlay = async () => {\r\n\t\tif (!row.recording.available) return;\r\n\t\tsetLoadingAudio(true);\r\n\t\ttry {\r\n\t\t\tconst blob = await fetchRecording(row.call_uuid);\r\n\t\t\tsetAudioURL(URL.createObjectURL(blob));\r\n\t\t} catch {\r\n\t\t\tonError(\"Recording not available\");\r\n\t\t} finally {\r\n\t\t\tsetLoadingAudio(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst bg = striped ? \"#fafafa\" : \"white\";\r\n\tconst cellSx = { fontSize: \"0.82rem\", backgroundColor: bg };\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<TableRow hover>\r\n\t\t\t\t<TableCell sx={{ ...cellSx, maxWidth: 130 }}>\r\n\t\t\t\t\t<Tooltip title={row.call_uuid} arrow>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tnoWrap\r\n\t\t\t\t\t\t\tsx={{ fontSize: 13, maxWidth: 130, overflow: \"hidden\", textOverflow: \"ellipsis\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{row.call_uuid}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell sx={cellSx}>{row.mobile_no}</TableCell>\r\n\r\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tlabel={row.call_type}\r\n\t\t\t\t\t\tcolor={row.call_type === \"INCOMING\" ? \"success\" : \"primary\"}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell sx={cellSx}>\r\n\t\t\t\t\t{new Date(row.start_time).toLocaleString()}\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell sx={cellSx}>\r\n\t\t\t\t\t{row.end_time ? new Date(row.end_time).toLocaleString() : \"—\"}\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\r\n\t\t\t\t\t{row.recording.available ? (\r\n\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\tonClick={handlePlay}\r\n\t\t\t\t\t\t\tdisabled={loadingAudio}\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{loadingAudio ? <CircularProgress size={18} /> : <PlayArrow />}\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<Chip size=\"small\" label=\"No File\" />\r\n\t\t\t\t\t)}\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\r\n\t\t\t\t\t{row.agent_id ?? \"—\"}\r\n\t\t\t\t</TableCell>\r\n\r\n\t\t\t\t<TableCell align=\"center\" sx={cellSx}>\r\n\t\t\t\t\t<IconButton onClick={() => setOpen((o) => !o)} size=\"small\">\r\n\t\t\t\t\t\t{open ? <ExpandLess /> : <KeyboardArrowDown />}\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</TableCell>\r\n\t\t\t</TableRow>\r\n\r\n\t\t\t{/* Audio player row */}\r\n\t\t\t{audioURL && (\r\n\t\t\t\t<TableRow>\r\n\t\t\t\t\t<TableCell colSpan={8} sx={{ p: 0 }}>\r\n\t\t\t\t\t\t<Box p={2}>\r\n\t\t\t\t\t\t\t<audio\r\n\t\t\t\t\t\t\t\tcontrols\r\n\t\t\t\t\t\t\t\tautoPlay\r\n\t\t\t\t\t\t\t\tsrc={audioURL}\r\n\t\t\t\t\t\t\t\tonEnded={() => {\r\n\t\t\t\t\t\t\t\t\tURL.revokeObjectURL(audioURL);\r\n\t\t\t\t\t\t\t\t\tsetAudioURL(null);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tstyle={{ width: \"100%\" }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</TableCell>\r\n\t\t\t\t</TableRow>\r\n\t\t\t)}\r\n\r\n\t\t\t{/* Details collapse row */}\r\n\t\t\t<TableRow>\r\n\t\t\t\t<TableCell colSpan={8} sx={{ p: 0 }}>\r\n\t\t\t\t\t<Collapse in={open} unmountOnExit>\r\n\t\t\t\t\t\t<Box p={2} bgcolor=\"#f9fafc\" borderTop=\"1px solid #eee\">\r\n\t\t\t\t\t\t\t<Typography fontWeight={600} fontSize=\"0.85rem\" mb={0.5}>\r\n\t\t\t\t\t\t\t\tCall Details\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t<Typography variant=\"body2\" fontSize=\"0.82rem\">\r\n\t\t\t\t\t\t\t\tCall UID: {row.call_uuid}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t<Typography variant=\"body2\" fontSize=\"0.82rem\">\r\n\t\t\t\t\t\t\t\tAgent: {row.agent_id ?? \"Unassigned\"}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Collapse>\r\n\t\t\t\t</TableCell>\r\n\t\t\t</TableRow>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\n// ──── Default Export — wraps with SDKProvider for toast context ───────────────\r\n\r\nconst CallHistory: React.FC = () => (\r\n\t<SDKProvider>\r\n\t\t<CallHistoryContent />\r\n\t</SDKProvider>\r\n);\r\n\r\nexport default CallHistory;\r\n","import React from \"react\";\r\nimport { Button, SxProps, Theme, useTheme } from \"@mui/material\";\r\nimport { alpha } from \"@mui/material/styles\";\r\n\r\ntype SDKButtonVariant = \"primary\" | \"danger\" | \"cancel\" | \"outlined\";\r\n\r\ninterface SDKButtonProps {\r\n\tchildren: React.ReactNode;\r\n\tvariant?: SDKButtonVariant;\r\n\tonClick?: React.MouseEventHandler<HTMLButtonElement>;\r\n\tstartIcon?: React.ReactNode;\r\n\tendIcon?: React.ReactNode;\r\n\tdisabled?: boolean;\r\n\ttype?: \"button\" | \"submit\" | \"reset\";\r\n\tsize?: \"small\" | \"medium\" | \"large\";\r\n\tfullWidth?: boolean;\r\n\tsx?: SxProps<Theme>;\r\n}\r\n\r\nconst muiVariant: Record<SDKButtonVariant, \"contained\" | \"outlined\" | \"text\"> = {\r\n\tprimary: \"contained\",\r\n\tdanger: \"contained\",\r\n\tcancel: \"text\",\r\n\toutlined: \"outlined\",\r\n};\r\n\r\nexport function SDKButton({\r\n\tchildren,\r\n\tvariant = \"primary\",\r\n\tonClick,\r\n\tstartIcon,\r\n\tendIcon,\r\n\tdisabled = false,\r\n\ttype = \"button\",\r\n\tsize = \"medium\",\r\n\tfullWidth = false,\r\n\tsx,\r\n}: SDKButtonProps) {\r\n\tconst theme = useTheme();\r\n\tconst primary = theme.palette.primary.main;\r\n\tconst primaryDark = theme.palette.primary.dark;\r\n\r\n\tconst styles: Record<SDKButtonVariant, SxProps<Theme>> = {\r\n\t\tprimary: {\r\n\t\t\ttextTransform: \"none\",\r\n\t\t\tfontWeight: 600,\r\n\t\t\tbackgroundColor: primary,\r\n\t\t\tborderRadius: \"30px\",\r\n\t\t\tfontSize: \"0.82rem\",\r\n\t\t\tpx: 2,\r\n\t\t\tboxShadow: `0 2px 8px ${alpha(primary, 0.25)}`,\r\n\t\t\t\"&:hover\": {\r\n\t\t\t\tbackgroundColor: primaryDark,\r\n\t\t\t\tboxShadow: `0 4px 12px ${alpha(primary, 0.35)}`,\r\n\t\t\t},\r\n\t\t\t\"&.Mui-disabled\": {\r\n\t\t\t\tbackgroundColor: alpha(primary, 0.4),\r\n\t\t\t\tcolor: \"#fff\",\r\n\t\t\t},\r\n\t\t},\r\n\t\tdanger: {\r\n\t\t\ttextTransform: \"none\",\r\n\t\t\tfontWeight: 600,\r\n\t\t\tbackgroundColor: \"#d32f2f\",\r\n\t\t\tborderRadius: \"8px\",\r\n\t\t\tfontSize: \"0.82rem\",\r\n\t\t\tpx: 2,\r\n\t\t\t\"&:hover\": { backgroundColor: \"#b71c1c\" },\r\n\t\t\t\"&.Mui-disabled\": { backgroundColor: \"#e57373\", color: \"#fff\" },\r\n\t\t},\r\n\t\tcancel: {\r\n\t\t\ttextTransform: \"none\",\r\n\t\t\tfontWeight: 600,\r\n\t\t\tcolor: \"#666\",\r\n\t\t\tborderRadius: \"30px\",\r\n\t\t\tfontSize: \"0.82rem\",\r\n\t\t\tpx: 2,\r\n\t\t\tborder: \"1px solid #d0d0d0\",\r\n\t\t\t\"&:hover\": { backgroundColor: \"#f5f5f5\", borderColor: \"#bbb\" },\r\n\t\t},\r\n\t\toutlined: {\r\n\t\t\ttextTransform: \"none\",\r\n\t\t\tfontWeight: 600,\r\n\t\t\tcolor: primary,\r\n\t\t\tborderColor: primary,\r\n\t\t\tborderRadius: \"30px\",\r\n\t\t\tfontSize: \"0.82rem\",\r\n\t\t\tpx: 2,\r\n\t\t\t\"&:hover\": { borderColor: primaryDark, backgroundColor: alpha(primary, 0.05) },\r\n\t\t},\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Button\r\n\t\t\tvariant={muiVariant[variant]}\r\n\t\t\tonClick={onClick}\r\n\t\t\tstartIcon={startIcon}\r\n\t\t\tendIcon={endIcon}\r\n\t\t\tdisabled={disabled}\r\n\t\t\ttype={type}\r\n\t\t\tsize={size}\r\n\t\t\tfullWidth={fullWidth}\r\n\t\t\tsx={[styles[variant], ...(Array.isArray(sx) ? sx : [sx])]}\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</Button>\r\n\t);\r\n}\r\n","import { useState, useCallback } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tCampaign,\r\n\tCampaignCreatePayload,\r\n\tCreateQueuePayload,\r\n\tLead,\r\n\tLeadCreatePayload,\r\n\tLeadsMeta,\r\n\tLeadsParams,\r\n\tLeadsResponse,\r\n\tQueue,\r\n} from \"./types\";\r\n\r\nexport function useCampaigns() {\r\n\tconst [campaigns, setCampaigns] = useState<Campaign[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchCampaigns = useCallback(async () => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get(END_POINT.CAMPAIGNS_GET_ALL);\r\n\t\t\tsetCampaigns(Array.isArray(res.data) ? res.data : []);\r\n\t\t} catch {\r\n\t\t\tsetCampaigns([]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst getCampaignById = useCallback(async (id: number): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.CAMPAIGNS_GET_BY_ID(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst createCampaign = useCallback(async (data: CampaignCreatePayload): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_CREATE, data);\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst updateCampaign = useCallback(async (id: number, data: Partial<CampaignCreatePayload>): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.put(END_POINT.CAMPAIGNS_UPDATE(id), data);\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst activateCampaign = useCallback(async (id: number): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_ACTIVATE(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst pauseCampaign = useCallback(async (id: number): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_PAUSE(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst archiveCampaign = useCallback(async (id: number): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_ARCHIVE(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tcampaigns,\r\n\t\tloading,\r\n\t\tfetchCampaigns,\r\n\t\tgetCampaignById,\r\n\t\tcreateCampaign,\r\n\t\tupdateCampaign,\r\n\t\tactivateCampaign,\r\n\t\tpauseCampaign,\r\n\t\tarchiveCampaign,\r\n\t};\r\n}\r\n\r\nexport function useLeads() {\r\n\tconst [leads, setLeads] = useState<Lead[]>([]);\r\n\tconst [leadTotal, setLeadTotal] = useState(0);\r\n\tconst [leadsMeta, setLeadsMeta] = useState<LeadsMeta>(null);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchLeads = useCallback(async (campaignId: number, params?: LeadsParams): Promise<void> => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst qs = new URLSearchParams();\r\n\t\t\tif (params?.skip != null) qs.append(\"skip\", String(params.skip));\r\n\t\t\tif (params?.limit != null) qs.append(\"limit\", String(params.limit));\r\n\t\t\tif (params?.status) qs.append(\"status\", params.status);\r\n\t\t\tif (params?.phone_number) qs.append(\"phone_number\", params.phone_number);\r\n\t\t\tconst qsStr = qs.toString();\r\n\t\t\tconst url = `${END_POINT.CAMPAIGNS_LEADS(campaignId)}${qsStr ? `?${qsStr}` : \"\"}`;\r\n\t\t\tconst res = await axiosInstance.get<LeadsResponse>(url);\r\n\t\t\tconst fetchedLeads = Array.isArray(res.data?.leads) ? res.data.leads : [];\r\n\t\t\tsetLeads(fetchedLeads);\r\n\t\t\tsetLeadTotal(res.data?.total ?? fetchedLeads.length);\r\n\t\t\tsetLeadsMeta({\r\n\t\t\t\tisDialerEnabled: res.data?.isDialerEnabled,\r\n\t\t\t\tdialingMode: res.data?.dialingMode,\r\n\t\t\t\tcampaignStatus: res.data?.campaignStatus,\r\n\t\t\t});\r\n\t\t} catch {\r\n\t\t\tsetLeads([]);\r\n\t\t\tsetLeadTotal(0);\r\n\t\t\tsetLeadsMeta(null);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst createLead = useCallback(async (campaignId: number, data: LeadCreatePayload): Promise<Lead> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_LEADS(campaignId), data);\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst deleteLead = useCallback(async (campaignId: number, leadId: number): Promise<void> => {\r\n\t\tawait axiosInstance.delete(END_POINT.CAMPAIGNS_DELETE_LEAD(campaignId, leadId));\r\n\t}, []);\r\n\r\n\tconst dialPreview = useCallback(async (campaignId: number, leadId: number): Promise<{ message: string }> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_DIAL_PREVIEW(campaignId, leadId));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst uploadLeadsExcel = useCallback(async (campaignId: number, file: File): Promise<any> => {\r\n\t\tconst formData = new FormData();\r\n\t\tformData.append(\"file\", file);\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_LEADS_UPLOAD_EXCEL(campaignId), formData, {\r\n\t\t\theaders: { \"Content-Type\": \"multipart/form-data\" },\r\n\t\t});\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst downloadLeadTemplate = useCallback(async (campaignId: number): Promise<void> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.CAMPAIGNS_LEADS_TEMPLATE_EXCEL(campaignId), {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\tconst blob = res.data as Blob;\r\n\t\tconst url = window.URL.createObjectURL(blob);\r\n\t\tconst a = document.createElement(\"a\");\r\n\t\ta.href = url;\r\n\t\ta.download = \"lead_template.xlsx\";\r\n\t\tdocument.body.appendChild(a);\r\n\t\ta.click();\r\n\t\ta.remove();\r\n\t\twindow.URL.revokeObjectURL(url);\r\n\t}, []);\r\n\r\n\tconst exportLeads = useCallback(async (campaignId: number): Promise<void> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.CAMPAIGNS_LEADS_EXPORT_EXCEL(campaignId), {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\tconst blob = res.data as Blob;\r\n\t\tconst url = window.URL.createObjectURL(blob);\r\n\t\tconst a = document.createElement(\"a\");\r\n\t\ta.href = url;\r\n\t\ta.download = \"leads_export.xlsx\";\r\n\t\tdocument.body.appendChild(a);\r\n\t\ta.click();\r\n\t\ta.remove();\r\n\t\twindow.URL.revokeObjectURL(url);\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tleads,\r\n\t\tleadTotal,\r\n\t\tleadsMeta,\r\n\t\tloading,\r\n\t\tfetchLeads,\r\n\t\tcreateLead,\r\n\t\tdeleteLead,\r\n\t\tdialPreview,\r\n\t\tuploadLeadsExcel,\r\n\t\tdownloadLeadTemplate,\r\n\t\texportLeads,\r\n\t};\r\n}\r\n\r\nexport function useQueues() {\r\n\tconst [queues, setQueues] = useState<Queue[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchQueues = useCallback(async (): Promise<Queue[]> => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get(END_POINT.QUEUES_GET_ALL);\r\n\t\t\tconst list: Queue[] = Array.isArray(res.data)\r\n\t\t\t\t? res.data\r\n\t\t\t\t: Array.isArray(res.data?.data) ? res.data.data : [];\r\n\t\t\tsetQueues(list);\r\n\t\t\treturn list;\r\n\t\t} catch {\r\n\t\t\tsetQueues([]);\r\n\t\t\treturn [];\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst createQueue = useCallback(async (payload: CreateQueuePayload): Promise<Queue> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.QUEUES_CREATE, payload);\r\n\t\treturn res.data?.data ?? res.data;\r\n\t}, []);\r\n\r\n\treturn { queues, loading, fetchQueues, createQueue };\r\n}\r\n","export interface CampaignQueue {\r\n\tid: number;\r\n\tcampaignId: number;\r\n\tqueueId: number;\r\n\tpriorityOverride: number | null;\r\n\tminWaitBeforeCallback: number;\r\n\tcreatedAt: string;\r\n}\r\n\r\nexport interface Campaign {\r\n\tid: number;\r\n\ttenantId: number;\r\n\tname: string;\r\n\tdescription: string;\r\n\tcampaignType: string;\r\n\tstatus: string;\r\n\tdialingMode: string;\r\n\tmaxConcurrentCalls: number;\r\n\tcallsPerAgent: number;\r\n\tstartTime: string;\r\n\tendTime: string;\r\n\tdaysOfWeek: number[];\r\n\ttimezone: string;\r\n\tscheduledStart: string | null;\r\n\tscheduledEnd: string | null;\r\n\tmaxAttempts: number;\r\n\tretryIntervalMinutes: number;\r\n\tcallerId: string | null;\r\n\tringTimeoutSeconds: number;\r\n\tanswerTimeoutSeconds: number | null;\r\n\tagentType: string;\r\n\taiBotId: number | null;\r\n\tpriority: number;\r\n\ttotalLeads: number;\r\n\tcompletedLeads: number;\r\n\tsuccessfulCalls: number;\r\n\tsettings: Record<string, any>;\r\n\tcreatedAt: string;\r\n\tupdatedAt: string;\r\n\tcompletionRate: number;\r\n\tcampaignQueues: CampaignQueue[];\r\n}\r\n\r\nexport interface CampaignCreatePayload {\r\n\tname: string;\r\n\tdescription: string;\r\n\tcampaignType: string;\r\n\tdialingMode: string;\r\n\tmaxConcurrentCalls: number;\r\n\tcallsPerAgent: number;\r\n\tstartTime: string;\r\n\tendTime: string;\r\n\tdaysOfWeek: number[];\r\n\ttimezone: string;\r\n\tscheduledStart: string;\r\n\tscheduledEnd: string;\r\n\tmaxAttempts: number;\r\n\tretryIntervalMinutes: number;\r\n\tcallerId: string;\r\n\tringTimeoutSeconds: number;\r\n\tanswerTimeoutSeconds: number;\r\n\tagentType: string;\r\n\taiBotId: number | null;\r\n\tpriority: number;\r\n\tsettings: Record<string, any>;\r\n\tqueueLinks?: QueueLinkPayload[];\r\n}\r\n\r\nexport interface QueueLinkPayload {\r\n\tqueueId: number;\r\n\tpriorityOverride: number;\r\n\tminWaitBeforeCallback: number;\r\n}\r\n\r\nexport interface Lead {\r\n\tid: number;\r\n\tcampaignId: number;\r\n\tphoneNumber: string;\r\n\tcallerName: string;\r\n\tsource: string;\r\n\tsourceReference: string;\r\n\toriginalCallId: string;\r\n\toriginalQueueId: number;\r\n\toriginalWaitTime: number;\r\n\tstatus: string;\r\n\tpriority: number;\r\n\tscheduledAt: string;\r\n\texpiresAt: string;\r\n\tattemptCount: number;\r\n\tlastAttemptAt: string;\r\n\tnextAttemptAt: string;\r\n\tlastOutcome: string;\r\n\tcompletedAt: string;\r\n\tcustomData: Record<string, any>;\r\n\tnotes: string;\r\n\tcreatedAt: string;\r\n\tupdatedAt: string;\r\n}\r\n\r\nexport interface LeadCreatePayload {\r\n\tphoneNumber: string;\r\n\tcallerName: string;\r\n\tsource?: string;\r\n\tpriority?: number;\r\n\tnotes?: string;\r\n\tscheduledAt?: string;\r\n}\r\n\r\nexport interface LeadsResponse {\r\n\tisDialerEnabled: boolean;\r\n\tdialingMode: string;\r\n\tcampaignStatus: string;\r\n\tleads: Lead[];\r\n\ttotal: number;\r\n}\r\n\r\nexport interface LeadsParams {\r\n\tskip?: number;\r\n\tlimit?: number;\r\n\tstatus?: string;\r\n\tphone_number?: string;\r\n}\r\n\r\nexport interface Queue {\r\n\tid: number;\r\n\tname: string;\r\n\tdescription: string;\r\n\tprocessId?: number;\r\n\tisActive: boolean;\r\n\tincludeInAbandonedCallback?: boolean;\r\n}\r\n\r\nexport interface CreateQueuePayload {\r\n\tname: string;\r\n\tdescription: string;\r\n\tisActive?: boolean;\r\n\tprocessId?: number;\r\n\tincludeInAbandonedCallback?: boolean;\r\n}\r\n\r\nexport type LeadsMeta = Pick<LeadsResponse, \"isDialerEnabled\" | \"dialingMode\" | \"campaignStatus\"> | null;\r\n\r\nexport const CAMPAIGN_TYPES = [\"OUTBOUND_CAMPAIGN\", \"ABANDONED_CALLBACK\"] as const;\r\n\r\nexport const DIALING_MODES_MAP: Record<string, string[]> = {\r\n\tOUTBOUND_CAMPAIGN: [\"PREVIEW\"],\r\n\tABANDONED_CALLBACK: [\"PROGRESSIVE\", \"PREDICTIVE\"],\r\n};\r\n\r\nexport const AGENT_TYPES = [\"HUMAN\", \"AI\", \"HYBRID\"] as const;\r\n\r\nexport const LEAD_PRIORITY_OPTIONS: { label: string; value: number }[] = [\r\n\t{ label: \"HIGH\", value: 10 },\r\n\t{ label: \"MEDIUM\", value: 5 },\r\n\t{ label: \"LOW\", value: 1 },\r\n];\r\n\r\nexport const DAYS_OF_WEEK = [\r\n\t{ label: \"Sun\", value: 0 }, { label: \"Mon\", value: 1 }, { label: \"Tue\", value: 2 },\r\n\t{ label: \"Wed\", value: 3 }, { label: \"Thu\", value: 4 }, { label: \"Fri\", value: 5 },\r\n\t{ label: \"Sat\", value: 6 },\r\n] as const;\r\n\r\nexport const TIMEZONES = [\r\n\t\"Etc/UTC\", \"US/Eastern\", \"US/Central\", \"US/Mountain\", \"US/Pacific\",\r\n\t\"Europe/London\", \"Europe/Berlin\", \"Asia/Kolkata\", \"Asia/Tokyo\", \"Australia/Sydney\",\r\n] as const;\r\n\r\nexport const STATUS_COLORS: Record<string, string> = {\r\n\tdraft: \"#9e9e9e\",\r\n\tactive: \"#4caf50\",\r\n\tpaused: \"#ff9800\",\r\n\tcompleted: \"#2196f3\",\r\n\tarchived: \"#795548\",\r\n};\r\n\r\nexport const LEAD_STATUSES = [\r\n\t\"All states\", \"PENDING\", \"SCHEDULED\", \"IN_PROGRESS\",\r\n\t\"COMPLETED\", \"FAILED\", \"DO_NOT_CALL\", \"INVALID\", \"CANCELLED\",\r\n] as const;\r\n\r\nexport const defaultFormData: CampaignCreatePayload = {\r\n\tname: \"\", description: \"\", campaignType: \"OUTBOUND_CAMPAIGN\", dialingMode: \"PREVIEW\",\r\n\tmaxConcurrentCalls: 5, callsPerAgent: 1, startTime: \"09:00\", endTime: \"17:00\",\r\n\tdaysOfWeek: [1, 2, 3, 4, 5], timezone: \"Asia/Kolkata\", scheduledStart: \"\", scheduledEnd: \"\",\r\n\tmaxAttempts: 0, retryIntervalMinutes: 15, callerId: \"\", ringTimeoutSeconds: 30,\r\n\tanswerTimeoutSeconds: 30, agentType: \"HUMAN\", aiBotId: null, priority: 5, settings: {},\r\n\tqueueLinks: [],\r\n};\r\n","import type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\n// ─── Typography ───────────────────────────────────────────────────────────────\r\n\r\nexport const labelSx: SxProps<Theme> = {\r\n\tfontWeight: 600,\r\n\tfontSize: \"0.85rem\",\r\n\tcolor: \"#333\",\r\n\tmb: 0.5,\r\n};\r\n\r\nexport const sectionTitleSx: SxProps<Theme> = {\r\n\tfontWeight: 700,\r\n\tfontSize: \"1rem\",\r\n\tcolor: \"#1a1a1a\",\r\n\tmb: 1.5,\r\n\tmt: 0.5,\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n};\r\n\r\n// ─── Table ────────────────────────────────────────────────────────────────────\r\n\r\nexport const headCellSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tbgcolor: \"#f1f1f1\",\r\n\tcolor: \"#333\",\r\n\tfontWeight: 600,\r\n\twhiteSpace: \"nowrap\",\r\n\tfontSize: \"0.8rem\",\r\n\tpy: \"6px\",\r\n\tpx: \"12px\",\r\n};\r\n\r\nexport const bodyCellSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontSize: \"0.82rem\",\r\n\tpy: \"4px\",\r\n\tpx: \"12px\",\r\n};\r\n\r\nexport const tableRowSx: SxProps<Theme> = {\r\n\t\"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n\t\"&:last-child td, &:last-child th\": { border: 0 },\r\n};\r\n\r\n// ─── Campaign list card ───────────────────────────────────────────────────────\r\n\r\nexport const campaignCardBaseSx: SxProps<Theme> = {\r\n\tp: 1.5,\r\n\tmb: 0.75,\r\n\tborderRadius: \"12px\",\r\n\tcursor: \"pointer\",\r\n\tborder: \"1px solid #e8e8e8\",\r\n\tbackgroundColor: \"#fff\",\r\n\tboxShadow: \"0 1px 2px rgba(0,0,0,0.04)\",\r\n\ttransition: \"all 0.2s ease\",\r\n};\r\n\r\nexport const campaignCardSelectedSx: SxProps<Theme> = {\r\n\t...campaignCardBaseSx,\r\n\tborder: \"2px solid #1A5F6C\",\r\n\tbackgroundColor: \"#f0f7f8\",\r\n\tboxShadow: \"0 2px 8px rgba(26,95,108,0.12)\",\r\n};\r\n\r\n// ─── Input ────────────────────────────────────────────────────────────────────\r\n\r\nexport const inputSx: SxProps<Theme> = {\r\n\t\"& .MuiOutlinedInput-root\": {\r\n\t\tborderRadius: \"8px\",\r\n\t\tbackgroundColor: \"#fff\",\r\n\t\t\"&:hover fieldset\": { borderColor: \"#1A5F6C\" },\r\n\t\t\"&.Mui-focused fieldset\": { borderColor: \"#1A5F6C\" },\r\n\t},\r\n};\r\n\r\n// ─── Dialog ───────────────────────────────────────────────────────────────────\r\n\r\nexport const dialogHeaderSx: SxProps<Theme> = {\r\n\tpx: 2.5,\r\n\tpy: 1.5,\r\n\tborderBottom: \"1px solid #eee\",\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tjustifyContent: \"space-between\",\r\n};\r\n\r\nexport const dialogFooterSx: SxProps<Theme> = {\r\n\tpx: 2.5,\r\n\tpy: 1.5,\r\n\tborderTop: \"1px solid #eee\",\r\n\tdisplay: \"flex\",\r\n\tjustifyContent: \"flex-end\",\r\n\tgap: 1,\r\n};\r\n\r\n// ─── Buttons ──────────────────────────────────────────────────────────────────\r\n\r\nexport const primaryBtnSx: SxProps<Theme> = {\r\n\tdisplay: \"inline-flex\",\r\n\talignItems: \"center\",\r\n\tgap: 0.5,\r\n\tpx: 2.5,\r\n\tpy: 0.75,\r\n\tborderRadius: 1,\r\n\tborder: \"none\",\r\n\tbackgroundColor: \"#1A5F6C\",\r\n\tcolor: \"#fff\",\r\n\tcursor: \"pointer\",\r\n\tfontSize: \"0.85rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontWeight: 600,\r\n\t\"&:hover\": { backgroundColor: \"#164e57\" },\r\n\t\"&:disabled\": { opacity: 0.65, cursor: \"not-allowed\" },\r\n};\r\n\r\nexport const cancelBtnSx: SxProps<Theme> = {\r\n\tdisplay: \"inline-flex\",\r\n\talignItems: \"center\",\r\n\tpx: 2.5,\r\n\tpy: 0.75,\r\n\tborderRadius: 1,\r\n\tborder: \"1px solid #ccc\",\r\n\tbackgroundColor: \"#fff\",\r\n\tcursor: \"pointer\",\r\n\tfontSize: \"0.85rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\t\"&:hover\": { backgroundColor: \"#f5f5f5\" },\r\n};\r\n\r\nexport const dangerBtnSx: SxProps<Theme> = {\r\n\tdisplay: \"inline-flex\",\r\n\talignItems: \"center\",\r\n\tgap: 0.5,\r\n\tpx: 2.5,\r\n\tpy: 0.75,\r\n\tborderRadius: 1,\r\n\tborder: \"none\",\r\n\tbackgroundColor: \"#c0392b\",\r\n\tcolor: \"#fff\",\r\n\tcursor: \"pointer\",\r\n\tfontSize: \"0.85rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontWeight: 600,\r\n\t\"&:hover\": { backgroundColor: \"#a93226\" },\r\n\t\"&:disabled\": { opacity: 0.65, cursor: \"not-allowed\" },\r\n};\r\n\r\nexport const outlinedBtnSx: SxProps<Theme> = {\r\n\tdisplay: \"inline-flex\",\r\n\talignItems: \"center\",\r\n\tgap: 0.5,\r\n\tpx: 2,\r\n\tpy: 0.75,\r\n\tborderRadius: 1,\r\n\tborder: \"1px solid #1A5F6C\",\r\n\tbackgroundColor: \"#fff\",\r\n\tcolor: \"#1A5F6C\",\r\n\tcursor: \"pointer\",\r\n\tfontSize: \"0.82rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontWeight: 600,\r\n\t\"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n};\r\n\r\n// ─── Icon action buttons ──────────────────────────────────────────────────────\r\n\r\nexport const iconBtnBaseSx: SxProps<Theme> = {\r\n\tborder: \"1px solid #e0e0e0\",\r\n\tborderRadius: 1,\r\n};\r\n\r\nexport const iconBtnPrimarySx: SxProps<Theme> = {\r\n\tborder: \"1px solid #1A5F6C\",\r\n\tcolor: \"#1A5F6C\",\r\n\tborderRadius: 1,\r\n};\r\n\r\nexport const iconBtnSuccessSx: SxProps<Theme> = {\r\n\tborder: \"1px solid #4caf50\",\r\n\tcolor: \"#4caf50\",\r\n\tborderRadius: 1,\r\n};\r\n\r\nexport const iconBtnWarningSx: SxProps<Theme> = {\r\n\tborder: \"1px solid #ff9800\",\r\n\tcolor: \"#ff9800\",\r\n\tborderRadius: 1,\r\n};\r\n\r\nexport const iconBtnDangerSx: SxProps<Theme> = {\r\n\tborder: \"1px solid #c0392b\",\r\n\tcolor: \"#c0392b\",\r\n\tborderRadius: 1,\r\n};\r\n\r\n// ─── Chip helpers (returned as plain objects, not SxProps) ────────────────────\r\n\r\nexport const STATUS_COLORS: Record<string, string> = {\r\n\tdraft: \"#9e9e9e\",\r\n\tactive: \"#4caf50\",\r\n\tpaused: \"#ff9800\",\r\n\tcompleted: \"#2196f3\",\r\n\tarchived: \"#795548\",\r\n};\r\n\r\nexport function statusChipSx(status: string) {\r\n\tconst color = STATUS_COLORS[status?.toLowerCase()] ?? \"#9e9e9e\";\r\n\treturn {\r\n\t\theight: 22,\r\n\t\tfontSize: \"0.68rem\",\r\n\t\tfontWeight: 700,\r\n\t\ttextTransform: \"capitalize\" as const,\r\n\t\tborderRadius: \"6px\",\r\n\t\tbackgroundColor: color + \"18\",\r\n\t\tcolor,\r\n\t\tborder: `1px solid ${color}40`,\r\n\t};\r\n}\r\n\r\nexport function leadStatusChipSx(status: string) {\r\n\tconst s = status?.toUpperCase();\r\n\treturn {\r\n\t\theight: 22,\r\n\t\tfontSize: \"0.72rem\",\r\n\t\tfontWeight: 700,\r\n\t\ttextTransform: \"capitalize\" as const,\r\n\t\tborderRadius: \"6px\",\r\n\t\tbackgroundColor: s === \"COMPLETED\" ? \"#e8f5e9\"\r\n\t\t\t: s === \"FAILED\" ? \"#ffebee\"\r\n\t\t\t: s === \"DIALING\" ? \"#e3f2fd\"\r\n\t\t\t: \"#f5f5f5\",\r\n\t\tcolor: s === \"COMPLETED\" ? \"#2e7d32\"\r\n\t\t\t: s === \"FAILED\" ? \"#c62828\"\r\n\t\t\t: s === \"DIALING\" ? \"#1565c0\"\r\n\t\t\t: \"#666\",\r\n\t};\r\n}\r\n\r\nexport function leadPriorityChipSx(priority: number | null | undefined) {\r\n\tconst label = priority == null ? \"—\"\r\n\t\t: priority >= 8 ? \"HIGH\"\r\n\t\t: priority >= 4 ? \"MEDIUM\"\r\n\t\t: \"LOW\";\r\n\treturn {\r\n\t\tchip: {\r\n\t\t\theight: 22,\r\n\t\t\tfontSize: \"0.72rem\",\r\n\t\t\tfontWeight: 700,\r\n\t\t\tborderRadius: \"6px\",\r\n\t\t\tbackgroundColor: label === \"HIGH\" ? \"#ffebee\" : label === \"MEDIUM\" ? \"#e3f2fd\" : label === \"LOW\" ? \"#e8f5e9\" : \"#f5f5f5\",\r\n\t\t\tcolor: label === \"HIGH\" ? \"#c62828\" : label === \"MEDIUM\" ? \"#1565c0\" : label === \"LOW\" ? \"#2e7d32\" : \"#666\",\r\n\t\t},\r\n\t\tlabel,\r\n\t};\r\n}\r\n\r\nexport function daychipSx(selected: boolean) {\r\n\treturn {\r\n\t\tcursor: \"pointer\",\r\n\t\tbackgroundColor: selected ? \"#1A5F6C\" : \"transparent\",\r\n\t\tcolor: selected ? \"#fff\" : \"#333\",\r\n\t\tborderColor: \"#1A5F6C\",\r\n\t\tfontWeight: 500,\r\n\t\t\"&:hover\": {\r\n\t\t\tbackgroundColor: selected ? \"#164e57\" : \"#E3F2F5\",\r\n\t\t},\r\n\t};\r\n}\r\n","import React, { memo, useCallback, useEffect, useRef, useState } from \"react\";\r\nimport {\r\n\tBox,\r\n\tChip,\r\n\tCircularProgress,\r\n\tFormControl,\r\n\tFormControlLabel,\r\n\tCheckbox,\r\n\tIconButton,\r\n\tInputAdornment,\r\n\tMenuItem,\r\n\tOutlinedInput,\r\n\tPaper,\r\n\tSelect,\r\n\tTab,\r\n\tTable,\r\n\tTableBody,\r\n\tTableCell,\r\n\tTableContainer,\r\n\tTableHead,\r\n\tTablePagination,\r\n\tTableRow,\r\n\tTabs,\r\n\tTextField,\r\n\tTooltip,\r\n\tTypography,\r\n\tuseTheme,\r\n} from \"@mui/material\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport ArchiveIcon from \"@mui/icons-material/Archive\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport DownloadIcon from \"@mui/icons-material/Download\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport PauseIcon from \"@mui/icons-material/Pause\";\r\nimport PhoneIcon from \"@mui/icons-material/Phone\";\r\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\r\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport SettingsIcon from \"@mui/icons-material/Settings\";\r\nimport UploadFileIcon from \"@mui/icons-material/UploadFile\";\r\n\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPageHeader } from \"../../components/SDKPageHeader\";\r\nimport { SDKButton } from \"../../components/SDKButton\";\r\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\r\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\r\nimport { useToast } from \"../../services/toastMessage\";\r\nimport { useSDKPermissions } from \"../../hooks/useSDKPermissions\";\r\nimport { useGetCallerData } from \"../../hooks/useGetCallerData\";\r\nimport { useCampaigns, useLeads, useQueues } from \"./useCampaigns\";\r\nimport type {\r\n\tCampaign,\r\n\tCampaignCreatePayload,\r\n\tCreateQueuePayload,\r\n\tLead,\r\n\tLeadCreatePayload,\r\n\tQueue,\r\n\tQueueLinkPayload,\r\n} from \"./types\";\r\nimport {\r\n\tAGENT_TYPES,\r\n\tCAMPAIGN_TYPES,\r\n\tDAYS_OF_WEEK,\r\n\tdefaultFormData,\r\n\tDIALING_MODES_MAP,\r\n\tLEAD_PRIORITY_OPTIONS,\r\n\tLEAD_STATUSES,\r\n} from \"./types\";\r\nimport {\r\n\tlabelSx,\r\n\tsectionTitleSx,\r\n\theadCellSx,\r\n\tbodyCellSx,\r\n\ttableRowSx,\r\n\tinputSx,\r\n\tcampaignCardBaseSx,\r\n\tcampaignCardSelectedSx,\r\n\tdialogHeaderSx,\r\n\tdialogFooterSx,\r\n\tstatusChipSx,\r\n\tleadStatusChipSx,\r\n\tleadPriorityChipSx,\r\n\tdaychipSx,\r\n\tSTATUS_COLORS,\r\n} from \"./styles\";\r\n\r\n// ──── Helpers ─────────────────────────────────────────────────────────────────\r\n\r\nfunction validatePhone(raw: string): string | null {\r\n\tconst trimmed = (raw || \"\").trim();\r\n\tif (!trimmed) return \"Phone number is required\";\r\n\tconst digits = trimmed.startsWith(\"+91\")\r\n\t\t? trimmed.slice(3)\r\n\t\t: trimmed.startsWith(\"91\") && trimmed.length === 12\r\n\t\t\t? trimmed.slice(2)\r\n\t\t\t: trimmed;\r\n\tif (!/^\\d{10}$/.test(digits)) return \"Must be 10 digits, 91+10, or +91+10\";\r\n\treturn null;\r\n}\r\n\r\nfunction campaignToFormData(c: Campaign): CampaignCreatePayload {\r\n\treturn {\r\n\t\tname: c.name || \"\",\r\n\t\tdescription: c.description || \"\",\r\n\t\tcampaignType: (c.campaignType || \"OUTBOUND_CAMPAIGN\").toUpperCase(),\r\n\t\tdialingMode: (c.dialingMode || \"PREVIEW\").toUpperCase(),\r\n\t\tmaxConcurrentCalls: c.maxConcurrentCalls ?? 5,\r\n\t\tcallsPerAgent: c.callsPerAgent ?? 1,\r\n\t\tstartTime: c.startTime ? c.startTime.slice(0, 5) : \"09:00\",\r\n\t\tendTime: c.endTime ? c.endTime.slice(0, 5) : \"17:00\",\r\n\t\tdaysOfWeek: c.daysOfWeek || [1, 2, 3, 4, 5],\r\n\t\ttimezone: c.timezone || \"Asia/Kolkata\",\r\n\t\tscheduledStart: c.scheduledStart || \"\",\r\n\t\tscheduledEnd: c.scheduledEnd || \"\",\r\n\t\tmaxAttempts: c.maxAttempts ?? 3,\r\n\t\tretryIntervalMinutes: c.retryIntervalMinutes ?? 15,\r\n\t\tcallerId: c.callerId || \"\",\r\n\t\tringTimeoutSeconds: c.ringTimeoutSeconds ?? 30,\r\n\t\tanswerTimeoutSeconds: c.answerTimeoutSeconds ?? 30,\r\n\t\tagentType: c.agentType || \"HUMAN\",\r\n\t\taiBotId: null,\r\n\t\tpriority: c.priority ?? 5,\r\n\t\tsettings: c.settings || {},\r\n\t\tqueueLinks: (c.campaignQueues || []).map((q) => ({\r\n\t\t\tqueueId: q.queueId,\r\n\t\t\tpriorityOverride: q.priorityOverride ?? 1,\r\n\t\t\tminWaitBeforeCallback: q.minWaitBeforeCallback ?? 0,\r\n\t\t})),\r\n\t};\r\n}\r\n\r\n// ──── Dialog tab sub-components ───────────────────────────────────────────────\r\n\r\ntype TabFormProps = {\r\n\tformData: CampaignCreatePayload;\r\n\tsetFormData: React.Dispatch<React.SetStateAction<CampaignCreatePayload>>;\r\n};\r\n\r\nfunction BasicInfoTab({ formData, setFormData, isEditMode }: TabFormProps & { isEditMode: boolean }) {\r\n\tconst handleChange = (field: keyof CampaignCreatePayload, value: any) => {\r\n\t\tsetFormData((prev) => {\r\n\t\t\tconst updated = { ...prev, [field]: value };\r\n\t\t\tif (field === \"campaignType\") {\r\n\t\t\t\tupdated.dialingMode = DIALING_MODES_MAP[value as string]?.[0] || \"\";\r\n\t\t\t}\r\n\t\t\treturn updated;\r\n\t\t});\r\n\t};\r\n\r\n\tconst mappedModes = DIALING_MODES_MAP[formData.campaignType] || [];\r\n\tconst availableModes = formData.dialingMode && !mappedModes.includes(formData.dialingMode)\r\n\t\t? [formData.dialingMode, ...mappedModes]\r\n\t\t: mappedModes;\r\n\r\n\treturn (\r\n\t\t<Box sx={{ p: 2.5 }}>\r\n\t\t\t<Typography sx={sectionTitleSx}>Basic Info</Typography>\r\n\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1.5fr 1fr\", lg: \"1.5fr 1fr 1fr\" }, gap: 2, mb: 2 }}>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>Campaign Name <span style={{ color: \"red\" }}>*</span></Typography>\r\n\t\t\t\t\t<TextField fullWidth size=\"small\" value={formData.name}\r\n\t\t\t\t\t\tonChange={(e) => handleChange(\"name\", e.target.value)} sx={inputSx} />\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>Campaign Type <span style={{ color: \"red\" }}>*</span></Typography>\r\n\t\t\t\t\t<FormControl fullWidth size=\"small\">\r\n\t\t\t\t\t\t<Select value={formData.campaignType}\r\n\t\t\t\t\t\t\tonChange={(e) => handleChange(\"campaignType\", e.target.value)}\r\n\t\t\t\t\t\t\tdisabled={isEditMode}>\r\n\t\t\t\t\t\t\t{CAMPAIGN_TYPES.map((t) => <MenuItem key={t} value={t}>{t}</MenuItem>)}\r\n\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t</FormControl>\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t\t<Box sx={{ mb: 2 }}>\r\n\t\t\t\t<Typography sx={labelSx}>Description</Typography>\r\n\t\t\t\t<TextField fullWidth size=\"small\" multiline rows={3} value={formData.description}\r\n\t\t\t\t\tonChange={(e) => handleChange(\"description\", e.target.value)} sx={inputSx} />\r\n\t\t\t</Box>\r\n\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\", lg: \"1fr 1fr 1fr\" }, gap: 2 }}>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>Dialing Mode <span style={{ color: \"red\" }}>*</span></Typography>\r\n\t\t\t\t\t<FormControl fullWidth size=\"small\">\r\n\t\t\t\t\t\t<Select value={formData.dialingMode}\r\n\t\t\t\t\t\t\tonChange={(e) => handleChange(\"dialingMode\", e.target.value)}>\r\n\t\t\t\t\t\t\t{availableModes.map((m) => <MenuItem key={m} value={m}>{m}</MenuItem>)}\r\n\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t</FormControl>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>Priority</Typography>\r\n\t\t\t\t\t<FormControl fullWidth size=\"small\">\r\n\t\t\t\t\t\t<Select value={formData.priority ?? 5}\r\n\t\t\t\t\t\t\tonChange={(e) => handleChange(\"priority\", Number(e.target.value))}>\r\n\t\t\t\t\t\t\t{LEAD_PRIORITY_OPTIONS.map((o) => <MenuItem key={o.label} value={o.value}>{o.label}</MenuItem>)}\r\n\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t</FormControl>\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\nfunction DialingConfigTab({ formData, setFormData }: TabFormProps) {\r\n\tconst handleChange = (field: keyof CampaignCreatePayload, value: any) =>\r\n\t\tsetFormData((prev) => ({ ...prev, [field]: value }));\r\n\r\n\treturn (\r\n\t\t<Box sx={{ p: 2.5 }}>\r\n\t\t\t<Typography sx={sectionTitleSx}>Dialing Configuration</Typography>\r\n\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\", lg: \"1fr 1fr 1fr\" }, gap: 2 }}>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>Max Concurrent Calls <span style={{ color: \"red\" }}>*</span></Typography>\r\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"number\" value={formData.maxConcurrentCalls}\r\n\t\t\t\t\t\tonChange={(e) => handleChange(\"maxConcurrentCalls\", parseInt(e.target.value) || 1)}\r\n\t\t\t\t\t\tslotProps={{ htmlInput: { min: 1 } }} sx={inputSx} />\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>Calls Per Agent</Typography>\r\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"number\" value={formData.callsPerAgent}\r\n\t\t\t\t\t\tonChange={(e) => handleChange(\"callsPerAgent\", parseFloat(e.target.value) || 1)}\r\n\t\t\t\t\t\tslotProps={{ htmlInput: { min: 0.1, step: 0.1 } }} sx={inputSx} />\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>Ring Timeout (sec)</Typography>\r\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"number\" value={formData.ringTimeoutSeconds}\r\n\t\t\t\t\t\tonChange={(e) => handleChange(\"ringTimeoutSeconds\", parseInt(e.target.value) || 30)}\r\n\t\t\t\t\t\tslotProps={{ htmlInput: { min: 5 } }} sx={inputSx} />\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>Answer Timeout (sec)</Typography>\r\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"number\" value={formData.answerTimeoutSeconds}\r\n\t\t\t\t\t\tonChange={(e) => handleChange(\"answerTimeoutSeconds\", parseInt(e.target.value) || 0)}\r\n\t\t\t\t\t\tslotProps={{ htmlInput: { min: 0 } }} sx={inputSx} />\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>Max Attempts <span style={{ color: \"red\" }}>*</span></Typography>\r\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"number\" value={formData.maxAttempts || \"\"}\r\n\t\t\t\t\t\tonChange={(e) => handleChange(\"maxAttempts\", parseInt(e.target.value) || 0)}\r\n\t\t\t\t\t\tslotProps={{ htmlInput: { min: 1 } }} sx={inputSx} />\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>Retry Interval (min)</Typography>\r\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"number\" value={formData.retryIntervalMinutes}\r\n\t\t\t\t\t\tonChange={(e) => handleChange(\"retryIntervalMinutes\", parseInt(e.target.value) || 5)}\r\n\t\t\t\t\t\tslotProps={{ htmlInput: { min: 1 } }} sx={inputSx} />\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>Agent Type</Typography>\r\n\t\t\t\t\t<FormControl fullWidth size=\"small\">\r\n\t\t\t\t\t\t<Select value={formData.agentType}\r\n\t\t\t\t\t\t\tonChange={(e) => handleChange(\"agentType\", e.target.value)}>\r\n\t\t\t\t\t\t\t{AGENT_TYPES.map((t) => <MenuItem key={t} value={t}>{t}</MenuItem>)}\r\n\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t</FormControl>\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\nfunction ScheduleTab({ formData, setFormData }: TabFormProps) {\r\n\tconst handleChange = (field: keyof CampaignCreatePayload, value: any) =>\r\n\t\tsetFormData((prev) => ({ ...prev, [field]: value }));\r\n\r\n\tconst toggleDay = (day: number) =>\r\n\t\tsetFormData((prev) => ({\r\n\t\t\t...prev,\r\n\t\t\tdaysOfWeek: prev.daysOfWeek.includes(day)\r\n\t\t\t\t? prev.daysOfWeek.filter((d) => d !== day)\r\n\t\t\t\t: [...prev.daysOfWeek, day].sort(),\r\n\t\t}));\r\n\r\n\treturn (\r\n\t\t<Box sx={{ p: 2.5 }}>\r\n\t\t\t<Typography sx={sectionTitleSx}>Operating Schedule</Typography>\r\n\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\", lg: \"1fr 1fr 1fr\" }, gap: 2, mb: 2 }}>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>Start Time <span style={{ color: \"red\" }}>*</span></Typography>\r\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"time\" value={formData.startTime}\r\n\t\t\t\t\t\tonChange={(e) => handleChange(\"startTime\", e.target.value)} sx={inputSx} />\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>End Time <span style={{ color: \"red\" }}>*</span></Typography>\r\n\t\t\t\t\t<TextField fullWidth size=\"small\" type=\"time\" value={formData.endTime}\r\n\t\t\t\t\t\tonChange={(e) => handleChange(\"endTime\", e.target.value)} sx={inputSx} />\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t\t<Box sx={{ mb: 2 }}>\r\n\t\t\t\t<Typography sx={labelSx}>Timezone</Typography>\r\n\t\t\t\t<FormControl fullWidth size=\"small\">\r\n\t\t\t\t\t<Select value={formData.timezone} onChange={(e) => handleChange(\"timezone\", e.target.value)}>\r\n\t\t\t\t\t\t{[\"Etc/UTC\",\"US/Eastern\",\"US/Central\",\"US/Mountain\",\"US/Pacific\",\r\n\t\t\t\t\t\t \"Europe/London\",\"Europe/Berlin\",\"Asia/Kolkata\",\"Asia/Tokyo\",\"Australia/Sydney\"\r\n\t\t\t\t\t\t].map((tz) => <MenuItem key={tz} value={tz}>{tz}</MenuItem>)}\r\n\t\t\t\t\t</Select>\r\n\t\t\t\t</FormControl>\r\n\t\t\t</Box>\r\n\t\t\t<Box>\r\n\t\t\t\t<Typography sx={labelSx}>Days of Week</Typography>\r\n\t\t\t\t<Box sx={{ display: \"flex\", gap: 1, flexWrap: \"wrap\", mt: 0.5 }}>\r\n\t\t\t\t\t{DAYS_OF_WEEK.map((day) => (\r\n\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\tkey={day.value}\r\n\t\t\t\t\t\t\tlabel={day.label}\r\n\t\t\t\t\t\t\tonClick={() => toggleDay(day.value)}\r\n\t\t\t\t\t\t\tvariant={formData.daysOfWeek.includes(day.value) ? \"filled\" : \"outlined\"}\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\tsx={daychipSx(formData.daysOfWeek.includes(day.value))}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Queue Linking Tab ───────────────────────────────────────────────────────\r\n\r\nfunction QueueLinkingTab({\r\n\tformData, setFormData, editingCampaign, parentQueueNameMap, onQueuesRefreshed,\r\n}: TabFormProps & {\r\n\teditingCampaign: Campaign | null;\r\n\tparentQueueNameMap: Record<number, string>;\r\n\tonQueuesRefreshed?: (queues: Queue[]) => void;\r\n}) {\r\n\tconst { showToast } = useToast();\r\n\tconst { fetchQueues, createQueue } = useQueues();\r\n\r\n\tconst queueLinks = formData.queueLinks || [];\r\n\tconst isEditMode = !!editingCampaign;\r\n\tconst campaignQueues = editingCampaign?.campaignQueues || [];\r\n\r\n\tconst [allQueues, setAllQueues] = useState<Queue[]>([]);\r\n\tconst [queueNames, setQueueNames] = useState<Record<number, string>>({});\r\n\tconst [selectedQueueIds, setSelectedQueueIds] = useState<number[]>([]);\r\n\tconst [createOpen, setCreateOpen] = useState(false);\r\n\tconst [newQueue, setNewQueue] = useState<CreateQueuePayload>({ name: \"\", description: \"\" });\r\n\tconst [creatingQueue, setCreatingQueue] = useState(false);\r\n\r\n\tconst loadQueues = useCallback(async () => {\r\n\t\tconst list = await fetchQueues();\r\n\t\tsetAllQueues(list);\r\n\t\tconst map: Record<number, string> = {};\r\n\t\tlist.forEach((q) => { map[q.id] = q.name; });\r\n\t\tsetQueueNames(map);\r\n\t\tonQueuesRefreshed?.(list);\r\n\t}, [fetchQueues, onQueuesRefreshed]);\r\n\r\n\tuseEffect(() => { loadQueues(); }, [loadQueues]);\r\n\r\n\tconst handleCreateQueue = async () => {\r\n\t\tif (!newQueue.name.trim()) {\r\n\t\t\tshowToast(\"Queue name is required\", \"warning\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetCreatingQueue(true);\r\n\t\ttry {\r\n\t\t\tawait createQueue(newQueue);\r\n\t\t\tshowToast(\"Queue created successfully\", \"success\");\r\n\t\t\tsetCreateOpen(false);\r\n\t\t\tsetNewQueue({ name: \"\", description: \"\" });\r\n\t\t\tloadQueues();\r\n\t\t} catch (err: any) {\r\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Failed to create queue\", \"error\");\r\n\t\t} finally {\r\n\t\t\tsetCreatingQueue(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst linkedIds = new Set(\r\n\t\tisEditMode ? campaignQueues.map((q) => q.queueId) : queueLinks.map((q) => q.queueId),\r\n\t);\r\n\tconst availableQueues = allQueues.filter((q) => !linkedIds.has(q.id));\r\n\r\n\tconst handleAddQueues = () => {\r\n\t\tif (selectedQueueIds.length === 0) return;\r\n\t\tconst newLinks: QueueLinkPayload[] = selectedQueueIds.map((qId) => ({\r\n\t\t\tqueueId: qId, priorityOverride: 5, minWaitBeforeCallback: 0,\r\n\t\t}));\r\n\t\tsetFormData((prev) => ({ ...prev, queueLinks: [...(prev.queueLinks || []), ...newLinks] }));\r\n\t\tshowToast(`${selectedQueueIds.length} queue(s) added`, \"success\");\r\n\t\tsetSelectedQueueIds([]);\r\n\t};\r\n\r\n\tconst handleRemoveQueue = (queueId: number) => {\r\n\t\tsetFormData((prev) => ({\r\n\t\t\t...prev,\r\n\t\t\tqueueLinks: (prev.queueLinks || []).filter((q) => q.queueId !== queueId),\r\n\t\t}));\r\n\t\tshowToast(\"Queue removed\", \"success\");\r\n\t};\r\n\r\n\tconst handleCellUpdate = (queueId: number, field: keyof QueueLinkPayload, value: string) => {\r\n\t\tconst numVal = parseInt(value) || 0;\r\n\t\tsetFormData((prev) => ({\r\n\t\t\t...prev,\r\n\t\t\tqueueLinks: (prev.queueLinks || []).map((q) =>\r\n\t\t\t\tq.queueId === queueId ? { ...q, [field]: numVal } : q,\r\n\t\t\t),\r\n\t\t}));\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Box sx={{ p: 2.5 }}>\r\n\t\t\t{/* Inline Create Queue dialog */}\r\n\t\t\t{createOpen && (\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tposition: \"fixed\", inset: 0, zIndex: 1600,\r\n\t\t\t\t\t\tbackgroundColor: \"rgba(0,0,0,0.45)\",\r\n\t\t\t\t\t\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tonClick={(e) => { if (e.target === e.currentTarget && !creatingQueue) setCreateOpen(false); }}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Paper elevation={6} sx={{ width: { xs: \"90vw\", sm: 420 }, borderRadius: \"16px\", overflow: \"hidden\", boxShadow: \"0 8px 32px rgba(26,95,108,0.18)\" }}>\r\n\t\t\t\t\t\t<Box sx={{ ...dialogHeaderSx, backgroundColor: \"#1A5F6C\", color: \"#fff\" }}>\r\n\t\t\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\">Create New Queue</Typography>\r\n\t\t\t\t\t\t\t<IconButton size=\"small\" onClick={() => !creatingQueue && setCreateOpen(false)} sx={{ color: \"#fff\" }}>✕</IconButton>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={{ p: 2.5, display: \"flex\", flexDirection: \"column\", gap: 1.5 }}>\r\n\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Queue Name <span style={{ color: \"red\" }}>*</span></Typography>\r\n\t\t\t\t\t\t\t\t<TextField fullWidth size=\"small\" value={newQueue.name}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => setNewQueue({ ...newQueue, name: e.target.value })} sx={inputSx} />\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Description</Typography>\r\n\t\t\t\t\t\t\t\t<TextField fullWidth size=\"small\" multiline rows={3} value={newQueue.description}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => setNewQueue({ ...newQueue, description: e.target.value })} sx={inputSx} />\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={dialogFooterSx}>\r\n\t\t\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={() => setCreateOpen(false)} disabled={creatingQueue}>Cancel</SDKButton>\r\n\t\t\t\t\t\t\t<SDKButton onClick={handleCreateQueue} disabled={creatingQueue}\r\n\t\t\t\t\t\t\t\tstartIcon={creatingQueue ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\r\n\t\t\t\t\t\t\t\tCreate\r\n\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Paper>\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\r\n\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 2 }}>\r\n\t\t\t\t<Typography sx={sectionTitleSx}>Linked Queues</Typography>\r\n\t\t\t\t<SDKButton startIcon={<AddIcon />} onClick={() => setCreateOpen(true)}>\r\n\t\t\t\t\tCreate New Queue\r\n\t\t\t\t</SDKButton>\r\n\t\t\t</Box>\r\n\r\n\t\t\t{/* Add Queue — multi-select */}\r\n\t\t\t<Box sx={{\r\n\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\talignItems: { xs: \"stretch\", sm: \"center\" },\r\n\t\t\t\tflexDirection: { xs: \"column\", sm: \"row\" },\r\n\t\t\t\tgap: 1.5, mb: 2,\r\n\t\t\t}}>\r\n\t\t\t\t<FormControl size=\"small\" sx={{ flex: 2 }}>\r\n\t\t\t\t\t<Select\r\n\t\t\t\t\t\tmultiple\r\n\t\t\t\t\t\tvalue={selectedQueueIds}\r\n\t\t\t\t\t\tonChange={(e) => setSelectedQueueIds(e.target.value as number[])}\r\n\t\t\t\t\t\tdisplayEmpty\r\n\t\t\t\t\t\trenderValue={(selected) =>\r\n\t\t\t\t\t\t\t(selected as number[]).length === 0\r\n\t\t\t\t\t\t\t\t? <Typography sx={{ color: \"#999\", fontSize: \"0.85rem\" }}>Select queues to link</Typography>\r\n\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", flexWrap: \"wrap\", gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t\t{(selected as number[]).map((id) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Chip key={id} size=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={queueNames[id] || parentQueueNameMap[id] || `Queue #${id}`}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ height: 22, fontSize: \"0.75rem\", fontWeight: 600, backgroundColor: \"#e0f2f1\", color: \"#00695c\" }} />\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tborderRadius: \"8px\", fontSize: \"0.85rem\",\r\n\t\t\t\t\t\t\t\"& .MuiSelect-select\": { display: \"flex\", flexWrap: \"wrap\", gap: 0.5, py: 0.75 },\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tMenuProps={{\r\n\t\t\t\t\t\t\tPaperProps: { sx: { maxHeight: 250, borderRadius: \"8px\", mt: 0.5, boxShadow: \"0 4px 20px rgba(0,0,0,0.12)\" } },\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{availableQueues.length === 0\r\n\t\t\t\t\t\t\t? <MenuItem value=\"\" disabled>No available queues</MenuItem>\r\n\t\t\t\t\t\t\t: availableQueues.map((q) => (\r\n\t\t\t\t\t\t\t\t<MenuItem key={q.id} value={q.id} sx={{ py: 0.75, px: 1.5, fontSize: \"0.85rem\" }}>\r\n\t\t\t\t\t\t\t\t\t<Checkbox size=\"small\" checked={selectedQueueIds.includes(q.id)}\r\n\t\t\t\t\t\t\t\t\t\tsx={{ p: 0.5, mr: 1, color: \"#1A5F6C\", \"&.Mui-checked\": { color: \"#1A5F6C\" } }} />\r\n\t\t\t\t\t\t\t\t\t{q.name} (ID: {q.id})\r\n\t\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t</Select>\r\n\t\t\t\t</FormControl>\r\n\t\t\t\t<SDKButton onClick={handleAddQueues} disabled={selectedQueueIds.length === 0} sx={{ whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\tAdd To List\r\n\t\t\t\t</SDKButton>\r\n\t\t\t</Box>\r\n\r\n\t\t\t{/* Linked queues table */}\r\n\t\t\t{queueLinks.length === 0 ? (\r\n\t\t\t\t<Paper variant=\"outlined\" sx={{ p: 3, textAlign: \"center\", borderRadius: 2, borderStyle: \"dashed\" }}>\r\n\t\t\t\t\t<Typography sx={{ color: \"#999\", fontSize: \"0.9rem\" }}>\r\n\t\t\t\t\t\tNo queues linked yet. Select queues above to add.\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t</Paper>\r\n\t\t\t) : (\r\n\t\t\t\t<TableContainer component={Paper} variant=\"outlined\" sx={{ borderRadius: 2, overflow: \"visible\" }}>\r\n\t\t\t\t\t<Table size=\"small\">\r\n\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t<TableRow sx={{ backgroundColor: \"#f1f1f1\" }}>\r\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Queue Name</TableCell>\r\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Priority Override</TableCell>\r\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Min Wait Before Callback</TableCell>\r\n\t\t\t\t\t\t\t\t<TableCell sx={{ ...(headCellSx as any), textAlign: \"right\" }}>Action</TableCell>\r\n\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t{queueLinks.map((q) => (\r\n\t\t\t\t\t\t\t\t<TableRow key={q.queueId} sx={tableRowSx}>\r\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t{queueNames[q.queueId] || parentQueueNameMap[q.queueId] || `Queue #${q.queueId}`}\r\n\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t<FormControl size=\"small\" sx={{ width: 120 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={q.priorityOverride ?? 5}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleCellUpdate(q.queueId, \"priorityOverride\", String(e.target.value))}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{LEAD_PRIORITY_OPTIONS.map((opt) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem key={opt.label} value={opt.value}>{opt.label}</MenuItem>\r\n\t\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t\t\t\t</FormControl>\r\n\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t<TextField size=\"small\" type=\"number\"\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={q.minWaitBeforeCallback}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleCellUpdate(q.queueId, \"minWaitBeforeCallback\", e.target.value)}\r\n\t\t\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\t\t\thtmlInput: { min: 0, style: { fontSize: \"0.85rem\", padding: \"4px 8px\" } },\r\n\t\t\t\t\t\t\t\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tendAdornment: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.75rem\", color: \"#666\" }}>s</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ width: 100, \"& .MuiOutlinedInput-root\": { borderRadius: \"4px\" } }} />\r\n\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...(bodyCellSx as any), textAlign: \"right\" }}>\r\n\t\t\t\t\t\t\t\t\t\t<SDKButton variant=\"danger\" size=\"small\" onClick={() => handleRemoveQueue(q.queueId)}>\r\n\t\t\t\t\t\t\t\t\t\t\tRemove\r\n\t\t\t\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t</Table>\r\n\t\t\t\t</TableContainer>\r\n\t\t\t)}\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Leads Tab (inside dialog) ───────────────────────────────────────────────\r\n\r\nfunction LeadsTabInDialog({\r\n\teditingCampaign,\r\n\tonLeadsChange,\r\n}: {\r\n\teditingCampaign: Campaign | null;\r\n\tonLeadsChange?: () => void;\r\n}) {\r\n\tconst { showToast } = useToast();\r\n\tconst { leads, fetchLeads, createLead, uploadLeadsExcel, downloadLeadTemplate } = useLeads();\r\n\tconst [adding, setAdding] = useState(false);\r\n\tconst [leadForm, setLeadForm] = useState<LeadCreatePayload>({ phoneNumber: \"\", callerName: \"\", priority: 5 });\r\n\tconst [search, setSearch] = useState(\"\");\r\n\tconst [uploadFile, setUploadFile] = useState<File | null>(null);\r\n\tconst [uploading, setUploading] = useState(false);\r\n\tconst uploadRef = useRef<HTMLInputElement>(null);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (editingCampaign) fetchLeads(editingCampaign.id, { skip: 0, limit: 100 });\r\n\t}, [editingCampaign, fetchLeads]);\r\n\r\n\tif (!editingCampaign) {\r\n\t\treturn (\r\n\t\t\t<Box sx={{ p: 4, textAlign: \"center\" }}>\r\n\t\t\t\t<Typography sx={{ color: \"#999\", fontSize: \"0.9rem\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\tSave the campaign first, then you can add leads.\r\n\t\t\t\t</Typography>\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\tconst handleAddLead = async () => {\r\n\t\tconst err = validatePhone(leadForm.phoneNumber);\r\n\t\tif (err) { showToast(err, \"warning\"); return; }\r\n\t\tsetAdding(true);\r\n\t\ttry {\r\n\t\t\tawait createLead(editingCampaign.id, { ...leadForm, priority: leadForm.priority ?? 5 });\r\n\t\t\tshowToast(\"Lead added successfully\", \"success\");\r\n\t\t\tsetLeadForm({ phoneNumber: \"\", callerName: \"\", priority: 5 });\r\n\t\t\tfetchLeads(editingCampaign.id, { skip: 0, limit: 100 });\r\n\t\t\tonLeadsChange?.();\r\n\t\t} catch (err: any) {\r\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Failed to add lead\", \"error\");\r\n\t\t} finally { setAdding(false); }\r\n\t};\r\n\r\n\tconst handleUpload = async () => {\r\n\t\tif (!uploadFile) return;\r\n\t\tsetUploading(true);\r\n\t\ttry {\r\n\t\t\tawait uploadLeadsExcel(editingCampaign.id, uploadFile);\r\n\t\t\tshowToast(\"Leads uploaded successfully\", \"success\");\r\n\t\t\tsetUploadFile(null);\r\n\t\t\tif (uploadRef.current) uploadRef.current.value = \"\";\r\n\t\t\tfetchLeads(editingCampaign.id, { skip: 0, limit: 100 });\r\n\t\t\tonLeadsChange?.();\r\n\t\t} catch (err: any) {\r\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Failed to upload leads\", \"error\");\r\n\t\t} finally { setUploading(false); }\r\n\t};\r\n\r\n\tconst handleDownload = async () => {\r\n\t\ttry { await downloadLeadTemplate(editingCampaign.id); }\r\n\t\tcatch (err: any) { showToast(err?.response?.data?.message || err?.message || \"Download failed\", \"error\"); }\r\n\t};\r\n\r\n\tconst filtered = leads.filter((l) =>\r\n\t\t!search || l.callerName?.toLowerCase().includes(search.toLowerCase()) || l.phoneNumber?.includes(search),\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Box sx={{ p: 2.5 }}>\r\n\t\t\t<Typography sx={sectionTitleSx}>Add Lead Manually</Typography>\r\n\t\t\t<Paper variant=\"outlined\" sx={{ p: 2, mb: 2.5, borderRadius: 2 }}>\r\n\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\", lg: \"1fr 1fr 1fr\" }, gap: 2, mb: 2 }}>\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<Typography sx={labelSx}>Phone Number <span style={{ color: \"red\" }}>*</span></Typography>\r\n\t\t\t\t\t\t<TextField fullWidth size=\"small\" placeholder=\"+1234567890\" value={leadForm.phoneNumber}\r\n\t\t\t\t\t\t\tonChange={(e) => setLeadForm((p) => ({ ...p, phoneNumber: e.target.value.replace(/[^0-9+\\-() ]/g, \"\") }))}\r\n\t\t\t\t\t\t\terror={!!leadForm.phoneNumber && !!validatePhone(leadForm.phoneNumber)}\r\n\t\t\t\t\t\t\thelperText={leadForm.phoneNumber ? validatePhone(leadForm.phoneNumber) || \"\" : \"\"}\r\n\t\t\t\t\t\t\tsx={inputSx} />\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<Typography sx={labelSx}>Caller Name</Typography>\r\n\t\t\t\t\t\t<TextField fullWidth size=\"small\" value={leadForm.callerName || \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => setLeadForm((p) => ({ ...p, callerName: e.target.value }))} sx={inputSx} />\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<Typography sx={labelSx}>Source</Typography>\r\n\t\t\t\t\t\t<TextField fullWidth size=\"small\" value={leadForm.source || \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => setLeadForm((p) => ({ ...p, source: e.target.value }))} sx={inputSx} />\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<Typography sx={labelSx}>Priority</Typography>\r\n\t\t\t\t\t\t<FormControl fullWidth size=\"small\">\r\n\t\t\t\t\t\t\t<Select value={leadForm.priority ?? 5}\r\n\t\t\t\t\t\t\t\tonChange={(e) => setLeadForm((p) => ({ ...p, priority: Number(e.target.value) }))}>\r\n\t\t\t\t\t\t\t\t{LEAD_PRIORITY_OPTIONS.map((opt) => <MenuItem key={opt.label} value={opt.value}>{opt.label}</MenuItem>)}\r\n\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t</FormControl>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box sx={{ gridColumn: \"1 / -1\" }}>\r\n\t\t\t\t\t\t<Typography sx={labelSx}>Notes</Typography>\r\n\t\t\t\t\t\t<TextField fullWidth size=\"small\" multiline minRows={2} maxRows={8}\r\n\t\t\t\t\t\t\tvalue={leadForm.notes || \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => setLeadForm((p) => ({ ...p, notes: e.target.value }))} sx={inputSx} />\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"flex-end\" }}>\r\n\t\t\t\t\t<SDKButton onClick={handleAddLead} disabled={adding}\r\n\t\t\t\t\t\tstartIcon={adding ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\r\n\t\t\t\t\t\tAdd Lead\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t</Box>\r\n\t\t\t</Paper>\r\n\r\n\t\t\t<Typography sx={sectionTitleSx}>Upload Leads from File</Typography>\r\n\t\t\t<Paper variant=\"outlined\" sx={{ p: 2, mb: 2.5, borderRadius: 2 }}>\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.5, flexWrap: \"wrap\" }}>\r\n\t\t\t\t\t<SDKButton variant=\"outlined\" startIcon={<UploadFileIcon />} onClick={() => uploadRef.current?.click()}>\r\n\t\t\t\t\t\tChoose File\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t<input ref={uploadRef} type=\"file\" accept=\".csv,.xlsx,.xls\" hidden\r\n\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\tconst f = e.target.files?.[0];\r\n\t\t\t\t\t\t\tif (!f) return;\r\n\t\t\t\t\t\t\tif (![\".csv\", \".xlsx\", \".xls\"].some((ext) => f.name.toLowerCase().endsWith(ext))) {\r\n\t\t\t\t\t\t\t\tshowToast(\"Please select a CSV or Excel file\", \"warning\"); return;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tsetUploadFile(f);\r\n\t\t\t\t\t\t}} />\r\n\t\t\t\t\t<Typography sx={{ fontSize: \"0.82rem\", color: \"#666\", flex: 1, fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t{uploadFile ? uploadFile.name : \"No file chosen\"}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t{uploadFile && (\r\n\t\t\t\t\t\t<SDKButton variant=\"cancel\" size=\"small\"\r\n\t\t\t\t\t\t\tonClick={() => { setUploadFile(null); if (uploadRef.current) uploadRef.current.value = \"\"; }}>\r\n\t\t\t\t\t\t\tClear\r\n\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<SDKButton variant=\"outlined\" startIcon={<DownloadIcon />} onClick={handleDownload}>\r\n\t\t\t\t\t\tSample Template\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"flex-end\", mt: 1.5 }}>\r\n\t\t\t\t\t<SDKButton onClick={handleUpload} disabled={uploading || !uploadFile}\r\n\t\t\t\t\t\tstartIcon={uploading ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\r\n\t\t\t\t\t\tUpload\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t</Box>\r\n\t\t\t</Paper>\r\n\r\n\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 1.5 }}>\r\n\t\t\t\t<Typography sx={sectionTitleSx}>Leads ({leads.length})</Typography>\r\n\t\t\t\t<OutlinedInput size=\"small\" value={search} onChange={(e) => setSearch(e.target.value)} placeholder=\"Search...\"\r\n\t\t\t\t\tsx={{ width: 200, fontSize: \"0.85rem\", height: 34, borderRadius: \"20px\" }}\r\n\t\t\t\t\tstartAdornment={<InputAdornment position=\"start\"><SearchIcon sx={{ fontSize: 16, color: \"#aaa\" }} /></InputAdornment>} />\r\n\t\t\t</Box>\r\n\t\t\t{filtered.length === 0 ? (\r\n\t\t\t\t<Paper variant=\"outlined\" sx={{ p: 3, textAlign: \"center\", borderRadius: 2, borderStyle: \"dashed\" }}>\r\n\t\t\t\t\t<Typography sx={{ color: \"#999\", fontSize: \"0.9rem\" }}>\r\n\t\t\t\t\t\t{leads.length === 0 ? \"No leads yet.\" : \"No leads match your search.\"}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t</Paper>\r\n\t\t\t) : (\r\n\t\t\t\t<TableContainer component={Paper} variant=\"outlined\" sx={{ borderRadius: 2, overflow: \"visible\" }}>\r\n\t\t\t\t\t<Table size=\"small\">\r\n\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t<TableRow sx={{ backgroundColor: \"#f1f1f1\" }}>\r\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Phone Number</TableCell>\r\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Status</TableCell>\r\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Source</TableCell>\r\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Attempts</TableCell>\r\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Last Outcome</TableCell>\r\n\t\t\t\t\t\t\t\t<TableCell sx={headCellSx}>Notes</TableCell>\r\n\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t{filtered.map((lead) => (\r\n\t\t\t\t\t\t\t\t<TableRow key={lead.id} sx={tableRowSx}>\r\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.phoneNumber}</TableCell>\r\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t<Chip label={lead.status || \"pending\"} size=\"small\" sx={leadStatusChipSx(lead.status)} />\r\n\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.source || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.attemptCount ?? 0}</TableCell>\r\n\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.lastOutcome || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...(bodyCellSx as any), maxWidth: 200, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t{lead.notes ? <Tooltip title={lead.notes} arrow placement=\"top\"><span>{lead.notes}</span></Tooltip> : \"\"}\r\n\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t</Table>\r\n\t\t\t\t</TableContainer>\r\n\t\t\t)}\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Campaign Create / Edit Dialog ───────────────────────────────────────────\r\n\r\ninterface CampaignDialogProps {\r\n\topen: boolean;\r\n\teditingCampaign: Campaign | null;\r\n\tformData: CampaignCreatePayload;\r\n\tsetFormData: React.Dispatch<React.SetStateAction<CampaignCreatePayload>>;\r\n\tsaving: boolean;\r\n\tonSave: () => void;\r\n\tonClose: () => void;\r\n\tparentQueueNameMap: Record<number, string>;\r\n\tonQueuesRefreshed?: (queues: Queue[]) => void;\r\n\tonLeadsChange?: () => void;\r\n}\r\n\r\nconst CampaignDialog = memo(function CampaignDialog({\r\n\topen, editingCampaign, formData, setFormData, saving, onSave, onClose,\r\n\tparentQueueNameMap, onQueuesRefreshed, onLeadsChange,\r\n}: CampaignDialogProps) {\r\n\tconst { showToast } = useToast();\r\n\tconst [tab, setTab] = useState(0);\r\n\tuseEffect(() => { if (open) setTab(0); }, [open]);\r\n\tif (!open) return null;\r\n\r\n\tconst TAB_LABELS = [\"Basic Info\", \"Dialing Configuration\", \"Schedule & Operating Hours\", \"Queue Linking\", \"Leads\"];\r\n\tconst lastSaveTab = 3; // Save shows from tab 0..3 inclusive; Leads (4) is read-only management\r\n\tconst leadsTabDisabled = !editingCampaign;\r\n\r\n\tconst validateTab = (t: number): boolean => {\r\n\t\tif (t === 0) {\r\n\t\t\tif (!formData.name.trim()) { showToast(\"Please fill Campaign Name\", \"warning\"); return false; }\r\n\t\t\tif (!formData.campaignType) { showToast(\"Please fill Campaign Type\", \"warning\"); return false; }\r\n\t\t\tif (!formData.dialingMode) { showToast(\"Please fill Dialing Mode\", \"warning\"); return false; }\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\tif (!formData.maxConcurrentCalls) { showToast(\"Please fill Max Concurrent Calls\", \"warning\"); return false; }\r\n\t\t\tif (!formData.maxAttempts) { showToast(\"Please fill Max Attempts\", \"warning\"); return false; }\r\n\t\t}\r\n\t\tif (t === 2) {\r\n\t\t\tif (!formData.startTime) { showToast(\"Please fill Start Time\", \"warning\"); return false; }\r\n\t\t\tif (!formData.endTime) { showToast(\"Please fill End Time\", \"warning\"); return false; }\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\tconst handleTabChange = (newTab: number) => {\r\n\t\tif (newTab === 4 && leadsTabDisabled) return;\r\n\t\tif (newTab > tab && !validateTab(tab)) return;\r\n\t\tsetTab(newTab);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<Box\r\n\t\t\tsx={{\r\n\t\t\t\tposition: \"fixed\", inset: 0, zIndex: 1300,\r\n\t\t\t\tbackgroundColor: \"rgba(0,0,0,0.45)\",\r\n\t\t\t\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\",\r\n\t\t\t}}\r\n\t\t\tonClick={(e) => { if (e.target === e.currentTarget) onClose(); }}\r\n\t\t>\r\n\t\t\t<Paper\r\n\t\t\t\televation={6}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\twidth: { xs: \"95vw\", sm: 720, md: 880 },\r\n\t\t\t\t\tmaxHeight: \"92vh\",\r\n\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\tborderRadius: \"16px\",\r\n\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\tboxShadow: \"0 8px 32px rgba(26,95,108,0.18)\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{/* Header */}\r\n\t\t\t\t<Box sx={{\r\n\t\t\t\t\t...dialogHeaderSx,\r\n\t\t\t\t\tbackgroundColor: \"#1A5F6C\",\r\n\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\"& .MuiIconButton-root\": { color: \"#fff\" },\r\n\t\t\t\t}}>\r\n\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\">\r\n\t\t\t\t\t\t{editingCampaign ? \"Edit Campaign\" : \"Create Campaign\"}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose} sx={{ color: \"#fff\" }}>✕</IconButton>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t{/* Tabs */}\r\n\t\t\t\t<Tabs\r\n\t\t\t\t\tvalue={tab}\r\n\t\t\t\t\tonChange={(_, v) => handleTabChange(v)}\r\n\t\t\t\t\tvariant=\"scrollable\"\r\n\t\t\t\t\tscrollButtons=\"auto\"\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tborderBottom: \"1px solid #eee\",\r\n\t\t\t\t\t\tminHeight: 44,\r\n\t\t\t\t\t\t\"& .MuiTab-root\": {\r\n\t\t\t\t\t\t\tfontSize: \"0.85rem\",\r\n\t\t\t\t\t\t\tminHeight: 44,\r\n\t\t\t\t\t\t\ttextTransform: \"none\",\r\n\t\t\t\t\t\t\tfontWeight: 600,\r\n\t\t\t\t\t\t\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"& .Mui-selected\": { color: \"#1A5F6C\" },\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tTabIndicatorProps={{ style: { height: 3, backgroundColor: \"#1A5F6C\", borderRadius: \"3px 3px 0 0\" } }}\r\n\t\t\t\t>\r\n\t\t\t\t\t{TAB_LABELS.map((label, i) => (\r\n\t\t\t\t\t\t<Tab key={label} label={label} value={i} disabled={i === 4 && leadsTabDisabled} />\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Tabs>\r\n\r\n\t\t\t\t{/* Tab content */}\r\n\t\t\t\t<Box sx={{ flex: 1, overflowY: \"auto\", minHeight: 380 }}>\r\n\t\t\t\t\t{tab === 0 && <BasicInfoTab formData={formData} setFormData={setFormData} isEditMode={!!editingCampaign} />}\r\n\t\t\t\t\t{tab === 1 && <DialingConfigTab formData={formData} setFormData={setFormData} />}\r\n\t\t\t\t\t{tab === 2 && <ScheduleTab formData={formData} setFormData={setFormData} />}\r\n\t\t\t\t\t{tab === 3 && (\r\n\t\t\t\t\t\t<QueueLinkingTab\r\n\t\t\t\t\t\t\tformData={formData}\r\n\t\t\t\t\t\t\tsetFormData={setFormData}\r\n\t\t\t\t\t\t\teditingCampaign={editingCampaign}\r\n\t\t\t\t\t\t\tparentQueueNameMap={parentQueueNameMap}\r\n\t\t\t\t\t\t\tonQueuesRefreshed={onQueuesRefreshed}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{tab === 4 && (\r\n\t\t\t\t\t\t<LeadsTabInDialog\r\n\t\t\t\t\t\t\teditingCampaign={editingCampaign}\r\n\t\t\t\t\t\t\tonLeadsChange={onLeadsChange}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t{/* Footer — wizard nav */}\r\n\t\t\t\t<Box sx={dialogFooterSx}>\r\n\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>Cancel</SDKButton>\r\n\t\t\t\t\t{tab > 0 && (\r\n\t\t\t\t\t\t<SDKButton variant=\"outlined\" onClick={() => setTab((t) => t - 1)}>Back</SDKButton>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{tab < lastSaveTab && (\r\n\t\t\t\t\t\t<SDKButton onClick={() => handleTabChange(tab + 1)}>Next</SDKButton>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{tab === lastSaveTab && (\r\n\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\teditingCampaign\r\n\t\t\t\t\t\t\t\t\t? SDK_PERMISSIONS.CAMPAIGNS_UPDATE\r\n\t\t\t\t\t\t\t\t\t: SDK_PERMISSIONS.CAMPAIGNS_CREATE,\r\n\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\r\n\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<SDKButton onClick={onSave} disabled={saving}\r\n\t\t\t\t\t\t\t\tstartIcon={saving ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\r\n\t\t\t\t\t\t\t\t{editingCampaign ? \"Update\" : \"Create\"}\r\n\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t</Paper>\r\n\t\t</Box>\r\n\t);\r\n});\r\n\r\n// ──── Add Lead Dialog ─────────────────────────────────────────────────────────\r\n\r\ninterface AddLeadDialogProps {\r\n\topen: boolean;\r\n\tdata: LeadCreatePayload;\r\n\tonChange: (data: LeadCreatePayload) => void;\r\n\tsaving: boolean;\r\n\tonSave: () => void;\r\n\tonClose: () => void;\r\n}\r\n\r\nconst AddLeadDialog = memo(function AddLeadDialog({\r\n\topen, data, onChange, saving, onSave, onClose,\r\n}: AddLeadDialogProps) {\r\n\tif (!open) return null;\r\n\tconst phoneError = data.phoneNumber ? validatePhone(data.phoneNumber) : null;\r\n\r\n\treturn (\r\n\t\t<Box\r\n\t\t\tsx={{\r\n\t\t\t\tposition: \"fixed\", inset: 0, zIndex: 1400,\r\n\t\t\t\tbackgroundColor: \"rgba(0,0,0,0.45)\",\r\n\t\t\t\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\",\r\n\t\t\t}}\r\n\t\t\tonClick={(e) => { if (e.target === e.currentTarget) onClose(); }}\r\n\t\t>\r\n\t\t\t<Paper elevation={6} sx={{ width: { xs: \"95vw\", sm: 560, lg: 720 }, borderRadius: \"16px\", overflow: \"hidden\", boxShadow: \"0 8px 32px rgba(26,95,108,0.18)\" }}>\r\n\t\t\t\t<Box sx={{ ...dialogHeaderSx, backgroundColor: \"#1A5F6C\", color: \"#fff\" }}>\r\n\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\">Add Lead</Typography>\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose} sx={{ color: \"#fff\" }}>✕</IconButton>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={{ p: 2.5 }}>\r\n\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\", lg: \"1fr 1fr 1fr\" }, gap: 2 }}>\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<Typography sx={labelSx}>Phone Number <span style={{ color: \"red\" }}>*</span></Typography>\r\n\t\t\t\t\t\t\t<TextField fullWidth size=\"small\" placeholder=\"+1234567890\"\r\n\t\t\t\t\t\t\t\tvalue={data.phoneNumber}\r\n\t\t\t\t\t\t\t\tonChange={(e) => onChange({ ...data, phoneNumber: e.target.value.replace(/[^0-9+\\-() ]/g, \"\") })}\r\n\t\t\t\t\t\t\t\terror={!!phoneError} helperText={phoneError || \"\"} sx={inputSx} />\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<Typography sx={labelSx}>Caller Name</Typography>\r\n\t\t\t\t\t\t\t<TextField fullWidth size=\"small\" value={data.callerName || \"\"}\r\n\t\t\t\t\t\t\t\tonChange={(e) => onChange({ ...data, callerName: e.target.value })} sx={inputSx} />\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<Typography sx={labelSx}>Source</Typography>\r\n\t\t\t\t\t\t\t<TextField fullWidth size=\"small\" value={data.source || \"\"}\r\n\t\t\t\t\t\t\t\tonChange={(e) => onChange({ ...data, source: e.target.value })} sx={inputSx} />\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<Typography sx={labelSx}>Priority</Typography>\r\n\t\t\t\t\t\t\t<FormControl fullWidth size=\"small\">\r\n\t\t\t\t\t\t\t\t<Select value={data.priority ?? 5}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => onChange({ ...data, priority: Number(e.target.value) })}>\r\n\t\t\t\t\t\t\t\t\t{LEAD_PRIORITY_OPTIONS.map((o) => <MenuItem key={o.label} value={o.value}>{o.label}</MenuItem>)}\r\n\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t</FormControl>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={{ gridColumn: \"1 / -1\" }}>\r\n\t\t\t\t\t\t\t<Typography sx={labelSx}>Notes</Typography>\r\n\t\t\t\t\t\t\t<TextField fullWidth size=\"small\" multiline minRows={2} maxRows={8}\r\n\t\t\t\t\t\t\t\tvalue={data.notes || \"\"}\r\n\t\t\t\t\t\t\t\tonChange={(e) => onChange({ ...data, notes: e.target.value })} sx={inputSx} />\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={dialogFooterSx}>\r\n\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>Cancel</SDKButton>\r\n\t\t\t\t\t<SDKButton onClick={onSave} disabled={saving}\r\n\t\t\t\t\t\tstartIcon={saving ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\r\n\t\t\t\t\t\tAdd Lead\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t</Box>\r\n\t\t\t</Paper>\r\n\t\t</Box>\r\n\t);\r\n});\r\n\r\n// ──── Confirm Dialog ──────────────────────────────────────────────────────────\r\n\r\nfunction ConfirmDialog({\r\n\topen, title, message, loading, onConfirm, onClose,\r\n}: { open: boolean; title: string; message: string; loading?: boolean; onConfirm: () => void; onClose: () => void; }) {\r\n\tif (!open) return null;\r\n\treturn (\r\n\t\t<Box\r\n\t\t\tsx={{ position: \"fixed\", inset: 0, zIndex: 1500, backgroundColor: \"rgba(0,0,0,0.45)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\r\n\t\t\tonClick={(e) => { if (e.target === e.currentTarget) onClose(); }}\r\n\t\t>\r\n\t\t\t<Paper elevation={6} sx={{ width: { xs: \"90vw\", sm: 400 }, borderRadius: \"16px\", overflow: \"hidden\", boxShadow: \"0 8px 32px rgba(0,0,0,0.18)\" }}>\r\n\t\t\t\t<Box sx={{ ...dialogHeaderSx, borderBottom: \"none\", pb: 0 }}>\r\n\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\">{title}</Typography>\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose}>✕</IconButton>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={{ px: 2.5, py: 1.5 }}>\r\n\t\t\t\t\t<Typography fontSize=\"0.85rem\" color=\"#555\" fontFamily=\"poppins, Arial, sans-serif\">{message}</Typography>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={dialogFooterSx}>\r\n\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>Cancel</SDKButton>\r\n\t\t\t\t\t<SDKButton variant=\"danger\" onClick={onConfirm} disabled={loading}\r\n\t\t\t\t\t\tstartIcon={loading ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\r\n\t\t\t\t\t\tConfirm\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t</Box>\r\n\t\t\t</Paper>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Import Leads Dialog ─────────────────────────────────────────────────────\r\n\r\nfunction ImportLeadsDialog({\r\n\topen, file, onFileChange, uploading, onUpload, onDownloadTemplate, onClose,\r\n}: {\r\n\topen: boolean;\r\n\tfile: File | null;\r\n\tonFileChange: (f: File | null) => void;\r\n\tuploading: boolean;\r\n\tonUpload: () => void;\r\n\tonDownloadTemplate: () => void;\r\n\tonClose: () => void;\r\n}) {\r\n\tconst fileRef = useRef<HTMLInputElement>(null);\r\n\tif (!open) return null;\r\n\r\n\treturn (\r\n\t\t<Box\r\n\t\t\tsx={{ position: \"fixed\", inset: 0, zIndex: 1400, backgroundColor: \"rgba(0,0,0,0.45)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\r\n\t\t\tonClick={(e) => { if (e.target === e.currentTarget) onClose(); }}\r\n\t\t>\r\n\t\t\t<Paper elevation={6} sx={{ width: { xs: \"90vw\", sm: 460 }, borderRadius: \"16px\", overflow: \"hidden\", boxShadow: \"0 8px 32px rgba(26,95,108,0.18)\" }}>\r\n\t\t\t\t<Box sx={{ ...dialogHeaderSx, backgroundColor: \"#1A5F6C\", color: \"#fff\" }}>\r\n\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\">Import Leads</Typography>\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose} sx={{ color: \"#fff\" }}>✕</IconButton>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={{ p: 2.5 }}>\r\n\t\t\t\t\t<Typography fontSize=\"0.82rem\" color=\"#555\" fontFamily=\"poppins, Arial, sans-serif\" mb={2}>\r\n\t\t\t\t\t\tUpload a CSV or Excel file. Use the template for the correct format.\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.5, flexWrap: \"wrap\", mb: 1.5 }}>\r\n\t\t\t\t\t\t<SDKButton variant=\"outlined\" startIcon={<UploadFileIcon />}\r\n\t\t\t\t\t\t\tonClick={() => fileRef.current?.click()}>\r\n\t\t\t\t\t\t\tChoose File\r\n\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t<input ref={fileRef} type=\"file\" accept=\".csv,.xlsx,.xls\" hidden\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tconst f = e.target.files?.[0];\r\n\t\t\t\t\t\t\t\tif (!f) return;\r\n\t\t\t\t\t\t\t\tif ([\".csv\",\".xlsx\",\".xls\"].some((ext) => f.name.toLowerCase().endsWith(ext))) onFileChange(f);\r\n\t\t\t\t\t\t\t}} />\r\n\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.82rem\", color: \"#666\", flex: 1, fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t{file ? file.name : \"No file chosen\"}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t{file && (\r\n\t\t\t\t\t\t\t<SDKButton variant=\"cancel\" size=\"small\"\r\n\t\t\t\t\t\t\t\tonClick={() => { onFileChange(null); if (fileRef.current) fileRef.current.value = \"\"; }}>\r\n\t\t\t\t\t\t\t\tClear\r\n\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<SDKButton variant=\"outlined\" startIcon={<DownloadIcon />} onClick={onDownloadTemplate}>\r\n\t\t\t\t\t\tDownload Template\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={dialogFooterSx}>\r\n\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>Cancel</SDKButton>\r\n\t\t\t\t\t<SDKButton onClick={onUpload} disabled={uploading || !file}\r\n\t\t\t\t\t\tstartIcon={uploading ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\r\n\t\t\t\t\t\tUpload\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t</Box>\r\n\t\t\t</Paper>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Main content ────────────────────────────────────────────────────────────\r\n\r\nconst CampaignsContent = memo(function CampaignsContent() {\r\n\tconst theme = useTheme();\r\n\tconst { showToast } = useToast();\r\n\tconst { hasPermission } = useSDKPermissions();\r\n\tconst callerData = useGetCallerData();\r\n\tconst isAgentIdle = callerData.status === \"IDLE\";\r\n\tconst hasOutboundPermission = hasPermission(SDK_PERMISSIONS.CALL_OUTBOUND);\r\n\r\n\tconst {\r\n\t\tcampaigns, loading,\r\n\t\tfetchCampaigns, getCampaignById,\r\n\t\tcreateCampaign, updateCampaign,\r\n\t\tactivateCampaign, pauseCampaign, archiveCampaign,\r\n\t} = useCampaigns();\r\n\r\n\tconst {\r\n\t\tleads, leadTotal, leadsMeta, loading: leadsLoading,\r\n\t\tfetchLeads, createLead, deleteLead, dialPreview,\r\n\t\tuploadLeadsExcel, downloadLeadTemplate, exportLeads,\r\n\t} = useLeads();\r\n\r\n\tconst { fetchQueues } = useQueues();\r\n\r\n\t// Queue name lookup for the leads table\r\n\tconst [queueNameMap, setQueueNameMap] = useState<Record<number, string>>({});\r\n\r\n\tuseEffect(() => {\r\n\t\tfetchQueues().then((qs) => {\r\n\t\t\tconst map: Record<number, string> = {};\r\n\t\t\tqs.forEach((q) => { map[q.id] = q.name; });\r\n\t\t\tsetQueueNameMap(map);\r\n\t\t}).catch(() => { /* ignore */ });\r\n\t}, [fetchQueues]);\r\n\r\n\tconst handleQueuesRefreshed = useCallback((qs: Queue[]) => {\r\n\t\tconst map: Record<number, string> = {};\r\n\t\tqs.forEach((q) => { map[q.id] = q.name; });\r\n\t\tsetQueueNameMap(map);\r\n\t}, []);\r\n\r\n\t// Selection & filter\r\n\tconst [selectedId, setSelectedId] = useState<number | null>(null);\r\n\tconst [showArchived, setShowArchived] = useState(false);\r\n\tconst [campaignListCollapsed, setCampaignListCollapsed] = useState(false);\r\n\r\n\t// Campaign dialog\r\n\tconst [dialogOpen, setDialogOpen] = useState(false);\r\n\tconst [editingCampaign, setEditingCampaign] = useState<Campaign | null>(null);\r\n\tconst [formData, setFormData] = useState<CampaignCreatePayload>(defaultFormData);\r\n\tconst [saving, setSaving] = useState(false);\r\n\r\n\t// Archive confirm\r\n\tconst [archiveOpen, setArchiveOpen] = useState(false);\r\n\tconst [archiveTarget, setArchiveTarget] = useState<Campaign | null>(null);\r\n\tconst [archiving, setArchiving] = useState(false);\r\n\r\n\t// Leads\r\n\tconst [leadPage, setLeadPage] = useState(0);\r\n\tconst [leadRowsPerPage, setLeadRowsPerPage] = useState(10);\r\n\tconst [leadSearch, setLeadSearch] = useState(\"\");\r\n\tconst [debouncedSearch, setDebouncedSearch] = useState(\"\");\r\n\tconst [leadStatusFilter, setLeadStatusFilter] = useState(\"All states\");\r\n\tconst debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n\t// Add lead dialog\r\n\tconst [addLeadOpen, setAddLeadOpen] = useState(false);\r\n\tconst [addLeadData, setAddLeadData] = useState<LeadCreatePayload>({ phoneNumber: \"\", callerName: \"\", priority: 5 });\r\n\tconst [addLeadSaving, setAddLeadSaving] = useState(false);\r\n\r\n\t// Import dialog\r\n\tconst [importOpen, setImportOpen] = useState(false);\r\n\tconst [importFile, setImportFile] = useState<File | null>(null);\r\n\tconst [importing, setImporting] = useState(false);\r\n\r\n\t// Delete lead confirm\r\n\tconst [deleteLeadOpen, setDeleteLeadOpen] = useState(false);\r\n\tconst [deleteLeadTarget, setDeleteLeadTarget] = useState<Lead | null>(null);\r\n\tconst [deletingLead, setDeletingLead] = useState(false);\r\n\r\n\t// Dial loading\r\n\tconst [dialLoading, setDialLoading] = useState<number | null>(null);\r\n\r\n\tconst selected = campaigns.find((c) => c.id === selectedId) ?? null;\r\n\tconst visibleCampaigns = campaigns.filter((c) =>\r\n\t\tshowArchived ? true : c.status?.toLowerCase() !== \"archived\"\r\n\t);\r\n\r\n\tuseEffect(() => { fetchCampaigns(); }, [fetchCampaigns]);\r\n\r\n\tuseEffect(() => {\r\n\t\tdebounceRef.current = setTimeout(() => setDebouncedSearch(leadSearch.trim()), 400);\r\n\t\treturn () => { if (debounceRef.current) clearTimeout(debounceRef.current); };\r\n\t}, [leadSearch]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!selectedId) return;\r\n\t\tsetLeadPage(0);\r\n\t\tfetchLeads(selectedId, {\r\n\t\t\tskip: 0, limit: leadRowsPerPage,\r\n\t\t\tstatus: leadStatusFilter !== \"All states\" ? leadStatusFilter : undefined,\r\n\t\t\tphone_number: debouncedSearch || undefined,\r\n\t\t});\r\n\t}, [selectedId, leadRowsPerPage, leadStatusFilter, debouncedSearch, fetchLeads]);\r\n\r\n\tconst refetchLeads = useCallback((page = leadPage) => {\r\n\t\tif (!selectedId) return;\r\n\t\tfetchLeads(selectedId, {\r\n\t\t\tskip: page * leadRowsPerPage, limit: leadRowsPerPage,\r\n\t\t\tstatus: leadStatusFilter !== \"All states\" ? leadStatusFilter : undefined,\r\n\t\t\tphone_number: debouncedSearch || undefined,\r\n\t\t});\r\n\t}, [selectedId, leadPage, leadRowsPerPage, leadStatusFilter, debouncedSearch, fetchLeads]);\r\n\r\n\t// ── Campaign CRUD ──\r\n\r\n\tconst handleOpenCreate = () => {\r\n\t\tsetEditingCampaign(null);\r\n\t\tsetFormData(defaultFormData);\r\n\t\tsetDialogOpen(true);\r\n\t};\r\n\r\n\tconst handleOpenEdit = async (c: Campaign) => {\r\n\t\tsetEditingCampaign(c);\r\n\t\tsetFormData(campaignToFormData(c));\r\n\t\tsetDialogOpen(true);\r\n\t\ttry {\r\n\t\t\tconst fresh = await getCampaignById(c.id);\r\n\t\t\tsetEditingCampaign(fresh);\r\n\t\t\tsetFormData(campaignToFormData(fresh));\r\n\t\t} catch { /* keep existing */ }\r\n\t};\r\n\r\n\tconst handleSave = async () => {\r\n\t\tif (!formData.name.trim()) { showToast(\"Campaign name is required\", \"warning\"); return; }\r\n\t\tsetSaving(true);\r\n\t\tconst startTime = formData.startTime?.length === 5 ? `${formData.startTime}:00` : formData.startTime;\r\n\t\tconst endTime = formData.endTime?.length === 5 ? `${formData.endTime}:00` : formData.endTime;\r\n\t\ttry {\r\n\t\t\tif (editingCampaign) {\r\n\t\t\t\tawait updateCampaign(editingCampaign.id, { ...formData, startTime, endTime });\r\n\t\t\t\tshowToast(\"Campaign updated\", \"success\");\r\n\t\t\t} else {\r\n\t\t\t\tconst payload: Record<string, any> = { ...formData, startTime, endTime };\r\n\t\t\t\tif (!payload.scheduledStart) delete payload.scheduledStart;\r\n\t\t\t\tif (!payload.scheduledEnd) delete payload.scheduledEnd;\r\n\t\t\t\tif (!payload.callerId) delete payload.callerId;\r\n\t\t\t\tif (!payload.answerTimeoutSeconds) delete payload.answerTimeoutSeconds;\r\n\t\t\t\tif (payload.aiBotId == null) delete payload.aiBotId;\r\n\t\t\t\tif (!payload.queueLinks?.length) delete payload.queueLinks;\r\n\t\t\t\tif (payload.settings && !Object.keys(payload.settings).length) delete payload.settings;\r\n\t\t\t\tconst created = await createCampaign(payload as CampaignCreatePayload);\r\n\t\t\t\tshowToast(\"Campaign created\", \"success\");\r\n\t\t\t\tsetSelectedId(created.id);\r\n\t\t\t}\r\n\t\t\tsetDialogOpen(false);\r\n\t\t\tfetchCampaigns();\r\n\t\t} catch (err: any) {\r\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Failed to save campaign\", \"error\");\r\n\t\t} finally { setSaving(false); }\r\n\t};\r\n\r\n\tconst handleStart = async (c: Campaign) => {\r\n\t\ttry { await activateCampaign(c.id); showToast(\"Campaign started\", \"success\"); fetchCampaigns(); }\r\n\t\tcatch (err: any) { showToast(err?.response?.data?.message || err?.message || \"Failed to start\", \"error\"); }\r\n\t};\r\n\r\n\tconst handlePause = async (c: Campaign) => {\r\n\t\ttry { await pauseCampaign(c.id); showToast(\"Campaign paused\", \"success\"); fetchCampaigns(); }\r\n\t\tcatch (err: any) { showToast(err?.response?.data?.message || err?.message || \"Failed to pause\", \"error\"); }\r\n\t};\r\n\r\n\tconst confirmArchive = async () => {\r\n\t\tif (!archiveTarget) return;\r\n\t\tsetArchiving(true);\r\n\t\ttry {\r\n\t\t\tawait archiveCampaign(archiveTarget.id);\r\n\t\t\tshowToast(\"Campaign archived\", \"success\");\r\n\t\t\tsetArchiveOpen(false); setArchiveTarget(null); fetchCampaigns();\r\n\t\t} catch (err: any) {\r\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Failed to archive\", \"error\");\r\n\t\t} finally { setArchiving(false); }\r\n\t};\r\n\r\n\t// ── Leads ──\r\n\r\n\tconst handleAddLead = async () => {\r\n\t\tif (!selectedId) return;\r\n\t\tconst err = validatePhone(addLeadData.phoneNumber);\r\n\t\tif (err) { showToast(err, \"warning\"); return; }\r\n\t\tsetAddLeadSaving(true);\r\n\t\ttry {\r\n\t\t\tawait createLead(selectedId, addLeadData);\r\n\t\t\tshowToast(\"Lead added\", \"success\");\r\n\t\t\tsetAddLeadOpen(false);\r\n\t\t\tsetAddLeadData({ phoneNumber: \"\", callerName: \"\", priority: 5 });\r\n\t\t\trefetchLeads(0); setLeadPage(0);\r\n\t\t} catch (err: any) {\r\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Failed to add lead\", \"error\");\r\n\t\t} finally { setAddLeadSaving(false); }\r\n\t};\r\n\r\n\tconst handleImport = async () => {\r\n\t\tif (!selectedId || !importFile) return;\r\n\t\tsetImporting(true);\r\n\t\ttry {\r\n\t\t\tconst result = await uploadLeadsExcel(selectedId, importFile);\r\n\t\t\tshowToast(result?.message || \"Leads uploaded\", \"success\");\r\n\t\t\tsetImportFile(null); setImportOpen(false);\r\n\t\t\trefetchLeads(0); setLeadPage(0);\r\n\t\t} catch (err: any) {\r\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Upload failed\", \"error\");\r\n\t\t} finally { setImporting(false); }\r\n\t};\r\n\r\n\tconst handleExport = async () => {\r\n\t\tif (!selectedId) return;\r\n\t\ttry { await exportLeads(selectedId); showToast(\"Leads exported\", \"success\"); }\r\n\t\tcatch (err: any) { showToast(err?.response?.data?.message || err?.message || \"Export failed\", \"error\"); }\r\n\t};\r\n\r\n\tconst handleDownloadTemplate = async () => {\r\n\t\tif (!selectedId) return;\r\n\t\ttry { await downloadLeadTemplate(selectedId); }\r\n\t\tcatch (err: any) { showToast(err?.response?.data?.message || err?.message || \"Download failed\", \"error\"); }\r\n\t};\r\n\r\n\tconst handleDialPreview = async (leadId: number) => {\r\n\t\tif (!selectedId) return;\r\n\t\tsetDialLoading(leadId);\r\n\t\ttry {\r\n\t\t\tconst res = await dialPreview(selectedId, leadId);\r\n\t\t\tshowToast(res?.message || \"Preview dial initiated\", \"success\");\r\n\t\t} catch (err: any) {\r\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Dial failed\", \"error\");\r\n\t\t} finally { setDialLoading(null); }\r\n\t};\r\n\r\n\tconst confirmDeleteLead = async () => {\r\n\t\tif (!selectedId || !deleteLeadTarget) return;\r\n\t\tsetDeletingLead(true);\r\n\t\ttry {\r\n\t\t\tawait deleteLead(selectedId, deleteLeadTarget.id);\r\n\t\t\tshowToast(\"Lead deleted\", \"success\");\r\n\t\t\tsetDeleteLeadOpen(false); setDeleteLeadTarget(null);\r\n\t\t\trefetchLeads(leadPage);\r\n\t\t} catch (err: any) {\r\n\t\t\tshowToast(err?.response?.data?.message || err?.message || \"Delete failed\", \"error\");\r\n\t\t} finally { setDeletingLead(false); }\r\n\t};\r\n\r\n\tconst sc = selected;\r\n\tconst scActive = sc?.status?.toLowerCase() === \"active\";\r\n\tconst scDraft = sc?.status?.toLowerCase() === \"draft\";\r\n\tconst scPaused = sc?.status?.toLowerCase() === \"paused\";\r\n\tconst scArchived = sc?.status?.toLowerCase() === \"archived\";\r\n\r\n\t// ── Render ──\r\n\r\n\treturn (\r\n\t\t<Box sx={{ fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\r\n\t\t\t{/* PAGE HEADER */}\r\n\t\t\t<SDKPageHeader\r\n\t\t\t\ttitle=\"Call Scheduling\"\r\n\t\t\t\tactions={\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t<SDKButton startIcon={<RefreshIcon />}\r\n\t\t\t\t\t\t\tonClick={() => { fetchCampaigns(); if (selectedId) refetchLeads(); }}>\r\n\t\t\t\t\t\t\tRefresh\r\n\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_CREATE,\r\n\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\r\n\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<SDKButton startIcon={<AddIcon />} onClick={handleOpenCreate}>\r\n\t\t\t\t\t\t\t\tNew Campaign\r\n\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\r\n\t\t\t{/* TWO-COLUMN LAYOUT */}\r\n\t\t\t<Box sx={{ display: \"flex\", flexDirection: { xs: \"column\", md: \"row\" }, gap: 1.5, p: 1.5 }}>\r\n\r\n\t\t\t\t{/* LEFT — Campaign list */}\r\n\t\t\t\t<Paper\r\n\t\t\t\t\televation={0}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\twidth: campaignListCollapsed\r\n\t\t\t\t\t\t\t? { xs: \"100%\", md: 48 }\r\n\t\t\t\t\t\t\t: { xs: \"100%\", md: 280, lg: 320 },\r\n\t\t\t\t\t\tminWidth: campaignListCollapsed\r\n\t\t\t\t\t\t\t? { xs: \"auto\", md: 48 }\r\n\t\t\t\t\t\t\t: { xs: \"auto\", md: 240 },\r\n\t\t\t\t\t\tflexShrink: 0,\r\n\t\t\t\t\t\tborderRadius: \"16px\",\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\tmaxHeight: { xs: campaignListCollapsed ? \"auto\" : 260, md: \"calc(100vh - 160px)\" },\r\n\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\tborder: \"1px solid #e0e0e0\",\r\n\t\t\t\t\t\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\r\n\t\t\t\t\t\ttransition: \"width 0.2s ease, min-width 0.2s ease\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{campaignListCollapsed ? (\r\n\t\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tflexDirection: { xs: \"row\", md: \"column\" },\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tgap: 0.75,\r\n\t\t\t\t\t\t\tp: 0.75,\r\n\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\toverflowY: { xs: \"visible\", md: \"auto\" },\r\n\t\t\t\t\t\t\toverflowX: { xs: \"auto\", md: \"visible\" },\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t<Tooltip title=\"Expand campaigns\" arrow placement=\"right\">\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tonClick={() => setCampaignListCollapsed(false)}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tcolor: \"#1A5F6C\",\r\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#f0f7f8\",\r\n\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\r\n\t\t\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: \"#e0eff1\" },\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<ChevronRightIcon fontSize=\"small\" />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t{visibleCampaigns.map((c, idx) => {\r\n\t\t\t\t\t\t\t\tconst isSel = c.id === selectedId;\r\n\t\t\t\t\t\t\t\tconst status = (c.status || \"draft\").toLowerCase();\r\n\t\t\t\t\t\t\t\tconst statusColor = STATUS_COLORS[status] ?? \"#9e9e9e\";\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\t\t\t\tkey={c.id}\r\n\t\t\t\t\t\t\t\t\t\tarrow\r\n\t\t\t\t\t\t\t\t\t\tplacement=\"right\"\r\n\t\t\t\t\t\t\t\t\t\ttitle={`${c.name} • ${c.status || \"draft\"}`}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => setSelectedId(c.id)}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: 32,\r\n\t\t\t\t\t\t\t\t\t\t\t\theight: 32,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"8px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: isSel ? \"#fff\" : \"#fafafa\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#333\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.8rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderLeft: `3px solid ${statusColor}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: isSel\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `-3px 0 8px ${statusColor}66`\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `-2px 0 4px ${statusColor}33`,\r\n\t\t\t\t\t\t\t\t\t\t\t\ttransition: \"box-shadow 0.15s ease\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `-3px 0 8px ${statusColor}80`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{idx + 1}\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\r\n\t\t\t\t\t\tpx: 2, py: 1.25, borderBottom: \"1px solid #eee\", backgroundColor: \"#fafafa\", gap: 1,\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, minWidth: 0 }}>\r\n\t\t\t\t\t\t\t<Tooltip title=\"Minimize\" arrow>\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tonClick={() => setCampaignListCollapsed(true)}\r\n\t\t\t\t\t\t\t\t\tsx={{ p: 0.5, color: \"#666\" }}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<ChevronLeftIcon fontSize=\"small\" />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t<Typography sx={{ fontWeight: 700, fontSize: \"0.95rem\", color: \"#333\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\tCampaigns\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<FormControlLabel\r\n\t\t\t\t\t\t\tcontrol={\r\n\t\t\t\t\t\t\t\t<Checkbox size=\"small\" checked={showArchived}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => setShowArchived(e.target.checked)} sx={{ p: 0.5 }} />\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tlabel={<Typography sx={{ fontSize: \"0.78rem\", color: \"#666\" }}>Show archived</Typography>}\r\n\t\t\t\t\t\t\tsx={{ mr: 0 }}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box sx={{ flex: 1, overflow: \"auto\", p: 1 }}>\r\n\t\t\t\t\t\t{loading ? (\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"center\", py: 4 }}>\r\n\t\t\t\t\t\t\t\t<CircularProgress size={24} sx={{ color: \"#1A5F6C\" }} />\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t) : visibleCampaigns.length === 0 ? (\r\n\t\t\t\t\t\t\t<Typography sx={{ textAlign: \"center\", py: 3, color: \"#999\", fontSize: \"0.85rem\" }}>\r\n\t\t\t\t\t\t\t\tNo campaigns\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\tvisibleCampaigns.map((c) => {\r\n\t\t\t\t\t\t\t\tconst isSel = c.id === selectedId;\r\n\t\t\t\t\t\t\t\tconst wStr = `${c.startTime?.slice(0, 5) || \"09:00\"}–${c.endTime?.slice(0, 5) || \"17:00\"}`;\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<Paper\r\n\t\t\t\t\t\t\t\t\t\tkey={c.id}\r\n\t\t\t\t\t\t\t\t\t\televation={0}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => setSelectedId(c.id)}\r\n\t\t\t\t\t\t\t\t\t\tsx={isSel ? campaignCardSelectedSx : {\r\n\t\t\t\t\t\t\t\t\t\t\t...campaignCardBaseSx,\r\n\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { borderColor: \"#1A5F6C\", backgroundColor: \"#f5fafb\", boxShadow: \"0 2px 6px rgba(26,95,108,0.1)\" },\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", mb: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontWeight: 600, fontSize: \"0.88rem\", color: \"#1a1a1a\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{c.name}\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t<Chip label={c.status || \"draft\"} size=\"small\" sx={statusChipSx(c.status)} />\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.73rem\", color: \"#999\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{c.dialingMode} · TZ: {c.timezone || \"Etc/UTC\"} · {wStr}\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t</Paper>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Paper>\r\n\r\n\t\t\t\t{/* RIGHT — Detail + Leads */}\r\n\t\t\t\t<Box sx={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 1.5, minWidth: 0, overflow: \"hidden\" }}>\r\n\t\t\t\t\t{!sc ? (\r\n\t\t\t\t\t\t<Paper\r\n\t\t\t\t\t\t\televation={0}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tborderRadius: \"16px\",\r\n\t\t\t\t\t\t\t\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\",\r\n\t\t\t\t\t\t\t\tminHeight: 200, border: \"2px dashed #d0d0d0\", backgroundColor: \"#fafafa\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box sx={{ textAlign: \"center\" }}>\r\n\t\t\t\t\t\t\t\t<SettingsIcon sx={{ fontSize: 40, color: \"#ccc\", mb: 1 }} />\r\n\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.95rem\", color: \"#999\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\tSelect a campaign to view details\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Paper>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t{/* Campaign detail card */}\r\n\t\t\t\t\t\t\t<Paper\r\n\t\t\t\t\t\t\t\televation={0}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tborderRadius: \"16px\",\r\n\t\t\t\t\t\t\t\t\tp: { xs: 1.5, sm: 2.5 },\r\n\t\t\t\t\t\t\t\t\tborder: \"1px solid #e0e0e0\",\r\n\t\t\t\t\t\t\t\t\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{/* Title + Action buttons */}\r\n\t\t\t\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\", alignItems: { xs: \"flex-start\", sm: \"center\" },\r\n\t\t\t\t\t\t\t\t\tjustifyContent: \"space-between\", flexWrap: \"wrap\", gap: 1, mb: 2,\r\n\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flexWrap: \"wrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontWeight: 700, fontSize: { xs: \"1rem\", sm: \"1.2rem\" }, color: \"#1a1a1a\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{sc.name}\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Chip label={sc.status || \"draft\"} size=\"small\" sx={statusChipSx(sc.status)} />\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t{!scArchived && (\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 1, flexWrap: \"wrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_UPDATE,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\r\n\t\t\t\t\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<SDKButton variant=\"outlined\" startIcon={<EditIcon />}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleOpenEdit(sc)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tEdit\r\n\t\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t\t\t{(scDraft || scPaused) && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_CONTROL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SDKButton startIcon={<PlayArrowIcon />} onClick={() => handleStart(sc)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ backgroundColor: \"#4caf50\", \"&:hover\": { backgroundColor: \"#388e3c\" } }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tStart\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t{scActive && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_CONTROL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SDKButton startIcon={<PauseIcon />} onClick={() => handlePause(sc)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ backgroundColor: \"#ff9800\", boxShadow: \"0 2px 8px rgba(255,152,0,0.25)\", \"&:hover\": { backgroundColor: \"#f57c00\" } }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tPause\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_DELETE,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\r\n\t\t\t\t\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<SDKButton variant=\"danger\" startIcon={<ArchiveIcon />}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => { setArchiveTarget(sc); setArchiveOpen(true); }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tArchive\r\n\t\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Stats row — matches original 4-card grid with accent left border */}\r\n\t\t\t\t\t\t\t\t{sc.description && (\r\n\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.85rem\", color: \"#666\", mb: 1.5, fontFamily: \"poppins, Arial, sans-serif\", lineHeight: 1.5 }}>\r\n\t\t\t\t\t\t\t\t\t\t{sc.description}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\toverflowX: \"auto\",\r\n\t\t\t\t\t\t\t\t\t\tpb: 0.5,\r\n\t\t\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar\": { height: 6 },\r\n\t\t\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { backgroundColor: \"#f0f0f0\", borderRadius: 3 },\r\n\t\t\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": {\r\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#c0c0c0\",\r\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\r\n\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: \"#a0a0a0\" },\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"nowrap\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1.5,\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\taccent: \"#1565c0\",\r\n\t\t\t\t\t\t\t\t\t\t\tfields: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Type\", value: sc.campaignType || \"N/A\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Mode\", value: sc.dialingMode || \"N/A\" },\r\n\t\t\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\taccent: \"#2e7d32\",\r\n\t\t\t\t\t\t\t\t\t\t\tfields: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Agent\", value: sc.agentType || \"HUMAN\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Dialer\", value: leadsMeta?.isDialerEnabled ? \"Enabled\" : \"Disabled\" },\r\n\t\t\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\taccent: \"#c62828\",\r\n\t\t\t\t\t\t\t\t\t\t\tfields: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Priority\", value: leadPriorityChipSx(sc.priority).label },\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Max Concurrent\", value: String(sc.maxConcurrentCalls ?? 1) },\r\n\t\t\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\taccent: \"#283593\",\r\n\t\t\t\t\t\t\t\t\t\t\tfields: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Retry\", value: `${sc.retryIntervalMinutes ?? 15}min / ${sc.maxAttempts ?? 3} attempts` },\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Leads\", value: `${sc.totalLeads ?? 0} total / ${sc.completedLeads ?? 0} completed / ${sc.successfulCalls ?? 0} success` },\r\n\t\t\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t].map((card, idx) => (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tkey={idx}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tgap: 0.5,\r\n\t\t\t\t\t\t\t\t\t\t\t\tpx: 1.5,\r\n\t\t\t\t\t\t\t\t\t\t\t\tpy: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#fafafa\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderLeft: `3px solid ${card.accent}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tflex: \"0 0 auto\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: 180,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{card.fields.map((field) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box key={field.label} sx={{ display: \"flex\", alignItems: \"center\", gap: 0.75 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\", whiteSpace: \"nowrap\", flexShrink: 0 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{field.label}:\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.75rem\", fontWeight: 700, color: \"#333\", whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{field.value}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Paper>\r\n\r\n\t\t\t\t\t\t\t{/* Leads section */}\r\n\t\t\t\t\t\t\t<Paper\r\n\t\t\t\t\t\t\t\televation={0}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tborderRadius: \"16px\",\r\n\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\t\tborder: \"1px solid #e0e0e0\",\r\n\t\t\t\t\t\t\t\t\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{/* Leads toolbar — matches original layout */}\r\n\t\t\t\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\talignItems: { xs: \"flex-start\", sm: \"center\" },\r\n\t\t\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\t\t\tflexDirection: { xs: \"column\", sm: \"row\" },\r\n\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\tpx: { xs: 1.5, sm: 2 },\r\n\t\t\t\t\t\t\t\t\tpy: 1.5,\r\n\t\t\t\t\t\t\t\t\tborderBottom: \"1px solid #eee\",\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: \"#fafafa\",\r\n\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t\t{/* Left: title + action buttons */}\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flexWrap: \"wrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontWeight: 700, fontSize: \"1rem\", color: \"#1a1a1a\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\tLeads\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_UPDATE,\r\n\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\r\n\t\t\t\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<SDKButton variant=\"outlined\" onClick={() => setImportOpen(true)} disabled={scArchived} startIcon={<UploadFileIcon sx={{ fontSize: 15 }} />} size=\"small\">\r\n\t\t\t\t\t\t\t\t\t\t\t\tImport Leads\r\n\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_READ,\r\n\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\r\n\t\t\t\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<SDKButton variant=\"primary\" onClick={handleExport} disabled={leadsLoading || leadTotal === 0} startIcon={<DownloadIcon sx={{ fontSize: 15 }} />} size=\"small\">\r\n\t\t\t\t\t\t\t\t\t\t\t\tExport Excel\r\n\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_UPDATE,\r\n\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\r\n\t\t\t\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<SDKButton variant=\"primary\" onClick={() => setAddLeadOpen(true)} disabled={scArchived} startIcon={<AddIcon sx={{ fontSize: 15 }} />} size=\"small\">\r\n\t\t\t\t\t\t\t\t\t\t\t\tAdd Lead\r\n\t\t\t\t\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t{/* Right: search + status filter */}\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, width: { xs: \"100%\", sm: \"auto\" } }}>\r\n\t\t\t\t\t\t\t\t\t\t<OutlinedInput\r\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={leadSearch}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => { setLeadSearch(e.target.value); setLeadPage(0); }}\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Search number...\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ width: { xs: \"100%\", sm: 200 }, fontSize: \"0.85rem\", height: 34, borderRadius: \"20px\" }}\r\n\t\t\t\t\t\t\t\t\t\t\tstartAdornment={<InputAdornment position=\"start\"><SearchIcon sx={{ fontSize: 16, color: \"#aaa\" }} /></InputAdornment>}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t<FormControl size=\"small\" sx={{ minWidth: 130 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={leadStatusFilter}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => { setLeadStatusFilter(e.target.value); setLeadPage(0); }}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ height: 34, borderRadius: \"30px\", fontSize: \"0.85rem\" }}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{LEAD_STATUSES.map((s) => <MenuItem key={s} value={s}>{s}</MenuItem>)}\r\n\t\t\t\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t\t\t\t</FormControl>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Horizontal scroll wrapper — thin scrollbar, minWidth so columns don't squish */}\r\n\t\t\t\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\t\t\t\toverflowX: \"auto\",\r\n\t\t\t\t\t\t\t\t\toverflowY: \"visible\",\r\n\t\t\t\t\t\t\t\t\tWebkitOverflowScrolling: \"touch\",\r\n\t\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar\": { height: 4 },\r\n\t\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": { backgroundColor: \"#ccc\", borderRadius: 2 },\r\n\t\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t\t<Table size=\"small\" sx={{ minWidth: 980 }}>\r\n\t\t\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableRow sx={{ backgroundColor: \"#f1f1f1\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Number\", \"Status\", \"Priority\", \"Source\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Call ID\", \"Queue Name\", \"Attempts\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Created At\", \"Last Attempt\", \"Next Attempt\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Last Outcome\", \"Completed At\", \"Notes\", \"Actions\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t].map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell key={col} sx={{ ...headCellSx, ...(col === \"Actions\" ? { textAlign: \"center\" } : {}) }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{col}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t\t\t{leadsLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={14} align=\"center\" sx={{ py: 4 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size={24} sx={{ color: \"#1A5F6C\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t) : leads.length === 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={14} align=\"center\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ py: 4, color: \"#999\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tNo leads found. Add leads using \"Add Lead\" or \"Import Leads\".\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\tleads.map((lead) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst nonDeletable = [\"IN_PROGRESS\", \"COMPLETED\", \"FAILED\", \"DO_NOT_CALL\"];\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst leadStatus = (lead.status || \"\").toUpperCase();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst deleteDisabled = nonDeletable.includes(leadStatus);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst isDialerEnabled = !!leadsMeta?.isDialerEnabled;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst isCompleted = leadStatus === \"COMPLETED\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst isInProgress = leadStatus === \"IN_PROGRESS\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst isDialable =\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisDialerEnabled\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& hasOutboundPermission\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& isAgentIdle\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& !isCompleted\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& !isInProgress\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& dialLoading !== lead.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst dialTooltip =\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!isDialerEnabled ? \"Dialer is not enabled\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: !hasOutboundPermission ? \"No outbound call permission\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: isCompleted ? \"Lead is completed\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: isInProgress ? \"Lead is in progress\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: !isAgentIdle ? \"Agent is not idle\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: dialLoading === lead.id ? \"Dialing…\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: `Call ${lead.phoneNumber}`;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst { chip: prioChip, label: prioLabel } = leadPriorityChipSx(lead.priority);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableRow key={lead.id} sx={tableRowSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.phoneNumber}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip label={lead.status || \"pending\"} size=\"small\" sx={leadStatusChipSx(lead.status)} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip label={prioLabel} size=\"small\" sx={prioChip} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.source || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, maxWidth: 140, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={lead.originalCallId || \"\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{lead.originalCallId || \"\"}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.originalQueueId\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? (queueNameMap[lead.originalQueueId] || `Queue #${lead.originalQueueId}`)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.attemptCount ?? 0}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.createdAt ? new Date(lead.createdAt).toLocaleString() : \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.lastAttemptAt ? new Date(lead.lastAttemptAt).toLocaleString() : \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.nextAttemptAt ? new Date(lead.nextAttemptAt).toLocaleString() : \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{lead.lastOutcome || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.completedAt ? new Date(lead.completedAt).toLocaleString() : \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, maxWidth: 150, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.notes ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={lead.notes} arrow placement=\"top\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{lead.notes}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...bodyCellSx, textAlign: \"center\", whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{/* Dial button */}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={dialTooltip}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleDialPreview(lead.id)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!isDialable}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: isDialable ? \"#2e7d32\" : \"#bdbdbd\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: isDialable ? \"#e8f5e9\" : \"transparent\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: \"all 0.2s ease-in-out\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: isDialable ? \"#43a047\" : \"transparent\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: isDialable ? \"#fff\" : \"#bdbdbd\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransform: isDialable ? \"scale(1.2)\" : \"none\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: isDialable ? \"0 0 8px rgba(67,160,71,0.5)\" : \"none\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{dialLoading === lead.id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? <CircularProgress size={16} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: <PhoneIcon sx={{ fontSize: 18 }} />}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{/* Delete button */}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_DELETE,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.CAMPAIGNS_MANAGE,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeleteDisabled\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? `Cannot delete — status is ${leadStatus.toLowerCase().replace(\"_\", \" \")}`\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: `Delete lead ${lead.phoneNumber}`\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => { setDeleteLeadTarget(lead); setDeleteLeadOpen(true); }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={deleteDisabled}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tml: 0.5,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: deleteDisabled ? \"#bdbdbd\" : \"#c62828\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: deleteDisabled ? \"transparent\" : \"#ffebee\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: \"all 0.2s ease-in-out\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: deleteDisabled ? \"transparent\" : \"#d32f2f\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: deleteDisabled ? \"#bdbdbd\" : \"#fff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransform: deleteDisabled ? \"none\" : \"scale(1.2)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: deleteDisabled ? \"none\" : \"0 0 8px rgba(211,47,47,0.5)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<DeleteIcon sx={{ fontSize: 18 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{leads.length > 0 && (\r\n\t\t\t\t\t\t\t\t\t<TablePagination\r\n\t\t\t\t\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\t\t\t\t\tcount={leadTotal}\r\n\t\t\t\t\t\t\t\t\t\tpage={leadPage}\r\n\t\t\t\t\t\t\t\t\t\trowsPerPage={leadRowsPerPage}\r\n\t\t\t\t\t\t\t\t\t\tonPageChange={(_, p) => { setLeadPage(p); refetchLeads(p); }}\r\n\t\t\t\t\t\t\t\t\t\tonRowsPerPageChange={(e) => { setLeadRowsPerPage(parseInt(e.target.value, 10)); setLeadPage(0); }}\r\n\t\t\t\t\t\t\t\t\t\trowsPerPageOptions={[5, 10, 25, 50]}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.82rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\"& .MuiTablePagination-toolbar\": { minHeight: 40, px: 1 },\r\n\t\t\t\t\t\t\t\t\t\t\t\"& .MuiTablePagination-selectLabel, & .MuiTablePagination-displayedRows\": { fontSize: \"0.82rem\" },\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Paper>\r\n\t\t\t\t\t\t</>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\r\n\t\t\t{/* ── Dialogs ── */}\r\n\t\t\t<CampaignDialog\r\n\t\t\t\topen={dialogOpen}\r\n\t\t\t\teditingCampaign={editingCampaign}\r\n\t\t\t\tformData={formData}\r\n\t\t\t\tsetFormData={setFormData}\r\n\t\t\t\tsaving={saving}\r\n\t\t\t\tonSave={handleSave}\r\n\t\t\t\tonClose={() => setDialogOpen(false)}\r\n\t\t\t\tparentQueueNameMap={queueNameMap}\r\n\t\t\t\tonQueuesRefreshed={handleQueuesRefreshed}\r\n\t\t\t\tonLeadsChange={() => { fetchCampaigns(); if (selectedId) refetchLeads(); }}\r\n\t\t\t/>\r\n\t\t\t<AddLeadDialog\r\n\t\t\t\topen={addLeadOpen}\r\n\t\t\t\tdata={addLeadData}\r\n\t\t\t\tonChange={setAddLeadData}\r\n\t\t\t\tsaving={addLeadSaving}\r\n\t\t\t\tonSave={handleAddLead}\r\n\t\t\t\tonClose={() => setAddLeadOpen(false)}\r\n\t\t\t/>\r\n\t\t\t<ImportLeadsDialog\r\n\t\t\t\topen={importOpen}\r\n\t\t\t\tfile={importFile}\r\n\t\t\t\tonFileChange={setImportFile}\r\n\t\t\t\tuploading={importing}\r\n\t\t\t\tonUpload={handleImport}\r\n\t\t\t\tonDownloadTemplate={handleDownloadTemplate}\r\n\t\t\t\tonClose={() => { setImportOpen(false); setImportFile(null); }}\r\n\t\t\t/>\r\n\t\t\t<ConfirmDialog\r\n\t\t\t\topen={archiveOpen}\r\n\t\t\t\ttitle=\"Archive Campaign\"\r\n\t\t\t\tmessage={`Archive \"${archiveTarget?.name}\"? It will no longer run.`}\r\n\t\t\t\tloading={archiving}\r\n\t\t\t\tonConfirm={confirmArchive}\r\n\t\t\t\tonClose={() => { setArchiveOpen(false); setArchiveTarget(null); }}\r\n\t\t\t/>\r\n\t\t\t<ConfirmDialog\r\n\t\t\t\topen={deleteLeadOpen}\r\n\t\t\t\ttitle=\"Delete Lead\"\r\n\t\t\t\tmessage={`Delete lead ${deleteLeadTarget?.phoneNumber}? This cannot be undone.`}\r\n\t\t\t\tloading={deletingLead}\r\n\t\t\t\tonConfirm={confirmDeleteLead}\r\n\t\t\t\tonClose={() => { setDeleteLeadOpen(false); setDeleteLeadTarget(null); }}\r\n\t\t\t/>\r\n\t\t</Box>\r\n\t);\r\n});\r\n\r\n// ──── Default export — wrapped with SDKProvider ───────────────────────────────\r\n\r\nconst Campaigns: React.FC = () => (\r\n\t<SDKProvider>\r\n\t\t<CampaignsContent />\r\n\t</SDKProvider>\r\n);\r\n\r\nexport default Campaigns;\r\n","import { useCallback, useState } from \"react\";\nimport axiosInstance from \"../../services/axios\";\nimport { END_POINT } from \"../../services/endPoint\";\nimport type {\n\tLoginAgentRowResponse,\n\tLoginReportParams,\n\tLoginReportResponse,\n\tLoginSessionResponse,\n} from \"./types\";\n\nfunction buildLoginReportQueryString(params: LoginReportParams): string {\n\tconst qs = new URLSearchParams();\n\tif (params.start_date) qs.append(\"start_date\", params.start_date);\n\tif (params.end_date) qs.append(\"end_date\", params.end_date);\n\tif (params.agent_id) for (const id of params.agent_id) qs.append(\"agent_id\", id);\n\tif (params.queue_id) for (const id of params.queue_id) qs.append(\"queue_id\", String(id));\n\tif (params.process_id) for (const id of params.process_id) qs.append(\"process_id\", String(id));\n\tconst str = qs.toString();\n\treturn str ? `?${str}` : \"\";\n}\n\nfunction buildSessionQueryString(params?: { start_date?: string; end_date?: string }): string {\n\tconst qs = new URLSearchParams();\n\tif (params?.start_date) qs.append(\"start_date\", params.start_date);\n\tif (params?.end_date) qs.append(\"end_date\", params.end_date);\n\tconst str = qs.toString();\n\treturn str ? `?${str}` : \"\";\n}\n\nfunction triggerBlobDownload(blob: Blob, filename: string): void {\n\tconst url = URL.createObjectURL(blob);\n\tconst a = document.createElement(\"a\");\n\ta.href = url;\n\ta.download = filename;\n\tdocument.body.appendChild(a);\n\ta.click();\n\ta.remove();\n\tURL.revokeObjectURL(url);\n}\n\nexport function useLoginReport() {\n\tconst [agents, setAgents] = useState<LoginAgentRowResponse[]>([]);\n\tconst [loading, setLoading] = useState(false);\n\tconst [error, setError] = useState(\"\");\n\n\tconst fetchAgents = useCallback(async (params: LoginReportParams): Promise<void> => {\n\t\tsetLoading(true);\n\t\tsetError(\"\");\n\t\ttry {\n\t\t\tconst qs = buildLoginReportQueryString(params);\n\t\t\tconst res = await axiosInstance.get<LoginAgentRowResponse[]>(\n\t\t\t\t`${END_POINT.LOGIN_REPORT_AGENTS}${qs}`,\n\t\t\t);\n\t\t\tsetAgents(Array.isArray(res.data) ? res.data : []);\n\t\t} catch (err: any) {\n\t\t\tsetAgents([]);\n\t\t\tsetError(\n\t\t\t\terr?.response?.data?.message ||\n\t\t\t\t\terr?.response?.data?.detail ||\n\t\t\t\t\terr?.message ||\n\t\t\t\t\t\"Failed to fetch login report\",\n\t\t\t);\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, []);\n\n\tconst fetchSummary = useCallback(async (params: LoginReportParams): Promise<LoginReportResponse> => {\n\t\tconst qs = buildLoginReportQueryString(params);\n\t\tconst res = await axiosInstance.get<LoginReportResponse>(\n\t\t\t`${END_POINT.LOGIN_REPORT}${qs}`,\n\t\t);\n\t\treturn res.data;\n\t}, []);\n\n\tconst fetchAgentSessions = useCallback(\n\t\tasync (agentId: string, params?: { start_date?: string; end_date?: string }): Promise<LoginSessionResponse[]> => {\n\t\t\tconst qs = buildSessionQueryString(params);\n\t\t\tconst res = await axiosInstance.get<LoginSessionResponse[]>(\n\t\t\t\t`${END_POINT.LOGIN_REPORT_AGENT_SESSIONS(agentId)}${qs}`,\n\t\t\t);\n\t\t\treturn Array.isArray(res.data) ? res.data : [];\n\t\t},\n\t\t[],\n\t);\n\n\tconst exportReportExcel = useCallback(async (params: LoginReportParams): Promise<void> => {\n\t\tconst qs = buildLoginReportQueryString(params);\n\t\tconst res = await axiosInstance.get(\n\t\t\t`${END_POINT.LOGIN_REPORT_EXPORT_EXCEL}${qs}`,\n\t\t\t{ responseType: \"blob\" },\n\t\t);\n\t\ttriggerBlobDownload(new Blob([res.data]), `login-report-${params.start_date ?? \"export\"}.xlsx`);\n\t}, []);\n\n\tconst exportAgentSessionsExcel = useCallback(\n\t\tasync (agentId: string, params?: { start_date?: string; end_date?: string }): Promise<void> => {\n\t\t\tconst qs = buildSessionQueryString(params);\n\t\t\tconst res = await axiosInstance.get(\n\t\t\t\t`${END_POINT.LOGIN_REPORT_AGENT_SESSIONS_EXPORT_EXCEL(agentId)}${qs}`,\n\t\t\t\t{ responseType: \"blob\" },\n\t\t\t);\n\t\t\ttriggerBlobDownload(new Blob([res.data]), `login_sessions_${agentId}.xlsx`);\n\t\t},\n\t\t[],\n\t);\n\n\treturn {\n\t\tagents,\n\t\tloading,\n\t\terror,\n\t\tsetError,\n\t\tfetchAgents,\n\t\tfetchSummary,\n\t\tfetchAgentSessions,\n\t\texportReportExcel,\n\t\texportAgentSessionsExcel,\n\t};\n}\n","import type { SxProps, Theme } from \"@mui/material/styles\";\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nexport const FONT =\n\t\"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\n\nexport const COLORS = {\n\tnavy: \"#0d2a56\",\n\tblue: \"#1565c8\",\n\tgreen: \"#0a9a62\",\n\tamber: \"#c47c00\",\n\tred: \"#cc2a2a\",\n\tpurple: \"#6b3fbf\",\n\tbg: \"transparent\",\n\tsurface: \"transparent\",\n} as const;\n\nexport const DEFAULT_ROWS_PER_PAGE = 10;\n\n// ─── Table ────────────────────────────────────────────────────────────────────\n\nexport const headCellSx: SxProps<Theme> = {\n\tfontFamily: FONT,\n\tbgcolor: \"#f1f1f1\",\n\tcolor: \"#333\",\n\tfontWeight: 600,\n\twhiteSpace: \"nowrap\",\n\tfontSize: \"0.8rem\",\n\tpy: \"6px\",\n\tpx: \"12px\",\n};\n\nexport const sortLabelSx: SxProps<Theme> = {\n\t\"&.MuiTableSortLabel-root\": { color: \"#333\" },\n\t\"&.MuiTableSortLabel-root:hover\": { color: \"#555\" },\n\t\"&.Mui-active\": { color: \"#333\" },\n\t\"& .MuiTableSortLabel-icon\": { color: \"#333 !important\" },\n};\n\nexport const tableContainerSx: SxProps<Theme> = {\n\tborderRadius: \"8px\",\n\tborder: \"1px solid #e0e7ef\",\n\toverflow: \"hidden\",\n\tmb: 2,\n};\n\nexport const tableSx: SxProps<Theme> = {\n\tminWidth: 1100,\n\tfontFamily: FONT,\n\t\"& .MuiTableCell-root\": {\n\t\tfontFamily: FONT,\n\t\tfontSize: \"0.75rem\",\n\t\tborderBottom: \"1px solid #eef1f6\",\n\t\tpy: 0.6,\n\t\tpx: 1,\n\t},\n};\n\nexport const tableRowSx: SxProps<Theme> = {\n\tbackgroundColor: \"#fff\",\n\t\"&:hover\": { backgroundColor: \"#f0f7f8\" },\n};\n\nexport const paginationSx: SxProps<Theme> = {\n\tborderTop: \"1px solid #eef1f6\",\n\tfontFamily: FONT,\n\t\"& .MuiTablePagination-displayedRows\": {\n\t\tfontFamily: FONT,\n\t\tfontSize: \"0.73rem\",\n\t},\n\t\"& .MuiTablePagination-selectLabel\": {\n\t\tfontFamily: FONT,\n\t\tfontSize: \"0.73rem\",\n\t},\n};\n\n// ─── Filter bar ───────────────────────────────────────────────────────────────\n\nexport const filterBarSx: SxProps<Theme> = {\n\tdisplay: \"flex\",\n\tflexWrap: \"wrap\",\n\talignItems: \"center\",\n\tgap: 1,\n\tp: 1.2,\n\tmb: 0.8,\n\tborderRadius: \"8px\",\n\tborder: \"1px solid #e0e7ef\",\n\tbackgroundColor: \"#fff\",\n};\n\nexport const dateFieldSx: SxProps<Theme> = {\n\t\"& .MuiOutlinedInput-root\": {\n\t\tborderRadius: \"8px\",\n\t\tfontFamily: FONT,\n\t\tfontSize: \"0.8rem\",\n\t\tbackgroundColor: \"#fff\",\n\t\theight: 36,\n\t},\n\t\"& .MuiInputLabel-root\": {\n\t\tfontFamily: FONT,\n\t\tfontSize: \"0.78rem\",\n\t},\n};\n\nexport const quickRangeBtnSx = (active: boolean): SxProps<Theme> => ({\n\ttextTransform: \"none\",\n\tfontFamily: FONT,\n\tfontSize: \"0.75rem\",\n\tfontWeight: 600,\n\theight: 32,\n\tpx: 1.5,\n\tborderRadius: \"6px\",\n\tborder: \"1px solid\",\n\tborderColor: active ? \"#1A5F6C\" : \"#dde3ec\",\n\tbackgroundColor: active ? \"#1A5F6C\" : \"#fff\",\n\tcolor: active ? \"#fff\" : \"#4a5568\",\n\t\"&:hover\": {\n\t\tbackgroundColor: active ? \"#164e57\" : \"#f0f7f8\",\n\t\tborderColor: \"#1A5F6C\",\n\t},\n});\n\n// ─── Body cell variants ──────────────────────────────────────────────────────\n\nexport const nameCellSx: SxProps<Theme> = {\n\tfontWeight: 600,\n\tcolor: COLORS.navy,\n\tfontSize: \"0.75rem\",\n};\n\nexport const idCellSx: SxProps<Theme> = {\n\tfontSize: \"0.73rem\",\n\tcolor: \"#4a5568\",\n};\n\nexport const durationCellWorkingSx: SxProps<Theme> = {\n\tfontWeight: 600,\n\tcolor: COLORS.blue,\n\tfontSize: \"0.75rem\",\n\tfontVariantNumeric: \"tabular-nums\",\n};\n\nexport const durationCellBreakSx: SxProps<Theme> = {\n\tfontWeight: 500,\n\tcolor: COLORS.amber,\n\tfontSize: \"0.75rem\",\n\tfontVariantNumeric: \"tabular-nums\",\n};\n\nexport const durationCellTotalSx: SxProps<Theme> = {\n\tfontWeight: 500,\n\tfontSize: \"0.75rem\",\n\tfontVariantNumeric: \"tabular-nums\",\n};\n\n// ─── Chip styles ─────────────────────────────────────────────────────────────\n\nexport const queueChipSx: SxProps<Theme> = {\n\tfontFamily: FONT,\n\tbackgroundColor: \"#f0ebfa\",\n\tcolor: COLORS.purple,\n\tfontWeight: 500,\n\tfontSize: \"0.67rem\",\n\theight: 22,\n};\n\nexport const loginsChipSx: SxProps<Theme> = {\n\tfontFamily: FONT,\n\tbackgroundColor: COLORS.navy,\n\tcolor: \"#fff\",\n\tfontWeight: 600,\n\tminWidth: 28,\n\theight: 20,\n\tfontSize: \"0.67rem\",\n\tcursor: \"pointer\",\n\t\"&:hover\": { backgroundColor: COLORS.blue },\n};\n\nexport const loggedInChipSx: SxProps<Theme> = {\n\tfontFamily: FONT,\n\tbackgroundColor: COLORS.green,\n\tcolor: \"#fff\",\n\tfontWeight: 600,\n\tfontSize: \"0.65rem\",\n\theight: 20,\n};\n\n// ─── Dialog ──────────────────────────────────────────────────────────────────\n\nexport const dialogPaperSx: SxProps<Theme> = {\n\tborderRadius: \"12px\",\n\tfontFamily: FONT,\n\toverflow: \"hidden\",\n\tboxShadow: \"0 8px 32px rgba(0,0,0,0.18)\",\n\tmaxWidth: 450,\n};\n\nexport const dialogTitleSx: SxProps<Theme> = {\n\tfontFamily: FONT,\n\tbackground:\n\t\t\"linear-gradient(135deg, var(--primary-color-dark, #14505b), var(--primary-color, #1A5F6C))\",\n\tcolor: \"#fff\",\n\tdisplay: \"flex\",\n\tjustifyContent: \"space-between\",\n\talignItems: \"center\",\n\tpy: 1.5,\n\tpx: 2.5,\n};\n\nexport const dialogContentSx: SxProps<Theme> = {\n\tp: 0,\n\tbackgroundColor: \"#f8fafb\",\n};\n\nexport const sessionCardSx: SxProps<Theme> = {\n\tmb: 1.5,\n\tborderRadius: \"10px\",\n\tborder: \"1px solid #e4eaf0\",\n\toverflow: \"hidden\",\n\tbackgroundColor: \"#fff\",\n};\n\nexport const sessionCardHeaderSx: SxProps<Theme> = {\n\tpx: 1.5,\n\tpy: 0.8,\n\tbackgroundColor: \"#f0f5f4\",\n\tborderBottom: \"1px solid #e4eaf0\",\n};\n\nexport const utilisationBarBgSx = (bgTint: string): SxProps<Theme> => ({\n\tposition: \"relative\",\n\tflex: 1,\n\theight: 7,\n\tborderRadius: 4,\n\tbackgroundColor: bgTint,\n\toverflow: \"hidden\",\n});\n\nexport const utilisationChipSx = (bgTint: string, barColor: string): SxProps<Theme> => ({\n\tfontFamily: FONT,\n\theight: 18,\n\tminWidth: 38,\n\tfontSize: \"0.63rem\",\n\tfontWeight: 700,\n\tbackgroundColor: bgTint,\n\tcolor: barColor,\n\t\"& .MuiChip-label\": { px: 0.6 },\n});\n","import React, { memo, useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport {\r\n\tAlert,\r\n\tBox,\r\n\tButton,\r\n\tChip,\r\n\tCircularProgress,\r\n\tDialog,\r\n\tDialogContent,\r\n\tDialogTitle,\r\n\tIconButton,\r\n\tInputAdornment,\r\n\tOutlinedInput,\r\n\tPaper,\r\n\tStack,\r\n\tTable,\r\n\tTableBody,\r\n\tTableCell,\r\n\tTableContainer,\r\n\tTableHead,\r\n\tTablePagination,\r\n\tTableRow,\r\n\tTableSortLabel,\r\n\tTypography,\r\n} from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport DownloadIcon from \"@mui/icons-material/Download\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\n\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\nimport isoWeek from \"dayjs/plugin/isoWeek\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { DateTimePicker } from \"@mui/x-date-pickers/DateTimePicker\";\r\n\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPageHeader } from \"../../components/SDKPageHeader\";\r\nimport { SDKButton } from \"../../components/SDKButton\";\r\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\r\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\r\nimport { useToast } from \"../../services/toastMessage\";\r\n\r\nimport { useLoginReport } from \"./useLoginReport\";\r\nimport type {\r\n\tLoginAgentRowResponse,\r\n\tLoginReportParams,\r\n\tLoginSessionResponse,\r\n\tQuickRange,\r\n\tSortDir,\r\n\tSortKey,\r\n} from \"./types\";\r\nimport {\r\n\tCOLORS,\r\n\tDEFAULT_ROWS_PER_PAGE,\r\n\tFONT,\r\n\tdateFieldSx,\r\n\tdialogContentSx,\r\n\tdialogPaperSx,\r\n\tdialogTitleSx,\r\n\tdurationCellBreakSx,\r\n\tdurationCellTotalSx,\r\n\tdurationCellWorkingSx,\r\n\tfilterBarSx,\r\n\theadCellSx,\r\n\tidCellSx,\r\n\tloggedInChipSx,\r\n\tloginsChipSx,\r\n\tnameCellSx,\r\n\tpaginationSx,\r\n\tqueueChipSx,\r\n\tquickRangeBtnSx,\r\n\tsessionCardHeaderSx,\r\n\tsessionCardSx,\r\n\tsortLabelSx,\r\n\ttableContainerSx,\r\n\ttableRowSx,\r\n\ttableSx,\r\n\tutilisationBarBgSx,\r\n\tutilisationChipSx,\r\n} from \"./styles\";\r\n\r\ndayjs.extend(isoWeek);\r\n\r\n// ──── Helpers ─────────────────────────────────────────────────────────────────\r\n\r\nconst comparator = (\r\n\ta: LoginAgentRowResponse,\r\n\tb: LoginAgentRowResponse,\r\n\tkey: SortKey,\r\n): number => {\r\n\tconst av = a[key];\r\n\tconst bv = b[key];\r\n\tif (typeof av === \"number\" && typeof bv === \"number\") return av - bv;\r\n\treturn String(av ?? \"\").localeCompare(String(bv ?? \"\"));\r\n};\r\n\r\nfunction rangeToDates(range: QuickRange): { start: Dayjs; end: Dayjs } | null {\r\n\tconst now = dayjs();\r\n\tif (range === \"today\") return { start: now.startOf(\"day\"), end: now };\r\n\tif (range === \"week\") return { start: now.startOf(\"isoWeek\"), end: now };\r\n\tif (range === \"month\") return { start: now.startOf(\"month\"), end: now };\r\n\treturn null;\r\n}\r\n\r\n// ──── Main content ────────────────────────────────────────────────────────────\r\n\r\nconst LoginReportContent = memo(function LoginReportContent() {\r\n\tconst { showToast } = useToast();\r\n\tconst {\r\n\t\tagents: reportData,\r\n\t\tloading,\r\n\t\terror,\r\n\t\tsetError,\r\n\t\tfetchAgents,\r\n\t\tfetchAgentSessions,\r\n\t\texportReportExcel,\r\n\t\texportAgentSessionsExcel,\r\n\t} = useLoginReport();\r\n\r\n\t// Filter state\r\n\tconst [startDate, setStartDate] = useState<Dayjs | null>(dayjs().startOf(\"day\"));\r\n\tconst [endDate, setEndDate] = useState<Dayjs | null>(dayjs());\r\n\tconst [activeQuickDate, setActiveQuickDate] = useState<QuickRange>(\"today\");\r\n\tconst [searchText, setSearchText] = useState(\"\");\r\n\r\n\t// Table state\r\n\tconst [page, setPage] = useState(0);\r\n\tconst [rowsPerPage, setRowsPerPage] = useState(DEFAULT_ROWS_PER_PAGE);\r\n\tconst [sortKey, setSortKey] = useState<SortKey>(\"fullName\");\r\n\tconst [sortDir, setSortDir] = useState<SortDir>(\"asc\");\r\n\r\n\t// Dialog state\r\n\tconst [dialogOpen, setDialogOpen] = useState(false);\r\n\tconst [selectedRow, setSelectedRow] = useState<LoginAgentRowResponse | null>(null);\r\n\tconst [sessions, setSessions] = useState<LoginSessionResponse[]>([]);\r\n\tconst [sessionsLoading, setSessionsLoading] = useState(false);\r\n\r\n\t// ──── Fetch ────────────────────────────────────────────────────────────────\r\n\tconst fetchReport = useCallback(\r\n\t\tasync (overrideStart?: Dayjs | null, overrideEnd?: Dayjs | null) => {\r\n\t\t\tconst sd = overrideStart ?? startDate;\r\n\t\t\tconst ed = overrideEnd ?? endDate;\r\n\t\t\tif (!sd || !ed) {\r\n\t\t\t\tsetError(\"Select a valid date range\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst params: LoginReportParams = {\r\n\t\t\t\tstart_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\tend_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t};\r\n\t\t\tawait fetchAgents(params);\r\n\t\t\tsetPage(0);\r\n\t\t},\r\n\t\t[startDate, endDate, fetchAgents, setError],\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (startDate && endDate) fetchReport();\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [startDate, endDate]);\r\n\r\n\t// ──── Quick ranges ─────────────────────────────────────────────────────────\r\n\tconst handleQuickRange = (range: QuickRange) => {\r\n\t\tsetActiveQuickDate(range);\r\n\t\tconst dates = rangeToDates(range);\r\n\t\tif (dates) {\r\n\t\t\tsetStartDate(dates.start);\r\n\t\t\tsetEndDate(dates.end);\r\n\t\t}\r\n\t};\r\n\r\n\t// ──── Filtered + sorted ────────────────────────────────────────────────────\r\n\tconst filteredData = useMemo(() => {\r\n\t\tlet rows = [...reportData];\r\n\t\tif (searchText.trim()) {\r\n\t\t\tconst q = searchText.trim().toLowerCase();\r\n\t\t\trows = rows.filter(\r\n\t\t\t\t(r) =>\r\n\t\t\t\t\tr.fullName.toLowerCase().includes(q) ||\r\n\t\t\t\t\tr.agentId.toLowerCase().includes(q),\r\n\t\t\t);\r\n\t\t}\r\n\t\trows.sort((a, b) => {\r\n\t\t\tconst cmp = comparator(a, b, sortKey);\r\n\t\t\treturn sortDir === \"asc\" ? cmp : -cmp;\r\n\t\t});\r\n\t\treturn rows;\r\n\t}, [reportData, searchText, sortKey, sortDir]);\r\n\r\n\tconst paginatedData = useMemo(\r\n\t\t() =>\r\n\t\t\tfilteredData.slice(\r\n\t\t\t\tpage * rowsPerPage,\r\n\t\t\t\tpage * rowsPerPage + rowsPerPage,\r\n\t\t\t),\r\n\t\t[filteredData, page, rowsPerPage],\r\n\t);\r\n\r\n\tconst handleSort = (key: SortKey) => {\r\n\t\tif (sortKey === key) {\r\n\t\t\tsetSortDir((d) => (d === \"asc\" ? \"desc\" : \"asc\"));\r\n\t\t} else {\r\n\t\t\tsetSortKey(key);\r\n\t\t\tsetSortDir(\"asc\");\r\n\t\t}\r\n\t};\r\n\r\n\t// ──── Dialog handlers ──────────────────────────────────────────────────────\r\n\tconst openDialog = async (row: LoginAgentRowResponse) => {\r\n\t\tsetSelectedRow(row);\r\n\t\tsetSessions([]);\r\n\t\tsetDialogOpen(true);\r\n\t\tsetSessionsLoading(true);\r\n\t\ttry {\r\n\t\t\tconst sd = startDate ?? dayjs();\r\n\t\t\tconst ed = endDate ?? dayjs();\r\n\t\t\tconst data = await fetchAgentSessions(row.agentId, {\r\n\t\t\t\tstart_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\tend_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t});\r\n\t\t\tsetSessions(data);\r\n\t\t} catch {\r\n\t\t\tsetSessions([]);\r\n\t\t} finally {\r\n\t\t\tsetSessionsLoading(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst closeDialog = () => {\r\n\t\tsetDialogOpen(false);\r\n\t\tsetTimeout(() => {\r\n\t\t\tsetSelectedRow(null);\r\n\t\t\tsetSessions([]);\r\n\t\t}, 300);\r\n\t};\r\n\r\n\t// ──── Export ───────────────────────────────────────────────────────────────\r\n\tconst handleExportExcel = async () => {\r\n\t\tconst sd = startDate ?? dayjs();\r\n\t\tconst ed = endDate ?? dayjs();\r\n\t\ttry {\r\n\t\t\tawait exportReportExcel({\r\n\t\t\t\tstart_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\tend_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t});\r\n\t\t\tshowToast(\"Export started\", \"success\");\r\n\t\t} catch (err: any) {\r\n\t\t\tshowToast(err?.message || \"Failed to export Excel\", \"error\");\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleExportSessions = async () => {\r\n\t\tif (!selectedRow) return;\r\n\t\ttry {\r\n\t\t\tawait exportAgentSessionsExcel(selectedRow.agentId, {\r\n\t\t\t\tstart_date: (startDate ?? dayjs()).format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\tend_date: (endDate ?? dayjs()).format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t});\r\n\t\t\tshowToast(\"Export started\", \"success\");\r\n\t\t} catch (err: any) {\r\n\t\t\tshowToast(err?.message || \"Failed to export Excel\", \"error\");\r\n\t\t}\r\n\t};\r\n\r\n\t// ──── Column config ────────────────────────────────────────────────────────\r\n\tconst columns: { id: SortKey; label: string }[] = [\r\n\t\t{ id: \"fullName\", label: \"User Name\" },\r\n\t\t{ id: \"agentId\", label: \"User ID\" },\r\n\t\t{ id: \"queueNames\", label: \"Queues\" },\r\n\t\t{ id: \"numLogins\", label: \"Logins\" },\r\n\t\t{ id: \"firstLoginTime\", label: \"First Login\" },\r\n\t\t{ id: \"lastLogoutTime\", label: \"Last Logout\" },\r\n\t\t{ id: \"workingDurationFormatted\", label: \"Working Duration\" },\r\n\t\t{ id: \"breakDurationFormatted\", label: \"Break Duration\" },\r\n\t\t{ id: \"loginDurationFormatted\", label: \"Login Duration\" },\r\n\t\t{ id: \"utilisationPct\", label: \"Utilisation %\" },\r\n\t];\r\n\r\n\t// ──── Render ───────────────────────────────────────────────────────────────\r\n\treturn (\r\n\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\r\n\t\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", fontFamily: FONT }}>\r\n\t\t\t\t<SDKPageHeader\r\n\t\t\t\t\ttitle=\"Login Report\"\r\n\t\t\t\t\tactions={\r\n\t\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" spacing={1}>\r\n\t\t\t\t\t\t\t<OutlinedInput\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tvalue={searchText}\r\n\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\tsetSearchText(e.target.value);\r\n\t\t\t\t\t\t\t\t\tsetPage(0);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tplaceholder=\"Search name, ID...\"\r\n\t\t\t\t\t\t\t\tsx={{ width: 220, fontSize: \"0.82rem\", height: 36, fontFamily: FONT }}\r\n\t\t\t\t\t\t\t\tendAdornment={\r\n\t\t\t\t\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t\t\t\t\t<SearchIcon sx={{ fontSize: 18, color: \"#999\" }} />\r\n\t\t\t\t\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.REPORTS_AGENT_LOGIN_MANAGE,\r\n\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.REPORTS_AGENT_LOGIN_EXPORT,\r\n\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\t\t\t\tstartIcon={<DownloadIcon sx={{ fontSize: \"0.95rem\" }} />}\r\n\t\t\t\t\t\t\t\t\tdisabled={!reportData.length}\r\n\t\t\t\t\t\t\t\t\tonClick={handleExportExcel}\r\n\t\t\t\t\t\t\t\t\tsx={{ height: 36 }}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tExport Excel\r\n\t\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t<Box sx={{ flex: 1, overflow: \"auto\", py: 0.8, px: { xs: 2, md: 2.5 } }}>\r\n\t\t\t\t\t{/* Filter bar */}\r\n\t\t\t\t\t<Box sx={filterBarSx}>\r\n\t\t\t\t\t\t<DateTimePicker\r\n\t\t\t\t\t\t\tlabel=\"Start\"\r\n\t\t\t\t\t\t\tvalue={startDate}\r\n\t\t\t\t\t\t\tonChange={(v) => {\r\n\t\t\t\t\t\t\t\tsetStartDate(v as Dayjs | null);\r\n\t\t\t\t\t\t\t\tsetActiveQuickDate(\"\");\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\ttextField: { size: \"small\", sx: dateFieldSx },\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<DateTimePicker\r\n\t\t\t\t\t\t\tlabel=\"End\"\r\n\t\t\t\t\t\t\tvalue={endDate}\r\n\t\t\t\t\t\t\tonChange={(v) => {\r\n\t\t\t\t\t\t\t\tsetEndDate(v as Dayjs | null);\r\n\t\t\t\t\t\t\t\tsetActiveQuickDate(\"\");\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\ttextField: { size: \"small\", sx: dateFieldSx },\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<Stack direction=\"row\" spacing={0.5}>\r\n\t\t\t\t\t\t\t{([\"today\", \"week\", \"month\"] as QuickRange[]).map((r) => (\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tkey={r}\r\n\t\t\t\t\t\t\t\t\tonClick={() => handleQuickRange(r)}\r\n\t\t\t\t\t\t\t\t\tsx={quickRangeBtnSx(activeQuickDate === r)}\r\n\t\t\t\t\t\t\t\t\tdisableRipple\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{r === \"today\" ? \"Today\" : r === \"week\" ? \"This Week\" : \"This Month\"}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t{error && (\r\n\t\t\t\t\t\t<Alert\r\n\t\t\t\t\t\t\tseverity=\"error\"\r\n\t\t\t\t\t\t\tsx={{ mb: 1, fontFamily: FONT, fontSize: \"0.78rem\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{error}\r\n\t\t\t\t\t\t</Alert>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{loading && (\r\n\t\t\t\t\t\t<Box sx={{ textAlign: \"center\", py: 2.5 }}>\r\n\t\t\t\t\t\t\t<CircularProgress sx={{ color: COLORS.blue }} size={28} />\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{/* Main table */}\r\n\t\t\t\t\t<Paper elevation={0} sx={tableContainerSx}>\r\n\t\t\t\t\t\t<TableContainer>\r\n\t\t\t\t\t\t\t<Table size=\"small\" sx={tableSx}>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t{columns.map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell key={col.id} sx={headCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableSortLabel\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive={sortKey === col.id}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdirection={sortKey === col.id ? sortDir : \"asc\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleSort(col.id)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={sortLabelSx}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{col.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableSortLabel>\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{paginatedData.map((row, idx) => {\r\n\t\t\t\t\t\t\t\t\t\tconst isLoggedIn = !row.lastLogoutTime;\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<TableRow key={`${row.agentId}-${idx}`} hover sx={tableRowSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={nameCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.fullName || \"—\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={idCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.agentId || \"—\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.queueNames ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={row.queueNames}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={queueChipSx}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"—\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ textAlign: \"center\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={row.numLogins}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\topenDialog(row);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={loginsChipSx}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={idCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.firstLoginTime\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? dayjs(row.firstLoginTime).format(\"DD MMM YYYY hh:mm A\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"—\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={idCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{isLoggedIn ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel=\"LOGGED-IN\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={loggedInChipSx}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdayjs(row.lastLogoutTime).format(\"DD MMM YYYY hh:mm A\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={durationCellWorkingSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.workingDurationFormatted || \"—\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={durationCellBreakSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.breakDurationFormatted || \"—\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={durationCellTotalSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.loginDurationFormatted || \"—\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ minWidth: 120 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.utilisationPct != null\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? (() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst pct = Math.min(row.utilisationPct, 100);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst barColor =\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpct >= 80 ? \"#10b981\" : pct >= 60 ? \"#f59e0b\" : \"#ef4444\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst bgTint =\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpct >= 80 ? \"#d1fae5\" : pct >= 60 ? \"#fef3c7\" : \"#fee2e2\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ display: \"flex\", alignItems: \"center\", gap: 0.8 }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={utilisationBarBgSx(bgTint)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: `${pct}%`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 4,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: `linear-gradient(90deg, ${barColor}cc, ${barColor})`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: \"width 0.4s ease\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={`${Math.round(pct)}%`}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={utilisationChipSx(bgTint, barColor)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})()\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"—\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t\t{!loading && paginatedData.length === 0 && (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolSpan={columns.length}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpy: 4,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#9e9e9e\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontStyle: \"italic\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo login activity for the selected range\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t</TableContainer>\r\n\r\n\t\t\t\t\t\t<TablePagination\r\n\t\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\t\tcount={filteredData.length}\r\n\t\t\t\t\t\t\tpage={page}\r\n\t\t\t\t\t\t\tonPageChange={(_, p) => setPage(p)}\r\n\t\t\t\t\t\t\trowsPerPage={rowsPerPage}\r\n\t\t\t\t\t\t\trowsPerPageOptions={[5, 10, 20, 25, 50]}\r\n\t\t\t\t\t\t\tonRowsPerPageChange={(e) => {\r\n\t\t\t\t\t\t\t\tsetRowsPerPage(parseInt(e.target.value, 10));\r\n\t\t\t\t\t\t\t\tsetPage(0);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tsx={paginationSx}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Paper>\r\n\r\n\t\t\t\t\t{/* Sessions dialog */}\r\n\t\t\t\t\t<Dialog\r\n\t\t\t\t\t\topen={dialogOpen}\r\n\t\t\t\t\t\tonClose={closeDialog}\r\n\t\t\t\t\t\tmaxWidth=\"md\"\r\n\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\tPaperProps={{ sx: dialogPaperSx }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<DialogTitle sx={dialogTitleSx}>\r\n\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\tvariant=\"h6\"\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tfontFamily: FONT,\r\n\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\tfontSize: \"0.95rem\",\r\n\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.3px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tLogin Sessions\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tfontFamily: FONT,\r\n\t\t\t\t\t\t\t\t\t\topacity: 0.9,\r\n\t\t\t\t\t\t\t\t\t\tfontSize: \"0.76rem\",\r\n\t\t\t\t\t\t\t\t\t\tmt: 0.3,\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{selectedRow?.fullName} • {selectedRow?.numLogins} session\r\n\t\t\t\t\t\t\t\t\t{selectedRow?.numLogins !== 1 ? \"s\" : \"\"}\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.REPORTS_AGENT_LOGIN_MANAGE,\r\n\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.REPORTS_AGENT_LOGIN_EXPORT,\r\n\t\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tstartIcon={<DownloadIcon sx={{ fontSize: \"0.85rem\" }} />}\r\n\t\t\t\t\t\t\t\t\t\tonClick={handleExportSessions}\r\n\t\t\t\t\t\t\t\t\t\tsx={{ whiteSpace: \"nowrap\" }}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\tExport to Excel\r\n\t\t\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\tonClick={closeDialog}\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"rgba(255,255,255,0.1)\",\r\n\t\t\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: \"rgba(255,255,255,0.2)\" },\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<CloseIcon fontSize=\"small\" />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</DialogTitle>\r\n\r\n\t\t\t\t\t\t<DialogContent sx={dialogContentSx}>\r\n\t\t\t\t\t\t\t{sessionsLoading ? (\r\n\t\t\t\t\t\t\t\t<Box sx={{ p: 4, textAlign: \"center\" }}>\r\n\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\tsize={28}\r\n\t\t\t\t\t\t\t\t\t\tsx={{ color: \"var(--primary-color, #1A5F6C)\" }}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t) : sessions.length > 0 ? (\r\n\t\t\t\t\t\t\t\t<Box sx={{ p: 1.5, maxHeight: 300, overflowY: \"auto\" }}>\r\n\t\t\t\t\t\t\t\t\t{Object.entries(\r\n\t\t\t\t\t\t\t\t\t\tsessions.reduce<Record<string, LoginSessionResponse[]>>(\r\n\t\t\t\t\t\t\t\t\t\t\t(acc, s) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tconst dateKey = s.loginTime\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? dayjs(s.loginTime).format(\"DD MMM YYYY\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"Unknown Date\";\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!acc[dateKey]) acc[dateKey] = [];\r\n\t\t\t\t\t\t\t\t\t\t\t\tacc[dateKey].push(s);\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn acc;\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t\t).map(([date, dateSessions]) => (\r\n\t\t\t\t\t\t\t\t\t\t<Paper key={date} elevation={0} sx={sessionCardSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={sessionCardHeaderSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontFamily: FONT,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.8rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"var(--primary-color-dark, #14505b)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.3px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{date}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ px: 1.5, py: 1 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 2,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpb: 0.5,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmb: 0.5,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderBottom: \"1px solid #e4eaf0\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tflex: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontFamily: FONT,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.72rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#555\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"uppercase\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.5px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tLogin\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tflex: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontFamily: FONT,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.72rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#555\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"uppercase\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.5px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tLogout\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{dateSessions.map((s, i) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 2,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpy: 0.6,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderBottom:\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ti < dateSessions.length - 1\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"1px dashed #e8ecf0\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"none\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcomponent=\"span\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tflex: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontFamily: FONT,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.78rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 500,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: s.loginTime ? COLORS.green : \"#9e9e9e\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 0.4,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span style={{ fontSize: \"0.9rem\" }}>{\"↙\"}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{s.loginTime\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? dayjs(s.loginTime).format(\"DD MMM YYYY h:mm:ss A\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"Missing\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcomponent=\"span\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tflex: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontFamily: FONT,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.78rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 500,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: s.logoutTime ? COLORS.red : \"#9e9e9e\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 0.4,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span style={{ fontSize: \"0.9rem\" }}>{\"↗\"}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{s.logoutTime\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? dayjs(s.logoutTime).format(\"DD MMM YYYY h:mm:ss A\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"Missing\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t</Paper>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<Box sx={{ p: 4, textAlign: \"center\" }}>\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tfontFamily: FONT,\r\n\t\t\t\t\t\t\t\t\t\t\tcolor: \"#9e9e9e\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontStyle: \"italic\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.82rem\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\tNo sessions found\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</DialogContent>\r\n\t\t\t\t\t</Dialog>\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t</LocalizationProvider>\r\n\t);\r\n});\r\n\r\n// ──── Default export — wrapped with SDKProvider ───────────────────────────────\r\n\r\nconst LoginReport: React.FC = () => (\r\n\t<SDKProvider>\r\n\t\t<LoginReportContent />\r\n\t</SDKProvider>\r\n);\r\n\r\nexport default LoginReport;\r\n","import { useCallback, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tCdrAgentFilterOption,\r\n\tCdrQueueFilterOption,\r\n\tCdrRecordsPage,\r\n\tCdrReportParams,\r\n} from \"./types\";\r\n\r\n// ─── Build query string for CDR endpoints ────────────────────────────────────\r\n\r\nfunction buildCdrQuery(params: CdrReportParams): string {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\tif (params.agent_id) {\r\n\t\tfor (const id of params.agent_id) qs.append(\"agent_id\", String(id));\r\n\t}\r\n\tif (params.queue_id) {\r\n\t\tfor (const id of params.queue_id) qs.append(\"queue_id\", String(id));\r\n\t}\r\n\tif (params.call_type) qs.append(\"call_type\", params.call_type);\r\n\tif (params.status) qs.append(\"status\", params.status);\r\n\tif (params.search) qs.append(\"search\", params.search);\r\n\tif (params.page) qs.append(\"page\", String(params.page));\r\n\tif (params.page_size) qs.append(\"page_size\", String(params.page_size));\r\n\tconst str = qs.toString();\r\n\treturn str ? `?${str}` : \"\";\r\n}\r\n\r\n// ─── CDR records hook ────────────────────────────────────────────────────────\r\n\r\nexport function useCdrReport() {\r\n\tconst [records, setRecords] = useState<CdrRecordsPage[\"data\"]>([]);\r\n\tconst [totalRecords, setTotalRecords] = useState(0);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst fetchRecords = useCallback(async (params: CdrReportParams): Promise<void> => {\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst qs = buildCdrQuery(params);\r\n\t\t\tconst res = await axiosInstance.get<CdrRecordsPage>(`${END_POINT.CDR_REPORT_RECORDS}${qs}`);\r\n\t\t\tsetRecords(res.data?.data ?? []);\r\n\t\t\tsetTotalRecords(res.data?.total ?? 0);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(\r\n\t\t\t\terr?.response?.data?.message\r\n\t\t\t\t?? err?.response?.data?.detail\r\n\t\t\t\t?? err?.message\r\n\t\t\t\t?? \"Failed to fetch CDR report\"\r\n\t\t\t);\r\n\t\t\tsetRecords([]);\r\n\t\t\tsetTotalRecords(0);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst exportExcel = useCallback(async (params: CdrReportParams): Promise<void> => {\r\n\t\tconst qs = buildCdrQuery(params);\r\n\t\tconst res = await axiosInstance.get(`${END_POINT.CDR_REPORT_EXPORT_EXCEL}${qs}`, {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\tconst blob = res.data as Blob;\r\n\t\tconst url = window.URL.createObjectURL(blob);\r\n\t\tconst a = document.createElement(\"a\");\r\n\t\ta.href = url;\r\n\t\ta.download = `cdr-report-${params.start_date ?? \"export\"}.xlsx`;\r\n\t\tdocument.body.appendChild(a);\r\n\t\ta.click();\r\n\t\ta.remove();\r\n\t\twindow.URL.revokeObjectURL(url);\r\n\t}, []);\r\n\r\n\tconst fetchRecording = useCallback(async (callUuid: string): Promise<Blob> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(callUuid), {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\trecords,\r\n\t\ttotalRecords,\r\n\t\tloading,\r\n\t\terror,\r\n\t\tsetError,\r\n\t\tfetchRecords,\r\n\t\texportExcel,\r\n\t\tfetchRecording,\r\n\t};\r\n}\r\n\r\n// ─── CDR filter options hook (agents + queues) ───────────────────────────────\r\n//\r\n// The main app's CdrReport uses the general user-list and master-queue endpoints\r\n// (NOT a CDR-specific filter endpoint). We mirror that here.\r\n// - agents: GET /api/v1/users/?role=AGENT → filter to role === \"AGENT\"\r\n// - queues: GET /api/v1/master/queue\r\n\r\ninterface UserListItem {\r\n\tid: number;\r\n\tuserId: string;\r\n\tfirstName?: string;\r\n\tlastName?: string;\r\n\trole?: string | { name?: string } | null;\r\n}\r\n\r\ninterface QueueListItem {\r\n\tid: number;\r\n\tname: string;\r\n}\r\n\r\nexport function useCdrFilters() {\r\n\tconst [agents, setAgents] = useState<CdrAgentFilterOption[]>([]);\r\n\tconst [queues, setQueues] = useState<CdrQueueFilterOption[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchAgents = useCallback(async (): Promise<void> => {\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<UserListItem[] | { data: UserListItem[] }>(\r\n\t\t\t\tEND_POINT.USERS_LIST,\r\n\t\t\t\t{ params: { role: \"AGENT\" } },\r\n\t\t\t);\r\n\t\t\tconst raw = Array.isArray(res.data)\r\n\t\t\t\t? res.data\r\n\t\t\t\t: Array.isArray((res.data as any)?.data)\r\n\t\t\t\t\t? (res.data as any).data\r\n\t\t\t\t\t: [];\r\n\t\t\tconst mapped: CdrAgentFilterOption[] = (raw as UserListItem[])\r\n\t\t\t\t.filter((u) => {\r\n\t\t\t\t\tconst roleName = typeof u.role === \"object\" && u.role !== null ? u.role.name : u.role;\r\n\t\t\t\t\treturn roleName === \"AGENT\";\r\n\t\t\t\t})\r\n\t\t\t\t.map((u) => ({\r\n\t\t\t\t\tid: u.id,\r\n\t\t\t\t\tuserId: u.userId,\r\n\t\t\t\t\tfullName: [u.firstName, u.lastName].filter(Boolean).join(\" \") || u.userId,\r\n\t\t\t\t}));\r\n\t\t\tsetAgents(mapped);\r\n\t\t} catch {\r\n\t\t\tsetAgents([]);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchQueues = useCallback(async (): Promise<void> => {\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<QueueListItem[] | { data: QueueListItem[] }>(\r\n\t\t\t\tEND_POINT.MASTER_QUEUES,\r\n\t\t\t);\r\n\t\t\tconst raw = Array.isArray(res.data)\r\n\t\t\t\t? res.data\r\n\t\t\t\t: Array.isArray((res.data as any)?.data)\r\n\t\t\t\t\t? (res.data as any).data\r\n\t\t\t\t\t: [];\r\n\t\t\tsetQueues((raw as QueueListItem[]).map((q) => ({ id: q.id, name: q.name })));\r\n\t\t} catch {\r\n\t\t\tsetQueues([]);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst fetchAll = useCallback(async (): Promise<void> => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tawait Promise.all([fetchAgents(), fetchQueues()]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, [fetchAgents, fetchQueues]);\r\n\r\n\treturn { agents, queues, loading, fetchAgents, fetchQueues, fetchAll };\r\n}\r\n","// ─── CDR record (server response) ────────────────────────────────────────────\r\n\r\nexport interface CdrRecordResponse {\r\n\tcallUuid: string;\r\n\tphoneNumber: string | null;\r\n\tcallStartTime: string | null;\r\n\tconnectTime: string | null;\r\n\tcallType: string | null;\r\n\tcallStatus: string | null;\r\n\tagentName: string | null;\r\n\tagentUserId: string | null;\r\n\tqueueName: string | null;\r\n\textension: string | null;\r\n\ttalkDurationSeconds: number;\r\n\ttalkDurationFmt: string;\r\n\tholdDurationSeconds: number;\r\n\tholdDurationFmt: string;\r\n\tmuteDurationSeconds: number;\r\n\tmuteDurationFmt: string;\r\n\twrapupDurationSeconds: number;\r\n\twrapupDurationFmt: string;\r\n\tringingDurationSeconds: number;\r\n\tringingDurationFmt: string;\r\n\tqueueDurationSeconds: number;\r\n\tqueueDurationFmt: string;\r\n\tivrDurationSeconds: number;\r\n\tivrDurationFmt: string;\r\n\tdisposition: string | null;\r\n\tremarks: string | null;\r\n\twasTransferred: boolean;\r\n\trecordingPath: string | null;\r\n\thangupInitiator: string | null;\r\n}\r\n\r\nexport interface CdrRecordsPage {\r\n\tdata: CdrRecordResponse[];\r\n\ttotal: number;\r\n\tpage: number;\r\n\tpageSize: number;\r\n\ttotalPages: number;\r\n}\r\n\r\n// ─── Filter / query params ───────────────────────────────────────────────────\r\n\r\nexport interface CdrReportParams {\r\n\tstart_date?: string;\r\n\tend_date?: string;\r\n\tagent_id?: number[];\r\n\tqueue_id?: number[];\r\n\tcall_type?: string;\r\n\tstatus?: string;\r\n\tsearch?: string;\r\n\tpage?: number;\r\n\tpage_size?: number;\r\n}\r\n\r\n// ─── Filter options ──────────────────────────────────────────────────────────\r\n\r\nexport interface CdrAgentFilterOption {\r\n\tid: number;\r\n\tuserId: string;\r\n\tfullName: string;\r\n}\r\n\r\nexport interface CdrQueueFilterOption {\r\n\tid: number;\r\n\tname: string;\r\n}\r\n\r\n// ─── Local UI helper shape ───────────────────────────────────────────────────\r\n\r\nexport interface AgentOption {\r\n\tid: number;\r\n\tuserId: string;\r\n\tdisplayName: string;\r\n}\r\n\r\n// ─── Sort helpers ────────────────────────────────────────────────────────────\r\n\r\nexport type SortKey =\r\n\t| \"phoneNumber\"\r\n\t| \"callStartTime\"\r\n\t| \"callType\"\r\n\t| \"callStatus\"\r\n\t| \"agentName\"\r\n\t| \"queueName\"\r\n\t| \"extension\"\r\n\t| \"talkDurationFmt\"\r\n\t| \"holdDurationFmt\"\r\n\t| \"ringingDurationFmt\"\r\n\t| \"queueDurationFmt\"\r\n\t| \"wrapupDurationFmt\"\r\n\t| \"disposition\"\r\n\t| \"remarks\"\r\n\t| \"wasTransferred\";\r\n\r\nexport type SortDir = \"asc\" | \"desc\";\r\n\r\nexport type QuickRange = \"today\" | \"week\" | \"month\" | \"\";\r\n\r\n// ─── Constants ───────────────────────────────────────────────────────────────\r\n\r\nexport const DEFAULT_PAGE_SIZE = 15;\r\n\r\nexport const ROWS_PER_PAGE_OPTIONS = [5, 10, 20, 25, 50] as const;\r\n","import type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\n// ─── Palette (matches main app CdrReport) ────────────────────────────────────\r\n\r\nexport const FONT = \"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\r\n\r\nexport const COLORS = {\r\n\tnavy: \"#0d2a56\",\r\n\tblue: \"#1565c8\",\r\n\tgreen: \"#0a9a62\",\r\n\tamber: \"#c47c00\",\r\n\tred: \"#cc2a2a\",\r\n\tpurple: \"#6b3fbf\",\r\n\tbg: \"transparent\",\r\n\tsurface: \"transparent\",\r\n} as const;\r\n\r\n// ─── Outer layout ────────────────────────────────────────────────────────────\r\n\r\nexport const pageContainerSx: SxProps<Theme> = {\r\n\theight: \"100%\",\r\n\tdisplay: \"flex\",\r\n\tflexDirection: \"column\",\r\n\tfontFamily: FONT,\r\n};\r\n\r\nexport const contentSx: SxProps<Theme> = {\r\n\tflex: 1,\r\n\toverflow: \"auto\",\r\n\tpy: 0.8,\r\n\tpx: 0,\r\n};\r\n\r\n// ─── Filter bar (matches ReportFilterBar — no border/background container) ───\r\n\r\nexport const FILTER_HEIGHT = 32;\r\n\r\nexport const filterBarSx: SxProps<Theme> = {\r\n\tpy: 0.6,\r\n\tpx: 1,\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tgap: 1,\r\n\tflexWrap: \"wrap\",\r\n\trowGap: 1,\r\n};\r\n\r\nexport const filterBarBoxSx: SxProps<Theme> = {\r\n\tmb: 0.8,\r\n};\r\n\r\n// Date picker styling (matches main DateRangePicker)\r\nexport const datePickerSx = {\r\n\twidth: 170,\r\n\t\"& .MuiOutlinedInput-root\": { borderRadius: \"6px\", height: FILTER_HEIGHT, px: 0.5 },\r\n\t\"& .MuiInputBase-input\": { py: 0, px: \"4px\", fontSize: \"0.72rem\" },\r\n\t\"& .MuiInputAdornment-root\": { ml: 0 },\r\n\t\"& .MuiInputAdornment-root .MuiSvgIcon-root\": { fontSize: \"0.8rem\" },\r\n\t\"& .MuiOutlinedInput-notchedOutline\": { borderColor: \"#c0c8d4\" },\r\n\t\"& .MuiPickersSectionList-root\": { py: \"4px\", px: 0, fontSize: 12 },\r\n};\r\n\r\nexport const dateSeparatorSx: SxProps<Theme> = {\r\n\tfontSize: \"0.72rem\",\r\n\tcolor: \"#7a8599\",\r\n};\r\n\r\n// Quick range button — matches ReportFilterBar\r\nexport const quickBtnSx: SxProps<Theme> = {\r\n\theight: FILTER_HEIGHT,\r\n\twhiteSpace: \"nowrap\",\r\n};\r\n\r\n// Multi-select dropdown styling\r\nexport const multiSelectFormSx: SxProps<Theme> = {\r\n\tminWidth: 130,\r\n};\r\n\r\nexport const multiSelectSx: SxProps<Theme> = {\r\n\tfontSize: \"0.76rem\",\r\n\theight: FILTER_HEIGHT,\r\n\tborderRadius: \"6px\",\r\n};\r\n\r\nexport const multiSelectMenuPropsSx = {\r\n\tmaxHeight: 280,\r\n\t\"& .MuiMenuItem-root\": { fontSize: \"0.76rem\", minHeight: 32, py: 0.3 },\r\n};\r\n\r\nexport const multiSelectLabelSx: SxProps<Theme> = {\r\n\tfontSize: \"0.76rem\",\r\n};\r\n\r\n// ─── Search bar (matches SearchBar component) ────────────────────────────────\r\n\r\nexport const searchBarSx: SxProps<Theme> = {\r\n\twidth: 250,\r\n\t\"& .MuiOutlinedInput-root\": {\r\n\t\tborderRadius: \"50px\",\r\n\t\theight: 36,\r\n\t\tbackgroundColor: \"#f5f7f8\",\r\n\t\t\"& fieldset\": { borderColor: \"#dde3e8\" },\r\n\t\t\"&:hover fieldset\": { borderColor: \"#1A5F6C\" },\r\n\t\t\"&.Mui-focused fieldset\": { borderColor: \"#1A5F6C\", borderWidth: \"1.5px\" },\r\n\t},\r\n\t\"& .MuiInputBase-input\": {\r\n\t\tfontSize: \"0.85rem\",\r\n\t\t\"&::placeholder\": { color: \"#94a3b8\", opacity: 1 },\r\n\t},\r\n};\r\n\r\n// ─── Table (matches main app exactly) ────────────────────────────────────────\r\n\r\nexport const tablePaperSx: SxProps<Theme> = {\r\n\tborderRadius: \"8px\",\r\n\tborder: \"1px solid #e0e7ef\",\r\n\toverflow: \"hidden\",\r\n\tmb: 2,\r\n};\r\n\r\nexport const tableSx: SxProps<Theme> = {\r\n\tminWidth: 1400,\r\n\tfontFamily: FONT,\r\n\t\"& .MuiTableCell-root\": {\r\n\t\tfontFamily: FONT,\r\n\t\tfontSize: \"0.75rem\",\r\n\t\tborderBottom: \"1px solid #eef1f6\",\r\n\t\tpy: 0.6,\r\n\t\tpx: 1,\r\n\t\twhiteSpace: \"nowrap\",\r\n\t},\r\n};\r\n\r\n// Identical to headCellSx in @utils/tableStyles\r\nexport const headCellSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tbgcolor: \"#f1f1f1\",\r\n\tcolor: \"#333\",\r\n\tfontWeight: 600,\r\n\twhiteSpace: \"nowrap\",\r\n\tfontSize: \"14px\",\r\n};\r\n\r\nexport const sortLabelSx: SxProps<Theme> = {\r\n\t\"&.MuiTableSortLabel-root\": { color: \"#333\" },\r\n\t\"&.MuiTableSortLabel-root:hover\": { color: \"#555\" },\r\n\t\"&.Mui-active\": { color: \"#333\" },\r\n\t\"& .MuiTableSortLabel-icon\": { color: \"#333 !important\" },\r\n};\r\n\r\nexport const tableRowSx: SxProps<Theme> = {\r\n\tbackgroundColor: \"#fff\",\r\n\t\"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n};\r\n\r\nexport const cellNumberSx: SxProps<Theme> = {\r\n\tfontWeight: 600,\r\n\tcolor: COLORS.navy,\r\n\tfontSize: \"0.75rem\",\r\n};\r\n\r\nexport const cellDateSx: SxProps<Theme> = {\r\n\tfontSize: \"0.73rem\",\r\n\tcolor: \"#4a5568\",\r\n};\r\n\r\nexport const cellTalkSx: SxProps<Theme> = {\r\n\tfontWeight: 600,\r\n\tcolor: COLORS.blue,\r\n\tfontSize: \"0.75rem\",\r\n\tfontVariantNumeric: \"tabular-nums\",\r\n};\r\n\r\nexport const cellHoldSx: SxProps<Theme> = {\r\n\tfontWeight: 500,\r\n\tcolor: COLORS.amber,\r\n\tfontSize: \"0.75rem\",\r\n\tfontVariantNumeric: \"tabular-nums\",\r\n};\r\n\r\nexport const cellDurationSx: SxProps<Theme> = {\r\n\tfontWeight: 500,\r\n\tfontSize: \"0.75rem\",\r\n\tfontVariantNumeric: \"tabular-nums\",\r\n};\r\n\r\n// ─── Pills ───────────────────────────────────────────────────────────────────\r\n\r\nexport const callTypePillSx = (value: string) => {\r\n\tconst v = (value || \"\").toLowerCase();\r\n\tlet color = \"#6b7b8d\";\r\n\tlet bg = \"transparent\";\r\n\tif (v.includes(\"inbound\")) { color = COLORS.green; bg = \"#e6f7ef\"; }\r\n\telse if (v.includes(\"outbound\")) { color = COLORS.blue; bg = \"#e3eefa\"; }\r\n\telse if (v.includes(\"internal\")) { color = COLORS.purple; bg = \"#f0e8ff\"; }\r\n\treturn {\r\n\t\tfontFamily: FONT,\r\n\t\tbgcolor: bg,\r\n\t\tcolor,\r\n\t\tfontWeight: 600,\r\n\t\tfontSize: \"0.65rem\",\r\n\t\theight: 20,\r\n\t\tborderRadius: \"6px\",\r\n\t};\r\n};\r\n\r\nexport const statusPillSx = (value: string) => {\r\n\tconst v = (value || \"\").toLowerCase();\r\n\tlet color = \"#6b7b8d\";\r\n\tlet bg = \"transparent\";\r\n\tif (v.includes(\"answered\")) { color = COLORS.green; bg = \"#e6f7ef\"; }\r\n\telse if (v.includes(\"abandoned\") || v.includes(\"missed\")) { color = COLORS.red; bg = \"#fce8e8\"; }\r\n\treturn {\r\n\t\tfontFamily: FONT,\r\n\t\tbgcolor: bg,\r\n\t\tcolor,\r\n\t\tfontWeight: 600,\r\n\t\tfontSize: \"0.65rem\",\r\n\t\theight: 20,\r\n\t\tborderRadius: \"6px\",\r\n\t};\r\n};\r\n\r\nexport const queueChipSx: SxProps<Theme> = {\r\n\tfontFamily: FONT,\r\n\tbackgroundColor: \"#f0ebfa\",\r\n\tcolor: COLORS.purple,\r\n\tfontWeight: 500,\r\n\tfontSize: \"0.67rem\",\r\n\theight: 22,\r\n};\r\n\r\nexport const transferYesSx: SxProps<Theme> = {\r\n\tfontFamily: FONT,\r\n\tbackgroundColor: \"#e6f7ef\",\r\n\tcolor: COLORS.green,\r\n\tfontWeight: 600,\r\n\tfontSize: \"0.65rem\",\r\n\theight: 20,\r\n\tborderRadius: \"6px\",\r\n};\r\n\r\nexport const transferNoSx: SxProps<Theme> = {\r\n\tfontFamily: FONT,\r\n\tbackgroundColor: \"transparent\",\r\n\tcolor: \"#6b7b8d\",\r\n\tfontWeight: 600,\r\n\tfontSize: \"0.65rem\",\r\n\theight: 20,\r\n\tborderRadius: \"6px\",\r\n};\r\n\r\n// ─── Pagination ──────────────────────────────────────────────────────────────\r\n\r\nexport const paginationSx: SxProps<Theme> = {\r\n\tborderTop: \"1px solid #eef1f6\",\r\n\tfontFamily: FONT,\r\n\t\"& .MuiTablePagination-displayedRows\": { fontFamily: FONT, fontSize: \"0.73rem\" },\r\n\t\"& .MuiTablePagination-selectLabel\": { fontFamily: FONT, fontSize: \"0.73rem\" },\r\n};\r\n\r\n// ─── Misc ────────────────────────────────────────────────────────────────────\r\n\r\nexport const alertSx: SxProps<Theme> = {\r\n\tmt: 1,\r\n\tfontFamily: FONT,\r\n\tfontSize: \"0.78rem\",\r\n};\r\n\r\nexport const loadingBoxSx: SxProps<Theme> = {\r\n\ttextAlign: \"center\",\r\n\tpy: 2.5,\r\n};\r\n","import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport {\r\n\tAlert,\r\n\tBox,\r\n\tCheckbox,\r\n\tChip,\r\n\tCircularProgress,\r\n\tFormControl,\r\n\tIconButton,\r\n\tInputAdornment,\r\n\tInputLabel,\r\n\tMenuItem,\r\n\tPaper,\r\n\tSelect,\r\n\tStack,\r\n\tTable,\r\n\tTableBody,\r\n\tTableCell,\r\n\tTableContainer,\r\n\tTableHead,\r\n\tTablePagination,\r\n\tTableRow,\r\n\tTableSortLabel,\r\n\tTextField,\r\n\tTooltip,\r\n\tTypography,\r\n} from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport DownloadIcon from \"@mui/icons-material/Download\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\n\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\nimport isoWeek from \"dayjs/plugin/isoWeek\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { DateTimePicker } from \"@mui/x-date-pickers/DateTimePicker\";\r\n\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPageHeader } from \"../../components/SDKPageHeader\";\r\nimport { SDKButton } from \"../../components/SDKButton\";\r\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\r\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\r\n\r\nimport { useCdrFilters, useCdrReport } from \"./useCdrReport\";\r\nimport type {\r\n\tCdrAgentFilterOption,\r\n\tCdrQueueFilterOption,\r\n\tCdrRecordResponse,\r\n\tCdrReportParams,\r\n\tQuickRange,\r\n\tSortDir,\r\n\tSortKey,\r\n} from \"./types\";\r\nimport { DEFAULT_PAGE_SIZE, ROWS_PER_PAGE_OPTIONS } from \"./types\";\r\nimport {\r\n\tCOLORS,\r\n\tFONT,\r\n\talertSx,\r\n\tcallTypePillSx,\r\n\tcellDateSx,\r\n\tcellDurationSx,\r\n\tcellHoldSx,\r\n\tcellNumberSx,\r\n\tcellTalkSx,\r\n\tcontentSx,\r\n\tdatePickerSx,\r\n\tdateSeparatorSx,\r\n\tfilterBarBoxSx,\r\n\tfilterBarSx,\r\n\theadCellSx,\r\n\tloadingBoxSx,\r\n\tmultiSelectFormSx,\r\n\tmultiSelectLabelSx,\r\n\tmultiSelectMenuPropsSx,\r\n\tmultiSelectSx,\r\n\tpageContainerSx,\r\n\tpaginationSx,\r\n\tqueueChipSx,\r\n\tquickBtnSx,\r\n\tsearchBarSx,\r\n\tsortLabelSx,\r\n\tstatusPillSx,\r\n\ttablePaperSx,\r\n\ttableRowSx,\r\n\ttableSx,\r\n\ttransferNoSx,\r\n\ttransferYesSx,\r\n} from \"./styles\";\r\n\r\ndayjs.extend(isoWeek);\r\n\r\nconst AGENT_SELECT_ALL_ID = -999;\r\n\r\n// ─── Sort comparator ─────────────────────────────────────────────────────────\r\n\r\nconst comparator = (a: CdrRecordResponse, b: CdrRecordResponse, key: SortKey): number => {\r\n\tconst av = a[key as keyof CdrRecordResponse];\r\n\tconst bv = b[key as keyof CdrRecordResponse];\r\n\tif (typeof av === \"number\" && typeof bv === \"number\") return av - bv;\r\n\tif (typeof av === \"boolean\" && typeof bv === \"boolean\") return (av ? 1 : 0) - (bv ? 1 : 0);\r\n\treturn String(av ?? \"\").localeCompare(String(bv ?? \"\"));\r\n};\r\n\r\n// ─── Recording cell ──────────────────────────────────────────────────────────\r\n\r\ninterface RecordingCellProps {\r\n\tcallUuid: string;\r\n\trecordingPath: string | null;\r\n\tfetchRecording: (uuid: string) => Promise<Blob>;\r\n}\r\n\r\nconst RecordingCell = memo(function RecordingCell({\r\n\tcallUuid, recordingPath, fetchRecording,\r\n}: RecordingCellProps) {\r\n\tconst [audioUrl, setAudioUrl] = useState<string | null>(null);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(false);\r\n\tconst unavailable = recordingPath === null;\r\n\r\n\tconst handlePlay = async () => {\r\n\t\tif (audioUrl) return;\r\n\t\ttry {\r\n\t\t\tsetLoading(true);\r\n\t\t\tsetError(false);\r\n\t\t\tconst blob = await fetchRecording(callUuid);\r\n\t\t\tsetAudioUrl(URL.createObjectURL(blob));\r\n\t\t} catch {\r\n\t\t\tsetError(true);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleDownload = async () => {\r\n\t\ttry {\r\n\t\t\tconst blob = audioUrl\r\n\t\t\t\t? await fetch(audioUrl).then((r) => r.blob())\r\n\t\t\t\t: await fetchRecording(callUuid);\r\n\t\t\tconst url = URL.createObjectURL(blob);\r\n\t\t\tconst a = document.createElement(\"a\");\r\n\t\t\ta.href = url;\r\n\t\t\ta.download = `recording_${callUuid}.wav`;\r\n\t\t\ta.click();\r\n\t\t\tURL.revokeObjectURL(url);\r\n\t\t} catch {\r\n\t\t\t/* swallow */\r\n\t\t}\r\n\t};\r\n\r\n\tif (audioUrl) {\r\n\t\treturn (\r\n\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n\t\t\t\t<audio\r\n\t\t\t\t\tcontrols\r\n\t\t\t\t\tautoPlay\r\n\t\t\t\t\tsrc={audioUrl}\r\n\t\t\t\t\tonEnded={() => {\r\n\t\t\t\t\t\tif (audioUrl.startsWith(\"blob:\")) URL.revokeObjectURL(audioUrl);\r\n\t\t\t\t\t\tsetAudioUrl(null);\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tstyle={{ width: 180, height: 30 }}\r\n\t\t\t\t/>\r\n\t\t\t\t<Tooltip title=\"Download\">\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={handleDownload} sx={{ color: COLORS.blue, p: 0.4 }}>\r\n\t\t\t\t\t\t<FileDownloadIcon sx={{ fontSize: 16 }} />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</Tooltip>\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\tconst disabled = loading || error || unavailable;\r\n\tconst playTitle = unavailable || error ? \"Recording Unavailable\" : \"Play\";\r\n\tconst dlTitle = unavailable || error ? \"Recording Unavailable\" : \"Download\";\r\n\r\n\treturn (\r\n\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\r\n\t\t\t<Tooltip title={playTitle}>\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={handlePlay} disabled={disabled}\r\n\t\t\t\t\t\tsx={{ color: unavailable ? \"#b0b8c8\" : COLORS.green, p: 0.4 }}>\r\n\t\t\t\t\t\t{loading ? <CircularProgress size={14} /> : <PlayArrowIcon sx={{ fontSize: 16 }} />}\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</span>\r\n\t\t\t</Tooltip>\r\n\t\t\t<Tooltip title={dlTitle}>\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={handleDownload} disabled={disabled}\r\n\t\t\t\t\t\tsx={{ color: unavailable ? \"#b0b8c8\" : COLORS.blue, p: 0.4 }}>\r\n\t\t\t\t\t\t<FileDownloadIcon sx={{ fontSize: 16 }} />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</span>\r\n\t\t\t</Tooltip>\r\n\t\t</Box>\r\n\t);\r\n});\r\n\r\n// ─── Filter bar (visually identical to ReportFilterBar) ──────────────────────\r\n\r\ninterface FilterBarProps {\r\n\tstartDate: Dayjs | null;\r\n\tendDate: Dayjs | null;\r\n\tonStartChange: (val: Dayjs | null) => void;\r\n\tonEndChange: (val: Dayjs | null) => void;\r\n\tquickRange: QuickRange;\r\n\tonQuickRangeChange: (range: QuickRange) => void;\r\n\tagents: CdrAgentFilterOption[];\r\n\tselectedAgentIds: number[];\r\n\tonAgentsChange: (ids: number[]) => void;\r\n\tqueues: CdrQueueFilterOption[];\r\n\tselectedQueueIds: number[];\r\n\tonQueuesChange: (ids: number[]) => void;\r\n}\r\n\r\nconst FilterBar = memo(function FilterBar({\r\n\tstartDate, endDate, onStartChange, onEndChange,\r\n\tquickRange, onQuickRangeChange,\r\n\tagents, selectedAgentIds, onAgentsChange,\r\n\tqueues, selectedQueueIds, onQueuesChange,\r\n}: FilterBarProps) {\r\n\tconst setQuick = (range: QuickRange) => {\r\n\t\tonQuickRangeChange(range);\r\n\t\tconst today = dayjs();\r\n\t\tlet sd: Dayjs = today.startOf(\"day\");\r\n\t\tconst ed: Dayjs = today;\r\n\t\tif (range === \"week\") sd = today.startOf(\"week\").startOf(\"day\");\r\n\t\telse if (range === \"month\") sd = today.startOf(\"month\").startOf(\"day\");\r\n\t\tonStartChange(sd);\r\n\t\tonEndChange(ed);\r\n\t};\r\n\r\n\tconst now = dayjs();\r\n\r\n\tconst clampFuture = (v: Dayjs | null): Dayjs | null => {\r\n\t\tif (!v) return v;\r\n\t\tconst current = dayjs();\r\n\t\treturn v.isAfter(current) ? current : v;\r\n\t};\r\n\r\n\tconst handleStartChange = (v: Dayjs | null) => {\r\n\t\tconst clamped = clampFuture(v);\r\n\t\tonStartChange(clamped);\r\n\t\tonQuickRangeChange(\"\");\r\n\t\tif (clamped && endDate && endDate.isBefore(clamped)) {\r\n\t\t\tonEndChange(clamped);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleEndChange = (v: Dayjs | null) => {\r\n\t\tlet clamped = clampFuture(v);\r\n\t\tif (clamped && startDate && clamped.isBefore(startDate)) {\r\n\t\t\tclamped = startDate;\r\n\t\t}\r\n\t\tonEndChange(clamped);\r\n\t\tonQuickRangeChange(\"\");\r\n\t};\r\n\r\n\tconst startMax = endDate && endDate.isBefore(now) ? endDate : now;\r\n\tconst allAgentsSelected = agents.length > 0 && selectedAgentIds.length === agents.length;\r\n\tconst allQueuesSelected = queues.length > 0 && selectedQueueIds.length === queues.length;\r\n\r\n\treturn (\r\n\t\t<Box sx={filterBarSx}>\r\n\t\t\t{/* Date range pickers */}\r\n\t\t\t<DateTimePicker\r\n\t\t\t\tvalue={startDate}\r\n\t\t\t\tonChange={(v) => handleStartChange(v as Dayjs | null)}\r\n\t\t\t\tdisableFuture\r\n\t\t\t\tmaxDateTime={startMax}\r\n\t\t\t\tformat=\"DD-MM-YYYY hh:mm A\"\r\n\t\t\t\tslotProps={{ textField: { size: \"small\", sx: datePickerSx } }}\r\n\t\t\t/>\r\n\t\t\t<Typography sx={dateSeparatorSx}>to</Typography>\r\n\t\t\t<DateTimePicker\r\n\t\t\t\tvalue={endDate}\r\n\t\t\t\tonChange={(v) => handleEndChange(v as Dayjs | null)}\r\n\t\t\t\tdisableFuture\r\n\t\t\t\tmaxDateTime={now}\r\n\t\t\t\t{...(startDate ? { minDateTime: startDate } : {})}\r\n\t\t\t\tformat=\"DD-MM-YYYY hh:mm A\"\r\n\t\t\t\tslotProps={{ textField: { size: \"small\", sx: datePickerSx } }}\r\n\t\t\t/>\r\n\r\n\t\t\t{/* Quick range buttons — match AppButton primary/outlined */}\r\n\t\t\t<SDKButton\r\n\t\t\t\tvariant={quickRange === \"today\" ? \"primary\" : \"outlined\"}\r\n\t\t\t\tonClick={() => setQuick(\"today\")}\r\n\t\t\t\tsx={quickBtnSx}\r\n\t\t\t>\r\n\t\t\t\tToday\r\n\t\t\t</SDKButton>\r\n\t\t\t<SDKButton\r\n\t\t\t\tvariant={quickRange === \"week\" ? \"primary\" : \"outlined\"}\r\n\t\t\t\tonClick={() => setQuick(\"week\")}\r\n\t\t\t\tsx={quickBtnSx}\r\n\t\t\t>\r\n\t\t\t\tThis Week\r\n\t\t\t</SDKButton>\r\n\t\t\t<SDKButton\r\n\t\t\t\tvariant={quickRange === \"month\" ? \"primary\" : \"outlined\"}\r\n\t\t\t\tonClick={() => setQuick(\"month\")}\r\n\t\t\t\tsx={quickBtnSx}\r\n\t\t\t>\r\n\t\t\t\tThis Month\r\n\t\t\t</SDKButton>\r\n\r\n\t\t\t{/* Agents multi-select — matches AgentMultiSelect from main app */}\r\n\t\t\t<FormControl size=\"small\" sx={multiSelectFormSx}>\r\n\t\t\t\t<InputLabel sx={multiSelectLabelSx}>Agents</InputLabel>\r\n\t\t\t\t<Select\r\n\t\t\t\t\tmultiple\r\n\t\t\t\t\tvalue={selectedAgentIds}\r\n\t\t\t\t\tlabel=\"Agents\"\r\n\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\tconst ids = e.target.value as number[];\r\n\t\t\t\t\t\tif (ids.includes(AGENT_SELECT_ALL_ID)) {\r\n\t\t\t\t\t\t\tonAgentsChange(allAgentsSelected ? [] : agents.map((a) => a.id));\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tonAgentsChange(ids);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}}\r\n\t\t\t\t\trenderValue={(selected) => {\r\n\t\t\t\t\t\tconst sel = selected as number[];\r\n\t\t\t\t\t\tif (sel.length === 0 || sel.length === agents.length) return \"All Agents\";\r\n\t\t\t\t\t\treturn `${sel.length} Agent(s)`;\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tsx={multiSelectSx}\r\n\t\t\t\t\tMenuProps={{ PaperProps: { sx: multiSelectMenuPropsSx } }}\r\n\t\t\t\t>\r\n\t\t\t\t\t<MenuItem value={AGENT_SELECT_ALL_ID}>\r\n\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\tchecked={allAgentsSelected}\r\n\t\t\t\t\t\t\tindeterminate={selectedAgentIds.length > 0 && !allAgentsSelected}\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\tSelect All\r\n\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t{agents.map((a) => (\r\n\t\t\t\t\t\t<MenuItem key={a.id} value={a.id}>\r\n\t\t\t\t\t\t\t<Checkbox checked={selectedAgentIds.includes(a.id)} size=\"small\" />\r\n\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\tnoWrap\r\n\t\t\t\t\t\t\t\tsx={{ fontSize: \"0.76rem\", maxWidth: 180 }}\r\n\t\t\t\t\t\t\t\ttitle={a.fullName || a.userId}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{a.fullName || a.userId}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Select>\r\n\t\t\t</FormControl>\r\n\r\n\t\t\t{/* Queues multi-select — matches ReportFilterBar */}\r\n\t\t\t<FormControl size=\"small\" sx={multiSelectFormSx}>\r\n\t\t\t\t<InputLabel sx={multiSelectLabelSx}>All Queues</InputLabel>\r\n\t\t\t\t<Select\r\n\t\t\t\t\tmultiple\r\n\t\t\t\t\tvalue={selectedQueueIds}\r\n\t\t\t\t\tlabel=\"All Queues\"\r\n\t\t\t\t\tsx={multiSelectSx}\r\n\t\t\t\t\tMenuProps={{ PaperProps: { sx: multiSelectMenuPropsSx } }}\r\n\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\tconst ids = e.target.value as number[];\r\n\t\t\t\t\t\tif (ids.includes(-1)) {\r\n\t\t\t\t\t\t\tonQueuesChange(allQueuesSelected ? [] : queues.map((q) => q.id));\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tonQueuesChange(ids);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}}\r\n\t\t\t\t\trenderValue={(selected) => {\r\n\t\t\t\t\t\tconst sel = selected as number[];\r\n\t\t\t\t\t\tif (sel.length === 0) return \"All Queues\";\r\n\t\t\t\t\t\tif (sel.length === queues.length) return \"All Queues\";\r\n\t\t\t\t\t\treturn `${sel.length} Queue(s)`;\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<MenuItem value={-1}>\r\n\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\tchecked={selectedQueueIds.length === queues.length && queues.length > 0}\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\tSelect All\r\n\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t{queues.map((q) => (\r\n\t\t\t\t\t\t<MenuItem key={q.id} value={q.id}>\r\n\t\t\t\t\t\t\t<Checkbox checked={selectedQueueIds.includes(q.id)} size=\"small\" />\r\n\t\t\t\t\t\t\t{q.name}\r\n\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</Select>\r\n\t\t\t</FormControl>\r\n\t\t</Box>\r\n\t);\r\n});\r\n\r\n// ─── Search bar (matches SearchBar component) ────────────────────────────────\r\n\r\ninterface SearchBarLocalProps {\r\n\tvalue: string;\r\n\tonChange: (v: string) => void;\r\n}\r\n\r\nconst SearchBarLocal = memo(function SearchBarLocal({ value, onChange }: SearchBarLocalProps) {\r\n\treturn (\r\n\t\t<TextField\r\n\t\t\tsize=\"small\"\r\n\t\t\tplaceholder=\"Search phone, agent...\"\r\n\t\t\tvalue={value}\r\n\t\t\tonChange={(e) => onChange(e.target.value)}\r\n\t\t\tslotProps={{\r\n\t\t\t\tinput: {\r\n\t\t\t\t\tstartAdornment: (\r\n\t\t\t\t\t\t<InputAdornment position=\"start\">\r\n\t\t\t\t\t\t\t<SearchIcon sx={{ color: \"#1A5F6C\", fontSize: 18 }} />\r\n\t\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t\t),\r\n\t\t\t\t\tendAdornment: value ? (\r\n\t\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t\t<IconButton size=\"small\" onClick={() => onChange(\"\")} edge=\"end\">\r\n\t\t\t\t\t\t\t\t<CloseIcon sx={{ fontSize: 16, color: \"#94a3b8\" }} />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t\t) : undefined,\r\n\t\t\t\t},\r\n\t\t\t}}\r\n\t\t\tsx={searchBarSx}\r\n\t\t/>\r\n\t);\r\n});\r\n\r\n// ─── Main content ────────────────────────────────────────────────────────────\r\n\r\nconst CdrReportContent = memo(function CdrReportContent() {\r\n\t// Filter state\r\n\tconst [startDate, setStartDate] = useState<Dayjs | null>(dayjs().startOf(\"day\"));\r\n\tconst [endDate, setEndDate] = useState<Dayjs | null>(dayjs());\r\n\tconst [quickRange, setQuickRange] = useState<QuickRange>(\"today\");\r\n\tconst [searchText, setSearchText] = useState(\"\");\r\n\tconst [selectedAgentIds, setSelectedAgentIds] = useState<number[]>([]);\r\n\tconst [selectedQueueIds, setSelectedQueueIds] = useState<number[]>([]);\r\n\r\n\t// Table state\r\n\tconst [page, setPage] = useState(0);\r\n\tconst [rowsPerPage, setRowsPerPage] = useState<number>(DEFAULT_PAGE_SIZE);\r\n\tconst [sortKey, setSortKey] = useState<SortKey>(\"callStartTime\");\r\n\tconst [sortDir, setSortDir] = useState<SortDir>(\"desc\");\r\n\r\n\t// Debounced search\r\n\tconst [debouncedSearch, setDebouncedSearch] = useState(\"\");\r\n\tconst debounceRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\r\n\r\n\tuseEffect(() => {\r\n\t\tdebounceRef.current = setTimeout(() => setDebouncedSearch(searchText.trim()), 400);\r\n\t\treturn () => { if (debounceRef.current) clearTimeout(debounceRef.current); };\r\n\t}, [searchText]);\r\n\r\n\t// Data hooks\r\n\tconst {\r\n\t\trecords, totalRecords, loading, error, setError,\r\n\t\tfetchRecords, exportExcel, fetchRecording,\r\n\t} = useCdrReport();\r\n\r\n\tconst { agents, queues, fetchAll: fetchFilters } = useCdrFilters();\r\n\r\n\tuseEffect(() => {\r\n\t\tfetchFilters();\r\n\t}, [fetchFilters]);\r\n\r\n\tconst buildParams = useCallback((pageNum: number): CdrReportParams => {\r\n\t\tconst sd = startDate ?? dayjs();\r\n\t\tconst ed = endDate ?? dayjs();\r\n\t\treturn {\r\n\t\t\tstart_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\tend_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\tagent_id: selectedAgentIds.length > 0 ? selectedAgentIds : undefined,\r\n\t\t\tqueue_id: selectedQueueIds.length > 0 ? selectedQueueIds : undefined,\r\n\t\t\tsearch: debouncedSearch || undefined,\r\n\t\t\tpage: pageNum + 1,\r\n\t\t\tpage_size: rowsPerPage,\r\n\t\t};\r\n\t}, [startDate, endDate, selectedAgentIds, selectedQueueIds, debouncedSearch, rowsPerPage]);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetPage(0);\r\n\t\tfetchRecords(buildParams(0));\r\n\t}, [buildParams, fetchRecords]);\r\n\r\n\tconst handlePageChange = useCallback(\r\n\t\t(_e: React.MouseEvent<HTMLButtonElement> | null, newPage: number) => {\r\n\t\t\tsetPage(newPage);\r\n\t\t\tfetchRecords(buildParams(newPage));\r\n\t\t},\r\n\t\t[buildParams, fetchRecords],\r\n\t);\r\n\r\n\tconst handleRowsPerPageChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n\t\tsetRowsPerPage(parseInt(e.target.value, 10));\r\n\t\tsetPage(0);\r\n\t}, []);\r\n\r\n\tconst handleSort = useCallback((key: SortKey) => {\r\n\t\tsetSortKey((prevKey) => {\r\n\t\t\tif (prevKey === key) {\r\n\t\t\t\tsetSortDir((d) => (d === \"asc\" ? \"desc\" : \"asc\"));\r\n\t\t\t\treturn prevKey;\r\n\t\t\t}\r\n\t\t\tsetSortDir(\"asc\");\r\n\t\t\treturn key;\r\n\t\t});\r\n\t}, []);\r\n\r\n\tconst sortedRecords = useMemo(() => {\r\n\t\tconst rows = [...records];\r\n\t\trows.sort((a, b) => {\r\n\t\t\tconst cmp = comparator(a, b, sortKey);\r\n\t\t\treturn sortDir === \"asc\" ? cmp : -cmp;\r\n\t\t});\r\n\t\treturn rows;\r\n\t}, [records, sortKey, sortDir]);\r\n\r\n\tconst handleExportExcel = useCallback(async () => {\r\n\t\tconst sd = startDate ?? dayjs();\r\n\t\tconst ed = endDate ?? dayjs();\r\n\t\ttry {\r\n\t\t\tawait exportExcel({\r\n\t\t\t\tstart_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\tend_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\tagent_id: selectedAgentIds.length > 0 ? selectedAgentIds : undefined,\r\n\t\t\t\tqueue_id: selectedQueueIds.length > 0 ? selectedQueueIds : undefined,\r\n\t\t\t\tsearch: debouncedSearch || undefined,\r\n\t\t\t});\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(err?.message || \"Failed to export Excel\");\r\n\t\t}\r\n\t}, [startDate, endDate, selectedAgentIds, selectedQueueIds, debouncedSearch, exportExcel, setError]);\r\n\r\n\tconst columns: { id: SortKey; label: string }[] = [\r\n\t\t{ id: \"phoneNumber\", label: \"Phone Number\" },\r\n\t\t{ id: \"callStartTime\", label: \"Call Start\" },\r\n\t\t{ id: \"callType\", label: \"Call Type\" },\r\n\t\t{ id: \"callStatus\", label: \"Status\" },\r\n\t\t{ id: \"agentName\", label: \"User Name\" },\r\n\t\t{ id: \"queueName\", label: \"Queues\" },\r\n\t\t{ id: \"extension\", label: \"Extension\" },\r\n\t\t{ id: \"talkDurationFmt\", label: \"Talk Duration\" },\r\n\t\t{ id: \"holdDurationFmt\", label: \"Hold Duration\" },\r\n\t\t{ id: \"ringingDurationFmt\", label: \"Ringing Duration\" },\r\n\t\t{ id: \"queueDurationFmt\", label: \"Queue Duration\" },\r\n\t\t{ id: \"wrapupDurationFmt\", label: \"Wrapup Duration\" },\r\n\t\t{ id: \"disposition\", label: \"Disposition\" },\r\n\t\t{ id: \"remarks\", label: \"Remarks\" },\r\n\t\t{ id: \"wasTransferred\", label: \"Transferred\" },\r\n\t];\r\n\r\n\treturn (\r\n\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\r\n\t\t\t<Box sx={pageContainerSx}>\r\n\t\t\t\t{/* Page header */}\r\n\t\t\t\t<SDKPageHeader\r\n\t\t\t\t\ttitle=\"CDR Report\"\r\n\t\t\t\t\tactions={\r\n\t\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" spacing={1}>\r\n\t\t\t\t\t\t\t<SearchBarLocal value={searchText} onChange={setSearchText} />\r\n\t\t\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.REPORTS_CDR_EXPORT,\r\n\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.REPORTS_CDR_MANAGE,\r\n\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\t\t\t\tstartIcon={<DownloadIcon sx={{ fontSize: \"0.95rem !important\" }} />}\r\n\t\t\t\t\t\t\t\t\tdisabled={!records.length}\r\n\t\t\t\t\t\t\t\t\tonClick={handleExportExcel}\r\n\t\t\t\t\t\t\t\t\tsx={{ height: 36 }}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tExport Excel\r\n\t\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t<Box sx={contentSx}>\r\n\t\t\t\t\t{/* Filter bar */}\r\n\t\t\t\t\t<Box sx={filterBarBoxSx}>\r\n\t\t\t\t\t\t<FilterBar\r\n\t\t\t\t\t\t\tstartDate={startDate}\r\n\t\t\t\t\t\t\tendDate={endDate}\r\n\t\t\t\t\t\t\tonStartChange={setStartDate}\r\n\t\t\t\t\t\t\tonEndChange={setEndDate}\r\n\t\t\t\t\t\t\tquickRange={quickRange}\r\n\t\t\t\t\t\t\tonQuickRangeChange={setQuickRange}\r\n\t\t\t\t\t\t\tagents={agents}\r\n\t\t\t\t\t\t\tselectedAgentIds={selectedAgentIds}\r\n\t\t\t\t\t\t\tonAgentsChange={setSelectedAgentIds}\r\n\t\t\t\t\t\t\tqueues={queues}\r\n\t\t\t\t\t\t\tselectedQueueIds={selectedQueueIds}\r\n\t\t\t\t\t\t\tonQueuesChange={setSelectedQueueIds}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t{error && <Alert severity=\"error\" sx={alertSx}>{error}</Alert>}\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t{loading && (\r\n\t\t\t\t\t\t<Box sx={loadingBoxSx}>\r\n\t\t\t\t\t\t\t<CircularProgress sx={{ color: COLORS.blue }} size={28} />\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{/* Main table */}\r\n\t\t\t\t\t<Paper elevation={0} sx={tablePaperSx}>\r\n\t\t\t\t\t\t<TableContainer>\r\n\t\t\t\t\t\t\t<Table size=\"small\" sx={tableSx}>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t{columns.map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell key={col.id} sx={headCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableSortLabel\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive={sortKey === col.id}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdirection={sortKey === col.id ? sortDir : \"asc\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleSort(col.id)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={sortLabelSx}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{col.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableSortLabel>\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...(headCellSx as object), minWidth: 220 }}>Recording</TableCell>\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{!loading && sortedRecords.length === 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={columns.length + 1} align=\"center\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ py: 4, color: \"#999\", fontFamily: FONT, fontSize: \"0.85rem\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo CDR records for the selected filters.\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\tsortedRecords.map((row, idx) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<TableRow key={row.callUuid || idx} hover sx={tableRowSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={cellNumberSx}>{row.phoneNumber || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={cellDateSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.callStartTime\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? dayjs(row.callStartTime).format(\"DD MMM YYYY hh:mm A\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.callType ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip label={row.callType} size=\"small\" sx={callTypePillSx(row.callType)} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.callStatus ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip label={row.callStatus} size=\"small\" sx={statusPillSx(row.callStatus)} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={cellDateSx}>{row.agentName || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.queueName ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip label={row.queueName} size=\"small\" sx={queueChipSx} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={cellDateSx}>{row.extension || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={cellTalkSx}>{row.talkDurationFmt || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={cellHoldSx}>{row.holdDurationFmt || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={cellDurationSx}>{row.ringingDurationFmt || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={cellDurationSx}>{row.queueDurationFmt || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={cellDurationSx}>{row.wrapupDurationFmt || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={cellDateSx}>{row.disposition || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={cellDateSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.remarks ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={row.remarks}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span style={{ display: \"inline-block\", maxWidth: 180, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\", verticalAlign: \"bottom\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.remarks}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={row.wasTransferred ? \"Yes\" : \"No\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={row.wasTransferred ? transferYesSx : transferNoSx}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{row.callUuid ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<RecordingCell\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcallUuid={row.callUuid}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trecordingPath={row.recordingPath}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfetchRecording={fetchRecording}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t</TableContainer>\r\n\r\n\t\t\t\t\t\t<TablePagination\r\n\t\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\t\tcount={totalRecords}\r\n\t\t\t\t\t\t\tpage={page}\r\n\t\t\t\t\t\t\tonPageChange={handlePageChange}\r\n\t\t\t\t\t\t\trowsPerPage={rowsPerPage}\r\n\t\t\t\t\t\t\trowsPerPageOptions={[...ROWS_PER_PAGE_OPTIONS]}\r\n\t\t\t\t\t\t\tonRowsPerPageChange={handleRowsPerPageChange}\r\n\t\t\t\t\t\t\tsx={paginationSx}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Paper>\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t</LocalizationProvider>\r\n\t);\r\n});\r\n\r\n// ─── Default export wrapped with SDKProvider ─────────────────────────────────\r\n\r\nconst CdrReport: React.FC = () => (\r\n\t<SDKProvider>\r\n\t\t<CdrReportContent />\r\n\t</SDKProvider>\r\n);\r\n\r\nexport default CdrReport;\r\n","import { useCallback, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type { AgentPerfReportParams, AgentPerfRow } from \"./types\";\r\n\r\nfunction buildQs(params: AgentPerfReportParams): string {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\tif (params.agent_id) for (const id of params.agent_id) qs.append(\"agent_id\", id);\r\n\tif (params.queue_id) for (const id of params.queue_id) qs.append(\"queue_id\", String(id));\r\n\tif (params.process_id) for (const id of params.process_id) qs.append(\"process_id\", String(id));\r\n\tif (params.top_n) qs.append(\"top_n\", String(params.top_n));\r\n\tconst str = qs.toString();\r\n\treturn str ? `?${str}` : \"\";\r\n}\r\n\r\nexport function useAgentPerformanceReport() {\r\n\tconst [agents, setAgents] = useState<AgentPerfRow[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst fetchAgents = useCallback(async (params: AgentPerfReportParams) => {\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<AgentPerfRow[]>(\r\n\t\t\t\t`${END_POINT.AGENT_PERFORMANCE_REPORT_AGENTS}${buildQs(params)}`,\r\n\t\t\t);\r\n\t\t\tsetAgents(Array.isArray(res.data) ? res.data : []);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(err?.response?.data?.message || err?.message || \"Failed to fetch performance report\");\r\n\t\t\tsetAgents([]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst exportExcel = useCallback(async (params: AgentPerfReportParams) => {\r\n\t\tconst res = await axiosInstance.get(\r\n\t\t\t`${END_POINT.AGENT_PERFORMANCE_REPORT_EXPORT_EXCEL}${buildQs(params)}`,\r\n\t\t\t{ responseType: \"blob\" },\r\n\t\t);\r\n\t\tconst url = URL.createObjectURL(new Blob([res.data]));\r\n\t\tconst a = document.createElement(\"a\");\r\n\t\ta.href = url;\r\n\t\ta.download = `agent-performance-${params.start_date ?? \"export\"}.xlsx`;\r\n\t\ta.click();\r\n\t\tURL.revokeObjectURL(url);\r\n\t}, []);\r\n\r\n\treturn { agents, loading, error, setError, fetchAgents, exportExcel };\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tAgentDetailReportParams,\r\n\tAgentDetailReportResponse,\r\n\tCdrReportParams,\r\n\tCdrReportResponse,\r\n} from \"./types\";\r\n\r\nfunction buildCdrQs(params: CdrReportParams): string {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\tif (params.agent_id) for (const id of params.agent_id) qs.append(\"agent_id\", String(id));\r\n\tif (params.queue_id) for (const id of params.queue_id) qs.append(\"queue_id\", String(id));\r\n\tif (params.call_type) qs.append(\"call_type\", params.call_type);\r\n\tif (params.status) qs.append(\"status\", params.status);\r\n\tif (params.search) qs.append(\"search\", params.search);\r\n\tif (params.page) qs.append(\"page\", String(params.page));\r\n\tif (params.page_size) qs.append(\"page_size\", String(params.page_size));\r\n\tconst str = qs.toString();\r\n\treturn str ? `?${str}` : \"\";\r\n}\r\n\r\nexport function useAgentDetailReport() {\r\n\tconst [detail, setDetail] = useState<AgentDetailReportResponse | null>(null);\r\n\tconst [detailLoading, setDetailLoading] = useState(false);\r\n\tconst [detailError, setDetailError] = useState(\"\");\r\n\r\n\tconst fetchDetail = useCallback(\r\n\t\tasync (agentId: string, params: AgentDetailReportParams) => {\r\n\t\t\tif (!agentId) return;\r\n\t\t\tsetDetailLoading(true);\r\n\t\t\tsetDetailError(\"\");\r\n\t\t\ttry {\r\n\t\t\t\tconst qs = new URLSearchParams();\r\n\t\t\t\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\t\t\t\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\t\t\t\tconst qsStr = qs.toString();\r\n\t\t\t\tconst url = `${END_POINT.AGENT_DETAIL_REPORT(agentId)}${qsStr ? `?${qsStr}` : \"\"}`;\r\n\t\t\t\tconst res = await axiosInstance.get<AgentDetailReportResponse>(url);\r\n\t\t\t\tsetDetail(res.data);\r\n\t\t\t} catch (err: any) {\r\n\t\t\t\tsetDetailError(err?.response?.data?.message || err?.message || \"Failed to load agent detail\");\r\n\t\t\t\tsetDetail(null);\r\n\t\t\t} finally {\r\n\t\t\t\tsetDetailLoading(false);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[],\r\n\t);\r\n\r\n\treturn { detail, detailLoading, detailError, setDetailError, fetchDetail };\r\n}\r\n\r\nexport function useAgentCdrRecords() {\r\n\tconst [records, setRecords] = useState<CdrReportResponse[\"records\"][\"data\"]>([]);\r\n\tconst [total, setTotal] = useState(0);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst fetchCdr = useCallback(async (params: CdrReportParams) => {\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<CdrReportResponse>(\r\n\t\t\t\t`${END_POINT.CDR_REPORT}${buildCdrQs(params)}`,\r\n\t\t\t);\r\n\t\t\tsetRecords(res.data?.records?.data || []);\r\n\t\t\tsetTotal(res.data?.records?.total || 0);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(err?.response?.data?.message || err?.message || \"Failed to load call history\");\r\n\t\t\tsetRecords([]);\r\n\t\t\tsetTotal(0);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn { records, total, loading, error, setError, fetchCdr };\r\n}\r\n\r\nexport async function fetchRecordingBlob(callUuid: string): Promise<Blob> {\r\n\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(callUuid), {\r\n\t\tresponseType: \"blob\",\r\n\t});\r\n\treturn res.data as Blob;\r\n}\r\n","import type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\nexport const C = {\r\n\tnavy: \"#0d2a56\",\r\n\tblue: \"#1565c8\",\r\n\tgreen: \"#0a9a62\",\r\n\tamber: \"#c47c00\",\r\n\tred: \"#cc2a2a\",\r\n\tpurple: \"#6b3fbf\",\r\n\tteal: \"#0b7a8f\",\r\n\tbg: \"#fff\",\r\n\tsurface: \"#fff\",\r\n\ts2: \"#f7f9fc\",\r\n\ts3: \"#eef2f7\",\r\n\tb1: \"rgba(20,50,100,.07)\",\r\n\tb2: \"rgba(20,50,100,.13)\",\r\n\tt1: \"#0d1e35\",\r\n\tt2: \"#364f6e\",\r\n\tt3: \"#7a93b5\",\r\n\tt4: \"#bccad9\",\r\n\tblt: \"#e8f0fc\",\r\n\tglt: \"#e4f6ef\",\r\n\talt: \"#fdf3e0\",\r\n\trlt: \"#fde8e8\",\r\n\tplt: \"#f0eafa\",\r\n\ttlt: \"#e3f4f7\",\r\n};\r\n\r\nexport const QUEUE_COLORS = [C.blue, C.green, C.purple, C.amber, C.teal, C.red, C.navy];\r\n\r\nexport const monoSx = { fontFamily: \"'JetBrains Mono', monospace\", fontSize: 11, fontWeight: 600 };\r\n\r\nexport const containerSx: SxProps<Theme> = {\r\n\tbackground: C.bg,\r\n\tminHeight: \"100vh\",\r\n};\r\n\r\nexport const filterBarSx: SxProps<Theme> = {\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tgap: 1,\r\n\tflexWrap: \"wrap\",\r\n\tpb: 1.5,\r\n\tpx: 2,\r\n};\r\n\r\nexport const datePickerSx: SxProps<Theme> = {\r\n\twidth: 150,\r\n\t\"& .MuiOutlinedInput-root\": {\r\n\t\tborderRadius: \"7px\",\r\n\t\tfontSize: 12,\r\n\t\theight: 30,\r\n\t},\r\n\t\"& .MuiInputBase-input\": { py: \"4px\", fontSize: 12 },\r\n};\r\n\r\nexport const contentSx: SxProps<Theme> = {\r\n\tpy: 2,\r\n\tpx: 2,\r\n\tposition: \"relative\",\r\n};\r\n\r\nexport const loadingOverlaySx: SxProps<Theme> = {\r\n\tposition: \"absolute\",\r\n\ttop: 0,\r\n\tleft: 0,\r\n\tright: 0,\r\n\tbottom: 0,\r\n\tbackground: \"rgba(240,244,248,0.7)\",\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tjustifyContent: \"center\",\r\n\tzIndex: 10,\r\n};\r\n\r\nexport const kpiGridSx: SxProps<Theme> = {\r\n\tdisplay: \"grid\",\r\n\tgridTemplateColumns: { xs: \"1fr 1fr\", sm: \"repeat(3, 1fr)\", md: \"repeat(5, 1fr)\" },\r\n\tgap: 1.5,\r\n\tmb: 2,\r\n};\r\n\r\nexport const kpiCardSx = (color: string): SxProps<Theme> => ({\r\n\tpx: 1.5,\r\n\tpy: 1.2,\r\n\tborderRadius: \"10px\",\r\n\tbackgroundColor: \"#fafafa\",\r\n\tborder: \"1px solid #e0e0e0\",\r\n\tborderLeftWidth: \"3px\",\r\n\tborderLeftStyle: \"solid\",\r\n\tborderLeftColor: color,\r\n});\r\n\r\nexport const kpiLabelSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontSize: \"0.72rem\",\r\n\tfontWeight: 600,\r\n\tcolor: \"#888\",\r\n\tmb: 0.3,\r\n};\r\n\r\nexport const kpiValueSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontSize: \"0.95rem\",\r\n\tfontWeight: 700,\r\n\tcolor: \"#1a1a1a\",\r\n};\r\n\r\nexport const tabBarSx: SxProps<Theme> = {\r\n\tdisplay: \"flex\",\r\n\talignItems: { xs: \"flex-start\", sm: \"center\" },\r\n\tjustifyContent: \"space-between\",\r\n\tflexDirection: { xs: \"column\", sm: \"row\" },\r\n\tgap: 1,\r\n\tborderBottom: `2px solid ${C.b1}`,\r\n\tmb: 2,\r\n};\r\n\r\nexport const tabItemSx = (active: boolean): SxProps<Theme> => ({\r\n\tpx: 2,\r\n\tpy: 1,\r\n\tfontSize: 13,\r\n\tfontWeight: 600,\r\n\tcursor: \"pointer\",\r\n\tcolor: active ? C.blue : C.t3,\r\n\tborderBottom: `2px solid ${active ? C.blue : \"transparent\"}`,\r\n\tmb: \"-2px\",\r\n\ttransition: \"all .15s\",\r\n\t\"&:hover\": { color: C.t1 },\r\n});\r\n\r\nexport const sectionCardSx: SxProps<Theme> = {\r\n\tborder: `1px solid ${C.b1}`,\r\n\tborderRadius: \"10px\",\r\n\toverflow: \"hidden\",\r\n\tbackground: \"transparent\",\r\n};\r\n\r\nexport const sectionHeaderSx: SxProps<Theme> = {\r\n\tpx: 2,\r\n\tpy: 1.2,\r\n\tbackground: C.s2,\r\n\tborderBottom: `1px solid ${C.b1}`,\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tjustifyContent: \"space-between\",\r\n};\r\n\r\nexport const sectionTitleSx: SxProps<Theme> = {\r\n\tfontSize: 12,\r\n\tfontWeight: 700,\r\n\tletterSpacing: 0.8,\r\n\ttextTransform: \"uppercase\",\r\n\tcolor: C.t2,\r\n};\r\n\r\nexport const cdrHeadSx: SxProps<Theme> = {\r\n\tbgcolor: \"#f1f1f1\",\r\n\tcolor: \"#333\",\r\n\tfontWeight: 600,\r\n\twhiteSpace: \"nowrap\",\r\n\tfontSize: \"14px\",\r\n\tpy: 0.7,\r\n\tpx: 1,\r\n};\r\n\r\nexport const cdrTableSx: SxProps<Theme> = {\r\n\tminWidth: 1400,\r\n\t\"& .MuiTableCell-root\": {\r\n\t\tfontSize: \"0.75rem\",\r\n\t\tborderBottom: \"1px solid #eef1f6\",\r\n\t\tpy: 0.6,\r\n\t\tpx: 1,\r\n\t},\r\n};\r\n\r\nexport const cdrRowSx: SxProps<Theme> = {\r\n\tbackgroundColor: \"#fff\",\r\n\t\"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n};\r\n\r\nexport const paginationSx: SxProps<Theme> = {\r\n\tborderTop: \"1px solid #eef1f6\",\r\n\t\"& .MuiTablePagination-displayedRows\": { fontSize: \"0.73rem\" },\r\n\t\"& .MuiTablePagination-selectLabel\": { fontSize: \"0.73rem\" },\r\n};\r\n","import React, { memo, useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport {\r\n\tAlert,\r\n\tBox,\r\n\tChip,\r\n\tCircularProgress,\r\n\tIconButton,\r\n\tTable,\r\n\tTableBody,\r\n\tTableCell,\r\n\tTableContainer,\r\n\tTableHead,\r\n\tTablePagination,\r\n\tTableRow,\r\n\tTooltip,\r\n\tTypography,\r\n} from \"@mui/material\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport {\r\n\tBar,\r\n\tBarChart,\r\n\tCartesianGrid,\r\n\tCell,\r\n\tLabelList,\r\n\tLegend,\r\n\tPie,\r\n\tPieChart,\r\n\tResponsiveContainer,\r\n\tTooltip as RTooltip,\r\n\tXAxis,\r\n\tYAxis,\r\n} from \"recharts\";\r\nimport dayjs, { type Dayjs } from \"dayjs\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { DatePicker } from \"@mui/x-date-pickers/DatePicker\";\r\n\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPageHeader } from \"../../components/SDKPageHeader\";\r\nimport { SDKButton } from \"../../components/SDKButton\";\r\nimport { sdkStateManager } from \"../../hooks/sdk-state\";\r\nimport {\r\n\tfetchRecordingBlob,\r\n\tuseAgentCdrRecords,\r\n\tuseAgentDetailReport,\r\n} from \"./useAgentDetailReport\";\r\nimport type { AgentDetailProfile, AgentDetailReportProps } from \"./types\";\r\nimport {\r\n\tC,\r\n\tcdrHeadSx,\r\n\tcdrRowSx,\r\n\tcdrTableSx,\r\n\tcontainerSx,\r\n\tcontentSx,\r\n\tdatePickerSx,\r\n\tfilterBarSx,\r\n\tkpiCardSx,\r\n\tkpiGridSx,\r\n\tkpiLabelSx,\r\n\tkpiValueSx,\r\n\tloadingOverlaySx,\r\n\tmonoSx,\r\n\tpaginationSx,\r\n\tQUEUE_COLORS,\r\n\tsectionCardSx,\r\n\tsectionHeaderSx,\r\n\tsectionTitleSx,\r\n\ttabBarSx,\r\n\ttabItemSx,\r\n} from \"./styles\";\r\n\r\n// ──── Sub-components ─────────────────────────────────────────────────────────\r\n\r\nfunction StatCard({ value, label, color }: { value: string | number; label: string; color: string }) {\r\n\treturn (\r\n\t\t<Box sx={kpiCardSx(color)}>\r\n\t\t\t<Typography sx={kpiLabelSx}>{label}</Typography>\r\n\t\t\t<Typography sx={kpiValueSx}>{value}</Typography>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\nfunction StatusChip({ status }: { status: string }) {\r\n\tconst s = status?.toLowerCase();\r\n\tconst isAns = s === \"answered\";\r\n\tconst isAband = s === \"abandoned\";\r\n\treturn (\r\n\t\t<Chip\r\n\t\t\tlabel={status || \"—\"}\r\n\t\t\tsize=\"small\"\r\n\t\t\tsx={{\r\n\t\t\t\tfontSize: 11,\r\n\t\t\t\tfontWeight: 700,\r\n\t\t\t\theight: 22,\r\n\t\t\t\tbackground: isAns ? C.glt : isAband ? C.alt : C.rlt,\r\n\t\t\t\tcolor: isAns ? C.green : isAband ? C.amber : C.red,\r\n\t\t\t\tborder: `1px solid ${isAns ? \"rgba(10,154,98,.2)\" : isAband ? \"rgba(196,124,0,.2)\" : \"rgba(204,42,42,.2)\"\r\n\t\t\t\t\t}`,\r\n\t\t\t\tfontFamily: \"'JetBrains Mono', monospace\",\r\n\t\t\t}}\r\n\t\t/>\r\n\t);\r\n}\r\n\r\nfunction CallTypeChip({ type }: { type: string }) {\r\n\tconst isIn = type?.toLowerCase() === \"inbound\";\r\n\treturn (\r\n\t\t<Chip\r\n\t\t\tlabel={type || \"—\"}\r\n\t\t\tsize=\"small\"\r\n\t\t\tsx={{\r\n\t\t\t\tfontSize: 11,\r\n\t\t\t\tfontWeight: 700,\r\n\t\t\t\theight: 22,\r\n\t\t\t\tbackground: isIn ? C.glt : C.blt,\r\n\t\t\t\tcolor: isIn ? C.green : C.blue,\r\n\t\t\t\tborder: `1px solid ${isIn ? \"rgba(10,154,98,.2)\" : \"rgba(21,101,200,.2)\"}`,\r\n\t\t\t\tfontFamily: \"'JetBrains Mono', monospace\",\r\n\t\t\t}}\r\n\t\t/>\r\n\t);\r\n}\r\n\r\nfunction RecordingCell({ callUuid, recordingPath }: { callUuid: string; recordingPath: string | null }) {\r\n\tconst [audioUrl, setAudioUrl] = useState<string | null>(null);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(false);\r\n\r\n\tif (!recordingPath) {\r\n\t\treturn (\r\n\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\r\n\t\t\t\t<Tooltip title=\"No recording available\">\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t<IconButton size=\"small\" disabled sx={{ p: 0.4 }}>\r\n\t\t\t\t\t\t\t<PlayArrowIcon sx={{ fontSize: 16 }} />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</Tooltip>\r\n\t\t\t\t<Tooltip title=\"No recording available\">\r\n\t\t\t\t\t<span>\r\n\t\t\t\t\t\t<IconButton size=\"small\" disabled sx={{ p: 0.4 }}>\r\n\t\t\t\t\t\t\t<FileDownloadIcon sx={{ fontSize: 16 }} />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</Tooltip>\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\tconst handlePlay = async () => {\r\n\t\tif (audioUrl) return;\r\n\t\ttry {\r\n\t\t\tsetLoading(true);\r\n\t\t\tsetError(false);\r\n\t\t\tconst blob = await fetchRecordingBlob(callUuid);\r\n\t\t\tsetAudioUrl(URL.createObjectURL(blob));\r\n\t\t} catch {\r\n\t\t\tsetError(true);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleDownload = async () => {\r\n\t\ttry {\r\n\t\t\tconst blob = audioUrl\r\n\t\t\t\t? await fetch(audioUrl).then((r) => r.blob())\r\n\t\t\t\t: await fetchRecordingBlob(callUuid);\r\n\t\t\tconst url = URL.createObjectURL(blob);\r\n\t\t\tconst a = document.createElement(\"a\");\r\n\t\t\ta.href = url;\r\n\t\t\ta.download = `recording_${callUuid}.wav`;\r\n\t\t\ta.click();\r\n\t\t\tURL.revokeObjectURL(url);\r\n\t\t} catch {\r\n\t\t\t/* ignore */\r\n\t\t}\r\n\t};\r\n\r\n\tif (audioUrl) {\r\n\t\treturn (\r\n\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n\t\t\t\t<audio\r\n\t\t\t\t\tcontrols\r\n\t\t\t\t\tautoPlay\r\n\t\t\t\t\tsrc={audioUrl}\r\n\t\t\t\t\tonEnded={() => {\r\n\t\t\t\t\t\tif (audioUrl.startsWith(\"blob:\")) URL.revokeObjectURL(audioUrl);\r\n\t\t\t\t\t\tsetAudioUrl(null);\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tstyle={{ width: 140, height: 30 }}\r\n\t\t\t\t/>\r\n\t\t\t\t<Tooltip title=\"Download\">\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={handleDownload} sx={{ color: C.blue, p: 0.4 }}>\r\n\t\t\t\t\t\t<FileDownloadIcon sx={{ fontSize: 16 }} />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</Tooltip>\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\r\n\t\t\t<Tooltip title={error ? \"Recording unavailable\" : \"Play\"}>\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tonClick={handlePlay}\r\n\t\t\t\t\t\tdisabled={loading || error}\r\n\t\t\t\t\t\tsx={{ color: C.green, p: 0.4 }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{loading ? <CircularProgress size={14} /> : <PlayArrowIcon sx={{ fontSize: 16 }} />}\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</span>\r\n\t\t\t</Tooltip>\r\n\t\t\t<Tooltip title={error ? \"Recording unavailable\" : \"Download\"}>\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tonClick={handleDownload}\r\n\t\t\t\t\t\tdisabled={loading || error}\r\n\t\t\t\t\t\tsx={{ color: C.blue, p: 0.4 }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<FileDownloadIcon sx={{ fontSize: 16 }} />\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</span>\r\n\t\t\t</Tooltip>\r\n\t\t\t{error && <Chip label=\"No File\" size=\"small\" sx={{ fontSize: \"0.6rem\", height: 18 }} />}\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Main content ───────────────────────────────────────────────────────────\r\n\r\nconst AgentDetailReportContent = memo(\r\n\t({ agentRow, onBack, from, initialStartDate, initialEndDate, initialQuickRange }: AgentDetailReportProps) => {\r\n\t\tconst isFromReportsList = from === \"REPORTS_LIST\";\r\n\t\tconst agentIdFromRow = isFromReportsList\r\n\t\t\t? agentRow?.agentId || \"\"\r\n\t\t\t: sdkStateManager.getState().agentId || agentRow?.agentId || \"\";\r\n\r\n\t\tconst [quickRange, setQuickRange] = useState<string>(initialQuickRange || \"today\");\r\n\t\tconst [startDate, setStartDate] = useState<Dayjs | null>(initialStartDate ?? dayjs());\r\n\t\tconst [endDate, setEndDate] = useState<Dayjs | null>(initialEndDate ?? dayjs());\r\n\r\n\t\tconst [activeTab, setActiveTab] = useState(0);\r\n\t\tconst [cdrPage, setCdrPage] = useState(0);\r\n\t\tconst [cdrPageSize, setCdrPageSize] = useState(10);\r\n\r\n\t\tconst { detail, detailLoading, detailError, setDetailError, fetchDetail } =\r\n\t\t\tuseAgentDetailReport();\r\n\t\tconst {\r\n\t\t\trecords: cdrRecords,\r\n\t\t\ttotal: cdrTotal,\r\n\t\t\tloading: cdrLoading,\r\n\t\t\terror: cdrError,\r\n\t\t\tsetError: setCdrError,\r\n\t\t\tfetchCdr,\r\n\t\t} = useAgentCdrRecords();\r\n\r\n\t\tconst profile: AgentDetailProfile | null = detail?.profile || null;\r\n\t\tconst agentName = profile?.fullName || agentRow?.fullName || \"Unknown Agent\";\r\n\t\tconst showInitialSpinner = !isFromReportsList && detailLoading && !profile && !agentRow?.fullName;\r\n\r\n\t\tconst fetchDetailFn = useCallback(\r\n\t\t\t(sd: Dayjs, ed: Dayjs) => {\r\n\t\t\t\tif (!agentIdFromRow) return;\r\n\t\t\t\tfetchDetail(agentIdFromRow, {\r\n\t\t\t\t\tstart_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\t\tend_date: ed.isSame(dayjs(), \"day\")\r\n\t\t\t\t\t\t? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\")\r\n\t\t\t\t\t\t: ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t[agentIdFromRow, fetchDetail],\r\n\t\t);\r\n\r\n\t\tconst fetchCdrFn = useCallback(\r\n\t\t\t(sd: Dayjs, ed: Dayjs, page: number, pageSize: number) => {\r\n\t\t\t\tif (!agentIdFromRow) return;\r\n\t\t\t\tfetchCdr({\r\n\t\t\t\t\tstart_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\t\tend_date: ed.isSame(dayjs(), \"day\")\r\n\t\t\t\t\t\t? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\")\r\n\t\t\t\t\t\t: ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\t\tsearch: agentIdFromRow,\r\n\t\t\t\t\tpage: page + 1,\r\n\t\t\t\t\tpage_size: pageSize,\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t[agentIdFromRow, fetchCdr],\r\n\t\t);\r\n\r\n\t\tconst handleSearch = (sd?: Dayjs | null, ed?: Dayjs | null) => {\r\n\t\t\tconst fromDate = sd ?? startDate;\r\n\t\t\tconst toDate = ed ?? endDate;\r\n\t\t\tif (!fromDate || !toDate) return;\r\n\t\t\tfetchDetailFn(fromDate, toDate);\r\n\t\t\tsetCdrPage(0);\r\n\t\t\tif (activeTab === 1) fetchCdrFn(fromDate, toDate, 0, cdrPageSize);\r\n\t\t};\r\n\r\n\t\tconst setQuick = (range: string) => {\r\n\t\t\tsetQuickRange(range);\r\n\t\t\tconst today = dayjs();\r\n\t\t\tlet sd: Dayjs = today;\r\n\t\t\tconst ed: Dayjs = today;\r\n\t\t\tif (range === \"week\") sd = today.startOf(\"week\");\r\n\t\t\telse if (range === \"month\") sd = today.startOf(\"month\");\r\n\t\t\tsetStartDate(sd);\r\n\t\t\tsetEndDate(ed);\r\n\t\t\thandleSearch(sd, ed);\r\n\t\t};\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (agentIdFromRow) fetchDetailFn(startDate ?? dayjs(), endDate ?? dayjs());\r\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t}, [agentIdFromRow]);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (activeTab === 1 && startDate && endDate) {\r\n\t\t\t\tfetchCdrFn(startDate, endDate, cdrPage, cdrPageSize);\r\n\t\t\t}\r\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t}, [activeTab, cdrPage, cdrPageSize]);\r\n\r\n\t\t// ─── Derived chart data ───\r\n\t\tconst hourlyCallData = useMemo(() => {\r\n\t\t\treturn (detail?.hourlyCalls || []).map((h) => ({\r\n\t\t\t\thour: String(h.hourOfDay).padStart(2, \"0\"),\r\n\t\t\t\tanswered: h.answeredCalls,\r\n\t\t\t\tabandoned: h.missedCalls,\r\n\t\t\t}));\r\n\t\t}, [detail]);\r\n\r\n\t\tconst timeUtilData = useMemo(() => {\r\n\t\t\tconst tu = detail?.timeUtilisation;\r\n\t\t\tif (!tu) return [];\r\n\t\t\tconst total = tu.totalLoginSeconds || 1;\r\n\t\t\treturn [\r\n\t\t\t\t{ name: \"On Call / Handle\", value: tu.onCallSeconds, pct: (tu.onCallSeconds / total) * 100, formatted: tu.onCallFormatted, color: C.blue },\r\n\t\t\t\t{ name: \"Idle\", value: tu.idleSeconds, pct: (tu.idleSeconds / total) * 100, formatted: tu.idleFormatted, color: \"#e8a0a0\" },\r\n\t\t\t\t{ name: \"Break\", value: tu.breakSeconds, pct: (tu.breakSeconds / total) * 100, formatted: tu.breakFormatted, color: C.amber },\r\n\t\t\t];\r\n\t\t}, [detail]);\r\n\r\n\t\tconst talkDurationBuckets = useMemo(() => {\r\n\t\t\tconst items = [...(detail?.talkDistribution || [])].sort(\r\n\t\t\t\t(a, b) => a.bucketOrder - b.bucketOrder,\r\n\t\t\t);\r\n\t\t\tconst total = items.reduce((s, b) => s + (b.callCount || 0), 0);\r\n\t\t\treturn items.map((b) => ({\r\n\t\t\t\tbucket: b.bucketLabel,\r\n\t\t\t\tcount: b.callCount,\r\n\t\t\t\tminSeconds: b.minSeconds,\r\n\t\t\t\tmaxSeconds: b.maxSeconds,\r\n\t\t\t\tpct: total > 0 ? (b.callCount / total) * 100 : 0,\r\n\t\t\t}));\r\n\t\t}, [detail]);\r\n\r\n\t\tconst talkDurationTotal = useMemo(\r\n\t\t\t() => talkDurationBuckets.reduce((s, b) => s + (b.count || 0), 0),\r\n\t\t\t[talkDurationBuckets],\r\n\t\t);\r\n\r\n\t\tconst queuePieData = useMemo(() => {\r\n\t\t\treturn (detail?.callsByQueue || []).map((q, i) => ({\r\n\t\t\t\tname: q.queueName,\r\n\t\t\t\tvalue: q.callCount,\r\n\t\t\t\tpctOfTotal: q.pctOfTotal,\r\n\t\t\t\tcolor: QUEUE_COLORS[i % QUEUE_COLORS.length],\r\n\t\t\t}));\r\n\t\t}, [detail]);\r\n\r\n\t\tconst queueMetrics = useMemo(() => {\r\n\t\t\tconst items = detail?.queueMetrics || [];\r\n\t\t\tconst grandTotal = items.reduce((sum, q) => sum + q.totalCalls, 0);\r\n\t\t\treturn items.map((q, i) => ({\r\n\t\t\t\t...q,\r\n\t\t\t\tpctOfTotal: grandTotal > 0 ? (q.totalCalls / grandTotal) * 100 : 0,\r\n\t\t\t\tanswerRate: q.totalCalls > 0 ? (q.answeredCalls / q.totalCalls) * 100 : 0,\r\n\t\t\t\tcolor: QUEUE_COLORS[i % QUEUE_COLORS.length],\r\n\t\t\t}));\r\n\t\t}, [detail]);\r\n\r\n\t\tconst hourlyChartTitle = useMemo(() => {\r\n\t\t\tif (quickRange === \"today\") return \"Hourly Call Volume — Today\";\r\n\t\t\tif (quickRange === \"month\") return `Hourly Call Volume — ${dayjs().format(\"MMMM YYYY\")}`;\r\n\t\t\tif (quickRange === \"week\") return \"Hourly Call Volume — This Week\";\r\n\t\t\tif (startDate && endDate) {\r\n\t\t\t\tif (startDate.isSame(endDate, \"day\"))\r\n\t\t\t\t\treturn `Hourly Call Volume — ${startDate.format(\"DD MMM YYYY\")}`;\r\n\t\t\t\treturn `Hourly Call Volume — ${startDate.format(\"DD MMM YYYY\")} to ${endDate.format(\"DD MMM YYYY\")}`;\r\n\t\t\t}\r\n\t\t\treturn \"Hourly Call Volume\";\r\n\t\t}, [quickRange, startDate, endDate]);\r\n\r\n\t\tconst handleBack = useCallback(() => {\r\n\t\t\tif (onBack) onBack();\r\n\t\t}, [onBack]);\r\n\r\n\t\tif (!agentIdFromRow) {\r\n\t\t\treturn (\r\n\t\t\t\t<Box sx={{ p: 4, textAlign: \"center\" }}>\r\n\t\t\t\t\t<Typography sx={{ color: C.t3, mb: 2 }}>No agent selected.</Typography>\r\n\t\t\t\t\t<SDKButton onClick={handleBack}>Go Back</SDKButton>\r\n\t\t\t\t</Box>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (showInitialSpinner) {\r\n\t\t\treturn (\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", minHeight: 400 }}>\r\n\t\t\t\t\t<CircularProgress size={36} />\r\n\t\t\t\t</Box>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tconst tabs = [\"Overview\", \"Call History\", \"Break Details\"];\r\n\r\n\t\treturn (\r\n\t\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\r\n\t\t\t\t<Box sx={containerSx}>\r\n\t\t\t\t\t<SDKPageHeader title={agentName} showBack={isFromReportsList} onBack={handleBack} />\r\n\r\n\t\t\t\t\t<Box sx={filterBarSx}>\r\n\t\t\t\t\t\t<DatePicker\r\n\t\t\t\t\t\t\tvalue={startDate}\r\n\t\t\t\t\t\t\tonChange={(val) => {\r\n\t\t\t\t\t\t\t\tsetStartDate(val as Dayjs | null);\r\n\t\t\t\t\t\t\t\tsetQuickRange(\"custom\");\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tslotProps={{ textField: { size: \"small\", sx: datePickerSx } }}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<Typography sx={{ fontSize: 12, color: C.t3 }}>to</Typography>\r\n\t\t\t\t\t\t<DatePicker\r\n\t\t\t\t\t\t\tvalue={endDate}\r\n\t\t\t\t\t\t\tonChange={(val) => {\r\n\t\t\t\t\t\t\t\tsetEndDate(val as Dayjs | null);\r\n\t\t\t\t\t\t\t\tsetQuickRange(\"custom\");\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tslotProps={{ textField: { size: \"small\", sx: datePickerSx } }}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\t\tvariant={quickRange === \"today\" ? \"primary\" : \"outlined\"}\r\n\t\t\t\t\t\t\tonClick={() => setQuick(\"today\")}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tToday\r\n\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\t\tvariant={quickRange === \"week\" ? \"primary\" : \"outlined\"}\r\n\t\t\t\t\t\t\tonClick={() => setQuick(\"week\")}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tThis Week\r\n\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\t\tvariant={quickRange === \"month\" ? \"primary\" : \"outlined\"}\r\n\t\t\t\t\t\t\tonClick={() => setQuick(\"month\")}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tThis Month\r\n\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box sx={contentSx}>\r\n\t\t\t\t\t\t{detailLoading && (\r\n\t\t\t\t\t\t\t<Box sx={loadingOverlaySx}>\r\n\t\t\t\t\t\t\t\t<CircularProgress />\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{detailError && (\r\n\t\t\t\t\t\t\t<Alert severity=\"error\" sx={{ mb: 2 }} onClose={() => setDetailError(\"\")}>\r\n\t\t\t\t\t\t\t\t{detailError}\r\n\t\t\t\t\t\t\t</Alert>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{/* KPI cards */}\r\n\t\t\t\t\t\t<Box sx={kpiGridSx}>\r\n\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t{ v: profile?.totalCalls ?? 0, l: \"Total Calls\", c: C.navy },\r\n\t\t\t\t\t\t\t\t{ v: profile?.answeredCalls ?? 0, l: \"Answered\", c: C.green },\r\n\t\t\t\t\t\t\t\t{ v: profile?.missedCalls ?? 0, l: \"Missed\", c: C.red },\r\n\t\t\t\t\t\t\t\t{ v: profile?.avgAhtFormatted || \"00:00:00\", l: \"Avg AHT\", c: C.purple },\r\n\t\t\t\t\t\t\t\t{ v: `${(profile?.answerRate ?? 0).toFixed(1)}%`, l: \"Answer Rate\", c: C.green },\r\n\t\t\t\t\t\t\t\t{ v: profile?.loginDurationFormatted || \"00:00:00\", l: \"Login Duration\", c: C.blue },\r\n\t\t\t\t\t\t\t\t{ v: profile?.productionFormatted || \"00:00:00\", l: \"Production\", c: C.blue },\r\n\t\t\t\t\t\t\t\t{ v: profile?.handleTimeFormatted || \"00:00:00\", l: \"Handle Time\", c: C.purple },\r\n\t\t\t\t\t\t\t\t{ v: profile?.breakTimeFormatted || \"00:00:00\", l: \"Break Time\", c: C.amber },\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tv: `${(profile?.adherencePct ?? 0).toFixed(1)}%`,\r\n\t\t\t\t\t\t\t\t\tl: `Adherence${profile?.adherenceGrade ? ` (${profile.adherenceGrade})` : \"\"}`,\r\n\t\t\t\t\t\t\t\t\tc: C.teal,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t].map((kpi, i) => (\r\n\t\t\t\t\t\t\t\t<StatCard key={i} value={kpi.v} label={kpi.l} color={kpi.c} />\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{/* Tabs */}\r\n\t\t\t\t\t\t<Box sx={tabBarSx}>\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 0.5, flexWrap: \"wrap\" }}>\r\n\t\t\t\t\t\t\t\t{tabs.map((tab, idx) => (\r\n\t\t\t\t\t\t\t\t\t<Box key={tab} onClick={() => setActiveTab(idx)} sx={tabItemSx(activeTab === idx)}>\r\n\t\t\t\t\t\t\t\t\t\t{tab}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t<SDKButton size=\"small\" startIcon={<SearchIcon />} onClick={() => handleSearch()}>\r\n\t\t\t\t\t\t\t\tSearch\r\n\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{/* ─── Overview ─── */}\r\n\t\t\t\t\t\t{activeTab === 0 && (\r\n\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" },\r\n\t\t\t\t\t\t\t\t\t\tgap: 2,\r\n\t\t\t\t\t\t\t\t\t\tmb: 2,\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Box sx={sectionCardSx}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={sectionHeaderSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={sectionTitleSx}>{hourlyChartTitle}</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={agentName}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 11,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: C.blt,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.blue,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `1px solid rgba(21,101,200,.2)`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ p: 2, height: 260 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<ResponsiveContainer width=\"100%\" height=\"100%\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<BarChart data={hourlyCallData} barGap={1}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<CartesianGrid strokeDasharray=\"3 3\" stroke={C.b1} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XAxis dataKey=\"hour\" tick={{ fontSize: 11, fill: C.t3 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<YAxis tick={{ fontSize: 11, fill: C.t3 }} allowDecimals={false} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<RTooltip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabelFormatter={(label) => `${String(label).padStart(2, \"0\")}:00`}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Legend wrapperStyle={{ fontSize: 11 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Bar dataKey=\"answered\" name=\"Answered\" fill={C.blue} radius={[3, 3, 0, 0]} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Bar dataKey=\"abandoned\" name=\"Abandoned\" fill={C.red} radius={[3, 3, 0, 0]} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t</BarChart>\r\n\t\t\t\t\t\t\t\t\t\t\t</ResponsiveContainer>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t\t<Box sx={sectionCardSx}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ ...sectionHeaderSx, justifyContent: \"flex-start\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={sectionTitleSx}>Time Utilisation Breakdown</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ p: 2, height: 260 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{timeUtilData.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<ResponsiveContainer width=\"100%\" height=\"100%\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<PieChart>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Pie\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata={timeUtilData}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcx=\"50%\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcy=\"50%\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinnerRadius={60}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\touterRadius={95}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdataKey=\"value\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnameKey=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tminAngle={8}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{timeUtilData.map((entry, idx) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Cell key={idx} fill={entry.color} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Pie>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<RTooltip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tformatter={(_val, name, entry) => [\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t`${(entry as any).payload.formatted} (${(entry as any).payload.pct.toFixed(1)}%)`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Legend wrapperStyle={{ fontSize: 12 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</PieChart>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</ResponsiveContainer>\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.t3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 13,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo data\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t<Box sx={{ ...sectionCardSx, mb: 2 }}>\r\n\t\t\t\t\t\t\t\t\t<Box sx={sectionHeaderSx}>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={sectionTitleSx}>Talk Duration Distribution</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\tlabel={`${talkDurationTotal} call${talkDurationTotal === 1 ? \"\" : \"s\"}`}\r\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 11,\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackground: C.glt,\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.green,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: `1px solid rgba(10,154,98,.2)`,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ p: 2, height: 260 }}>\r\n\t\t\t\t\t\t\t\t\t\t{talkDurationBuckets.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<ResponsiveContainer width=\"100%\" height=\"100%\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<BarChart\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata={talkDurationBuckets}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin={{ top: 16, right: 16, left: 0, bottom: 20 }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<CartesianGrid strokeDasharray=\"3 3\" stroke={C.b1} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XAxis dataKey=\"bucket\" tick={{ fontSize: 11, fill: C.t3 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<YAxis tick={{ fontSize: 11, fill: C.t3 }} allowDecimals={false} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<RTooltip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Bar dataKey=\"count\" name=\"Calls\" fill={C.teal} radius={[4, 4, 0, 0]}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<LabelList\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdataKey=\"count\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tposition=\"top\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ fontSize: 11, fontWeight: 700, fill: C.t1 }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Bar>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</BarChart>\r\n\t\t\t\t\t\t\t\t\t\t\t</ResponsiveContainer>\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.t3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 13,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo data\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" },\r\n\t\t\t\t\t\t\t\t\t\tgap: 2,\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Box sx={sectionCardSx}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ ...sectionHeaderSx, justifyContent: \"flex-start\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={sectionTitleSx}>Calls by Queue</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ p: 2, height: 260 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{queuePieData.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<ResponsiveContainer width=\"100%\" height=\"100%\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<PieChart>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Pie data={queuePieData} cx=\"50%\" cy=\"50%\" outerRadius={90} dataKey=\"value\" nameKey=\"name\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{queuePieData.map((entry, idx) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Cell key={idx} fill={entry.color} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Pie>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<RTooltip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Legend wrapperStyle={{ fontSize: 12 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</PieChart>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</ResponsiveContainer>\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.t3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 13,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo queue data\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t\t<Box sx={sectionCardSx}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ ...sectionHeaderSx, justifyContent: \"flex-start\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={sectionTitleSx}>Queue Performance Metrics</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ p: 2 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{queueMetrics.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tqueueMetrics.map((q) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Box key={q.queueName} sx={{ mb: 2, \"&:last-child\": { mb: 0 } }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmb: 0.3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: 10,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 10,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: q.color,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 13, fontWeight: 700, color: C.t1 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{q.queueName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ ...monoSx, fontSize: 13, fontWeight: 800, color: q.color }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{q.totalCalls} calls\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcomponent=\"span\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ ...monoSx, color: C.t3, ml: 0.5 }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t({q.answeredCalls} ans / {q.missedCalls} miss)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 6,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: C.s3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmb: 0.3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: `${q.pctOfTotal ?? 0}%`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: q.color,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolumnGap: 1.5,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trowGap: 0.2,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{(q.pctOfTotal ?? 0).toFixed(0)}% of total\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tAns: {(q.answerRate ?? 0).toFixed(0)}%\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tTalk: <span style={{ ...monoSx, color: C.t2 }}>{q.avgTalkFormatted}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tHold: <span style={{ ...monoSx, color: C.t2 }}>{q.avgHoldFormatted}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWrap: <span style={{ ...monoSx, color: C.t2 }}>{q.avgWrapupFormatted}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: 11, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tAHT: <span style={{ ...monoSx, color: C.t2 }}>{q.avgAhtFormatted}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo queue data\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{/* ─── Call History ─── */}\r\n\t\t\t\t\t\t{activeTab === 1 && (\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tborderRadius: \"8px\",\r\n\t\t\t\t\t\t\t\t\tborder: \"1px solid #e0e7ef\",\r\n\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\t\tbackground: \"transparent\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Box sx={sectionHeaderSx}>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t\t\t<Typography sx={sectionTitleSx}>Call History</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\tlabel={`${cdrTotal} records`}\r\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 11,\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackground: C.s2,\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.t3,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: `1px solid ${C.b2}`,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t{cdrError && (\r\n\t\t\t\t\t\t\t\t\t<Alert severity=\"error\" sx={{ mx: 2, mt: 1 }} onClose={() => setCdrError(\"\")}>\r\n\t\t\t\t\t\t\t\t\t\t{cdrError}\r\n\t\t\t\t\t\t\t\t\t</Alert>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t<TableContainer sx={{ position: \"relative\" }}>\r\n\t\t\t\t\t\t\t\t\t{cdrLoading && (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\t\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tright: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbottom: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackground: \"rgba(255,255,255,0.7)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size={28} />\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t<Table size=\"small\" sx={cdrTableSx}>\r\n\t\t\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Phone Number\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Call Start\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Call Type\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Status\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Queue\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Extension\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Talk Duration\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Hold Duration\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Ringing Duration\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Wrapup Duration\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Disposition\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Transferred\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Recording\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t].map((label) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell key={label} sx={cdrHeadSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{label}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t\t\t{cdrRecords.map((row, idx) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableRow key={row.callUuid || idx} hover sx={cdrRowSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ fontWeight: 600, color: C.navy }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.phoneNumber || \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ color: \"#4a5568\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.callStartTime\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? dayjs(row.callStartTime).format(\"DD MMM YYYY hh:mm A\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CallTypeChip type={row.callType || \"\"} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<StatusChip status={row.callStatus || \"\"} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.queueName ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={row.queueName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#f0ebfa\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.purple,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 500,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.67rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 22,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ color: \"#4a5568\" }}>{row.extension || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ fontWeight: 600, color: C.blue, fontVariantNumeric: \"tabular-nums\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.talkDurationFmt || \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ fontWeight: 500, color: C.amber, fontVariantNumeric: \"tabular-nums\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.holdDurationFmt || \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ fontWeight: 500, fontVariantNumeric: \"tabular-nums\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.ringingDurationFmt || \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ fontWeight: 500, color: C.purple, fontVariantNumeric: \"tabular-nums\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.wrapupDurationFmt || \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ color: \"#4a5568\" }}>{row.disposition || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.wasTransferred ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel=\"Yes\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#e6f7ef\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.green,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 600,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.65rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 20,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel=\"No\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"transparent\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#6b7b8d\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 600,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.65rem\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 20,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{row.callUuid ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<RecordingCell\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcallUuid={row.callUuid}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trecordingPath={row.recordingPath ?? null}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t\t{!cdrLoading && cdrRecords.length === 0 && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolSpan={13}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tNo call records found\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t\t\t</TableContainer>\r\n\t\t\t\t\t\t\t\t<TablePagination\r\n\t\t\t\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\t\t\t\tcount={cdrTotal}\r\n\t\t\t\t\t\t\t\t\tpage={cdrPage}\r\n\t\t\t\t\t\t\t\t\tonPageChange={(_, p) => setCdrPage(p)}\r\n\t\t\t\t\t\t\t\t\trowsPerPage={cdrPageSize}\r\n\t\t\t\t\t\t\t\t\tonRowsPerPageChange={(e) => {\r\n\t\t\t\t\t\t\t\t\t\tsetCdrPageSize(parseInt(e.target.value, 10));\r\n\t\t\t\t\t\t\t\t\t\tsetCdrPage(0);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\trowsPerPageOptions={[5, 10, 20, 25, 50]}\r\n\t\t\t\t\t\t\t\t\tsx={paginationSx}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{/* ─── Break Details ─── */}\r\n\t\t\t\t\t\t{activeTab === 2 && (\r\n\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns: {\r\n\t\t\t\t\t\t\t\t\t\t\txs: \"1fr 1fr\",\r\n\t\t\t\t\t\t\t\t\t\t\tmd: \"repeat(3, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\t\tlg: \"repeat(4, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tgap: { xs: 1.5, lg: 2 },\r\n\t\t\t\t\t\t\t\t\t\tmb: 2,\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<StatCard\r\n\t\t\t\t\t\t\t\t\t\tvalue={profile?.breakTimeFormatted || \"00:00:00\"}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Total Break Time\"\r\n\t\t\t\t\t\t\t\t\t\tcolor={C.amber}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t<StatCard value={profile?.breaksTaken ?? 0} label=\"Breaks Taken\" color={C.purple} />\r\n\t\t\t\t\t\t\t\t\t<StatCard\r\n\t\t\t\t\t\t\t\t\t\tvalue={profile?.productionFormatted || \"00:00:00\"}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Production Time\"\r\n\t\t\t\t\t\t\t\t\t\tcolor={C.green}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t<StatCard\r\n\t\t\t\t\t\t\t\t\t\tvalue={profile?.loginDurationFormatted || \"00:00:00\"}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Login Duration\"\r\n\t\t\t\t\t\t\t\t\t\tcolor={C.teal}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.72rem\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\tcolor: \"#888\",\r\n\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"uppercase\",\r\n\t\t\t\t\t\t\t\t\t\t\tletterSpacing: 0.8,\r\n\t\t\t\t\t\t\t\t\t\t\tmb: 1,\r\n\t\t\t\t\t\t\t\t\t\t\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\tAttendance Summary\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\t\tgridTemplateColumns: { xs: \"1fr 1fr\", md: \"repeat(4, 1fr)\" },\r\n\t\t\t\t\t\t\t\t\t\t\tgap: 1.5,\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: \"First Login\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: profile?.firstLoginTime\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? dayjs(profile.firstLoginTime).format(\"YYYY-MM-DD HH:mm:ss\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"—\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.blue,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: \"Adherence Score\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: `${profile?.adherencePct ?? 0}%`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.green,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: \"Adherence Grade\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: profile?.adherenceGrade || \"—\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.purple,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: \"Answer Rate\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: `${(profile?.answerRate ?? 0).toFixed(1)}%`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: C.teal,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t].map((item) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<StatCard\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={item.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={item.value}\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={item.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={item.color}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\t\t\t</LocalizationProvider>\r\n\t\t);\r\n\t},\r\n);\r\n\r\nconst AgentDetailReport: React.FC<AgentDetailReportProps> = (props) => (\r\n\t<SDKProvider>\r\n\t\t<AgentDetailReportContent {...props} />\r\n\t</SDKProvider>\r\n);\r\n\r\nexport default AgentDetailReport;\r\n","export interface AgentPerfRow {\r\n\tagentId: string;\r\n\tfullName: string;\r\n\tprocessName: string;\r\n\tqueueNames: string;\r\n\ttotalCalls: number;\r\n\tansweredCalls: number;\r\n\tmissedCalls: number;\r\n\tinCalls: number;\r\n\toutCalls: number;\r\n\tahtSeconds: number;\r\n\tahtFormatted: string;\r\n\tloginDurationSeconds: number;\r\n\tloginDurationFormatted: string;\r\n\ttalkTimeSeconds: number;\r\n\ttalkTimeFormatted: string;\r\n\tholdTimeSeconds: number;\r\n\tholdTimeFormatted: string;\r\n\twrapupSeconds: number;\r\n\twrapupFormatted: string;\r\n\tbreakTimeSeconds: number;\r\n\tbreakTimeFormatted: string;\r\n\tbreakCount: number;\r\n\tidleTimeSeconds: number;\r\n\tidleTimeFormatted: string;\r\n\tfirstLoginTime: string | null;\r\n\tadherencePct: number;\r\n}\r\n\r\nexport interface AgentPerfReportParams {\r\n\tstart_date?: string;\r\n\tend_date?: string;\r\n\tagent_id?: string[];\r\n\tqueue_id?: number[];\r\n\tprocess_id?: number[];\r\n\ttop_n?: number;\r\n}\r\n\r\nexport type Order = \"asc\" | \"desc\";\r\n\r\nexport interface ColDef {\r\n\tkey: string;\r\n\tlabel: string;\r\n\tgroup: string;\r\n\talign?: \"left\" | \"right\" | \"center\";\r\n}\r\n\r\nexport const COLUMNS: ColDef[] = [\r\n\t{ key: \"id\", label: \"User ID\", group: \"Agent\" },\r\n\t{ key: \"name\", label: \"Full Name\", group: \"Agent\" },\r\n\t{ key: \"queue\", label: \"Queues\", group: \"Agent\" },\r\n\t{ key: \"total\", label: \"Total Calls\", group: \"Calls\", align: \"right\" },\r\n\t{ key: \"ans\", label: \"Answered\", group: \"Calls\", align: \"right\" },\r\n\t{ key: \"miss\", label: \"Missed\", group: \"Calls\", align: \"right\" },\r\n\t{ key: \"inTotal\", label: \"Inbound\", group: \"Calls\", align: \"right\" },\r\n\t{ key: \"outTotal\", label: \"Outbound\", group: \"Calls\", align: \"right\" },\r\n\t{ key: \"aht\", label: \"AHT\", group: \"Time\", align: \"right\" },\r\n\t{ key: \"loginDur\", label: \"Login Dur\", group: \"Time\", align: \"right\" },\r\n\t{ key: \"talk\", label: \"Talk Time\", group: \"Time\", align: \"right\" },\r\n\t{ key: \"hold\", label: \"Hold Time\", group: \"Time\", align: \"right\" },\r\n\t{ key: \"wrapup\", label: \"Wrapup Time\", group: \"Time\", align: \"right\" },\r\n\t{ key: \"breakTime\", label: \"Break Time\", group: \"Breaks\", align: \"right\" },\r\n\t{ key: \"idle\", label: \"Idle Time\", group: \"Time\", align: \"right\" },\r\n\t{ key: \"firstLogin\", label: \"First Login\", group: \"Login\" },\r\n\t{ key: \"adherence\", label: \"Adherence %\", group: \"Agent\", align: \"right\" },\r\n];\r\n","import type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\n// ─── Color tokens ─────────────────────────────────────────────────────────────\r\nexport const C = {\r\n\tnavy: \"#0d2a56\",\r\n\tblue: \"#1565c8\",\r\n\tgreen: \"#0a9a62\",\r\n\tamber: \"#c47c00\",\r\n\tred: \"#cc2a2a\",\r\n\tpurple: \"#6b3fbf\",\r\n\tteal: \"#0b7a8f\",\r\n\tbg: \"transparent\",\r\n\tsurface: \"#fff\",\r\n\ts2: \"#f7f9fc\",\r\n\ts3: \"#eef2f7\",\r\n\tb1: \"rgba(20,50,100,.07)\",\r\n\tb2: \"rgba(20,50,100,.13)\",\r\n\tt1: \"#0d1e35\",\r\n\tt2: \"#364f6e\",\r\n\tt3: \"#7a93b5\",\r\n\tt4: \"#bccad9\",\r\n\tblt: \"#e8f0fc\",\r\n\tglt: \"#e4f6ef\",\r\n\talt: \"#fdf3e0\",\r\n\trlt: \"#fde8e8\",\r\n\tplt: \"#f0eafa\",\r\n\ttlt: \"#e3f4f7\",\r\n};\r\n\r\nexport const containerSx: SxProps<Theme> = {\r\n\tbackground: C.bg,\r\n\tminHeight: \"100vh\",\r\n};\r\n\r\nexport const filterBarSx: SxProps<Theme> = {\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tgap: 1,\r\n\tflexWrap: \"wrap\",\r\n\tpb: 1.5,\r\n\tpx: 2,\r\n};\r\n\r\nexport const contentSx: SxProps<Theme> = {\r\n\tpy: 2,\r\n\tpx: 1,\r\n\toverflow: \"auto\",\r\n\tposition: \"relative\",\r\n};\r\n\r\nexport const loadingOverlaySx: SxProps<Theme> = {\r\n\tposition: \"absolute\",\r\n\ttop: 0,\r\n\tleft: 0,\r\n\tright: 0,\r\n\tbottom: 0,\r\n\tbackground: \"rgba(240,244,248,0.7)\",\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tjustifyContent: \"center\",\r\n\tzIndex: 10,\r\n};\r\n\r\nexport const tablePaperSx: SxProps<Theme> = {\r\n\tborderRadius: \"8px\",\r\n\tborder: \"1px solid #e0e7ef\",\r\n\toverflow: \"hidden\",\r\n\tmb: 2,\r\n};\r\n\r\nexport const tableRootSx: SxProps<Theme> = {\r\n\tminWidth: 1400,\r\n\t\"& .MuiTableCell-root\": {\r\n\t\tfontSize: \"0.75rem\",\r\n\t\tborderBottom: \"1px solid #eef1f6\",\r\n\t\tpy: 0.4,\r\n\t\tpx: 1,\r\n\t\theight: 36,\r\n\t\twhiteSpace: \"nowrap\",\r\n\t\toverflow: \"hidden\",\r\n\t\ttextOverflow: \"ellipsis\",\r\n\t},\r\n\t\"& .MuiTableRow-root\": {\r\n\t\theight: 36,\r\n\t},\r\n};\r\n\r\nexport const ellipsisCellSx: SxProps<Theme> = {\r\n\tmaxWidth: 220,\r\n\toverflow: \"hidden\",\r\n\ttextOverflow: \"ellipsis\",\r\n\twhiteSpace: \"nowrap\",\r\n\tdisplay: \"block\",\r\n};\r\n\r\nexport const headCellSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tbgcolor: \"#f1f1f1\",\r\n\tcolor: \"#333\",\r\n\tfontWeight: 600,\r\n\twhiteSpace: \"nowrap\",\r\n\tfontSize: \"0.8rem\",\r\n\tpy: \"6px\",\r\n\tpx: \"12px\",\r\n};\r\n\r\nexport const bodyCellSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontSize: \"0.82rem\",\r\n\tpy: \"4px\",\r\n\tpx: \"12px\",\r\n};\r\n\r\nexport const tableRowSx: SxProps<Theme> = {\r\n\tbackgroundColor: \"#fff\",\r\n\tcursor: \"pointer\",\r\n\t\"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n};\r\n\r\nexport const paginationSx: SxProps<Theme> = {\r\n\tborderTop: \"1px solid #eef1f6\",\r\n\t\"& .MuiTablePagination-displayedRows\": { fontSize: \"0.73rem\" },\r\n\t\"& .MuiTablePagination-selectLabel\": { fontSize: \"0.73rem\" },\r\n};\r\n\r\nexport const searchInputSx: SxProps<Theme> = {\r\n\twidth: 250,\r\n\tfontSize: \"0.82rem\",\r\n\theight: 36,\r\n};\r\n\r\nexport const datePickerSx: SxProps<Theme> = {\r\n\twidth: 150,\r\n\t\"& .MuiOutlinedInput-root\": {\r\n\t\tborderRadius: \"7px\",\r\n\t\tfontSize: 12,\r\n\t\theight: 30,\r\n\t},\r\n\t\"& .MuiInputBase-input\": { py: \"4px\", fontSize: 12 },\r\n};\r\n\r\nexport const emptyRowSx: SxProps<Theme> = {\r\n\ttextAlign: \"center\",\r\n\tpy: 4,\r\n\tcolor: C.t3,\r\n\tfontSize: 13,\r\n};\r\n","import React, { memo, useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport {\r\n\tAlert,\r\n\tBox,\r\n\tCircularProgress,\r\n\tIconButton,\r\n\tInputAdornment,\r\n\tOutlinedInput,\r\n\tPaper,\r\n\tStack,\r\n\tTable,\r\n\tTableBody,\r\n\tTableCell,\r\n\tTableContainer,\r\n\tTableHead,\r\n\tTablePagination,\r\n\tTableRow,\r\n\tTableSortLabel,\r\n\tTooltip,\r\n} from \"@mui/material\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport VisibilityIcon from \"@mui/icons-material/Visibility\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport dayjs, { type Dayjs } from \"dayjs\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { DatePicker } from \"@mui/x-date-pickers/DatePicker\";\r\n\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPageHeader } from \"../../components/SDKPageHeader\";\r\nimport { SDKButton } from \"../../components/SDKButton\";\r\nimport { useAgentPerformanceReport } from \"./useAgentPerformanceReport\";\r\nimport AgentDetailReport from \"../agentDetailReport\";\r\nimport type { AgentPerfRow } from \"./types\";\r\nimport { COLUMNS, type Order } from \"./types\";\r\nimport {\r\n\tbodyCellSx,\r\n\tC,\r\n\tcontainerSx,\r\n\tcontentSx,\r\n\tdatePickerSx,\r\n\tellipsisCellSx,\r\n\temptyRowSx,\r\n\tfilterBarSx,\r\n\theadCellSx,\r\n\tloadingOverlaySx,\r\n\tpaginationSx,\r\n\tsearchInputSx,\r\n\ttablePaperSx,\r\n\ttableRootSx,\r\n\ttableRowSx,\r\n} from \"./styles\";\r\n\r\n// ──── helpers ────────────────────────────────────────────────────────────────\r\n\r\nfunction parseDur(d: string): number {\r\n\tif (!d || d === \"00:00:00\") return 0;\r\n\tconst p = d.split(\":\").map(Number);\r\n\tif (p.length === 3) return p[0] * 3600 + p[1] * 60 + p[2];\r\n\tif (p.length === 2) return p[0] * 60 + p[1];\r\n\treturn 0;\r\n}\r\n\r\nfunction fmtDur(s: number): string {\r\n\tif (!s || s <= 0) return \"00:00:00\";\r\n\tconst h = Math.floor(s / 3600);\r\n\tconst m = Math.floor((s % 3600) / 60);\r\n\tconst sc = Math.floor(s % 60);\r\n\treturn [h, m, sc].map((x) => String(x).padStart(2, \"0\")).join(\":\");\r\n}\r\n\r\nfunction getVal(row: AgentPerfRow, key: string): any {\r\n\tswitch (key) {\r\n\t\tcase \"id\": return row.agentId || \"\";\r\n\t\tcase \"name\": return row.fullName || \"\";\r\n\t\tcase \"process\": return row.processName || \"\";\r\n\t\tcase \"queue\": return row.queueNames || \"\";\r\n\t\tcase \"total\": return row.totalCalls ?? 0;\r\n\t\tcase \"ans\": return row.answeredCalls ?? 0;\r\n\t\tcase \"miss\": return row.missedCalls ?? 0;\r\n\t\tcase \"inTotal\": return row.inCalls ?? 0;\r\n\t\tcase \"outTotal\": return row.outCalls ?? 0;\r\n\t\tcase \"aht\": return row.ahtSeconds ?? 0;\r\n\t\tcase \"loginDur\": return row.loginDurationSeconds ?? 0;\r\n\t\tcase \"talk\": return row.talkTimeSeconds ?? 0;\r\n\t\tcase \"hold\": return row.holdTimeSeconds ?? 0;\r\n\t\tcase \"wrapup\": return row.wrapupSeconds ?? 0;\r\n\t\tcase \"breakTime\": return row.breakTimeSeconds ?? 0;\r\n\t\tcase \"idle\": return row.idleTimeSeconds ?? 0;\r\n\t\tcase \"adherence\": return row.adherencePct ?? null;\r\n\t\tcase \"firstLogin\": return row.firstLoginTime || \"\";\r\n\t\tdefault: return \"\";\r\n\t}\r\n}\r\n\r\nfunction renderCellValue(row: AgentPerfRow, key: string): string {\r\n\tconst v = getVal(row, key);\r\n\tconst durKeys = [\"aht\", \"loginDur\", \"talk\", \"hold\", \"wrapup\", \"breakTime\", \"idle\"];\r\n\tif (durKeys.includes(key)) return fmtDur(Number(v) || 0);\r\n\tif (key === \"adherence\") return v != null ? `${v}%` : \"—\";\r\n\tif (key === \"firstLogin\") return v ? dayjs(v).format(\"DD MMM YY hh:mm A\") : \"\";\r\n\treturn v == null ? \"\" : String(v);\r\n}\r\n\r\nfunction splitQueues(raw: string): string[] {\r\n\tif (!raw) return [];\r\n\treturn String(raw)\r\n\t\t.split(/[,;|]/)\r\n\t\t.map((q) => q.trim())\r\n\t\t.filter(Boolean);\r\n}\r\n\r\n// ──── Content ────────────────────────────────────────────────────────────────\r\n\r\nconst AgentPerformanceReportContent = memo(() => {\r\n\tconst [startDate, setStartDate] = useState<Dayjs | null>(dayjs().startOf(\"day\"));\r\n\tconst [endDate, setEndDate] = useState<Dayjs | null>(dayjs());\r\n\tconst [quickRange, setQuickRange] = useState<string>(\"today\");\r\n\tconst [search, setSearch] = useState(\"\");\r\n\r\n\tconst [orderBy, setOrderBy] = useState<string>(\"total\");\r\n\tconst [order, setOrder] = useState<Order>(\"desc\");\r\n\tconst [page, setPage] = useState(0);\r\n\tconst [rowsPerPage, setRowsPerPage] = useState(10);\r\n\r\n\tconst [selectedAgent, setSelectedAgent] = useState<AgentPerfRow | null>(null);\r\n\r\n\tconst { agents, loading, error, setError, fetchAgents, exportExcel } =\r\n\t\tuseAgentPerformanceReport();\r\n\r\n\tconst fetchReport = useCallback(\r\n\t\tasync (sd?: Dayjs | null, ed?: Dayjs | null) => {\r\n\t\t\tconst fromDate = sd ?? startDate;\r\n\t\t\tconst toDate = ed ?? endDate;\r\n\t\t\tif (!fromDate || !toDate) {\r\n\t\t\t\tsetError(\"Select date range\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tsetPage(0);\r\n\t\t\tawait fetchAgents({\r\n\t\t\t\tstart_date: fromDate.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\tend_date: toDate.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t});\r\n\t\t},\r\n\t\t[startDate, endDate, fetchAgents, setError],\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (startDate && endDate) fetchReport();\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, []);\r\n\r\n\tconst setQuick = (range: string) => {\r\n\t\tsetQuickRange(range);\r\n\t\tconst today = dayjs();\r\n\t\tlet sd: Dayjs = today;\r\n\t\tconst ed: Dayjs = today;\r\n\t\tif (range === \"week\") sd = today.startOf(\"week\");\r\n\t\telse if (range === \"month\") sd = today.startOf(\"month\");\r\n\t\tsetStartDate(sd);\r\n\t\tsetEndDate(ed);\r\n\t\tfetchReport(sd, ed);\r\n\t};\r\n\r\n\tconst filtered = useMemo(() => {\r\n\t\tif (!search) return agents;\r\n\t\tconst s = search.toLowerCase();\r\n\t\treturn agents.filter(\r\n\t\t\t(r) =>\r\n\t\t\t\t(r.fullName || \"\").toLowerCase().includes(s) ||\r\n\t\t\t\t(r.agentId || \"\").toLowerCase().includes(s),\r\n\t\t);\r\n\t}, [agents, search]);\r\n\r\n\tconst sorted = useMemo(() => {\r\n\t\treturn [...filtered].sort((a, b) => {\r\n\t\t\tconst av = getVal(a, orderBy);\r\n\t\t\tconst bv = getVal(b, orderBy);\r\n\t\t\tif (typeof av === \"number\" && typeof bv === \"number\") {\r\n\t\t\t\treturn order === \"asc\" ? av - bv : bv - av;\r\n\t\t\t}\r\n\t\t\treturn order === \"asc\"\r\n\t\t\t\t? String(av).localeCompare(String(bv))\r\n\t\t\t\t: String(bv).localeCompare(String(av));\r\n\t\t});\r\n\t}, [filtered, orderBy, order]);\r\n\r\n\tconst paged = sorted.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);\r\n\r\n\tconst handleSort = (key: string) => {\r\n\t\tsetOrder(orderBy === key && order === \"asc\" ? \"desc\" : \"asc\");\r\n\t\tsetOrderBy(key);\r\n\t};\r\n\r\n\tconst handleExport = async () => {\r\n\t\tif (!startDate || !endDate) {\r\n\t\t\tsetError(\"Select date range\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\ttry {\r\n\t\t\tawait exportExcel({\r\n\t\t\t\tstart_date: startDate.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t\tend_date: endDate.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n\t\t\t});\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(err?.message || \"Failed to export Excel\");\r\n\t\t}\r\n\t};\r\n\r\n\tif (selectedAgent) {\r\n\t\treturn (\r\n\t\t\t<AgentDetailReport\r\n\t\t\t\tagentRow={selectedAgent}\r\n\t\t\t\tonBack={() => setSelectedAgent(null)}\r\n\t\t\t\tinitialStartDate={startDate}\r\n\t\t\t\tinitialEndDate={endDate}\r\n\t\t\t\tinitialQuickRange={quickRange}\r\n\t\t\t\tfrom=\"REPORTS_LIST\"\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\r\n\t\t\t<Box sx={containerSx}>\r\n\t\t\t\t<SDKPageHeader\r\n\t\t\t\t\ttitle=\"Performance Report\"\r\n\t\t\t\t\tactions={\r\n\t\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" spacing={1}>\r\n\t\t\t\t\t\t\t<OutlinedInput\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tvalue={search}\r\n\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\tsetSearch(e.target.value);\r\n\t\t\t\t\t\t\t\t\tsetPage(0);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tplaceholder=\"Search name, ID...\"\r\n\t\t\t\t\t\t\t\tsx={searchInputSx}\r\n\t\t\t\t\t\t\t\tendAdornment={\r\n\t\t\t\t\t\t\t\t\t<InputAdornment position=\"end\">\r\n\t\t\t\t\t\t\t\t\t\t<SearchIcon sx={{ fontSize: 18, color: \"#999\" }} />\r\n\t\t\t\t\t\t\t\t\t</InputAdornment>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\t\t\tstartIcon={<FileDownloadIcon sx={{ fontSize: \"0.95rem\" }} />}\r\n\t\t\t\t\t\t\t\tdisabled={!agents.length}\r\n\t\t\t\t\t\t\t\tonClick={handleExport}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tExport Excel\r\n\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t<Box sx={filterBarSx}>\r\n\t\t\t\t\t<DatePicker\r\n\t\t\t\t\t\tvalue={startDate}\r\n\t\t\t\t\t\tonChange={(val) => {\r\n\t\t\t\t\t\t\tsetStartDate(val as Dayjs | null);\r\n\t\t\t\t\t\t\tsetQuickRange(\"custom\");\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tslotProps={{ textField: { size: \"small\", sx: datePickerSx } }}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<Box component=\"span\" sx={{ fontSize: 12, color: C.t3 }}>\r\n\t\t\t\t\t\tto\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<DatePicker\r\n\t\t\t\t\t\tvalue={endDate}\r\n\t\t\t\t\t\tonChange={(val) => {\r\n\t\t\t\t\t\t\tsetEndDate(val as Dayjs | null);\r\n\t\t\t\t\t\t\tsetQuickRange(\"custom\");\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tslotProps={{ textField: { size: \"small\", sx: datePickerSx } }}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\tvariant={quickRange === \"today\" ? \"primary\" : \"outlined\"}\r\n\t\t\t\t\t\tonClick={() => setQuick(\"today\")}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\tToday\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\tvariant={quickRange === \"week\" ? \"primary\" : \"outlined\"}\r\n\t\t\t\t\t\tonClick={() => setQuick(\"week\")}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\tThis Week\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\tvariant={quickRange === \"month\" ? \"primary\" : \"outlined\"}\r\n\t\t\t\t\t\tonClick={() => setQuick(\"month\")}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\tThis Month\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t<SDKButton variant=\"outlined\" onClick={() => fetchReport()}>\r\n\t\t\t\t\t\tSearch\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t{error && (\r\n\t\t\t\t\t<Alert severity=\"error\" sx={{ mx: 2.5, mt: 1.5 }} onClose={() => setError(\"\")}>\r\n\t\t\t\t\t\t{error}\r\n\t\t\t\t\t</Alert>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<Box sx={contentSx}>\r\n\t\t\t\t\t{loading && (\r\n\t\t\t\t\t\t<Box sx={loadingOverlaySx}>\r\n\t\t\t\t\t\t\t<CircularProgress />\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t<Paper elevation={0} sx={tablePaperSx}>\r\n\t\t\t\t\t\t<TableContainer>\r\n\t\t\t\t\t\t\t<Table size=\"small\" sx={tableRootSx}>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t{COLUMNS.map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell key={col.key} align={col.align || \"left\"} sx={headCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<TableSortLabel\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive={orderBy === col.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdirection={orderBy === col.key ? order : \"asc\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleSort(col.key)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{col.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</TableSortLabel>\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ ...headCellSx, width: 48 }}>Detail</TableCell>\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{paged.map((row, idx) => (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow\r\n\t\t\t\t\t\t\t\t\t\t\tkey={row.agentId || idx}\r\n\t\t\t\t\t\t\t\t\t\t\thover\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => setSelectedAgent(row)}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={tableRowSx}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{COLUMNS.map((col) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (col.key === \"queue\") {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst queues = splitQueues(row.queueNames);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst shown = queues.slice(0, 3).join(\", \");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst overflow = queues.length > 3;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst display = overflow ? `${shown}…` : shown;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst title = queues.join(\", \") || \"—\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={col.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talign={col.align || \"left\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ ...bodyCellSx, maxWidth: 240 }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={title} placement=\"top\" arrow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={ellipsisCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{display || \"—\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (col.key === \"firstLogin\") {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst text = renderCellValue(row, col.key);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={col.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talign={col.align || \"left\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ ...bodyCellSx, whiteSpace: \"nowrap\" }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{text}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (col.key === \"name\") {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst text = renderCellValue(row, col.key);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={col.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talign={col.align || \"left\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ ...bodyCellSx, maxWidth: 200 }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={text || \"\"} placement=\"top\" arrow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={ellipsisCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{text}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TableCell key={col.key} align={col.align || \"left\"} sx={bodyCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{renderCellValue(row, col.key)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx} align=\"center\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetSelectedAgent(row);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ color: C.blue }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<VisibilityIcon sx={{ fontSize: 16 }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t{paged.length === 0 && !loading && (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={COLUMNS.length + 1} sx={emptyRowSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo data found\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t</TableContainer>\r\n\r\n\t\t\t\t\t\t<TablePagination\r\n\t\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\t\tcount={filtered.length}\r\n\t\t\t\t\t\t\tpage={page}\r\n\t\t\t\t\t\t\tonPageChange={(_, p) => setPage(p)}\r\n\t\t\t\t\t\t\trowsPerPage={rowsPerPage}\r\n\t\t\t\t\t\t\tonRowsPerPageChange={(e) => {\r\n\t\t\t\t\t\t\t\tsetRowsPerPage(parseInt(e.target.value, 10));\r\n\t\t\t\t\t\t\t\tsetPage(0);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\trowsPerPageOptions={[5, 10, 20, 25, 50]}\r\n\t\t\t\t\t\t\tsx={paginationSx}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</Paper>\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t</LocalizationProvider>\r\n\t);\r\n});\r\n\r\nconst AgentPerformanceReport: React.FC = () => (\r\n\t<SDKProvider>\r\n\t\t<AgentPerformanceReportContent />\r\n\t</SDKProvider>\r\n);\r\n\r\nexport default AgentPerformanceReport;\r\n","import { eventTracker } from \"./lib/hooks/eventsTracker\";\r\nimport { sdkStateManager } from \"./lib/hooks/sdk-state\";\r\nimport { useLogout } from \"./lib/hooks/useLogout\";\r\nimport { useEndCall } from \"./lib/hooks/useEndCall\";\r\nimport { SDKConfig, URLConfig } from \"./types\";\r\nimport { useClickToCall } from \"./lib/hooks/useClickToCall\";\r\nimport { useGetCallerData } from \"./lib/hooks/useGetCallerData\";\r\nimport { useGetAuthorizationToken } from \"./lib/hooks/useGetAuthorizationToken\";\r\nimport { useSDKState } from \"./lib/hooks/useSDKState\";\r\nimport { useCallMonitoring } from \"./lib/hooks/useCallMonitoring\";\r\nimport {\r\n SDK_PERMISSIONS,\r\n SDK_MENU_CODES,\r\n SDK_WILDCARD,\r\n type SDKPermissionState,\r\n type ControlsFromPermissions,\r\n type SDKPermissionContextValue,\r\n} from \"./lib/permissions\";\r\n\r\nexport { CallControlPanel } from \"./lib/components/callControlPanel\";\r\nexport { SDKPages } from \"./lib/pages\";\r\nexport { SDKPermissionGuard } from \"./lib/components/SDKPermissionGuard\";\r\nexport { SDKAccessDenied } from \"./lib/components/SDKAccessDenied\";\r\nexport { useSDKPermissions } from \"./lib/hooks/useSDKPermissions\";\r\nexport type { SDKPermissionsHook } from \"./lib/hooks/useSDKPermissions\";\r\n\r\nexport type { CallControlPanelProps, CallData, SDKConfig } from \"./types\";\r\nexport type {\r\n SDKPermissionState,\r\n ControlsFromPermissions,\r\n SDKPermissionContextValue,\r\n};\r\n\r\ninterface InitSDKParams {\r\n apiKey: string;\r\n tenantId: string;\r\n agentId: string;\r\n sessionId?: string;\r\n sdkConfig?: SDKConfig;\r\n urlConfig?: URLConfig;\r\n}\r\n\r\nexport async function initSDK({\r\n apiKey,\r\n tenantId,\r\n agentId,\r\n sdkConfig,\r\n urlConfig,\r\n}: InitSDKParams): Promise<void> {\r\n if (!apiKey || typeof apiKey !== \"string\" || apiKey.trim().length === 0) {\r\n throw new Error(\"SDK initialization failed: API key is required\");\r\n }\r\n\r\n if (\r\n !tenantId ||\r\n typeof tenantId !== \"string\" ||\r\n tenantId.trim().length === 0\r\n ) {\r\n throw new Error(\"SDK initialization failed: Tenant ID is required\");\r\n }\r\n\r\n if (!agentId || typeof agentId !== \"string\" || agentId.trim().length === 0) {\r\n throw new Error(\"SDK initialization failed: Agent ID is required\");\r\n }\r\n\r\n try {\r\n const initResult = await eventTracker.init({\r\n apiKey: apiKey.trim(),\r\n tenantId: tenantId.trim(),\r\n agentId: agentId.trim(),\r\n password: urlConfig?.password,\r\n accessToken: urlConfig?.accessToken,\r\n baseUrl: urlConfig?.coreBaseURL,\r\n });\r\n\r\n if (!initResult) {\r\n sdkStateManager.setInitCheck();\r\n throw new Error(\"SDK initialization failed\");\r\n }\r\n\r\n // Set entitlements from the init response\r\n if (initResult.userInfo) {\r\n sdkStateManager.setSDKPermissions(initResult.userInfo);\r\n }\r\n\r\n // Get entitlement-based controls config\r\n const permissionControlsConfig = sdkStateManager.getControlsConfig();\r\n\r\n // Merge configs: backend callControls < entitlement-based config < explicit sdkConfig\r\n const callcontrolConfig = {\r\n ...(initResult.callControls || {}),\r\n ...permissionControlsConfig,\r\n ...(sdkConfig || {}),\r\n // sdkPosition: 'vertical'\r\n };\r\n\r\n const res = {\r\n accessToken: initResult.accessToken,\r\n expiration: initResult.expiration,\r\n ticketId: initResult.ticketId,\r\n callControls: callcontrolConfig,\r\n userInfo: initResult.userInfo,\r\n };\r\n\r\n console.info(\"SDK initialized successfully\");\r\n\r\n sdkStateManager.initialize(\r\n apiKey.trim(),\r\n tenantId.trim(),\r\n agentId.trim(),\r\n urlConfig,\r\n res,\r\n callcontrolConfig,\r\n initResult.callControls,\r\n );\r\n } catch (error) {\r\n sdkStateManager.setInitCheck();\r\n\r\n if (error instanceof Error) {\r\n throw error;\r\n }\r\n\r\n throw new Error(`SDK initialization failed: ${String(error)}`);\r\n }\r\n}\r\n\r\nexport function getSDKVersion(): string {\r\n return \"6.x.x\";\r\n}\r\n\r\nexport function isSDKInitialized(): boolean {\r\n return sdkStateManager.getState().isInitialized;\r\n}\r\n\r\nexport {\r\n useLogout,\r\n useEndCall,\r\n useClickToCall,\r\n useGetCallerData,\r\n useGetAuthorizationToken,\r\n useSDKState,\r\n useCallMonitoring,\r\n};\r\nexport type { UseClickToCallReturn, CallInitiationFunction, StartCalltHookStateTypes } from \"./lib/hooks/useClickToCall\";\r\nexport type { UseEndCallReturn, HookStateTypes, CallTerminationFunction } from \"./lib/hooks/useEndCall\";\r\nexport type { UseLogoutReturn, LogoutFunction, LogoutHookStateTypes } from \"./lib/hooks/useLogout\";\r\nexport { useClickToConference } from \"./lib/hooks/useClickToConference\";\r\nexport type { UseClickToConferenceReturn, ConferenceCallPayload as ConferenceCallHookPayload } from \"./lib/hooks/useClickToConference\";\r\n\r\nexport { sdkStateManager } from \"./lib/hooks/sdk-state\";\r\n\r\nexport {\r\n clickToCall,\r\n clickToConference,\r\n endCall,\r\n logout,\r\n startMonitoring,\r\n stopMonitoring,\r\n changeMonitorMode,\r\n} from \"./lib/angular-services\";\r\nexport type {\r\n StartCallPayload,\r\n ConferenceCallPayload,\r\n EndCallPayload,\r\n SupervisorMonitorMode,\r\n StartMonitoringPayload,\r\n StopMonitoringPayload,\r\n ChangeModePayload,\r\n} from \"./lib/angular-services\";\r\n\r\nexport type {\r\n UseCallMonitoringReturn,\r\n} from \"./lib/hooks/useCallMonitoring\";\r\n\r\n// Entitlement exports\r\nexport { SDK_PERMISSIONS, SDK_MENU_CODES, SDK_WILDCARD };\r\n","import { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport interface EventTrackerConfig {\r\n\tapiKey: string;\r\n\ttenantId: string;\r\n\tagentId: string;\r\n\tpassword?: string;\r\n\taccessToken?: string;\r\n\tbaseUrl?: string;\r\n\r\n\tretryAttempts?: number;\r\n\tqueueSize?: number;\r\n\tflushInterval?: number;\r\n}\r\n\r\nexport interface EventData {\r\n\t[key: string]: any;\r\n}\r\n\r\nexport interface EventTrackerInstance {\r\n\tinit(config: EventTrackerConfig): Promise<string | null>;\r\n\tisInitialized(): boolean;\r\n\tgetConfig(): EventTrackerConfig | null;\r\n}\r\n\r\nclass EventTrackerSDK implements EventTrackerInstance {\r\n\tprivate config: EventTrackerConfig | null = null;\r\n\tprivate ticketId: string | null = null;\r\n\tprivate baseUrl: string = \"\";\r\n\tprivate flushTimer: ReturnType<typeof setInterval> | null = null;\r\n\r\n\tasync init(config: EventTrackerConfig): Promise<any | null> {\r\n\t\tthis.config = {\r\n\t\t\tretryAttempts: 3,\r\n\t\t\tqueueSize: 100,\r\n\t\t\tflushInterval: 5000,\r\n\t\t\t...config,\r\n\t\t};\r\n\r\n\t\tthis.baseUrl = config.baseUrl || (typeof window !== \"undefined\" ? window.location.origin : \"\");\r\n\r\n\t\tconst ticket = await this.createTicket();\r\n\r\n\t\tthis.startPeriodicFlush();\r\n\r\n\t\treturn ticket;\r\n\t}\r\n\r\n\tisInitialized(): boolean {\r\n\t\treturn this.config !== null && this.ticketId !== null;\r\n\t}\r\n\r\n\tgetConfig(): EventTrackerConfig | null {\r\n\t\treturn this.config;\r\n\t}\r\n\r\n\tgetTicketId(): string | null {\r\n\t\treturn this.ticketId;\r\n\t}\r\n\r\n\tprivate async createTicket(): Promise<any | null> {\r\n\t\tif (!this.config) {\r\n\t\t\tthrow new Error(\"EventTracker not initialized\");\r\n\t\t}\r\n\r\n\t\t// If an accessToken is already provided, skip the login API call\r\n\t\t// if (this.config.accessToken) {\r\n\t\t// \treturn { accessToken: this.config.accessToken };\r\n\t\t// }\r\n\r\n\t\ttry {\r\n\t\t\t\tconst response = await this.makeRequest(\"/api/v1/auth/login\", { // login with base url - same as main application\r\n\t\t\t\tmethod: \"POST\",\r\n\t\t\t\theaders: {\r\n\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t},\r\n\t\t\t\tbody: JSON.stringify({\r\n\t\t\t\t\tuserId: String(this.config.agentId ?? \"\"),\r\n\t\t\t\t\t// sessionId: this.config.sessionId,\r\n\t\t\t\t\tpassword: this.config.password\r\n\t\t\t\t}),\r\n\t\t\t});\r\n\r\n\t\t\t// if (!response.ok) {\r\n\t\t\t// \tsdkStateManager.setInitCheck();\r\n\t\t\t// \tthrow new Error(`Failed to initialize: ${response.status} ${response.statusText}`);\r\n\t\t\t// }\r\n\r\n\t\t\tconst data = await response.json();\r\n\t\t\tthis.ticketId = data.ticketId;\r\n\r\n\r\n\t\t\treturn data;\r\n\t\t} catch (error) {\r\n\r\n\t\t\tthrow error;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async makeRequest(url: string, options: RequestInit): Promise<Response> {\r\n\t\tconst fullUrl = `${this.baseUrl}${url}`;\r\n\t\tconst maxRetries = this.config?.retryAttempts || 3;\r\n\r\n\t\tfor (let attempt = 1; attempt <= maxRetries; attempt++) {\r\n\t\t\ttry {\r\n\t\t\t\tconst response = await fetch(fullUrl, options);\r\n\t\t\t\treturn response;\r\n\t\t\t} catch (error) {\r\n\t\t\t\tif (attempt === maxRetries) {\r\n\t\t\t\t\tthrow error;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);\r\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, delay));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthrow new Error(\"Max retries exceeded\");\r\n\t}\r\n\r\n\tprivate startPeriodicFlush(): void {\r\n\t\tif (this.flushTimer) {\r\n\t\t\tclearInterval(this.flushTimer);\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n}\r\n\r\nexport const eventTracker = new EventTrackerSDK();\r\n\r\nif (typeof window !== \"undefined\") {\r\n\t(window as any).EventTracker = eventTracker;\r\n}\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nimport axiosInstance from \"../services/axios\";\r\nimport { removeSession } from \"@react-solutions/vault\";\r\n// import { USB_LIGHT_ALL_OFF, USB_LIGHT_REQUEST } from \"../services/usbLight\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\nimport { useToast } from \"../services/toastMessage\";\r\n\r\nexport type LogoutFunction = () => Promise<any>;\r\n\r\nexport type LogoutHookStateTypes = {\r\n\tisLoading: boolean;\r\n\tisSuccess: boolean;\r\n\tisError: boolean;\r\n\terror: any;\r\n\tdata: any;\r\n};\r\n\r\nexport interface UseLogoutReturn extends LogoutHookStateTypes {\r\n\tlogout: LogoutFunction;\r\n}\r\n\r\nexport interface LogoutPayload {\r\n\taction: string;\r\n\tuserId: string;\r\n}\r\n\r\nexport const useLogout = () => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst [success, setSuccess] = useState(false);\r\n\r\n\tconst [isError, setIsError] = useState(false);\r\n\r\n\tconst [error, setError] = useState(null);\r\n\r\n\tconst [data, setData] = useState(null);\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst handleLogout = useCallback(async () => {\r\n\t\tsetLoading(true);\r\n\r\n\t\ttry {\r\n\t\t\tawait axiosInstance.post(END_POINT.AUTH_LOGOUT);\r\n\t\t} catch (err: any) {\r\n\t\t\tconst message = err?.response?.data?.message || \"Logout failed. Please try again.\";\r\n\t\t\tshowToast(message, \"error\");\r\n\t\t} finally {\r\n\t\t\tsdkStateManager.clearStorageAndReset();\r\n\t\t\tremoveSession(STORAGE_KEY);\r\n\t\t\tsetSuccess(true);\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tlogout: handleLogout,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError: isError,\r\n\t\terror: error,\r\n\t\tdata: data,\r\n\t};\r\n};\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nimport axiosInstance from \"../services/axios\";\r\nimport { getSession } from \"@react-solutions/vault\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\n\r\nexport type HookStateTypes = {\r\n\tisLoading: boolean;\r\n\tisSuccess: boolean;\r\n\tisError: boolean;\r\n\terror: any;\r\n\tdata: any;\r\n};\r\n\r\nexport interface EndCallPayload {\r\n\tcall_id?: string;\r\n\tagent_id?: string;\r\n\tset_followUp?: string;\r\n\tcallback_date?: string;\r\n\tcallback_hrs?: number;\r\n\tcallback_mins?: number;\r\n\tmobile_number?: string;\r\n\tlist_comments?: string;\r\n\tcall_reference_id?: string;\r\n\tis_mark_as_break?: boolean;\r\n\tdisposition?: string;\r\n\tline_number?: number;\r\n\treason?: string;\r\n\tpatientLog?: any;\r\n}\r\n\r\nexport type CallTerminationFunction = (data: EndCallPayload) => Promise<any>;\r\n\r\nexport interface UseEndCallReturn extends HookStateTypes {\r\n\thandleEndCall: CallTerminationFunction;\r\n}\r\n\r\nexport const useEndCall = () => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst [success, setSuccess] = useState(false);\r\n\r\n\tconst [isError, setIsError] = useState(false);\r\n\r\n\tconst [error, setError] = useState(null);\r\n\r\n\tconst [data, setData] = useState(null);\r\n\r\n\tconst handleEndCall = useCallback(\r\n\t\tasync (data: EndCallPayload = {}) => {\r\n\t\t\tconst state = getSession(STORAGE_KEY) as any;\r\n\r\n\t\t\tsetLoading(true);\r\n\r\n\t\t\tconst payload = {\r\n\t\t\t\tcall_id: data?.call_id ?? state?.callData?.call_id ?? \"\",\r\n\t\t\t\tagent_id: data?.agent_id ?? state?.agentId ?? \"\",\r\n\t\t\t\tset_followUp: data?.set_followUp ?? \"N\",\r\n\t\t\t\tcallback_date: data?.callback_date ?? \"\",\r\n\t\t\t\tcallback_hrs: data?.callback_hrs ?? 0,\r\n\t\t\t\tcallback_mins: data?.callback_mins ?? 0,\r\n\t\t\t\tmobile_number: data?.mobile_number ?? state?.callData?.phone_number ?? \"\",\r\n\t\t\t\tlist_comments: data?.list_comments ?? \"\",\r\n\t\t\t\tcall_reference_id: data?.call_reference_id ?? state?.callData?.call_id ?? \"\",\r\n\t\t\t\tis_mark_as_break: data?.is_mark_as_break ?? false,\r\n\t\t\t\tdisposition: data?.disposition ?? \"RES\",\r\n\t\t\t\tline_number: data?.line_number ?? 0,\r\n\t\t\t\treason: data?.reason ?? \"normal\",\r\n\t\t\t};\r\n\r\n\t\t\treturn axiosInstance\r\n\t\t\t\t.post(END_POINT.END_CALL, payload)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\t\tsdkStateManager.endCall();\r\n\r\n\t\t\t\t\tsetData(res?.data);\r\n\r\n\t\t\t\t\tsetSuccess(true);\r\n\r\n\t\t\t\t\treturn res?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tsetIsError(true);\r\n\r\n\t\t\t\t\tsetError(err);\r\n\r\n\t\t\t\t\treturn err?.response?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tsetLoading(false);\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[]\r\n\t);\r\n\r\n\treturn {\r\n\t\thandleEndCall,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError: isError,\r\n\t\terror: error,\r\n\t\tdata: data,\r\n\t};\r\n};\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport { getSession } from \"@react-solutions/vault\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\nimport { da } from \"date-fns/locale\";\r\n\r\nexport interface StartCallPayload {\r\n\tmobileNumber: string;\r\n\tuser?: string;\r\n\tauto_answer?: boolean;\r\n\tcall_id?: string;\r\n\treference_id?: string;\r\n\tcall_source?: string;\r\n\tcaseId?: string;\r\n\tisWrapup?: boolean;\r\n\tparentCallUuid?: string;\r\n}\r\n\r\nexport type CallInitiationFunction = (data: StartCallPayload) => Promise<any>;\r\n\r\nexport type StartCalltHookStateTypes = {\r\n\tisLoading: boolean;\r\n\tisSuccess: boolean;\r\n\tisError: boolean;\r\n\terror: any;\r\n\tdata: any;\r\n};\r\n\r\nexport interface UseClickToCallReturn extends StartCalltHookStateTypes {\r\n\thandleStartCall: CallInitiationFunction;\r\n}\r\n\r\nexport const useClickToCall = () => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst [success, setSuccess] = useState(false);\r\n\r\n\tconst [isError, setIsError] = useState(false);\r\n\r\n\tconst [error, setError] = useState(null);\r\n\r\n\tconst [data, setData] = useState(null);\r\n\r\n\tconst handleStartCall = useCallback(async (data: StartCallPayload) => {\r\n\t\tconst state = getSession(STORAGE_KEY) as any;\r\n\t\tconst status = state?.callData?.status;\r\n\r\n\t\tsetLoading(true);\r\n\r\n\t\tif (status === \"IDLE\" || status === \"ONCALL\" || status === \"WRAPUP\") {\r\n\t\t\t// rootCallUuid chaining only runs when disableAlternateDialing is true;\r\n\t\t\t// otherwise parentCallUuid stays \"\" and the chain is cleared.\r\n\t\t\t// Caller-supplied parentCallUuid still wins as an explicit override.\r\n\t\t\tconst liveState = sdkStateManager.getState();\r\n\t\t\tconst isWrapupCall = status === \"WRAPUP\";\r\n\r\n\t\t\tlet parentCallUuid = \"\";\r\n\t\t\tif (data?.parentCallUuid) {\r\n\t\t\t\tparentCallUuid = data.parentCallUuid;\r\n\t\t\t} else if (liveState.sdkConfig?.disableAlternateDialing) {\r\n\t\t\t\tif (isWrapupCall) {\r\n\t\t\t\t\tif (liveState.rootCallUuid) {\r\n\t\t\t\t\t\tparentCallUuid = liveState.rootCallUuid;\r\n\t\t\t\t\t} else if (state?.callData?.call_id) {\r\n\t\t\t\t\t\tparentCallUuid = state.callData.call_id;\r\n\t\t\t\t\t\tsdkStateManager.setRootCallUuid(parentCallUuid);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (liveState.rootCallUuid) {\r\n\t\t\t\t\tsdkStateManager.setRootCallUuid(null);\r\n\t\t\t\t}\r\n\t\t\t} else if (liveState.rootCallUuid) {\r\n\t\t\t\tsdkStateManager.setRootCallUuid(null);\r\n\t\t\t}\r\n\r\n\t\t\tconst payload = {\r\n\t\t\t\tphone_number: data?.mobileNumber,\r\n\t\t\t\tuser: data?.user ?? state?.agentId ?? \"\",\r\n\t\t\t\tauto_answer: data?.auto_answer ?? false,\r\n\t\t\t\tcall_id: state?.callData?.call_id ?? data?.call_id ?? \"\",\r\n\t\t\t\treference_id: data?.reference_id ?? \"\",\r\n\t\t\t\tcall_source: data?.call_source ?? \"\",\r\n\t\t\t\tcaseId: data?.caseId ?? \"\",\r\n\t\t\t\tisWrapup: data?.isWrapup ?? false,\r\n\t\t\t\tparentCallUuid:data?.parentCallUuid ?? data.parentCallUuid ?? parentCallUuid ?? \"\" ,\r\n\t\t\t};\r\n\r\n\t\t\treturn axiosInstance\r\n\t\t\t\t.post(END_POINT.CLICK_TO_CALL, payload)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\t\tsetData(res?.data);\r\n\r\n\t\t\t\t\tsetSuccess(true);\r\n\r\n\t\t\t\t\treturn res?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tsetIsError(true);\r\n\r\n\t\t\t\t\tsetError(err);\r\n\r\n\t\t\t\t\treturn err?.response?.data;\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tsetLoading(false);\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\tsetLoading(false);\r\n\t\t\talert(\"Agent is not ready\");\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\thandleStartCall,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError: isError,\r\n\t\terror: error,\r\n\t\tdata: data,\r\n\t};\r\n};\r\n\r\n\r\n","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\n\r\nexport const useGetAuthorizationToken = () => {\r\n\tconst [token, setToken] = useState<string | undefined>(sdkStateManager.getSdkAuthToken());\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tsetToken(sdkStateManager.getSdkAuthToken());\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn token;\r\n};\r\n","import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { SDKState } from \"../../types\";\r\n\r\nexport function useSDKState(): SDKState {\r\n\tconst [state, setState] = useState<SDKState>(sdkStateManager.getState());\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tsetState(sdkStateManager.getState());\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn state;\r\n}\r\n","import { useCallback, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport type SupervisorMonitorMode = \"listen\" | \"whisper\" | \"barge\";\r\n\r\nexport interface StartMonitoringPayload {\r\n\t/** UUID of the active call to monitor */\r\n\tcall_id: string;\r\n\t/** Monitoring mode: listen (hear only), whisper (speak to agent), barge (full 3-way) */\r\n\tmode: SupervisorMonitorMode;\r\n\t/** Optional: supervisor's SIP/WebRTC extension. Auto-detected from logged-in user if omitted */\r\n\tsupervisor_extension?: string;\r\n\t/** Optional: agent's extension. Auto-detected if omitted */\r\n\tagent_extension?: string;\r\n}\r\n\r\nexport interface StopMonitoringPayload {\r\n\t/** UUID of the call being monitored */\r\n\tcall_uuid: string;\r\n\t/** Legacy field – ignored by the backend but kept for compatibility */\r\n\tsession_id?: string;\r\n}\r\n\r\nexport interface ChangeModePayload {\r\n\t/** UUID of the call being monitored */\r\n\tcall_uuid: string;\r\n\t/** New monitoring mode to switch to */\r\n\tmode: SupervisorMonitorMode;\r\n\t/** Legacy field – ignored by the backend but kept for compatibility */\r\n\tsession_id?: string;\r\n}\r\n\r\nexport interface UseCallMonitoringReturn {\r\n\tstartMonitoring: (payload: StartMonitoringPayload) => Promise<any>;\r\n\tstopMonitoring: (payload: StopMonitoringPayload) => Promise<any>;\r\n\tchangeMode: (payload: ChangeModePayload) => Promise<any>;\r\n\tisLoading: boolean;\r\n\tisSuccess: boolean;\r\n\tisError: boolean;\r\n\terror: any;\r\n\tdata: any;\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport const useCallMonitoring = (): UseCallMonitoringReturn => {\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [success, setSuccess] = useState(false);\r\n\tconst [isError, setIsError] = useState(false);\r\n\tconst [error, setError] = useState<any>(null);\r\n\tconst [data, setData] = useState<any>(null);\r\n\r\n\tconst resetState = () => {\r\n\t\tsetSuccess(false);\r\n\t\tsetIsError(false);\r\n\t\tsetError(null);\r\n\t};\r\n\r\n\t/** Start supervisor monitoring on an active agent call (Listen / Whisper / Barge) */\r\n\tconst startMonitoring = useCallback(async (payload: StartMonitoringPayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_LISTEN, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\t/** Stop supervisor monitoring and disconnect from the call */\r\n\tconst stopMonitoring = useCallback(async (payload: StopMonitoringPayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_LEAVE, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\t/**\r\n\t * Change supervisor monitoring mode (e.g. listen → whisper → barge).\r\n\t * The backend hangs up the current ChanSpy call and originates a new one\r\n\t * with the updated mode – the supervisor's phone will ring again.\r\n\t */\r\n\tconst changeMode = useCallback(async (payload: ChangeModePayload) => {\r\n\t\tresetState();\r\n\t\tsetLoading(true);\r\n\r\n\t\treturn axiosInstance\r\n\t\t\t.post(END_POINT.SUPERVISOR_CALL_CHANGE_MODE, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tsetData(res?.data);\r\n\t\t\t\tsetSuccess(true);\r\n\t\t\t\treturn res?.data;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tsetIsError(true);\r\n\t\t\t\tsetError(err);\r\n\t\t\t\treturn err?.response?.data;\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetLoading(false);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tstartMonitoring,\r\n\t\tstopMonitoring,\r\n\t\tchangeMode,\r\n\t\tisLoading: loading,\r\n\t\tisSuccess: success,\r\n\t\tisError,\r\n\t\terror,\r\n\t\tdata,\r\n\t};\r\n};\r\n","import { memo, useCallback } from \"react\";\r\nimport type { CallControlPanelProps } from \"../../types\";\r\nimport { CallControls } from \"./callControls\";\r\nimport { SDKProvider } from \"./SDKProvider\";\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\nimport { SDK_PERMISSIONS } from \"../permissions\";\r\n\r\nexport const CallControlPanel = memo<CallControlPanelProps>(({ onDataChange }) => {\r\n\tconst { sdk } = useSDKState();\r\n\r\n\tconst handleDataChange = useCallback(\r\n\t\t(data: any) => {\r\n\t\t\ttry {\r\n\t\t\t\tif (onDataChange && typeof onDataChange === \"function\") {\r\n\t\t\t\t\tonDataChange(data);\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {\r\n\t\t\t\tconsole.error(\"Error in CallControlPanel data change handler:\", error);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onDataChange]\r\n\t);\r\n\r\n\tconst sdkObject = sdk?.calls;\r\n\tconst hasDialerAccess =\r\n\t\tsdkObject?.enabled &&\r\n\t\tsdkObject?.items?.some(\r\n\t\t\t(item: any) =>\r\n\t\t\t\titem.code === SDK_PERMISSIONS.CALL_OUTBOUND ||\r\n\t\t\t\titem.code === SDK_PERMISSIONS.CALL_INBOUND,\r\n\t\t);\r\n\r\n\tif (!hasDialerAccess) return null;\r\n\r\n\treturn (\r\n\t\t<SDKProvider>\r\n\t\t\t<CallControls onDataChange={handleDataChange} />\r\n\t\t</SDKProvider>\r\n\t);\r\n});\r\n\r\nCallControlPanel.displayName = \"CallControlPanel\";\r\n","import CallEnd from \"@mui/icons-material/CallEnd\";\r\nimport Close from \"@mui/icons-material/Close\";\r\nimport DragIndicator from \"@mui/icons-material/DragIndicator\";\r\nimport Group from \"@mui/icons-material/Group\";\r\nimport KeyboardArrowDown from \"@mui/icons-material/KeyboardArrowDown\";\r\nimport Layers from \"@mui/icons-material/Layers\";\r\nimport Mic from \"@mui/icons-material/Mic\";\r\nimport MicOff from \"@mui/icons-material/MicOff\";\r\nimport Pause from \"@mui/icons-material/Pause\";\r\nimport Pending from \"@mui/icons-material/Pending\";\r\nimport Phone from \"@mui/icons-material/Phone\";\r\nimport PlayArrow from \"@mui/icons-material/PlayArrow\";\r\nimport SupportAgent from \"@mui/icons-material/SupportAgent\";\r\nimport TransferWithinAStation from \"@mui/icons-material/TransferWithinAStation\";\r\nimport Upcoming from \"@mui/icons-material/Upcoming\";\r\nimport WifiCalling3 from \"@mui/icons-material/WifiCalling3\";\r\nimport SendRounded from \"@mui/icons-material/SendRounded\";\r\nimport SmsSharp from \"@mui/icons-material/SmsSharp\";\r\nimport MoreVert from \"@mui/icons-material/MoreVert\";\r\nimport {\r\n\tBox,\r\n\tButton,\r\n\tChip,\r\n\tCircularProgress,\r\n\tFade,\r\n\tIconButton,\r\n\tMenu,\r\n\tMenuItem,\r\n\tPaper,\r\n\tTextField,\r\n\tTooltip,\r\n\tTypography,\r\n\tuseTheme,\r\n} from \"@mui/material\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\n\r\nimport {\r\n\tCallHistoryDialog,\r\n\tCallTransferDialog,\r\n\tConferenceDialog,\r\n\tEndCallDispositionDialog,\r\n\tProcessorListDialog,\r\n} from \"./dialog\";\r\n\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\nimport { useDraggable } from \"../hooks/useDraggable\";\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport { usePostRequest } from \"../services/request\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { useToast } from \"../services/toastMessage\";\r\nimport { createMicController, MicController } from \"../services/micController\";\r\nimport useStyles from \"./styles\";\r\n\r\nimport { CallControlPanelProps, CallStatus } from \"../../types\";\r\n\r\nimport { createAudioElement, cleanupAudioResources } from \"../utils/audioLoader\";\r\nimport { getSession } from \"@react-solutions/vault\";\r\n// import { USB_LIGHT_FLASH, USB_LIGHT_ON, USB_LIGHT_REQUEST } from \"../services/usbLight\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\n\r\nconst getCombineConfrenceData = (localState: any, apiData: any) => {\r\n\tconst localConfrenceData = localState?.conferenceLine;\r\n\tconst apiConferenceData = apiData?.conferencestatus;\r\n\tconst updatedConferenceData = localConfrenceData.map((item: any) => {\r\n\t\tif (item?.line === 1) {\r\n\t\t\tconst statusKey = `line_${item.line}_status`;\r\n\t\t\treturn {\r\n\t\t\t\t...item,\r\n\t\t\t\tline: 1,\r\n\t\t\t\tstatus: apiConferenceData?.[statusKey] ?? localState?.callData?.status,\r\n\t\t\t\tphone: localState?.callData?.phone_number ?? \"\",\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tconst statusKey = `line_${item.line}_status`;\r\n\t\t\tconst phoneKey = `line_${item.line}_phonenumber`;\r\n\r\n\t\t\tconst newStatus = apiConferenceData ? (apiConferenceData[statusKey] ?? \"IDLE\") : item.status;\r\n\t\t\tlet newPhone = apiConferenceData?.[phoneKey];\r\n\r\n\t\t\tif (newPhone === null || newPhone === \"0\" || newPhone === undefined) {\r\n\t\t\t\tnewPhone = newStatus === \"IDLE\" ? \"\" : item.phone;\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\t...item,\r\n\t\t\t\tstatus: newStatus,\r\n\t\t\t\tphone: newPhone,\r\n\t\t\t};\r\n\t\t}\r\n\t});\r\n\r\n\treturn updatedConferenceData;\r\n};\r\n\r\nconst formatDuration = (seconds: number): string => {\r\n\tconst mins = Math.floor(seconds / 60);\r\n\tconst secs = seconds % 60;\r\n\treturn `${mins.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}`;\r\n};\r\n\r\nexport function CallControls({ onDataChange }: CallControlPanelProps) {\r\n\tconst theme = useTheme();\r\n\tconst state = useSDKState();\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst { disabled, enabled, outlined } = useStyles({\r\n\t\tdisabled: state.sdkConfig?.disabled || {},\r\n\t\tenabled: state.sdkConfig?.enabled || {},\r\n\t\toutlined: state.sdkConfig?.outlined || {},\r\n\t});\r\n\r\n\tconst micRef = useRef<MicController | null>(null);\r\n\tconst webSocketRef = useRef<WebSocket | null>(null);\r\n\tconst audioRef = useRef<HTMLAudioElement | null>(null);\r\n\tconst reconnectTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\tconst pingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\r\n\tconst reconnectAttemptsRef = useRef<number>(0);\r\n\tconst hasFlashedRef = useRef(false);\r\n\tconst lastEventTimeRef = useRef<string | null>(null);\r\n\tconst conferenceAutoOpenedRef = useRef<boolean>(false);\r\n\t// ── NEW: ref to record when hold started ──────────────────────────────────\r\n\tconst holdStartTimeRef = useRef<number | null>(null);\r\n\t// ── NEW: ref to record when mute started ──────────────────────────────────\r\n\tconst muteStartTimeRef = useRef<number | null>(null);\r\n\r\n\tconst maxReconnectAttempts = 60;\r\n\tconst baseReconnectDelay = 2000;\r\n\tconst maxReconnectDelay = 30000;\r\n\r\n\tconst [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [statusAnchorEl, setStatusAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [dialerAnchorEl, setDialerAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [ambulanceAnchorEl, setAmbulanceAnchorEl] = useState<null | HTMLElement>(null);\r\n\tconst [moreOptionsAnchorEl, setMoreOptionsAnchorEl] = useState<null | HTMLElement>(null);\r\n\r\n\tconst [showIframe, setShowIframe] = useState<boolean>(true);\r\n\tconst [openCallDisposition, setOpenCallDisposition] = useState<boolean>(false);\r\n\tconst [openProcessorDialog, setOpenProcessorDialog] = useState<boolean>(false);\r\n\tconst [openCallHistoryDialog, setOpenCallHistoryDialog] = useState<boolean>(false);\r\n\r\n\tconst [processList, setProcessList] = useState<\r\n\t\t| {\r\n\t\t\tprocess_id: number;\r\n\t\t\tprocess_name: string;\r\n\t\t}[]\r\n\t\t| null\r\n\t>(null);\r\n\r\n\tconst [breaksList, setBreaksList] = useState<\r\n\t\t| {\r\n\t\t\ttype: string;\r\n\t\t\tduration: string;\r\n\t\t\tdescription: string;\r\n\t\t\tactive: boolean;\r\n\t\t}[]\r\n\t\t| null\r\n\t>(null);\r\n\r\n\r\n\tconst [phoneNumber, setPhoneNumber] = useState<string>(\"\");\r\n\tconst [callDuration, setCallDuration] = useState<number>(0);\r\n\tconst [callWrapuptime, setCallWrapuptime] = useState<number | null>(null);\r\n\t// Hold duration state\r\n\tconst [holdDuration, setHoldDuration] = useState<number>(0);\r\n\t// ── NEW: mute duration state ──────────────────────────────────────────────\r\n\tconst [muteDuration, setMuteDuration] = useState<number>(0);\r\n\r\n\tconst { position, isDragging, dragRef, handleMouseDown, handleTouchStart } = useDraggable(\r\n\t\tstate.controlPanelPosition,\r\n\t\t(newPosition) => sdkStateManager.setControlPanelPosition(newPosition)\r\n\t);\r\n\r\n\tconst {\r\n\t\tposition: iframePosition,\r\n\t\tisDragging: iframeIsDragging,\r\n\t\tdragRef: iframeDragRef,\r\n\t\thandleMouseDown: iframeHandleMouseDown,\r\n\t\thandleTouchStart: iframeHandleTouchStart,\r\n\t} = useDraggable(state.iframePosition, (newPosition) =>\r\n\t\tsdkStateManager.setIframePosition(newPosition)\r\n\t);\r\n\r\n\tconst [clickToCall, { isLoading: clickToCallLoading }] = usePostRequest<{\r\n\t\tphone_number: string;\r\n\t\tuser: string;\r\n\t\tauto_answer: boolean;\r\n\t\tcall_id: string;\r\n\t\treference_id: string;\r\n\t\tcall_source: string;\r\n\t\tcaseId: string;\r\n\t\tisWrapup: boolean;\r\n\t\tparentCallUuid: string;\r\n\t}>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsetPhoneNumber(\"\");\r\n\t\t\tsetDialerAnchorEl(null);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [holdOrUnHold, { isLoading: holdOrUnHoldLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tuser_id: string;\r\n\t\tcall_uuid: string;\r\n\t\tline_number: number;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst [muteOrUnMute, { isLoading: muteOrUnMuteLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tdirection: string;\r\n\t\tuser_id: string;\r\n\t\tcall_uuid: string;\r\n\t\tline_number: number;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst [readyAgentStatus, { isLoading: agentReadyLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\trefno?: string;\r\n\t\tuserId: string;\r\n\t}>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setAgentStatus(\"\");\r\n\t\t},\r\n\t});\r\n\r\n\tconst [updateAgentStatus, { isLoading }] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tbreak_type: string;\r\n\t\tuserId: string;\r\n\t}>();\r\n\r\n\tconst [sendNotification] = usePostRequest<{\r\n\t\tphone_number: string;\r\n\t\ttype: string;\r\n\t}>();\r\n\r\n\tconst [endCall, { isLoading: endCallLoading }] = usePostRequest<{\r\n\t\tcall_id: string;\r\n\t\tagent_id: string;\r\n\t\tset_followUp: string;\r\n\t\tcallback_date: string;\r\n\t\tcallback_hrs: number;\r\n\t\tcallback_mins: number;\r\n\t\tmobile_number: string;\r\n\t\tlist_comments: string;\r\n\t\tcall_reference_id: string;\r\n\t\tis_mark_as_break: boolean;\r\n\t\tdisposition: string;\r\n\t\tline_number: number;\r\n\t\treason: string;\r\n\t}>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.endCall();\r\n\t\t\tsetOpenCallDisposition(false);\r\n\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t},\r\n\t});\r\n\r\n\tconst handleCloseQueueCounts = () => {\r\n\t\tsetAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleOpenDialer = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetShowIframe(true);\r\n\t\tsetDialerAnchorEl(event.currentTarget);\r\n\t};\r\n\tconst handleOpenAbulanceServices = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetAmbulanceAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleOpenMoreOptions = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetMoreOptionsAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleCloseDialer = () => {\r\n\t\tsetDialerAnchorEl(null);\r\n\t};\r\n\tconst handleCloseAmbulance = () => {\r\n\t\tsetAmbulanceAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleCloseMoreOptions = () => {\r\n\t\tsetMoreOptionsAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleOpenAgentStatus = (event: React.MouseEvent<HTMLElement>) => {\r\n\t\tsetStatusAnchorEl(event.currentTarget);\r\n\t};\r\n\r\n\tconst handleCloseAgentStatus = () => {\r\n\t\tsetStatusAnchorEl(null);\r\n\t};\r\n\r\n\tconst handleAgentReady = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: \"READYAGENT\",\r\n\t\t\tuserId: String(state.agentId ?? \"\"),\r\n\t\t};\r\n\r\n\t\treadyAgentStatus(END_POINT.READY_AGENT, payload);\r\n\t};\r\n\r\n\tconst handleUpdateAgentStatus = (status: string) => {\r\n\t\tsetStatusAnchorEl(null);\r\n\t\tconst currentStatus = state.callData?.status?.toUpperCase() as CallStatus;\r\n\t\tif ([CallStatus.ONCALL, CallStatus.RINGING, CallStatus.DIALING, CallStatus.WRAPUP].includes(currentStatus)) {\r\n\t\t\tshowToast(\"Cannot put agent on break while on a call\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst payload = {\r\n\t\t\taction: \"AGENTBREAK\",\r\n\t\t\tbreak_type: status,\r\n\t\t\tuserId: String(state.agentId ?? \"\"),\r\n\t\t};\r\n\t\tupdateAgentStatus(END_POINT.UPDATE_AGENT_BREAK, payload).then(() => {\r\n\t\t\tsdkStateManager.setAgentStatus(status);\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleStartCall = (number: string) => {\r\n\t\tif (number.length !== 10) {\r\n\t\t\tshowToast(\"Invalid phone number\", \"error\");\r\n\t\t} else if (!/^\\d+$/.test(number)) {\r\n\t\t\tshowToast(\"Invalid phone number\", \"error\");\r\n\t\t} else {\r\n\t\t\t// rootCallUuid chaining only runs when disableAlternateDialing is true\r\n\t\t\t// (host opts out of the alternate dialog and relies on the built-in flow);\r\n\t\t\t// otherwise parentCallUuid stays \"\" and the chain is cleared.\r\n\t\t\tconst currentStatus = (state.callData?.status ?? \"\").toUpperCase();\r\n\t\t\tconst isWrapupCall = currentStatus === CallStatus.WRAPUP;\r\n\r\n\t\t\tlet parentCallUuid = \"\";\r\n\t\t\tif (!state.sdkConfig?.disableAlternateDialing) {\r\n\t\t\t\tif (isWrapupCall) {\r\n\t\t\t\t\tif (state.rootCallUuid) {\r\n\t\t\t\t\t\tparentCallUuid = state.rootCallUuid;\r\n\t\t\t\t\t} else if (state.callData?.call_id) {\r\n\t\t\t\t\t\tparentCallUuid = state.callData.call_id;\r\n\t\t\t\t\t\tsdkStateManager.setRootCallUuid(parentCallUuid);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (state.rootCallUuid) {\r\n\t\t\t\t\tsdkStateManager.setRootCallUuid(null);\r\n\t\t\t\t}\r\n\t\t\t} else if (state.rootCallUuid) {\r\n\t\t\t\tsdkStateManager.setRootCallUuid(null);\r\n\t\t\t}\r\n\r\n\t\t\tconst payload = {\r\n\t\t\t\tphone_number: number,\r\n\t\t\t\tuser: state.agentId,\r\n\t\t\t\tauto_answer: false,\r\n\t\t\t\tcall_id: \"\",\r\n\t\t\t\treference_id: \"\",\r\n\t\t\t\tcall_source: \"\",\r\n\t\t\t\tcaseId: \"\",\r\n\t\t\t\tisWrapup: isWrapupCall,\r\n\t\t\t\tparentCallUuid,\r\n\t\t\t};\r\n\r\n\t\t\tclickToCall(END_POINT.CLICK_TO_CALL, payload);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleHoldToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.hold === 1 ? CallStatus.UNHOLD : CallStatus.HOLD,\r\n\t\t\tuser_id: String(state.agentId ?? \"\"),\r\n\t\t\tcall_uuid: state.callData?.call_id ?? \"\",\r\n\t\t\tline_number: 0,\r\n\t\t};\r\n\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t};\r\n\r\n\tconst handleMuteToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.mute === 1 ? CallStatus.UNMUTE : CallStatus.MUTE,\r\n\t\t\tdirection: \"both\",\r\n\t\t\tuser_id: String(state.agentId ?? \"\"),\r\n\t\t\tcall_uuid: state.callData?.call_id ?? \"\",\r\n\t\t\tline_number: 0,\r\n\t\t};\r\n\r\n\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t};\r\n\r\n\tconst handleEndCall = (data: {\r\n\t\tdisposition: { label: string; value: string; id?: number };\r\n\t\tfollowUp: { label: string; value: string };\r\n\t\tcallbackDate: string;\r\n\t\tcallbackHrs: string;\r\n\t\tcallbackMins: string;\r\n\t\tselected_break?: boolean;\r\n\t\tnotes?: string;\r\n\t}) => {\r\n\t\tconst payload = {\r\n\t\t\tcall_id: state.callData?.call_id ?? \"\",\r\n\t\t\tagent_id: state.agentId ?? \"\",\r\n\t\t\tset_followUp: data?.followUp?.value ?? \"\",\r\n\t\t\tcallback_date: data?.callbackDate ?? \"\",\r\n\t\t\tcallback_hrs: Number(data?.callbackHrs) || 0,\r\n\t\t\tcallback_mins: Number(data?.callbackMins) || 0,\r\n\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\tlist_comments: data?.notes ?? \"\",\r\n\t\t\tcall_reference_id: state.callData?.call_id ?? \"\",\r\n\t\t\tis_mark_as_break: data?.selected_break ?? false,\r\n\t\t\tdisposition: data?.disposition?.value ?? \"\",\r\n\t\t\tline_number: 0,\r\n\t\t\treason: \"normal\",\r\n\t\t};\r\n\r\n\t\tsetPhoneNumber(\"\");\r\n\t\tendCall(END_POINT.END_CALL, payload);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tconst handleBeforeUnload = (e: BeforeUnloadEvent) => {\r\n\t\t\te.preventDefault();\r\n\t\t};\r\n\r\n\t\twindow.addEventListener(\"beforeunload\", handleBeforeUnload);\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener(\"beforeunload\", handleBeforeUnload);\r\n\t\t};\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst mic = createMicController();\r\n\t\tmicRef.current = mic;\r\n\r\n\t\tmic.start().catch((err) => {\r\n\t\t\tconsole.error(\"Failed to start mic:\", err);\r\n\t\t});\r\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\r\n\t\t\tconst fullState = getSession(STORAGE_KEY) as any;\r\n\t\t\tconst key = event.key?.toLowerCase();\r\n\r\n\t\t\tif (!event.altKey || fullState?.callData?.status !== CallStatus.ONCALL) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"m\" && String(fullState?.callData?.mute) === \"0\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tmicRef.current?.mute();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.MUTE,\r\n\t\t\t\t\tdirection: \"both\",\r\n\t\t\t\t\tuser_id: String(fullState.agentId ?? \"\"),\r\n\t\t\t\t\tcall_uuid: fullState?.callData?.call_id ?? \"\",\r\n\t\t\t\t\tline_number: 0,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"u\" && String(fullState?.callData?.mute) === \"1\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.UNMUTE,\r\n\t\t\t\t\tdirection: \"both\",\r\n\t\t\t\t\tuser_id: String(fullState.agentId ?? \"\"),\r\n\t\t\t\t\tcall_uuid: fullState?.callData?.call_id ?? \"\",\r\n\t\t\t\t\tline_number: 0,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t\t\t\tmicRef.current?.unmute();\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"h\" && String(fullState?.callData?.hold) === \"0\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.HOLD,\r\n\t\t\t\t\tuser_id: String(fullState.agentId ?? \"\"),\r\n\t\t\t\t\tcall_uuid: fullState?.callData?.call_id ?? \"\",\r\n\t\t\t\t\tline_number: 0,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t\t\t}\r\n\r\n\t\t\tif (key === \"r\" && String(fullState?.callData?.hold) === \"1\") {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst payload = {\r\n\t\t\t\t\taction: CallStatus.UNHOLD,\r\n\t\t\t\t\tuser_id: String(fullState.agentId ?? \"\"),\r\n\t\t\t\t\tcall_uuid: fullState?.callData?.call_id ?? \"\",\r\n\t\t\t\t\tline_number: 0,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\twindow.addEventListener(\"keydown\", handleKeyDown);\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener(\"keydown\", handleKeyDown);\r\n\t\t};\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tlet interval: ReturnType<typeof setInterval>;\r\n\t\tlet wrapUpinterval: ReturnType<typeof setInterval>;\r\n\r\n\t\tif (state.callData.status && state.callData.status === CallStatus.ONCALL) {\r\n\t\t\tinterval = setInterval(() => {\r\n\t\t\t\tconst elapsed = state.callStartTime\r\n\t\t\t\t\t? Math.floor((Date.now() - Number(state.callStartTime)) / 1000)\r\n\t\t\t\t\t: 0;\r\n\r\n\t\t\t\tsetCallDuration(elapsed);\r\n\t\t\t}, 1000);\r\n\t\t} else {\r\n\t\t\tsetCallDuration(0);\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tstate.callData.status &&\r\n\t\t\tstate.callData.status === CallStatus.WRAPUP &&\r\n\t\t\tcallWrapuptime !== null\r\n\t\t) {\r\n\t\t\twrapUpinterval = setInterval(() => {\r\n\t\t\t\tsetCallWrapuptime((prevTime) => {\r\n\t\t\t\t\tif (prevTime === null || prevTime <= 1) {\r\n\t\t\t\t\t\tclearInterval(wrapUpinterval);\r\n\t\t\t\t\t\thandleEndCall({\r\n\t\t\t\t\t\t\tdisposition: { label: \"Auto Wrapup\", value: \"AUTO_WRAPUP\" },\r\n\t\t\t\t\t\t\tfollowUp: { label: \"No\", value: \"N\" },\r\n\t\t\t\t\t\t\tcallbackDate: \"\",\r\n\t\t\t\t\t\t\tcallbackHrs: \"\",\r\n\t\t\t\t\t\t\tcallbackMins: \"\",\r\n\t\t\t\t\t\t\tselected_break: false,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn prevTime - 1;\r\n\t\t\t\t});\r\n\t\t\t}, 1000);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (interval) clearInterval(interval);\r\n\t\t\tif (wrapUpinterval) clearInterval(wrapUpinterval);\r\n\t\t};\r\n\t}, [state.callData.status]);\r\n\r\n\t// Hold duration timer\r\n\tuseEffect(() => {\r\n\t\tlet holdInterval: ReturnType<typeof setInterval>;\r\n\r\n\t\tconst isOnCall =\r\n\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL;\r\n\t\tconst isOnHold = state.callData?.hold === 1;\r\n\r\n\t\tif (isOnHold && isOnCall) {\r\n\t\t\tif (!holdStartTimeRef.current) {\r\n\t\t\t\tholdStartTimeRef.current = Date.now();\r\n\t\t\t}\r\n\t\t\tholdInterval = setInterval(() => {\r\n\t\t\t\tsetHoldDuration(\r\n\t\t\t\t\tMath.floor((Date.now() - holdStartTimeRef.current!) / 1000)\r\n\t\t\t\t);\r\n\t\t\t}, 1000);\r\n\t\t} else {\r\n\t\t\tholdStartTimeRef.current = null;\r\n\t\t\tsetHoldDuration(0);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (holdInterval) clearInterval(holdInterval);\r\n\t\t};\r\n\t}, [state.callData?.hold, state.callData?.status]);\r\n\r\n\t// ── NEW: mute duration timer ──────────────────────────────────────────────\r\n\tuseEffect(() => {\r\n\t\tlet muteInterval: ReturnType<typeof setInterval>;\r\n\r\n\t\tconst isOnCall =\r\n\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL;\r\n\t\tconst isMuted = state.callData?.mute === 1;\r\n\t\tconst isHeld = state.callData?.hold === 1;\r\n\r\n\t\tif (isMuted && isOnCall && !isHeld) {\r\n\t\t\t// Record start time only once when mute begins\r\n\t\t\tif (!muteStartTimeRef.current) {\r\n\t\t\t\tmuteStartTimeRef.current = Date.now();\r\n\t\t\t}\r\n\t\t\tmuteInterval = setInterval(() => {\r\n\t\t\t\tsetMuteDuration(\r\n\t\t\t\t\tMath.floor((Date.now() - muteStartTimeRef.current!) / 1000)\r\n\t\t\t\t);\r\n\t\t\t}, 1000);\r\n\t\t} else {\r\n\t\t\t// Reset when mute is released or call ends\r\n\t\t\tmuteStartTimeRef.current = null;\r\n\t\t\tsetMuteDuration(0);\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (muteInterval) clearInterval(muteInterval);\r\n\t\t};\r\n\t}, [state.callData?.mute, state.callData?.status]);\r\n\t// ─────────────────────────────────────────────────────────────────────────\r\n\r\n\tuseEffect(() => {\r\n\t\tcreateAudioElement()\r\n\t\t\t.then((audio) => {\r\n\t\t\t\taudioRef.current = audio;\r\n\t\t\t})\r\n\t\t\t.catch((error) => {\r\n\t\t\t\tconsole.error(\"Failed to load audio element:\", error);\r\n\t\t\t});\r\n\r\n\t\treturn () => {\r\n\t\t\tif (audioRef.current) {\r\n\t\t\t\taudioRef.current.pause();\r\n\t\t\t\taudioRef.current.currentTime = 0;\r\n\t\t\t\taudioRef.current.src = \"\"; // Clear source\r\n\t\t\t\taudioRef.current = null;\r\n\t\t\t}\r\n\t\t\t// Cleanup blob URLs\r\n\t\t\tcleanupAudioResources();\r\n\t\t};\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onDataChange && state.callData) {\r\n\t\t\tconst { process_id, process_name, status, phone_number, agent_id, call_id, call_details } =\r\n\t\t\t\tstate.callData;\r\n\t\t\tconst callData = {\r\n\t\t\t\tphone_number,\r\n\t\t\t\tstatus,\r\n\t\t\t\tcallReferenceId: call_id,\r\n\t\t\t\tagent_id,\r\n\t\t\t\tprocess_id,\r\n\t\t\t\tprocess_name,\r\n\t\t\t\tcall_details,\r\n\t\t\t\tauto_wrapup_time: state.backendCallControls?.auto_wrapup_time ?? null,\r\n\t\t\t\tsocket_info: state.callData\r\n\t\t\t};\r\n\t\t\tonDataChange(callData);\r\n\t\t}\r\n\t}, [state.callData, onDataChange]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (state.agentId) {\r\n\t\t\t// axiosInstance\r\n\t\t\t// \t.post(END_POINT.PROCESS_LIST, {\r\n\t\t\t// \t\tuserId: state.agentId,\r\n\t\t\t// \t\taction: \"GETAGENTPROCESSLIST\",\r\n\t\t\t// \t\trefno: \"1234221233\",\r\n\t\t\t// \t})\r\n\t\t\t// \t.then((res) => {\r\n\t\t\t// \t\t// if (res && res.data?.data && res?.data?.data?.length > 1) {\r\n\t\t\t// \t\t// \tsetProcessList(res.data.data);\r\n\t\t\t// \t\t// \tsetOpenProcessorDialog(true);\r\n\t\t\t// \t\t// } else {\r\n\t\t\t// \t\t\tconst data = {\r\n\t\t\t// \t\t\t\"process_id\": 101,\r\n\t\t\t// \t\t\t\"process_name\": \"ConVoxProcess\"\r\n\t\t\t// \t\t}\r\n\t\t\t// \t\t\tsetProcessList([data]);\r\n\r\n\t\t\t// \t\t\tsdkStateManager.setProcess(data);\r\n\t\t\t// \t\t\t// setOpenProcessorDialog(false);\r\n\t\t\t// \t\t// }\r\n\t\t\t// \t})\r\n\t\t\t// \t.catch((err) => {\r\n\t\t\t// \t\t\tconst data = {\r\n\t\t\t// \t\t\t\"process_id\": 101,\r\n\t\t\t// \t\t\t\"process_name\": \"ConVoxProcess\"\r\n\t\t\t// \t\t}\r\n\t\t\t// \t\t\tsetProcessList([data]);\r\n\r\n\t\t\t// \t\t\tsdkStateManager.setProcess(data);\r\n\t\t\t// \t\tshowToast(err.response.data.message, \"error\");\r\n\t\t\t// \t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.get(END_POINT.BREAKS_LIST)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res && res.data?.data && res?.data?.data?.length) {\r\n\t\t\t\t\t\tsetBreaksList(res.data.data);\r\n\t\t\t\t\t\tconst liveStatus = sdkStateManager.getState().callData?.status;\r\n\t\t\t\t\t\tif (!liveStatus) {\r\n\t\t\t\t\t\t\thandleUpdateAgentStatus(res.data.data[0].type);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tshowToast(err.response.data.message, \"error\");\r\n\t\t\t\t});\r\n\t\t}\r\n\t}, [state.agentId]);\r\n\r\n\tconst connectWebSocket = () => {\r\n\t\tif (!state.agentId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (reconnectTimeoutRef.current) {\r\n\t\t\tclearTimeout(reconnectTimeoutRef.current);\r\n\t\t\treconnectTimeoutRef.current = null;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\twebSocketRef.current = new WebSocket(`${state.urlConfig?.webSocketURL}/api/v1/ws/agent/events?token=${state.authorization?.accessToken}`);\r\n\r\n\t\t\twebSocketRef.current.onopen = () => {\r\n\t\t\t\tconsole.log(\"🌐 WebSocket connection established\");\r\n\t\t\t\treconnectAttemptsRef.current = 0;\r\n\r\n\t\t\t\tif (pingIntervalRef.current) {\r\n\t\t\t\t\tclearInterval(pingIntervalRef.current);\r\n\t\t\t\t}\r\n\t\t\t\tpingIntervalRef.current = setInterval(() => {\r\n\t\t\t\t\tif (webSocketRef.current && webSocketRef.current.readyState === WebSocket.OPEN) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\twebSocketRef.current.send(JSON.stringify({ type: \"ping\" }));\r\n\t\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t\tconsole.error(\"Failed to send ping:\", error);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 30000);\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onmessage = (event) => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst data = JSON.parse(event.data);\r\n\r\n\t\t\t\t\tif (data.type === \"pong\") {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst sdkState = getSession(STORAGE_KEY) as any;\r\n\t\t\t\t\tconst confrence = getCombineConfrenceData(sdkState, data);\r\n\t\t\t\t\t// console.log( \"📊 Parsed JSON:\", data);\r\n\t\t\t\t\tconst callData = {\r\n\t\t\t\t\t\tagent_id: data?.agent_id,\r\n\t\t\t\t\t\tstatus: data?.status,\r\n\t\t\t\t\t\ttype: data?.type,\r\n\t\t\t\t\t\tevent_time: data?.event_time,\r\n\t\t\t\t\t\tphone_number: data?.phone_number,\r\n\t\t\t\t\t\tcall_id: data?.call_id,\r\n\t\t\t\t\t\tprocess_id: data?.process_id,\r\n\t\t\t\t\t\tprocess_name: data?.process_name,\r\n\t\t\t\t\t\thold: data?.hold,\r\n\t\t\t\t\t\tmute: data?.mute,\r\n\t\t\t\t\t\tmode: data?.mode,\r\n\t\t\t\t\t\tqueue_name: data?.queue_name,\r\n\t\t\t\t\t\tauto_wrapup_time: data?.auto_wrapup_time ?? null,\r\n\t\t\t\t\t\t...(data?.call_details !== undefined && { call_details: data.call_details }),\r\n\t\t\t\t\t};\r\n\t\t\t\t\tsdkStateManager.updateCallData(callData);\r\n\t\t\t\t\tsdkStateManager.updateConferenceData([...confrence]);\r\n\t\t\t\t\tsdkStateManager.setConsultInfo(data.consult_info ?? null);\r\n\r\n\t\t\t\t\tconst conferenceStatus = data?.conferencestatus;\r\n\t\t\t\t\tif (conferenceStatus) {\r\n\t\t\t\t\t\tconst hasAnsweredSecondaryLine = Object.keys(conferenceStatus).some((key) => {\r\n\t\t\t\t\t\t\tconst match = key.match(/^line_(\\d+)_status$/);\r\n\t\t\t\t\t\t\tif (!match) return false;\r\n\t\t\t\t\t\t\tconst lineNum = Number(match[1]);\r\n\t\t\t\t\t\t\tif (lineNum <= 1) return false;\r\n\t\t\t\t\t\t\tconst status = String(conferenceStatus[key] ?? \"\").toUpperCase();\r\n\t\t\t\t\t\t\treturn status === CallStatus.ONCALL;\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif (hasAnsweredSecondaryLine) {\r\n\t\t\t\t\t\t\tif (!conferenceAutoOpenedRef.current) {\r\n\t\t\t\t\t\t\t\tsdkStateManager.setOpenConferenceDialog(true);\r\n\t\t\t\t\t\t\t\tconferenceAutoOpenedRef.current = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tconferenceAutoOpenedRef.current = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconferenceAutoOpenedRef.current = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (data?.call_consult_controls) {\r\n\t\t\t\t\t\tsdkStateManager.updateSDKConfigFromPermissions(data.call_consult_controls);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsdkStateManager.resetConsultControls();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ([CallStatus.RINGING, CallStatus.DIALING].includes(data.status as CallStatus)) {\r\n\t\t\t\t\t\tsetShowIframe(true);\r\n\t\t\t\t\t\tsetCallWrapuptime(sdkState?.sdkConfig?.auto_wrapup_time ?? null);\r\n\t\t\t\t\t\tsdkStateManager.updateConferenceData([\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 1,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 2,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 3,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 4,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tline: 5,\r\n\t\t\t\t\t\t\t\tstatus: \"IDLE\",\r\n\t\t\t\t\t\t\t\ttype: \"\",\r\n\t\t\t\t\t\t\t\tphone: \"\",\r\n\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t]);\r\n\r\n\t\t\t\t\t\tif (data?.mode !== \"manual\" && audioRef.current && state?.sdkConfig?.enableRingtone) {\r\n\t\t\t\t\t\t\taudioRef.current.play().catch((error) => {\r\n\t\t\t\t\t\t\t\tconsole.error(\"Failed to play ringtone:\", error);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (audioRef.current) {\r\n\t\t\t\t\t\t\taudioRef.current.pause();\r\n\t\t\t\t\t\t\taudioRef.current.currentTime = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (data.status === CallStatus.IDLE) {\r\n\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_ON(\"green\"));\r\n\t\t\t\t\t} else if (data.status === CallStatus.ONCALL) {\r\n\r\n\t\t\t\t\t\t// Start timer for new call OR transfer\r\n\t\t\t\t\t\tif (data.status === CallStatus.ONCALL) {\r\n\t\t\t\t\t\t\tsdkStateManager.startCall();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!showIframe) {\r\n\t\t\t\t\t\t\tsetShowIframe(true);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (data?.mute !== 1 && data?.hold !== 1) {\r\n\t\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_ON(\"red\"));\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"red\", 1));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (\r\n\t\t\t\t\t\t(data?.mute === 1 || data?.hold === 1) &&\r\n\t\t\t\t\t\tdata.status === CallStatus.ONCALL\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"red\", 1));\r\n\t\t\t\t\t} else if (data.status === CallStatus.BREAK) {\r\n\t\t\t\t\t\tconst breakTime = sdkState?.sdkConfig?.break_time;\r\n\t\t\t\t\t\tconst eventTime = data?.event_time ?? null;\r\n\r\n\t\t\t\t\t\tif (eventTime !== lastEventTimeRef.current) {\r\n\t\t\t\t\t\t\thasFlashedRef.current = false;\r\n\t\t\t\t\t\t\tlastEventTimeRef.current = eventTime;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlet isOverLimit = false;\r\n\t\t\t\t\t\tif (breakTime && eventTime) {\r\n\t\t\t\t\t\t\tconst differenceInMinutes =\r\n\t\t\t\t\t\t\t\t(new Date().getTime() - new Date(eventTime).getTime()) / 60000;\r\n\r\n\t\t\t\t\t\t\tif (Number(differenceInMinutes.toFixed(0)) >= Number(breakTime)) {\r\n\t\t\t\t\t\t\t\tisOverLimit = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (isOverLimit) {\r\n\t\t\t\t\t\t\tif (!hasFlashedRef.current) {\r\n\t\t\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"yellow\", 1));\r\n\t\t\t\t\t\t\t\thasFlashedRef.current = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_ON(\"yellow\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (data.status === CallStatus.WRAPUP) {\r\n\t\t\t\t\t\t// USB_LIGHT_REQUEST(USB_LIGHT_FLASH(\"green\", 1));\r\n\t\t\t\t\t\tsdkStateManager.endCall();\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch {\r\n\t\t\t\t\tconsole.error(\"📨 Raw message:\", event.data);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onclose = (event) => {\r\n\t\t\t\tif (pingIntervalRef.current) {\r\n\t\t\t\t\tclearInterval(pingIntervalRef.current);\r\n\t\t\t\t\tpingIntervalRef.current = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.code !== 1000 && reconnectAttemptsRef.current < maxReconnectAttempts) {\r\n\t\t\t\t\treconnectAttemptsRef.current += 1;\r\n\t\t\t\t\tconst delay = Math.min(\r\n\t\t\t\t\t\tbaseReconnectDelay * Math.pow(2, reconnectAttemptsRef.current - 1),\r\n\t\t\t\t\t\tmaxReconnectDelay\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t`🔄 Attempting to reconnect WebSocket (attempt ${reconnectAttemptsRef.current}/${maxReconnectAttempts}) in ${delay}ms`\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\treconnectTimeoutRef.current = setTimeout(() => {\r\n\t\t\t\t\t\tconnectWebSocket();\r\n\t\t\t\t\t}, delay);\r\n\t\t\t\t} else if (reconnectAttemptsRef.current >= maxReconnectAttempts) {\r\n\t\t\t\t\tshowToast(\"WebSocket connection failed. Please refresh the page.\", \"error\");\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twebSocketRef.current.onerror = (error) => {\r\n\t\t\t\tconsole.error(\"❌ WebSocket error:\", error);\r\n\t\t\t};\r\n\t\t} catch (error) {\r\n\t\t\tif (reconnectAttemptsRef.current < maxReconnectAttempts) {\r\n\t\t\t\treconnectAttemptsRef.current += 1;\r\n\t\t\t\tconst delay = Math.min(\r\n\t\t\t\t\tbaseReconnectDelay * Math.pow(2, reconnectAttemptsRef.current - 1),\r\n\t\t\t\t\tmaxReconnectDelay\r\n\t\t\t\t);\r\n\t\t\t\treconnectTimeoutRef.current = setTimeout(() => {\r\n\t\t\t\t\tconnectWebSocket();\r\n\t\t\t\t}, delay);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (state.agentId) {\r\n\t\t\tconnectWebSocket();\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tif (reconnectTimeoutRef.current) {\r\n\t\t\t\tclearTimeout(reconnectTimeoutRef.current);\r\n\t\t\t\treconnectTimeoutRef.current = null;\r\n\t\t\t}\r\n\t\t\tif (pingIntervalRef.current) {\r\n\t\t\t\tclearInterval(pingIntervalRef.current);\r\n\t\t\t\tpingIntervalRef.current = null;\r\n\t\t\t}\r\n\t\t\tif (webSocketRef.current) {\r\n\t\t\t\twebSocketRef.current.close(1000, \"Component unmounting\");\r\n\t\t\t\twebSocketRef.current = null;\r\n\t\t\t}\r\n\t\t\treconnectAttemptsRef.current = 0;\r\n\t\t};\r\n\t}, [state.agentId]);\r\n\r\n\tconst handleSendSMS = (data: any) => {\r\n\t\tsendNotification(END_POINT.SEND_NOTIFICATIONS, {\r\n\t\t\tphone_number: data?.phone_number ?? \"\",\r\n\t\t\ttype: \"ambulance\",\r\n\t\t});\r\n\t};\r\n\r\n\tif (!state.isInitialized) {\r\n\t\treturn (\r\n\t\t\t<Box>\r\n\t\t\t\t{Boolean(openProcessorDialog) && (\r\n\t\t\t\t\t<ProcessorListDialog\r\n\t\t\t\t\t\tprocessList={processList}\r\n\t\t\t\t\t\topen={openProcessorDialog}\r\n\t\t\t\t\t\tsetOpen={setOpenProcessorDialog}\r\n\t\t\t\t\t\thandleSelectedProcessor={(data: { process_id: number; process_name: string }) => {\r\n\t\t\t\t\t\t\tsdkStateManager.setProcess(data);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\t// Derived flags used in JSX\r\n\tconst isOnHold =\r\n\t\tstate.callData?.hold === 1 &&\r\n\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL;\r\n\r\n\t// ── NEW: derived mute flag ────────────────────────────────────────────────\r\n\tconst isMuted =\r\n\t\tstate.callData?.mute === 1 &&\r\n\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL;\r\n\t// ─────────────────────────────────────────────────────────────────────────\r\n\r\n\tconst isVertical = state.sdkConfig?.sdkPosition === \"vertical\";\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Box>\r\n\t\t\t\t<Fade in={true} timeout={300}>\r\n\t\t\t\t\t<Paper\r\n\t\t\t\t\t\tref={state.sdkConfig?.isDraggable ? dragRef : null}\r\n\t\t\t\t\t\televation={\r\n\t\t\t\t\t\t\tisDragging ? 4\r\n\t\t\t\t\t\t\t\t: state.sdkConfig?.isDraggable ? 1\r\n\t\t\t\t\t\t\t\t\t: 0\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tposition: state.sdkConfig?.isDraggable ? \"fixed\" : \"relative\",\r\n\t\t\t\t\t\t\tleft: state.sdkConfig?.isDraggable ? position.x : \"auto\",\r\n\t\t\t\t\t\t\ttop: state.sdkConfig?.isDraggable ? position.y : \"auto\",\r\n\t\t\t\t\t\t\tdisplay: \"inline-block\",\r\n\t\t\t\t\t\t\twidth: isVertical ? \"180px\" : \"auto\",\r\n\t\t\t\t\t\t\tflexShrink: 0,\r\n\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\tp: 0.5,\r\n\t\t\t\t\t\t\tborderRadius: 3,\r\n\t\t\t\t\t\t\tbgcolor: \"background.paper\",\r\n\t\t\t\t\t\t\tzIndex: state.sdkConfig?.isDraggable ? Number.MAX_SAFE_INTEGER : 0,\r\n\t\t\t\t\t\t\ttransition: theme.transitions.create([\"box-shadow\", \"transform\"], {\r\n\t\t\t\t\t\t\t\tduration: theme.transitions.duration.short,\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\tuserSelect: \"none\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\tflexDirection: isVertical ? \"column\" : \"row\",\r\n\t\t\t\t\t\t\t\talignItems: isVertical ? \"stretch\" : \"center\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\tflexDirection: isVertical ? \"column\" : \"row\",\r\n\t\t\t\t\t\t\t\t\talignItems: isVertical ? \"stretch\" : \"center\",\r\n\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\tmargin: isVertical ? \"10px 8px 4px 8px\" : \"0px 10px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{state.sdkConfig?.isDraggable && (\r\n\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tcursor: \"all-scroll\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tonMouseDown={handleMouseDown}\r\n\t\t\t\t\t\t\t\t\t\tonTouchStart={handleTouchStart}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<DragIndicator />\r\n\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{state.sdkConfig?.enableQueueName &&\r\n\t\t\t\t\t\t\t\t\tstate?.callData?.queue_name &&\r\n\t\t\t\t\t\t\t\t\tstate?.callData?.mode !== \"manual\" && (\r\n\t\t\t\t\t\t\t\t\t\t<Chip label={state?.callData?.queue_name} />\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disabledDialButton ? \"Outbound call feature is disabled\" : \"Dial\"}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t{isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstartIcon={<WifiCalling3 />}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disabledDialButton &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!((state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableAlternateDialing)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenDialer(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t((state.callData.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!!state.sdkConfig?.disableAlternateDialing)\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpx: 2,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t((state.callData.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!!state.sdkConfig?.disableAlternateDialing)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) ? \"action.selected\" : \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderColor: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t((state.callData.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!!state.sdkConfig?.disableAlternateDialing)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) ? \"action.selected\" : \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tDial\r\n\t\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disabledDialButton &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!((state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableAlternateDialing)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenDialer(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t((state.callData.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!!state.sdkConfig?.disableAlternateDialing)\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<WifiCalling3\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor:\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t([\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.BREAK,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disabledDialButton ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t((state.callData.status?.toUpperCase() as CallStatus) === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!!state.sdkConfig?.disableAlternateDialing))\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"action.selected\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t{/* ── UPDATED: call duration + hold duration + mute duration display ── */}\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tonClick={() => setShowIframe(true)}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\r\n\t\t\t\t\t\t\t\t\t\tminWidth: \"52px\",\r\n\t\t\t\t\t\t\t\t\t\tmarginRight: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tcolor: isOnHold\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"warning.main\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: isMuted\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"error.main\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"success.main\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontSize: \"18px\",\r\n\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1.2,\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{state.callData.status === CallStatus.WRAPUP &&\r\n\t\t\t\t\t\t\t\t\t\t\tcallWrapuptime !== null\r\n\t\t\t\t\t\t\t\t\t\t\t? formatDuration(callWrapuptime)\r\n\t\t\t\t\t\t\t\t\t\t\t: formatDuration(callDuration)}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t\t\t\t{/* Hold badge — only visible while call is on hold */}\r\n\t\t\t\t\t\t\t\t\t{isOnHold && (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tgap: \"3px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"warning.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpx: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpy: \"1px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tmt: \"2px\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Pause sx={{ fontSize: \"11px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"11px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{formatDuration(holdDuration)}\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t\t{/* ── NEW: Mute badge — only visible while call is muted ── */}\r\n\t\t\t\t\t\t\t\t\t{isMuted && !isOnHold && (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tgap: \"3px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"error.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpx: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tpy: \"1px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tmt: \"2px\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<MicOff sx={{ fontSize: \"11px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"11px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{formatDuration(muteDuration)}\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t{/* ─────────────────────────────────────────────────────── */}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t{/* ─────────────────────────────────────────────────── */}\r\n\r\n\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\tsx={{ padding: \"18px 0px\" }}\r\n\t\t\t\t\t\t\t\t\tlabel={\r\n\t\t\t\t\t\t\t\t\t\tisLoading || agentReadyLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"60px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" />\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"60px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{state.callData?.status?.toUpperCase() ?? \"N/A\"}\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tonClick={handleOpenAgentStatus}\r\n\t\t\t\t\t\t\t\t\tdeleteIcon={<KeyboardArrowDown color=\"primary\" />}\r\n\t\t\t\t\t\t\t\t\tonDelete={handleOpenAgentStatus}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\tflexDirection: isVertical ? \"column\" : \"row\",\r\n\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\talignItems: isVertical ? \"stretch\" : \"center\",\r\n\t\t\t\t\t\t\t\t\tmargin: isVertical ? \"0px 8px 8px 8px\" : \"0px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Tooltip title={\"Agent Ready\"}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"contained\"\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <SupportAgent /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleAgentReady();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tclasses={{\r\n\t\t\t\t\t\t\t\t\t\t\troot:\r\n\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"enabled\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t...(\r\n\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.MISSED].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? outlined\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: enabled\r\n\t\t\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t\t\t\t...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }),\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={agentReadyLoading}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Agent Ready\" : <SupportAgent />}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={\r\n\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableHoldButton ? \"Hold feature is disabled\" :\r\n\t\t\t\t\t\t\t\t\t\t(state.callData?.hold === 1 ? \"Resume\" : \"Hold\")\r\n\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"contained\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tholdOrUnHoldLoading ? undefined :\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 ? <PlayArrow /> : <Pause />\r\n\t\t\t\t\t\t\t\t\t\t\t) : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!state.sdkConfig?.disableHoldButton) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleHoldToggle();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableHoldButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t((state.callData?.status?.toUpperCase() as CallStatus) !==\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold !== 1) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tholdOrUnHoldLoading ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableHoldButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{holdOrUnHoldLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ color: theme.palette.primary.main }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t) : isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 ? \"Resume\" : \"Hold\"\r\n\t\t\t\t\t\t\t\t\t\t\t) : state.callData?.hold === 1 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<PlayArrow />\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Pause />\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={\r\n\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableMuteButton ? \"Mute feature is disabled\" :\r\n\t\t\t\t\t\t\t\t\t\t(state.callData?.mute === 1 ? \"Unmute\" : \"Mute\")\r\n\t\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"contained\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tmuteOrUnMuteLoading ? undefined :\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 ? <MicOff /> : <Mic />\r\n\t\t\t\t\t\t\t\t\t\t\t) : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!state.sdkConfig?.disableMuteButton) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleMuteToggle();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableMuteButton || state.callData?.hold === 1\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: (state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t((state.callData?.status?.toUpperCase() as CallStatus) !==\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute !== 1) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tmuteOrUnMuteLoading ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.hold === 1 ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableMuteButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{muteOrUnMuteLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ color: theme.palette.primary.main }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t) : isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.mute === 1 ? \"Unmute\" : \"Mute\"\r\n\t\t\t\t\t\t\t\t\t\t\t) : state.callData?.mute === 1 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<MicOff />\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Mic />\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disableCallTransferButton ? \"Transfer Call feature is disabled\" : \"Transfer Call\"}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={state.openCallTransferDialog ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <TransferWithinAStation /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableCallTransferButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsdkStateManager.setOpenCallTransferDialog(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.openCallTransferDialog\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL && !state.sdkConfig?.disableCallTransferButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) !== CallStatus.ONCALL ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableCallTransferButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Transfer\" : <TransferWithinAStation />}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disableConferenceButton ? \"Conference Call feature is disabled\" : \"Conference Call\"}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={state.openConferenceDialog ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <Group /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableConferenceButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsdkStateManager.setOpenConferenceDialog(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.openConferenceDialog\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: (state.callData?.status?.toUpperCase() as CallStatus) ===\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL && !state.sdkConfig?.disableConferenceButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(state.callData?.status?.toUpperCase() as CallStatus) !== CallStatus.ONCALL ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableConferenceButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Conference\" : <Group />}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t{state.sdkConfig?.enableSmsServices && (\r\n\t\t\t\t\t\t\t\t\t<Tooltip title={\"Send SMS\"}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={Boolean(ambulanceAnchorEl) ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <SmsSharp /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.ONCALL, CallStatus.WRAPUP].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenAbulanceServices(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\tBoolean(ambulanceAnchorEl)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: [CallStatus.ONCALL, CallStatus.WRAPUP].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...disabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t![CallStatus.ONCALL, CallStatus.WRAPUP].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Send SMS\" : <SmsSharp />}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disableEndCallButton ? \"End Call feature is disabled\" : \"End Call\"}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={isVertical ? { display: \"block\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableEndCallButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"contained\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical && !endCallLoading ? <CallEnd /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableEndCallButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetOpenCallDisposition(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t!state.sdkConfig?.disableEndCallButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRight: \"1px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"error.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminWidth: \"60px !important\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \" 0px 2px 1px #5f3f3f\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `1px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"40px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \" 0px 2px 1px #5f3f3f\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:active\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...disabled,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tminWidth: \"60px !important\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCallStatus.WRAPUP,\r\n\t\t\t\t\t\t\t\t\t\t\t\t].includes(state.callData?.status?.toUpperCase() as CallStatus) ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tendCallLoading ||\r\n\t\t\t\t\t\t\t\t\t\t\t\tstate.sdkConfig?.disableEndCallButton\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{endCallLoading ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" color=\"error\" />\r\n\t\t\t\t\t\t\t\t\t\t\t) : isVertical ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"End Call\"\r\n\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<CallEnd />\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\r\n\t\t\t\t\t\t\t\t{!state.sdkConfig?.disabledMoreOptionsButton &&\r\n\t\t\t\t\t\t\t\t\tprocessList &&\r\n\t\t\t\t\t\t\t\t\tprocessList?.length > 1 && (\r\n\t\t\t\t\t\t\t\t\t\t<Tooltip title={\"Switch Process\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant={Boolean(moreOptionsAnchorEl) ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tstartIcon={isVertical ? <MoreVert /> : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[CallStatus.BREAK, CallStatus.IDLE].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOpenMoreOptions(e);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={Boolean(moreOptionsAnchorEl)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...enabled, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t: { ...outlined, ...(isVertical && { justifyContent: \"flex-start\", width: \"100%\", px: 2 }) }\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t![CallStatus.BREAK, CallStatus.IDLE].includes(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate.callData?.status?.toUpperCase() as CallStatus\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{isVertical ? \"Switch Process\" : <MoreVert />}\r\n\t\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Paper>\r\n\t\t\t\t</Fade>\r\n\t\t\t</Box>\r\n\r\n\t\t\t<Fade\r\n\t\t\t\tin={true}\r\n\t\t\t\ttimeout={300}\r\n\t\t\t>\r\n\t\t\t\t<Paper\r\n\t\t\t\t\tref={iframeDragRef}\r\n\t\t\t\t\televation={iframeIsDragging ? 4 : 1}\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\tleft: iframePosition.x,\r\n\t\t\t\t\t\ttop: iframePosition.y,\r\n\t\t\t\t\t\tborderRadius: 2,\r\n\t\t\t\t\t\tbgcolor: \"background.paper\",\r\n\t\t\t\t\t\tzIndex: Number.MAX_SAFE_INTEGER,\r\n\t\t\t\t\t\ttransition: theme.transitions.create([\"box-shadow\", \"transform\"], {\r\n\t\t\t\t\t\t\tduration: theme.transitions.duration.short,\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tvisibility: showIframe && !state.sdkConfig?.disableSoftPhone ? \"visible\" : \"hidden\",\r\n\t\t\t\t\t\tuserSelect: \"none\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\tcursor: \"all-scroll\",\r\n\t\t\t\t\t\t\tpadding: \"0px 10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonMouseDown={iframeHandleMouseDown}\r\n\t\t\t\t\t\tonTouchStart={iframeHandleTouchStart}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<DragIndicator\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\ttransform: \"rotate(90deg)\",\r\n\t\t\t\t\t\t\t\tcolor: \"#7b7b7b\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>{\" \"}\r\n\t\t\t\t\t\t<Typography variant=\"subtitle1\" fontWeight={600} sx={{ textAlign: \"center\" }}>\r\n\t\t\t\t\t\t\tahs-cti\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t<IconButton onClick={() => setShowIframe(false)}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<iframe\r\n\t\t\t\t\t\t\t// src={`https://localhost:8443/index.html?user_id=${state.urlConfig?.id}&api_url=${state.urlConfig?.iframeAPIURL}&token=${state.authorization?.accessToken}`}\r\n\t\t\t\t\t\t\tsrc={`${state.urlConfig?.iframeURL}/static/phone/index.html?user_id=${state.urlConfig?.id}&api_url=${state.urlConfig?.iframeAPIURL}&token=${state.authorization?.accessToken}`}\r\n\t\t\t\t\t\t\t// src={`${state.urlConfig?.iframeURL}/static/phone/cti_index.html?user_id=${state.urlConfig?.id}&api_url=${state.urlConfig?.iframeAPIURL}`}\r\n\t\t\t\t\t\t\theight={380}\r\n\r\n\t\t\t\t\t\t\twidth={420}\r\n\t\t\t\t\t\t\tallow=\"camera; microphone; autoplay\"\r\n\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\tborder: \"none\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t></iframe>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Fade>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={dialerAnchorEl}\r\n\t\t\t\topen={Boolean(dialerAnchorEl)}\r\n\t\t\t\tonClose={handleCloseDialer}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tall: \"unset\",\r\n\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tvalue={phoneNumber}\r\n\t\t\t\t\t\tplaceholder=\"Enter Mobile No.\"\r\n\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\tconst value = e.target.value;\r\n\t\t\t\t\t\t\tsetPhoneNumber(value);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tonKeyDown={(e) => {\r\n\t\t\t\t\t\t\tif (e.key === \"Enter\") {\r\n\t\t\t\t\t\t\t\thandleStartCall(phoneNumber);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\tcolor=\"info\"\r\n\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\thandleStartCall(phoneNumber);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{clickToCallLoading ? (\r\n\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tcolor: theme.palette.success.main,\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<Phone color=\"success\" />\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={ambulanceAnchorEl}\r\n\t\t\t\topen={Boolean(ambulanceAnchorEl)}\r\n\t\t\t\tonClose={handleCloseAmbulance}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tall: \"unset\",\r\n\t\t\t\t\t\tpadding: \" 0px 20px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Tooltip title=\"Ambulance Service\">\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\thandleSendSMS(state.callData);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tAmbulance\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: \"green\",\r\n\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\t\t\tmarginLeft: \"14px\",\r\n\t\t\t\t\t\t\t\t\tpadding: \"2px 6px\",\r\n\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tSend\r\n\t\t\t\t\t\t\t\t<SendRounded\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tmarginLeft: \"8px\",\r\n\t\t\t\t\t\t\t\t\t\twidth: \"18px\",\r\n\t\t\t\t\t\t\t\t\t\ttransform: \"rotate(-16deg)\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={moreOptionsAnchorEl}\r\n\t\t\t\topen={Boolean(moreOptionsAnchorEl)}\r\n\t\t\t\tonClose={handleCloseMoreOptions}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tall: \"unset\",\r\n\t\t\t\t\t\tpadding: \" 0px 20px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{processList?.map((item) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tkey={item?.process_id}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Tooltip title={item?.process_name ?? \"\"}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\t\t\tstate?.process?.process_id === item?.process_id ? \"contained\" : \"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\tsdkStateManager.setProcess(item);\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{item?.process_name ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={statusAnchorEl}\r\n\t\t\t\topen={Boolean(statusAnchorEl)}\r\n\t\t\t\tonClose={handleCloseAgentStatus}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t{!breaksList || breaksList?.length === 0 ? (\r\n\t\t\t\t\t<MenuItem onClick={() => handleUpdateAgentStatus(\"Lunch\")}>- Break</MenuItem>\r\n\t\t\t\t) : (\r\n\t\t\t\t\tbreaksList?.map((item) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\t\t\tkey={item?.type}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t// hilight background of selected\r\n\t\t\t\t\t\t\t\t\tbackgroundColor:\r\n\t\t\t\t\t\t\t\t\t\tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t\t\"primary.main\"\r\n\t\t\t\t\t\t\t\t\t\t\t: \"transparent\",\r\n\t\t\t\t\t\t\t\t\tcolor:\r\n\t\t\t\t\t\t\t\t\t\tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t\t\"white\"\r\n\t\t\t\t\t\t\t\t\t\t\t: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\":hover\": {\r\n\t\t\t\t\t\t\t\t\t\tbackgroundColor:\r\n\t\t\t\t\t\t\t\t\t\t\tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"primary.dark\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"selected.hover\",\r\n\t\t\t\t\t\t\t\t\t\t// color:\r\n\t\t\t\t\t\t\t\t\t\t// \tstate?.callData?.status === \"BREAK\" && state?.agentStatus === item?.type ?\r\n\t\t\t\t\t\t\t\t\t\t// \t\t\"primary.main\"\r\n\t\t\t\t\t\t\t\t\t\t// \t:\t\"primary.main\",\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tonClick={() => handleUpdateAgentStatus(item?.type)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t- {item?.type}\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})\r\n\t\t\t\t)}\r\n\t\t\t</Menu>\r\n\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={anchorEl}\r\n\t\t\t\topen={Boolean(anchorEl)}\r\n\t\t\t\tonClose={handleCloseQueueCounts}\r\n\t\t\t\tonClick={(e) => e.stopPropagation()}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tzIndex: 99999,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\tpadding: \"0px 10px\",\r\n\t\t\t\t\t\t\"&hover\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"white\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\ticon={<Layers color=\"secondary\" />}\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tlabel=\"Waiting - 25\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"4px 2px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\ticon={<Pending color=\"info\" />}\r\n\t\t\t\t\t\tlabel=\"Pending - 99+\"\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"4px 2px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t<Chip\r\n\t\t\t\t\t\ticon={<Upcoming color=\"success\" />}\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tlabel=\"Upcoming - 66\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tmargin: \"4px 2px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Box>\r\n\t\t\t</Menu>\r\n\r\n\t\t\t{Boolean(state.openConferenceDialog) && <ConferenceDialog />}\r\n\r\n\t\t\t{Boolean(state.openCallTransferDialog) && (\r\n\t\t\t\t<CallTransferDialog open={state.openCallTransferDialog} />\r\n\t\t\t)}\r\n\r\n\t\t\t{Boolean(openCallDisposition) && (\r\n\t\t\t\t<EndCallDispositionDialog\r\n\t\t\t\t\topen={openCallDisposition}\r\n\t\t\t\t\tsetOpen={setOpenCallDisposition}\r\n\t\t\t\t\tonSubmitDisposition={handleEndCall}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\r\n\t\t\t{Boolean(openCallHistoryDialog) && (\r\n\t\t\t\t<CallHistoryDialog\r\n\t\t\t\t\topen={openCallHistoryDialog}\r\n\t\t\t\t\tsetOpen={setOpenCallHistoryDialog}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport Airlines from \"@mui/icons-material/Airlines\";\r\nimport Call from \"@mui/icons-material/Call\";\r\nimport CallEnd from \"@mui/icons-material/CallEnd\";\r\nimport CallSplit from \"@mui/icons-material/CallSplit\";\r\nimport Close from \"@mui/icons-material/Close\";\r\nimport MemoryOutlined from \"@mui/icons-material/MemoryOutlined\";\r\nimport Pause from \"@mui/icons-material/Pause\";\r\nimport PhoneDisabled from \"@mui/icons-material/PhoneDisabled\";\r\nimport PlayArrow from \"@mui/icons-material/PlayArrow\";\r\nimport RecordVoiceOver from \"@mui/icons-material/RecordVoiceOver\";\r\nimport Roofing from \"@mui/icons-material/Roofing\";\r\nimport SupportAgent from \"@mui/icons-material/SupportAgent\";\r\nimport TransferWithinAStation from \"@mui/icons-material/TransferWithinAStation\";\r\nimport Upcoming from \"@mui/icons-material/Upcoming\";\r\nimport {\r\n\tBox,\r\n\tButton,\r\n\tDialog,\r\n\tIconButton,\r\n\tMenu,\r\n\tMenuItem,\r\n\tPaper,\r\n\tTextField,\r\n\tTypography,\r\n\tAutocomplete,\r\n\tTooltip,\r\n\tuseTheme,\r\n\tTableContainer,\r\n\tTable,\r\n\tTableHead,\r\n\tTableRow,\r\n\tTableCell,\r\n\tTableBody,\r\n\tCircularProgress,\r\n\tCheckbox,\r\n} from \"@mui/material\";\r\n\r\nimport React, { useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { useSDKState } from \"../hooks/useSDKState\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\nimport { useGetRequest, usePostRequest } from \"../services/request\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\nimport { useToast } from \"../services/toastMessage\";\r\nimport useStyles from \"./styles\";\r\n\r\nimport { ConferenceLineTypes, CallStatus } from \"../../types\";\r\n\r\ntype TransferCallRequest = {\r\n\tmobile_number?: string;\r\n\tuserid?: string;\r\n\ttype?: string;\r\n\ttransfer_to?: string;\r\n\tcallreferenceid?: string;\r\n\tprocessid?: string;\r\n\tprocess_name?: string;\r\n};\r\n\r\ntype BlindTransferCallRequest = {\r\n\taction: string;\r\n\tuserid: string;\r\n\tcallreferenceid: string;\r\n\tblind_transfer_no: any;\r\n};\r\n\r\nconst ConferenceTableRow = ({ each, isLineDialing }: any) => {\r\n\tconst state = useSDKState();\r\n\tconst theme = useTheme();\r\n\tconst { showToast } = useToast();\r\n\tconst { disabled, enabled, outlined } = useStyles({\r\n\t\tdisabled: state.sdkConfig?.disabled || {},\r\n\t\tenabled: state.sdkConfig?.enabled || {},\r\n\t\toutlined: state.sdkConfig?.outlined || {},\r\n\t});\r\n\r\n\tconst [conferenceCallStart, setConferenceCallStart] = useState(false);\r\n\tconst [conferenceCallMerge, setConferenceCallMerge] = useState(false);\r\n\tconst [conferenceCallHoldOrUnHold, setConferenceCallHoldOrUnHold] = useState(false);\r\n\tconst [conferenceCallEnd, setConferenceCallEnd] = useState(false);\r\n\r\n\t// Check if the entered phone number is same as the active call number (used only as a call guard, not for UI error)\r\n\tconst isSameAsActiveCall = each?.phone === state.callData?.phone_number && !!each?.phone;\r\n\r\n\t// Show error on the DUPLICATE occurrence: any lower-numbered conference line already has the same phone\r\n\tconst isDuplicateInConference =\r\n\t\t!!each?.phone &&\r\n\t\teach?.line !== 1 &&\r\n\t\t(state.conferenceLine as ConferenceLineTypes[])?.some(\r\n\t\t\t(line) => line.line < each.line && line.phone === each?.phone && !!line.phone,\r\n\t\t);\r\n\r\n\t// Only flag duplicates — no error on line 1 (active call) and no error on the first use of a number\r\n\tconst hasPhoneConflict = isDuplicateInConference;\r\n\r\n\tconst phoneConflictHelperText = isDuplicateInConference ? \"Number already used in another conference line\" : \"\";\r\n\r\n\tconst onConferenceLineUpdate = (line: ConferenceLineTypes, data: any) => {\r\n\t\tsdkStateManager.setConferenceLine({ ...line, ...data });\r\n\t};\r\n\r\n\tconst onConferenceCallStart = (line: ConferenceLineTypes, data: any) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\r\n\t\t// Block dialing the same number as the active call\r\n\t\tif (line_used.phone === state.callData?.phone_number) {\r\n\t\t\tshowToast(\"Cannot conference with the active call number\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Block dialing a number already used in another conference line\r\n\t\tconst isDuplicateNumber = (state.conferenceLine as ConferenceLineTypes[])?.some(\r\n\t\t\t(l) => l.line !== line_used.line && l.phone === line_used.phone && !!l.phone,\r\n\t\t);\r\n\t\tif (isDuplicateNumber) {\r\n\t\t\tshowToast(\"Number already used in another conference line\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!line_used.phone || line_used.phone.length < 10) {\r\n\t\t\tshowToast(\"Invalid phone number\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetConferenceCallStart(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: `CALL${line_used.line}`,\r\n\t\t\t// line_used: Number(line_used.line),\r\n\t\t\t// thirdparty_no: line_used.phone,\r\n\t\t\ttarget: line_used.phone,\r\n\t\t\tline_number: Number(line_used.line),\r\n\t\t\tuserid: state.agentId ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallStart(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst onMergeConferenceCall = (line: ConferenceLineTypes, data: any) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\t\tsetConferenceCallMerge(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: `CONFERENCE`,\r\n\t\t\tline_used: String(line_used.line),\r\n\t\t\tthirdparty_no: line_used.phone,\r\n\t\t\tuserid: state.agentId ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t\tcall_id: state.callData?.call_id ?? \"\",\r\n\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_MERGE_CALL, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tif (state.callData?.hold === 1) {\r\n\t\t\t\t\thandleHoldToggle();\r\n\t\t\t\t}\r\n\t\t\t\tif (state.callData?.mute === 1) {\r\n\t\t\t\t\thandleMuteToggle();\r\n\t\t\t\t}\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallMerge(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst onHoldOrUnHoldConferenceCall = (line: ConferenceLineTypes, data: any, type: string) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\t\tsetConferenceCallHoldOrUnHold(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: type === \"HOLDUSER\" ? \"HOLD\" : \"UNHOLD\",\r\n\t\t\toperation: type,\r\n\t\t\thold_channel_no: type === \"HOLDUSER\" ? `hold${line_used.line}` : `unhold${line_used.line}`,\r\n\t\t\tuserid: state.agentId ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\r\n\t\t\tcall_uuid: state.callData?.call_id ?? \"\",\r\n\t\t\tline_number: Number(line_used.line),\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_HOLD_OR_UN_HOLD, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallHoldOrUnHold(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst onEndConferenceCall = (line: ConferenceLineTypes, data: any) => {\r\n\t\tconst line_used = { ...line, ...data };\r\n\r\n\t\t// ✅ FIX: Prevent accidental hangup of the primary call channel via conference controls\r\n\t\tif (line_used.line === 1) {\r\n\t\t\tshowToast(\"Cannot end the primary call from conference controls\", \"error\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetConferenceCallEnd(true);\r\n\r\n\t\t// Backend HangupRequest schema: call_id (required), agent_id, mobile_number,\r\n\t\t// line_number, reason. Pass line_number = the conference line being dropped\r\n\t\t// (line_number = 0 means full-call hangup, so it must be > 0 here).\r\n\t\tconst payload = {\r\n\t\t\tcall_id: state.callData?.call_id ?? \"\",\r\n\t\t\tagent_id: state.agentId ?? \"\",\r\n\t\t\tmobile_number: line_used.phone ?? \"\",\r\n\t\t\tline_number: Number(line_used.line),\r\n\t\t\treason: \"normal\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_END, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallEnd(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst [holdOrUnHold] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tuser_id: string;\r\n\t\tcall_uuid: string;\r\n\t\tline_number: number;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst [muteOrUnMute] = usePostRequest<{\r\n\t\taction: string;\r\n\t\tdirection: string;\r\n\t\tuser_id: string;\r\n\t\tcall_uuid: string;\r\n\t\tline_number: number;\r\n\t\trefno?: string;\r\n\t}>();\r\n\r\n\tconst handleHoldToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.hold === 1 ? CallStatus.UNHOLD : CallStatus.HOLD,\r\n\t\t\tuser_id: String(state.agentId ?? \"\"),\r\n\t\t\tcall_uuid: state.callData?.call_id ?? \"\",\r\n\t\t\tline_number: 0,\r\n\t\t};\r\n\t\tholdOrUnHold(END_POINT.HOLD_CALL, payload);\r\n\t};\r\n\r\n\tconst handleMuteToggle = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: state.callData?.mute === 1 ? CallStatus.UNMUTE : CallStatus.MUTE,\r\n\t\t\tdirection: \"both\",\r\n\t\t\tuser_id: String(state.agentId ?? \"\"),\r\n\t\t\tcall_uuid: state.callData?.call_id ?? \"\",\r\n\t\t\tline_number: 0,\r\n\t\t};\r\n\r\n\t\tmuteOrUnMute(END_POINT.MUTE_CALL, payload);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<TableRow\r\n\t\t\tkey={each.line}\r\n\t\t\tsx={{\r\n\t\t\t\tborder: \"2px solid #fff\",\r\n\t\t\t}}\r\n\t\t>\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\tflex: 1,\r\n\t\t\t\t\twidth: \"100px\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Typography>Line {each?.line ?? \"\"}. </Typography>\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\twidth: \"150px\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Typography\r\n\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tpx: 1,\r\n\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\twidth: \"150px\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{each?.status ?? \"\"}\r\n\t\t\t\t</Typography>\r\n\t\t\t</TableCell>\r\n\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\tflex: 1,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<TextField\r\n\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\tplaceholder=\"Phone Number\"\r\n\t\t\t\t\tfullWidth\r\n\t\t\t\t\tvalue={each?.phone || \"\"}\r\n\t\t\t\t\terror={hasPhoneConflict}\r\n\t\t\t\t\thelperText={phoneConflictHelperText}\r\n\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\teach?.line === 1 ||\r\n\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\tCallStatus.ONCALL,\r\n\t\t\t\t\t\t\tCallStatus.DISCONNECTED,\r\n\t\t\t\t\t\t\tCallStatus.CONFERENCE,\r\n\t\t\t\t\t\t\tCallStatus.HOLD,\r\n\t\t\t\t\t\t\tCallStatus.MUTE,\r\n\t\t\t\t\t\t\tCallStatus.DIALING,\r\n\t\t\t\t\t\t\tCallStatus.RINGING,\r\n\t\t\t\t\t\t].includes(each?.status ?? \"\") ||\r\n\t\t\t\t\t\tisLineDialing\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\tonConferenceLineUpdate(each, { phone: e.target.value });\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t</TableCell>\r\n\t\t\t<TableCell\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\tflex: 1,\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\tjustifyContent: \"flex-start\",\r\n\t\t\t\t\t\tgap: \"10px\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{each?.line === 1 && (\r\n\t\t\t\t\t\t<Tooltip title={each?.status !== CallStatus.HOLD ? \"Hold\" : \"Resume\"}>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={each?.status === CallStatus.HOLD ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={each?.status === CallStatus.CONFERENCE ? { ...outlined } : { ...disabled }}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tif (each.status === CallStatus.HOLD) {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: false }, \"UNHOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: true }, \"HOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t(each?.status !== CallStatus.CONFERENCE && each?.status !== CallStatus.HOLD) ||\r\n\t\t\t\t\t\t\t\t\tconferenceCallHoldOrUnHold\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{each.status === CallStatus.HOLD ? (\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tgap: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"98px\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: each.status === CallStatus.HOLD ? \"#fff\" : \"initial\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tUnhold\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t{conferenceCallHoldOrUnHold ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"16px\" sx={{ color: theme.palette.primary.main }} />\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<PlayArrow />\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tgap: \"5px\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"98px\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ color: each.status === CallStatus.HOLD ? \"#fff\" : \"#000\", fontSize: \"12px\" }}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tHold\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t{conferenceCallHoldOrUnHold ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"16px\" sx={{ color: theme.palette.primary.main }} />\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t<Pause />\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t\t\thasPhoneConflict\r\n\t\t\t\t\t\t\t\t\t? phoneConflictHelperText || \"Cannot dial this number\"\r\n\t\t\t\t\t\t\t\t\t: \"Call\"\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tvariant={each?.status !== CallStatus.IDLE ? \"outlined\" : \"contained\"}\r\n\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE || hasPhoneConflict\r\n\t\t\t\t\t\t\t\t\t\t\t? { ...disabled }\r\n\t\t\t\t\t\t\t\t\t\t\t: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.success.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"success.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `0px 2px 1px ${theme.palette.success.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.success.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"&:active\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"success.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\tonConferenceCallStart(each, {});\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE ||\r\n\t\t\t\t\t\t\t\t\t\tisLineDialing ||\r\n\t\t\t\t\t\t\t\t\t\thasPhoneConflict\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{conferenceCallStart ? (\r\n\t\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" color=\"success\" />\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Call\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor:\r\n\t\t\t\t\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE || hasPhoneConflict ? \"default\" : \"#f3f2f2\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title=\"Merge Call\">\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={each?.status === CallStatus.ONCALL ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={each?.status === CallStatus.ONCALL ? { ...enabled } : { ...disabled }}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tonMergeConferenceCall(each, { isMergeCall: true });\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={each?.status !== CallStatus.ONCALL}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallMerge ? <CircularProgress size=\"20px\" /> : <CallSplit />}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title={each?.status !== CallStatus.HOLD ? \"Hold\" : \"Resume\"}>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={each?.status === CallStatus.HOLD ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tsx={each?.status === CallStatus.CONFERENCE ? { ...outlined } : { ...disabled }}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tif (each.status === CallStatus.HOLD) {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: false }, \"UNHOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tonHoldOrUnHoldConferenceCall(each, { isHold: true }, \"HOLDUSER\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\t(each?.status !== CallStatus.CONFERENCE && each?.status !== CallStatus.HOLD) ||\r\n\t\t\t\t\t\t\t\t\tconferenceCallHoldOrUnHold\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallHoldOrUnHold ? (\r\n\t\t\t\t\t\t\t\t\t<CircularProgress size=\"20px\" sx={{ color: theme.palette.primary.main }} />\r\n\t\t\t\t\t\t\t\t) : each.status === CallStatus.HOLD ? (\r\n\t\t\t\t\t\t\t\t\t<PlayArrow />\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t<Pause />\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t{each?.line !== 1 && (\r\n\t\t\t\t\t\t<Tooltip title=\"End Call\">\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={\r\n\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE && each?.status !== CallStatus.DISCONNECTED\r\n\t\t\t\t\t\t\t\t\t\t? \"contained\"\r\n\t\t\t\t\t\t\t\t\t\t: \"outlined\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\tsx={\r\n\t\t\t\t\t\t\t\t\teach?.status !== CallStatus.IDLE && each?.status !== CallStatus.DISCONNECTED ?\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t...enabled,\r\n\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `0px 2px 1px ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: `0px solid ${theme.palette.error.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\"&:active\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"error.light\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t: {\r\n\t\t\t\t\t\t\t\t\t\t\t...disabled,\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tonEndConferenceCall(each, {\r\n\t\t\t\t\t\t\t\t\t\tisCallStart: false,\r\n\t\t\t\t\t\t\t\t\t\tisMergeCall: false,\r\n\t\t\t\t\t\t\t\t\t\tisMute: false,\r\n\t\t\t\t\t\t\t\t\t\tisHold: false,\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tdisabled={\r\n\t\t\t\t\t\t\t\t\teach?.status === CallStatus.IDLE ||\r\n\t\t\t\t\t\t\t\t\teach?.status === CallStatus.DISCONNECTED ||\r\n\t\t\t\t\t\t\t\t\tconferenceCallEnd\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{conferenceCallEnd ? <CircularProgress size=\"20px\" color=\"error\" /> : <CallEnd />}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t</TableCell>\r\n\t\t</TableRow>\r\n\t);\r\n};\r\n\r\nexport function ConferenceDialog() {\r\n\tconst state = useSDKState();\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [conferenceCallEndAll, setConferenceCallEndAll] = useState(false);\r\n\r\n\tconst handleClose = () => {\r\n\t\tsdkStateManager.setOpenConferenceDialog(false);\r\n\t};\r\n\r\n\tconst onEndAllConferenceCalls = () => {\r\n\t\tsetConferenceCallEndAll(true);\r\n\r\n\t\tconst payload = {\r\n\t\t\taction: \"EXTERNAL_CONFERENCE\",\r\n\t\t\toperation: \"ENDCONFERENCE\",\r\n\t\t\tuserid: state.agentId ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t\tprocessid: state.process?.process_id?.toString() ?? \"\",\r\n\t\t\tprocess_name: state.process?.process_name ?? \"\",\r\n\t\t\tcallreferenceid: state.callData?.call_id ?? \"\",\r\n\t\t\tcall_id: state.callData?.call_id ?? \"\",\r\n\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_END_ALL, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\thandleClose();\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tsetConferenceCallEndAll(false);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst handleTransferConferenceCall = () => {\r\n\t\tconst payload = {\r\n\t\t\taction: \"TRANSFERAPI\",\r\n\t\t\tuserid: state.agentId ?? \"\",\r\n\t\t\tprocess: state.callData?.process_name ?? \"\",\r\n\t\t\tprocessid: state.process?.process_id?.toString() ?? \"\",\r\n\t\t\tprocess_name: state.process?.process_name ?? \"\",\r\n\t\t\tcallreferenceid: state.callData?.call_id ?? \"\",\r\n\t\t\tcall_id: state.callData?.call_id ?? \"\",\r\n\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t};\r\n\r\n\t\taxiosInstance\r\n\t\t\t.post(END_POINT.CONFERENCE_CALL_TRANSFER, payload)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\tsdkStateManager.resetConferenceLines();\r\n\t\t\t\thandleClose();\r\n\t\t\t\t// ✅ FIX: Do NOT call sdkStateManager.endCall() here.\r\n\t\t\t\t// The WebSocket will push the correct WRAPUP event — let it drive state.\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconst message =\r\n\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\"An unknown error occurred\";\r\n\t\t\t\tshowToast(message, \"error\");\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst isLineDialing = state?.conferenceLine?.some((item) => item?.status === CallStatus.DIALING);\r\n\tconst conferenceLineCount =\r\n\t\tstate?.conferenceLine?.filter((item) => item?.status === CallStatus.CONFERENCE)?.length ?? 0;\r\n\r\n\tconst isHold = state?.conferenceLine?.some((item) => item?.status === CallStatus.HOLD);\r\n\tconst isOnCall = state?.conferenceLine?.some((item) => item?.status === CallStatus.ONCALL);\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={state.openConferenceDialog}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"md\"}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 800 } } }}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"0px 16px\",\r\n\t\t\t\t\t\t\tpaddingBottom: \"6px\",\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 2px #e7e5e5ff\",\r\n\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\tcolor=\"primary.main\"\r\n\t\t\t\t\t\t\tsx={{ textTransform: \"uppercase\", fontWeight: \"bold\", fontSize: \"14px\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{state?.agentId ?? \"\"} conference\r\n\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t{/* <Button\r\n\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\tonClick={handleTransferConferenceCall}\r\n\t\t\t\t\t\t\t\tdisabled={conferenceLineCount <= 1 || isHold || isLineDialing || isOnCall}\r\n\t\t\t\t\t\t\t\tstartIcon={<TransferWithinAStation />}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tExit Conference\r\n\t\t\t\t\t\t\t</Button> */}\r\n\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\tonClick={handleClose}\r\n\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Close sx={{ color: \"primary.main\" }} />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 2px #e7e5e5ff\",\r\n\t\t\t\t\t\t\tmargin: \"0px 15px\",\r\n\t\t\t\t\t\t\tborderRadius: \"20px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<TableContainer\r\n\t\t\t\t\t\t\tcomponent={Paper}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\toutline: \"0px solid gray !important\",\r\n\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 6px #e7e5e5ff\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Table sx={{ border: \"4px solid #ffffff !important\" }}>\r\n\t\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t\t<TableRow sx={{ border: \"2px solid #f3f3f3ff !important\" }}>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ padding: \"6px\" }}>Line</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ padding: \"6px\" }}>Status</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ padding: \"6px\" }}>Mobile Number</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={{ padding: \"6px\" }}>Call Actions</TableCell>\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t\t{state?.conferenceLine.map((each: any) => (\r\n\t\t\t\t\t\t\t\t\t\t<ConferenceTableRow key={each.line} each={each} isLineDialing={isLineDialing} />\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t\t</TableContainer>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box sx={{ textAlign: \"center\", m: 2 }}>\r\n\t\t\t\t\t\t<Tooltip title={state.sdkConfig?.disableEndConference ? \"End Conference feature is disabled\" : \"\"}>\r\n\t\t\t\t\t\t\t<Box component=\"span\">\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\t\tsize=\"large\"\r\n\t\t\t\t\t\t\t\t\tonClick={onEndAllConferenceCalls}\r\n\t\t\t\t\t\t\t\t\tdisabled={conferenceCallEndAll || conferenceLineCount <= 0 || state.sdkConfig?.disableEndConference}\r\n\t\t\t\t\t\t\t\t\tsx={{ px: 2, borderRadius: \"20px\", textTransform: \"capitalize\" }}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{conferenceCallEndAll ? (\r\n\t\t\t\t\t\t\t\t\t\t<CircularProgress\r\n\t\t\t\t\t\t\t\t\t\t\tsize=\"20px\"\r\n\t\t\t\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ marginRight: \"8px\" }}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.sdkConfig?.disableEndConference}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: state.sdkConfig?.disableEndConference ? \"action.disabledBackground\" : \"error.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: state.sdkConfig?.disableEndConference ? \"action.disabledBackground\" : \"error.dark\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\tmarginRight: \"8px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: \"28px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\theight: \"28px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"white\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<PhoneDisabled sx={{ color: state.sdkConfig?.disableEndConference ? \"action.disabled\" : \"white\", fontSize: \"16px\", fontWeight: \"600\" }} />\r\n\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\tEnd Conference\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function CallTransferDialog({ open }: any) {\r\n\tconst state = useSDKState();\r\n\tconst [mobileNumber, setMobileNumber] = useState(\"\");\r\n\r\n\t// ✅ FIX: Removed sdkStateManager.endCall() and sdkStateManager.resetConferenceLines()\r\n\t// from onSuccess. These were forcing the initial agent to IDLE immediately on the\r\n\t// client side, before the WebSocket pushed the correct WRAPUP event.\r\n\t// For a blind transfer the server will push:\r\n\t// - Initial agent → WRAPUP (via WebSocket)\r\n\t// - Transferred-to agent → RINGING → ONCALL (via WebSocket)\r\n\t// We must NOT touch local call state here — only close the dialog.\r\n\tconst [transferCall, { isLoading: isTransferLoading }] = usePostRequest<TransferCallRequest>({\r\n\t\tonSuccess: () => {\r\n\t\t\t// Close dialog only. Let WebSocket events drive all state transitions.\r\n\t\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [initiateConsultCall] = usePostRequest<any>({});\r\n\r\n\tconst [completeConsultTransfer, { isLoading: isCompleteConsultLoading }] = usePostRequest<any>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setConsultInfo(null);\r\n\t\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [cancelConsultTransfer, { isLoading: isCancelConsultLoading }] = usePostRequest<any>({\r\n\t\tonSuccess: () => {\r\n\t\t\tsdkStateManager.setConsultInfo(null);\r\n\t\t},\r\n\t});\r\n\r\n\tconst [currentselecteTab, setCurrentselecteTab] = useState(\"queues\");\r\n\tconst [transferMenuAnchor, setTransferMenuAnchor] = useState<null | HTMLElement>(null);\r\n\tconst [pendingTransferData, setPendingTransferData] = useState<{ data: any; type: string } | null>(null);\r\n\r\n\tconst blindEnabled = !state.sdkConfig?.disableBlindTransfer;\r\n\tconst attendedEnabled = !state.sdkConfig?.disableAttendedTransfer;\r\n\tconst enabledTransferModeCount = (blindEnabled ? 1 : 0) + (attendedEnabled ? 1 : 0);\r\n\tconst singleTransferMode: \"DEFAULT\" | \"CONSULT\" | null =\r\n\t\tenabledTransferModeCount === 1 ? (blindEnabled ? \"DEFAULT\" : \"CONSULT\") : null;\r\n\r\n\tconst [getIdelAgentsList, { data: idleAgentsList, isLoading: isIdleAgentsListLoading }] =\r\n\t\tusePostRequest<any>({ disabledSuccessToast: true });\r\n\r\n\tconst [\r\n\t\tgetHospitalsServicesList,\r\n\t\t{ data: hospitalsServicesList, isLoading: isHospitalsServicesListLoading },\r\n\t] = useGetRequest<any>({ disabledSuccessToast: true });\r\n\r\n\tconst [\r\n\t\tgetProcessAndQueuesList,\r\n\t\t{ data: processAndQueuesList, isLoading: isProcessAndQueuesListLoading },\r\n\t] = usePostRequest<{\r\n\t\tstatus: string;\r\n\t\tactive: boolean;\r\n\t\tprocess?: any[];\r\n\t\tqueue?: any[];\r\n\t}>({ disabledSuccessToast: true });\r\n\r\n\tconst handleClose = () => {\r\n\t\tsdkStateManager.setOpenCallTransferDialog(false);\r\n\t};\r\n\r\n\tconst handleTransferCall = (data: any, type: string, mode: \"CONSULT\" | \"DEFAULT\" = \"DEFAULT\") => {\r\n\t\tif (type === \"PROCESS\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\t\tuserid: state.agentId,\r\n\t\t\t\ttype: \"PROCESS\",\r\n\t\t\t\ttransfer_to: data?.process_name ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.call_id ?? \"\",\r\n\t\t\t\tprocessid: String(state.callData?.process_id ?? \"\"),\r\n\t\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t\t};\r\n\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t} else if (type === \"QUEUE\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\t\tuserid: state.agentId,\r\n\t\t\t\ttype: \"QUEUE\",\r\n\t\t\t\ttransfer_to: data?.queue_name ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.call_id ?? \"\",\r\n\t\t\t\tprocessid: String(state.callData?.process_id ?? \"\"),\r\n\t\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t\t};\r\n\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t} else if (type === \"AGENT\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\tmobile_number: state.callData?.phone_number ?? \"\",\r\n\t\t\t\tuserid: state.agentId,\r\n\t\t\t\ttype: \"AGENT\",\r\n\t\t\t\ttransfer_type: mode === \"CONSULT\" ? \"ATTENDED\" : \"BLIND\",\r\n\t\t\t\ttransfer_to: data?.user_id?.toString() ?? \"\",\r\n\t\t\t\tcallreferenceid: state.callData?.call_id ?? \"\",\r\n\t\t\t\tprocessid: String(state.callData?.process_id ?? \"\"),\r\n\t\t\t\tprocess_name: state.callData?.process_name ?? \"\",\r\n\t\t\t};\r\n\t\t\tif (mode === \"CONSULT\") {\r\n\t\t\t\tinitiateConsultCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t\t} else {\r\n\t\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t\t}\r\n\t\t} else if (type === \"OTHER\") {\r\n\t\t\tconst payload = {\r\n\t\t\t\t// action: mode === \"CONSULT\" ? \"ATTENDED\" : \"BLIND_TRANSFER\",\r\n\t\t\t\ttransfer_type: mode === \"CONSULT\" ? \"ATTENDED\" : \"BLIND\",\r\n\t\t\t\ttype: \"OTHER\",\r\n\t\t\t\ttransfer_to: data?.mobile_number ?? \"\",\r\n\t\t\t\tuserid: state.agentId,\r\n\t\t\t\tcallreferenceid: state.callData?.call_id ?? \"\",\r\n\t\t\t\t// blind_transfer_no: data?.mobile_number ?? \"\",\r\n\t\t\t};\r\n\t\t\tif (mode === \"CONSULT\") {\r\n\t\t\t\tinitiateConsultCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t\t} else {\r\n\t\t\t\ttransferCall(END_POINT.TRANSFER_CALL, payload);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleTransferClick = (e: React.MouseEvent<HTMLElement>, data: any, type: string) => {\r\n\t\tif (singleTransferMode) {\r\n\t\t\thandleTransferCall(data, type, singleTransferMode);\r\n\t\t} else {\r\n\t\t\tsetPendingTransferData({ data, type });\r\n\t\t\tsetTransferMenuAnchor(e.currentTarget);\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tgetIdelAgentsList(END_POINT.AGENTS_LIST, { status: \"IDLE\", active: true });\r\n\t\tgetProcessAndQueuesList(END_POINT.TRANSFER_TO_DETAILS, { status: \"ACTIVE\", active: true });\r\n\t\tgetHospitalsServicesList(END_POINT.HOSPITALS_SERVICES);\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"md\"}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 600 } } }}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t\tposition: \"relative\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography variant=\"body1\" sx={{ flex: 1 }}> Call Transfer</Typography>\r\n\t\t\t\t\t\t<Box sx={{ position: \"absolute\", left: \"50%\", transform: \"translateX(-50%)\" }}>\r\n\t\t\t\t\t\t\t{state.consultInfo && (state.consultInfo.status?.toUpperCase() as CallStatus) === CallStatus.RINGING && (\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Typography variant=\"body1\" sx={{ whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\tTrying to consult\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={{ display: \"inline-flex\", gap: \"3px\", alignItems: \"flex-end\", height: \"14px\" }}>\r\n\t\t\t\t\t\t\t\t\t\t{[0, 1, 2].map((i) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box key={i} component=\"span\" sx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"@keyframes jumpDot\": {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"0%, 60%, 100%\": { transform: \"translateY(0)\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"30%\": { transform: \"translateY(-5px)\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\tanimation: \"jumpDot 1s ease-in-out infinite\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tanimationDelay: `${i * 0.15}s`,\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"inline-block\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}>.</Box>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{state.consultInfo && (state.consultInfo.status?.toUpperCase() as CallStatus) === CallStatus.ONCALL && (\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tstartIcon={isCompleteConsultLoading ? <CircularProgress size={14} /> : <TransferWithinAStation sx={{ fontSize: 16 }} />}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={isCompleteConsultLoading || isCancelConsultLoading}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (state.consultInfo) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tcompleteConsultTransfer(END_POINT.TRANSFER_COMPLETE, {}, {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tparams: { call_uuid: state.consultInfo.call_uuid },\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\tTransfer\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\t\t\tstartIcon={isCancelConsultLoading ? <CircularProgress size={14} /> : <PhoneDisabled sx={{ fontSize: 16 }} />}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={isCancelConsultLoading || isCompleteConsultLoading}\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (state.consultInfo) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tcancelConsultTransfer(END_POINT.TRANSFER_CANCEL, {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstatus: state.consultInfo.status,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tparticipant_identifier: state.consultInfo.participant_identifier,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tchannel_id: state.consultInfo.channel_id,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcall_uuid: state.consultInfo.call_uuid,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbridge_id: state.consultInfo.bridge_id,\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\tCancel\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={{ flex: 1, display: \"flex\", justifyContent: \"flex-end\" }}>\r\n\t\t\t\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box sx={{ margin: \"10px\", borderRadius: \"10px\" }}>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 1, margin: \"10px\" }}>\r\n\t\t\t\t\t\t\t{/* <Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"process\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => setCurrentselecteTab(\"process\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tProcess\r\n\t\t\t\t\t\t\t</Button> */}\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"queues\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => setCurrentselecteTab(\"queues\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tQueues\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"agents\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetCurrentselecteTab(\"agents\");\r\n\t\t\t\t\t\t\t\t\tgetIdelAgentsList(END_POINT.AGENTS_LIST, { status: \"IDLE\", active: true });\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tAgents\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t{/* {!state.sdkConfig?.disableBlindTransfer && ( */}\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tvariant={currentselecteTab === \"others\" ? \"contained\" : \"outlined\"}\r\n\t\t\t\t\t\t\t\tonClick={() => setCurrentselecteTab(\"others\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tOthers\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t{/* )} */}\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{(isProcessAndQueuesListLoading ||\r\n\t\t\t\t\t\t\tisIdleAgentsListLoading ||\r\n\t\t\t\t\t\t\tisHospitalsServicesListLoading ||\r\n\t\t\t\t\t\t\tisTransferLoading) && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\theight: \"80px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<CircularProgress />\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!isIdleAgentsListLoading &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\t!isTransferLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"process\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns:\r\n\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process &&\r\n\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"repeat(2, 1fr)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"repeat(1, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{processAndQueuesList?.data?.process &&\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.map((process: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<MemoryOutlined sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{process.process_name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : \"\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleTransferCall(process, \"PROCESS\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tp: 2,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Upcoming color=\"primary\" />\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"20px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Process Found\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!isIdleAgentsListLoading &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\t!isTransferLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"queues\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns:\r\n\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue &&\r\n\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue?.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"repeat(2, 1fr)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"repeat(1, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{processAndQueuesList?.data?.queue &&\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue?.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.queue?.map((queue: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Airlines sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{queue.queue_name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{processAndQueuesList?.data?.process?.find(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(process: any) => process.process_id === queue.process_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)?.process_name ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"12px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"gray\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\"(\" +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocessAndQueuesList?.data?.process?.find(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(process: any) => process.process_id === queue.process_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)?.process_name +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\")\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : \"\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleTransferCall(queue, \"QUEUE\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tp: 2,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Upcoming color=\"primary\" />\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"20px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Queues Found\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!isIdleAgentsListLoading &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\t!isTransferLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"agents\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns:\r\n\t\t\t\t\t\t\t\t\t\t\tidleAgentsList?.data && idleAgentsList?.data?.length > 0\r\n\t\t\t\t\t\t\t\t\t\t\t\t? \"repeat(2, 1fr)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"repeat(1, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{idleAgentsList?.data && idleAgentsList?.data?.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\tidleAgentsList?.data?.map((agent: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SupportAgent sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{agent.name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : \"\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => handleTransferClick(e, agent, \"AGENT\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tp: 2,\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<Upcoming color=\"primary\" />\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"primary.main\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: \"20px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\tNo Agents Found\r\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t{!isProcessAndQueuesListLoading &&\r\n\t\t\t\t\t\t\t!isIdleAgentsListLoading &&\r\n\t\t\t\t\t\t\t!isHospitalsServicesListLoading &&\r\n\t\t\t\t\t\t\t!isTransferLoading &&\r\n\t\t\t\t\t\t\tcurrentselecteTab === \"others\" && (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"grid\",\r\n\t\t\t\t\t\t\t\t\t\tgridTemplateColumns: \"repeat(2, 1fr)\",\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{hospitalsServicesList?.data &&\r\n\t\t\t\t\t\t\t\t\t\thospitalsServicesList?.data?.length > 0 &&\r\n\t\t\t\t\t\t\t\t\t\thospitalsServicesList?.data?.map((service: any, index: any) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Roofing sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={`${service?.description ?? \"\"}`}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ color: \"text.secondary\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{service.name}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"9px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"gray\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttextOverflow: \"ellipsis\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"160px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{service?.description ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : (service?.phone_number ?? \"\")}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => handleTransferClick(e, { mobile_number: service?.phone_number ?? \"\" }, \"OTHER\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tname=\"others\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel=\"Mobile number\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"tel\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={mobileNumber}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst v = e.target.value;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (/^\\d*$/.test(v)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetMobileNumber(v);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\thtmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinputMode: \"numeric\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxLength: 11,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Enter mobile number\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tautoComplete=\"off\"\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\t\t\t\t\ttitle={state.consultInfo ? \"Please complete or cancel the ongoing consult transfer before proceeding.\" : (mobileNumber ? `Call To - ${mobileNumber}` : \"Enter mobile number\")}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"success\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!!state.consultInfo}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbgcolor: \"action.hover\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => handleTransferClick(e, { mobile_number: mobileNumber ?? \"\" }, \"OTHER\")}\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Call />\r\n\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\r\n\t\t\t{/* Transfer Mode Menu */}\r\n\t\t\t<Menu\r\n\t\t\t\tanchorEl={transferMenuAnchor}\r\n\t\t\t\topen={Boolean(transferMenuAnchor)}\r\n\t\t\t\tonClose={() => setTransferMenuAnchor(null)}\r\n\t\t\t\tanchorOrigin={{ vertical: \"top\", horizontal: \"left\" }}\r\n\t\t\t\ttransformOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n\t\t\t>\r\n\t\t\t\t{blindEnabled && (\r\n\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\tif (pendingTransferData) handleTransferCall(pendingTransferData.data, pendingTransferData.type, \"DEFAULT\");\r\n\t\t\t\t\t\t\tsetTransferMenuAnchor(null);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tsx={{ gap: 1 }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<TransferWithinAStation fontSize=\"small\" color=\"primary\" />\r\n\t\t\t\t\t\tTransfer\r\n\t\t\t\t\t</MenuItem>\r\n\t\t\t\t)}\r\n\t\t\t\t{attendedEnabled && (\r\n\t\t\t\t\t<MenuItem\r\n\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\tif (pendingTransferData) handleTransferCall(pendingTransferData.data, pendingTransferData.type, \"CONSULT\");\r\n\t\t\t\t\t\t\tsetTransferMenuAnchor(null);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tsx={{ gap: 1 }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<RecordVoiceOver fontSize=\"small\" color=\"primary\" />\r\n\t\t\t\t\t\tConsult then Transfer\r\n\t\t\t\t\t</MenuItem>\r\n\t\t\t\t)}\r\n\t\t\t</Menu>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function EndCallDispositionDialog({ open, setOpen, onSubmitDisposition }: any) {\r\n\tconst [getDispositions, data] = useGetRequest();\r\n\r\n\tconst [formData, setFormData] = useState({\r\n\t\tdisposition: { label: \"\", value: \"\", id: 0 },\r\n\t\tfollowUp: { label: \"No\", value: \"N\" },\r\n\t\tcallbackDate: \"\",\r\n\t\tcallbackHrs: \"\",\r\n\t\tcallbackMins: \"\",\r\n\t\tselected_break: false,\r\n\t\tnotes: \"\",\r\n\t});\r\n\tconst followUpOptions = [\r\n\t\t{ label: \"Yes\", value: \"Y\" },\r\n\t\t{ label: \"No\", value: \"N\" },\r\n\t];\r\n\r\n\tconst handleChange = (\r\n\t\tfield: keyof typeof formData,\r\n\t\tvalue: { label: string } | null | string | boolean\r\n\t) => {\r\n\t\tsetFormData((prev) => ({ ...prev, [field]: value }));\r\n\t};\r\n\r\n\tconst handleReset = () => {\r\n\t\tsetFormData({\r\n\t\t\tdisposition: { label: \"\", value: \"\", id: 0 },\r\n\t\t\tfollowUp: { label: \"No\", value: \"N\" },\r\n\t\t\tcallbackDate: \"\",\r\n\t\t\tcallbackHrs: \"\",\r\n\t\t\tcallbackMins: \"\",\r\n\t\t\tselected_break: false,\r\n\t\t\tnotes: \"\",\r\n\t\t});\r\n\t};\r\n\r\n\tconst handleClose = () => {\r\n\t\thandleReset();\r\n\t\tsetOpen(false);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tgetDispositions(END_POINT.DISPOSITIONS);\r\n\t}, []);\r\n\r\n\tconst dispositionsOptions = useMemo(() => {\r\n\t\treturn (\r\n\t\t\tdata?.data?.data\r\n\t\t\t\t?.filter((item: any) => item.name !== \"Resolved\")\r\n\t\t\t\t?.map((item: any) => ({\r\n\t\t\t\t\tlabel: item.name,\r\n\t\t\t\t\tvalue: item.code,\r\n\t\t\t\t\tid: item.disposition_id,\r\n\t\t\t\t}))\r\n\t\t\t\t?.sort((a: any, b: any) => a.label.localeCompare(b.label)) || []\r\n\t\t);\r\n\t}, [data?.data?.data]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"sm\"}\r\n\t\t\t\tfullWidth\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 600 } } }}\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tminWidth: '650px'\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\tsx={{ m: 1 }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{\" \"}\r\n\t\t\t\t\t\t\tCall Disposition\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\tpadding: \"10px\",\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{ display: \"flex\", gap: 2 }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\tvalue={formData.disposition}\r\n\t\t\t\t\t\t\t\toptions={dispositionsOptions}\r\n\t\t\t\t\t\t\t\tgetOptionLabel={(opt) => opt.label}\r\n\t\t\t\t\t\t\t\tonChange={(_, val) => handleChange(\"disposition\", val)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Disposition\"\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\toptions={followUpOptions}\r\n\t\t\t\t\t\t\t\tgetOptionLabel={(opt) => opt.label}\r\n\t\t\t\t\t\t\t\tvalue={formData.followUp}\r\n\t\t\t\t\t\t\t\tonChange={(_, val) => handleChange(\"followUp\", val)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Follow Up\"\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tsx={{ display: \"flex\", gap: 2, mt: 2 }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{/* <Autocomplete\r\n\t\t\t\t\t\t\t\toptions={breakOptions}\r\n\t\t\t\t\t\t\t\tgetOptionLabel={(opt) => opt.label}\r\n\t\t\t\t\t\t\t\tvalue={formData.selected_break}\r\n\t\t\t\t\t\t\t\tonChange={(_, val) => handleChange(\"selected_break\", val)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\t\t{...params}\r\n\t\t\t\t\t\t\t\t\t\tlabel=\"Break\"\r\n\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t/> */}\r\n\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\tflex: \"1\",\r\n\t\t\t\t\t\t\t\t\tborder: \"1px solid #bdbdbd\",\r\n\t\t\t\t\t\t\t\t\tborderRadius: \"5px\",\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Checkbox\r\n\t\t\t\t\t\t\t\t\tname=\"selected_break\"\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tchecked={formData.selected_break}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => {\r\n\t\t\t\t\t\t\t\t\t\thandleChange(\"selected_break\", event.target.checked);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\tinput: { \"aria-label\": \"controlled\" },\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>{\" \"}\r\n\t\t\t\t\t\t\t\tMark as break\r\n\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t{formData?.followUp?.label?.toLowerCase() === \"yes\" ? (\r\n\t\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tlabel=\"Callback Date\"\r\n\t\t\t\t\t\t\t\t\ttype=\"date\"\r\n\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\tinputLabel: { shrink: true },\r\n\t\t\t\t\t\t\t\t\t\thtmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\tmin: new Date().toISOString().split(\"T\")[0],\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tvalue={formData.callbackDate}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\t\thandleChange(\"callbackDate\", e.target.value);\r\n\t\t\t\t\t\t\t\t\t\tconst isToday = e.target.value === new Date().toISOString().split(\"T\")[0];\r\n\t\t\t\t\t\t\t\t\t\tif (isToday) {\r\n\t\t\t\t\t\t\t\t\t\t\tconst now = new Date();\r\n\t\t\t\t\t\t\t\t\t\t\tconst currentHr = now.getHours();\r\n\t\t\t\t\t\t\t\t\t\t\tif (formData.callbackHrs && Number(formData.callbackHrs) < currentHr) {\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleChange(\"callbackHrs\", \"\");\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleChange(\"callbackMins\", \"\");\r\n\t\t\t\t\t\t\t\t\t\t\t} else if (formData.callbackHrs && Number(formData.callbackHrs) === currentHr && formData.callbackMins && Number(formData.callbackMins) < now.getMinutes()) {\r\n\t\t\t\t\t\t\t\t\t\t\t\thandleChange(\"callbackMins\", \"\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<Box sx={{ flex: 1 }}></Box>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t{formData?.followUp?.label?.toLowerCase() === \"yes\" && (\r\n\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\tsx={{ display: \"flex\", gap: 2, mt: 2 }}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\toptions={Array.from({ length: 24 }, (_, i) => String(i).padStart(2, \"0\"))}\r\n\t\t\t\t\t\t\t\t\tgetOptionDisabled={(option) => {\r\n\t\t\t\t\t\t\t\t\t\tconst isToday = formData.callbackDate === new Date().toISOString().split(\"T\")[0];\r\n\t\t\t\t\t\t\t\t\t\treturn isToday && Number(option) < new Date().getHours();\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tvalue={formData.callbackHrs || null}\r\n\t\t\t\t\t\t\t\t\tonChange={(_, value) => handleChange(\"callbackHrs\", value || \"\")}\r\n\t\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t\t<TextField {...params} label=\"Hours (0-23)\" />\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<Autocomplete\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\toptions={Array.from({ length: 60 }, (_, i) => String(i).padStart(2, \"0\"))}\r\n\t\t\t\t\t\t\t\t\tgetOptionDisabled={(option) => {\r\n\t\t\t\t\t\t\t\t\t\tconst isToday = formData.callbackDate === new Date().toISOString().split(\"T\")[0];\r\n\t\t\t\t\t\t\t\t\t\tconst now = new Date();\r\n\t\t\t\t\t\t\t\t\t\tconst isCurrentHr = isToday && formData.callbackHrs === String(now.getHours()).padStart(2, \"0\");\r\n\t\t\t\t\t\t\t\t\t\treturn isCurrentHr && Number(option) < now.getMinutes();\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tvalue={formData.callbackMins || null}\r\n\t\t\t\t\t\t\t\t\tonChange={(_, value) => handleChange(\"callbackMins\", value || \"\")}\r\n\t\t\t\t\t\t\t\t\trenderInput={(params) => (\r\n\t\t\t\t\t\t\t\t\t\t<TextField {...params} label=\"Minutes (0-59)\" />\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\tsx={{ flex: 1 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t<Box sx={{ mt: 2 }}>\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tlabel=\"Notes\"\r\n\t\t\t\t\t\t\t\tmultiline\r\n\t\t\t\t\t\t\t\tminRows={2}\r\n\t\t\t\t\t\t\t\tmaxRows={4}\r\n\t\t\t\t\t\t\t\tvalue={formData.notes}\r\n\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"notes\", e.target.value)}\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{ textAlign: \"right\", m: 2 }}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\tsize=\"large\"\r\n\t\t\t\t\t\t\tonClick={handleClose}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\tpx: 2,\r\n\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\ttextTransform: \"capitalize\",\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tcancel\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"contained\"\r\n\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\tsize=\"large\"\r\n\t\t\t\t\t\t\tonClick={() => onSubmitDisposition(formData)}\r\n\t\t\t\t\t\t\tsx={{ px: 2, borderRadius: \"10px\", textTransform: \"capitalize\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tSubmit\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function ProcessorListDialog({\r\n\topen,\r\n\tsetOpen,\r\n\tprocessList = null,\r\n\thandleSelectedProcessor,\r\n}: any) {\r\n\tconst handleClose = () => {\r\n\t\tsetOpen(false);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={false}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 500 } } }}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography variant=\"body1\"> Process List</Typography>\r\n\t\t\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\tpadding: \"6px 10px\",\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{processList.length > 0 ?\r\n\t\t\t\t\t\t\tprocessList?.map((process: any, index: any) => (\r\n\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\tp: 1,\r\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\t\t\t\tpadding: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\tmargin: \"10px 0px\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\r\n\t\t\t\t\t\t\t\t\t\t\"&:hover\": { bgcolor: \"action.selected\" },\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\thandleSelectedProcessor(process);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\tvariant=\"body1\"\r\n\t\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\t\tmx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\twidth: \"200px\",\r\n\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"250px\",\r\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<SupportAgent sx={{ marginRight: \"4px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t{process.process_name}\r\n\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t: null}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n\r\nexport function CallHistoryDialog({ open, setOpen }: any) {\r\n\tconst handleClose = () => {\r\n\t\tsetOpen(false);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Dialog\r\n\t\t\t\topen={open}\r\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\r\n\t\t\t\taria-describedby=\"alert-dialog-description\"\r\n\t\t\t\tmaxWidth={\"md\"}\r\n\t\t\t\tslotProps={{ paper: { sx: { minWidth: 500 } } }}\r\n\t\t\t>\r\n\t\t\t\t<Paper sx={{ borderRadius: 2 }}>\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\tpadding: \"4px 16px\",\r\n\t\t\t\t\t\t\tboxShadow: \"0px 1px 2px #f5f5f5ff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography variant=\"body1\"> Call History</Typography>\r\n\t\t\t\t\t\t<IconButton onClick={handleClose}>\r\n\t\t\t\t\t\t\t<Close />\r\n\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tboxShadow: \"1px 1px 4px #d3d3d3ff\",\r\n\t\t\t\t\t\t\tmargin: \"10px\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\t\t\tfontSize: \"16px\",\r\n\t\t\t\t\t\t\tfontWeight: \"bold\",\r\n\t\t\t\t\t\t\tp: 6,\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\tComing Soon...\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Paper>\r\n\r\n\t\t\t</Dialog>\r\n\t\t</>\r\n\t);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { type AxiosRequestConfig } from \"axios\";\r\nimport { useCallback, useReducer } from \"react\";\r\n\r\nimport axiosInstance from \"./axios\";\r\nimport { useToast } from \"./toastMessage\";\r\nimport {\r\n\tRequestResult,\r\n\tUseGetRequest,\r\n\tRequestOptions,\r\n\tUsePostRequest,\r\n\tUsePutRequest,\r\n\tUseDeleteRequest,\r\n\tUsePatchRequest,\r\n} from \"../../types\";\r\n\r\nconst initialState = {\r\n\tisLoading: false,\r\n\tisSuccess: false,\r\n\tisError: false,\r\n\terror: null,\r\n\tdata: null,\r\n};\r\n\r\nconst reducer = (state: typeof initialState, action: { type: string; payload: any }) => {\r\n\tif (action.type === \"isLoading\") {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisLoading: action.payload,\r\n\t\t};\r\n\t} else if (action.type === \"isSuccess\") {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisSuccess: true,\r\n\t\t\tdata: action.payload,\r\n\t\t};\r\n\t} else if (action.type === \"isError\") {\r\n\t\treturn {\r\n\t\t\t...state,\r\n\t\t\tisError: true,\r\n\t\t\terror: action.payload,\r\n\t\t};\r\n\t} else if (action.type === \"reset\") {\r\n\t\treturn {\r\n\t\t\tisLoading: false,\r\n\t\t\tisSuccess: false,\r\n\t\t\tisError: false,\r\n\t\t\terror: null,\r\n\t\t\tdata: null,\r\n\t\t};\r\n\t}\r\n\tthrow Error(\"Unknown action.\");\r\n};\r\n\r\nexport const useGetRequest = <T = UseGetRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst getRequest = useCallback(\r\n\t\t(url: string, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.get(url, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, config);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, config);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, config);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [getRequest, state];\r\n};\r\n\r\nexport const usePostRequest = <T = UsePostRequest>(\r\n\tprops: RequestOptions = {}\r\n): [\r\n\t(_url: string, _payload: T, _config?: AxiosRequestConfig) => Promise<any>,\r\n\tRequestResult<T>,\r\n] => {\r\n\tconst { onSuccess = null, onError = null, disabledSuccessToast = false } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst postRequest = useCallback(\r\n\t\tasync (url: string, payload: T, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\ttry {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst res = await axiosInstance.post(url, payload, config);\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonSuccess?.(res.data, payload);\r\n\t\t\t\t\tif (!disabledSuccessToast) {\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"success\");\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (err: any) {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, payload);\r\n\t\t\t\t}\r\n\t\t\t} finally {\r\n\t\t\t\tdispatch({\r\n\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\tpayload: false,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [postRequest, state];\r\n};\r\n\r\nexport const usePutRequest = <T = UsePutRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _payload: T, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst putRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.put(url, payload, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, payload);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, payload);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, payload);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [putRequest, state];\r\n};\r\n\r\nexport const useDeleteRequest = <T = UseDeleteRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst deleteRequest = useCallback(\r\n\t\t(url: string, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.delete(url, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, config);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, config);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, config);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [deleteRequest, state];\r\n};\r\n\r\nexport const usePatchRequest = <T = UsePatchRequest>(\r\n\tprops: RequestOptions = {}\r\n): [(_url: string, _payload: T, _config?: AxiosRequestConfig) => void, RequestResult<T>] => {\r\n\tconst { onSuccess = null, onError = null } = props;\r\n\r\n\tconst { showToast } = useToast();\r\n\r\n\tconst [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n\tconst patchRequest = useCallback(\r\n\t\t(url: string, payload: T, config = {}) => {\r\n\t\t\tdispatch({\r\n\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\tpayload: true,\r\n\t\t\t});\r\n\r\n\t\t\taxiosInstance\r\n\t\t\t\t.patch(url, payload, config)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res.data?.success) {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isSuccess\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tonSuccess?.(res.data, payload);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\t\tpayload: res.data,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tshowToast(res.data?.message, \"error\");\r\n\r\n\t\t\t\t\t\tonError?.(res.data, payload);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconst error = {\r\n\t\t\t\t\t\tstatus: err.response?.status ?? 500,\r\n\t\t\t\t\t\tmessage:\r\n\t\t\t\t\t\t\terr.response?.data?.detail ||\r\n\t\t\t\t\t\t\terr.response?.data?.message ||\r\n\t\t\t\t\t\t\terr.message ||\r\n\t\t\t\t\t\t\t\"An unknown error occurred\",\r\n\t\t\t\t\t\tdata: err.response?.data ?? null,\r\n\t\t\t\t\t\tstatusText: err.response?.statusText ?? \"\",\r\n\t\t\t\t\t\tcode: err?.code ?? \"\",\r\n\t\t\t\t\t\tname: err?.name ?? \"\",\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshowToast(error.message, \"error\");\r\n\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isError\",\r\n\t\t\t\t\t\tpayload: error,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tonError?.(error, payload);\r\n\t\t\t\t})\r\n\t\t\t\t.finally(() => {\r\n\t\t\t\t\tdispatch({\r\n\t\t\t\t\t\ttype: \"isLoading\",\r\n\t\t\t\t\t\tpayload: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\t[onSuccess, onError, showToast]\r\n\t);\r\n\r\n\treturn [patchRequest, state];\r\n};\r\n","import { SxProps, useTheme } from \"@mui/material\";\r\n\r\nconst useStyles = ({\r\n disabled,\r\n enabled,\r\n outlined,\r\n}: {\r\n disabled: SxProps;\r\n enabled: SxProps;\r\n outlined: SxProps;\r\n}): {\r\n disabled: SxProps;\r\n enabled: SxProps;\r\n outlined: SxProps;\r\n} => {\r\n const theme = useTheme();\r\n return {\r\n disabled: {\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n minWidth: \"40px !important\",\r\n borderRadius: \"16px\",\r\n border: `1px solid rgb(206, 204, 204)`,\r\n height: \"40px\",\r\n \"&:hover\": {\r\n boxShadow: \" 0px 2px 2px rgba(0, 0, 0, 0.79)\",\r\n border: `1px solid ${theme.palette.primary.main}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"primary.main\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n ...disabled,\r\n },\r\n enabled: {\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n minWidth: \"40px !important\",\r\n borderRadius: \"16px\",\r\n boxShadow: \" 0px 2px 1px rgba(0, 0, 0, 0.507)\",\r\n border: `1px solid ${theme.palette.primary.main}`,\r\n height: \"40px\",\r\n \"&:hover\": {\r\n boxShadow: \" 0px 2px 1px rgba(0, 0, 0, 0.507)\",\r\n border: `1px solid ${theme.palette.primary.main}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"primary.main\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n ...enabled,\r\n },\r\n outlined: {\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n minWidth: \"40px !important\",\r\n borderRadius: \"16px\",\r\n backgroundColor: theme.palette.grey[200],\r\n boxShadow: `0px 2px 1px ${theme.palette.primary.light}`,\r\n border: `0px solid ${theme.palette.primary.main}`,\r\n height: \"40px\",\r\n \"&:hover\": {\r\n boxShadow: `0px 2px 1px ${theme.palette.primary.main}`,\r\n border: `0px solid ${theme.palette.primary.main}`,\r\n },\r\n \"&:active\": {\r\n bgcolor: \"primary.main\",\r\n boxShadow: `inset 1px -2px 4px ${theme.palette.primary.light}`,\r\n },\r\n ...outlined,\r\n },\r\n };\r\n};\r\n\r\nexport default useStyles;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { type MouseEvent, type TouchEvent, useCallback, useRef, useState } from \"react\";\r\n\r\ninterface Position {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\ninterface UseDraggableReturn {\r\n\tposition: Position;\r\n\tisDragging: boolean;\r\n\tdragRef: any;\r\n\thandleMouseDown: (_e: MouseEvent<HTMLDivElement>) => void;\r\n\thandleTouchStart: (_e: TouchEvent<HTMLDivElement>) => void;\r\n}\r\n\r\nexport function useDraggable(\r\n\tinitialPosition: Position,\r\n\tonPositionChange?: (_position: Position) => void\r\n): UseDraggableReturn {\r\n\tconst [position, setPosition] = useState<Position>(initialPosition);\r\n\r\n\tconst [isDragging, setIsDragging] = useState(false);\r\n\r\n\tconst dragRef = useRef<HTMLDivElement>();\r\n\r\n\tconst dragStart = useRef<Position>({ x: 0, y: 0 });\r\n\r\n\tconst elementStart = useRef<Position>({ x: 0, y: 0 });\r\n\r\n\tconst updatePosition = useCallback(\r\n\t\t(newPosition: Position) => {\r\n\t\t\tconst element = dragRef.current;\r\n\t\t\tif (!element) return;\r\n\r\n\t\t\tconst rect = element.getBoundingClientRect();\r\n\t\t\tconst viewportWidth = window.innerWidth;\r\n\t\t\tconst viewportHeight = window.innerHeight;\r\n\r\n\t\t\tconst constrainedPosition = {\r\n\t\t\t\tx: Math.max(0, Math.min(newPosition.x, viewportWidth - rect.width)),\r\n\t\t\t\ty: Math.max(0, Math.min(newPosition.y, viewportHeight - rect.height)),\r\n\t\t\t};\r\n\r\n\t\t\tsetPosition(constrainedPosition);\r\n\t\t\tonPositionChange?.(constrainedPosition);\r\n\t\t},\r\n\t\t[onPositionChange]\r\n\t);\r\n\r\n\tconst handleStart = useCallback(\r\n\t\t(clientX: number, clientY: number) => {\r\n\t\t\tsetIsDragging(true);\r\n\t\t\tdragStart.current = { x: clientX, y: clientY };\r\n\t\t\telementStart.current = position;\r\n\r\n\t\t\tconst handleMove = (moveClientX: number, moveClientY: number) => {\r\n\t\t\t\tconst deltaX = moveClientX - dragStart.current.x;\r\n\t\t\t\tconst deltaY = moveClientY - dragStart.current.y;\r\n\r\n\t\t\t\tupdatePosition({\r\n\t\t\t\t\tx: elementStart.current.x + deltaX,\r\n\t\t\t\t\ty: elementStart.current.y + deltaY,\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\t\tconst handleMouseMove = (e: globalThis.MouseEvent) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\thandleMove(e.clientX, e.clientY);\r\n\t\t\t};\r\n\r\n\t\t\tconst handleTouchMove = (e: globalThis.TouchEvent) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tconst touch = e.touches[0];\r\n\t\t\t\tif (touch) {\r\n\t\t\t\t\thandleMove(touch.clientX, touch.clientY);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst handleEnd = () => {\r\n\t\t\t\tsetIsDragging(false);\r\n\t\t\t\tdocument.removeEventListener(\"mousemove\", handleMouseMove);\r\n\t\t\t\tdocument.removeEventListener(\"mouseup\", handleEnd);\r\n\t\t\t\tdocument.removeEventListener(\"touchmove\", handleTouchMove);\r\n\t\t\t\tdocument.removeEventListener(\"touchend\", handleEnd);\r\n\t\t\t};\r\n\r\n\t\t\tdocument.addEventListener(\"mousemove\", handleMouseMove);\r\n\t\t\tdocument.addEventListener(\"mouseup\", handleEnd);\r\n\t\t\tdocument.addEventListener(\"touchmove\", handleTouchMove, {\r\n\t\t\t\tpassive: false,\r\n\t\t\t});\r\n\t\t\tdocument.addEventListener(\"touchend\", handleEnd);\r\n\t\t},\r\n\t\t[position, updatePosition]\r\n\t);\r\n\r\n\tconst handleMouseDown = useCallback(\r\n\t\t(e: MouseEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\thandleStart(e.clientX, e.clientY);\r\n\t\t},\r\n\t\t[handleStart]\r\n\t);\r\n\r\n\tconst handleTouchStart = useCallback(\r\n\t\t(e: TouchEvent<HTMLDivElement>) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tconst touch = e.touches[0];\r\n\t\t\tif (touch) {\r\n\t\t\t\thandleStart(touch.clientX, touch.clientY);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[handleStart]\r\n\t);\r\n\r\n\treturn {\r\n\t\tposition,\r\n\t\tisDragging,\r\n\t\tdragRef,\r\n\t\thandleMouseDown,\r\n\t\thandleTouchStart,\r\n\t};\r\n}\r\n","// micController.ts\r\n\r\nexport type MicController = {\r\n\tstart: () => Promise<void>;\r\n\tstop: () => void;\r\n\tmute: () => void;\r\n\tunmute: () => void;\r\n\ttoggleMute: () => void;\r\n\tisMuted: () => boolean;\r\n\tgetStream: () => MediaStream | null;\r\n};\r\n\r\nexport function createMicController(\r\n\tconstraints: MediaStreamConstraints = { audio: true }\r\n): MicController {\r\n\tlet stream: MediaStream | null = null;\r\n\tlet muted = false;\r\n\r\n\tasync function start() {\r\n\t\tif (stream) return; // already started\r\n\t\tstream = await navigator.mediaDevices.getUserMedia(constraints);\r\n\t\t// default: unmuted\r\n\t\tstream.getAudioTracks().forEach((track) => (track.enabled = true));\r\n\t\tmuted = false;\r\n\t}\r\n\r\n\tfunction setEnabled(enabled: boolean) {\r\n\t\tif (!stream) return;\r\n\t\tstream.getAudioTracks().forEach((track) => (track.enabled = enabled));\r\n\t\tmuted = !enabled;\r\n\t}\r\n\r\n\tfunction mute() {\r\n\t\tsetEnabled(false);\r\n\t}\r\n\r\n\tfunction unmute() {\r\n\t\tsetEnabled(true);\r\n\t}\r\n\r\n\tfunction toggleMute() {\r\n\t\tif (muted) {\r\n\t\t\tunmute();\r\n\t\t} else {\r\n\t\t\tmute();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction stop() {\r\n\t\tif (!stream) return;\r\n\t\tstream.getTracks().forEach((t) => t.stop());\r\n\t\tstream = null;\r\n\t\tmuted = false;\r\n\t}\r\n\r\n\tfunction isMuted() {\r\n\t\treturn muted;\r\n\t}\r\n\r\n\tfunction getStream() {\r\n\t\treturn stream;\r\n\t}\r\n\r\n\treturn {\r\n\t\tstart,\r\n\t\tstop,\r\n\t\tmute,\r\n\t\tunmute,\r\n\t\ttoggleMute,\r\n\t\tisMuted,\r\n\t\tgetStream,\r\n\t};\r\n}\r\n","/**\r\n * Audio loader utility for handling MP3 files as buffers/blobs\r\n * This ensures the audio works correctly in bundled npm packages\r\n */\r\n\r\n// Import the MP3 file - bundler will handle this\r\n// @ts-ignore - MP3 module declaration\r\nimport incomingRingtoneUrl from \"../ringtones/incoming.mp3\";\r\n\r\nlet audioBlobUrl: string | null = null;\r\nlet audioBuffer: ArrayBuffer | null = null;\r\n\r\n/**\r\n * Loads the audio file as a blob URL for reliable playback\r\n * @returns Promise<string> - Blob URL or direct URL for the audio file\r\n */\r\nexport async function loadAudioAsBlob(): Promise<string> {\r\n\tif (audioBlobUrl) {\r\n\t\treturn audioBlobUrl;\r\n\t}\r\n\r\n\t// If the URL is already a data URL or absolute URL, use it directly\r\n\tif (\r\n\t\tincomingRingtoneUrl.startsWith(\"data:\") ||\r\n\t\tincomingRingtoneUrl.startsWith(\"http://\") ||\r\n\t\tincomingRingtoneUrl.startsWith(\"https://\") ||\r\n\t\tincomingRingtoneUrl.startsWith(\"blob:\")\r\n\t) {\r\n\t\treturn incomingRingtoneUrl;\r\n\t}\r\n\r\n\t// Try to fetch and convert to blob URL\r\n\ttry {\r\n\t\tconst response = await fetch(incomingRingtoneUrl);\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP ${response.status}: ${response.statusText}`);\r\n\t\t}\r\n\r\n\t\tconst blob = await response.blob();\r\n\r\n\t\t// Verify it's a valid blob\r\n\t\tif (blob.size === 0) {\r\n\t\t\tthrow new Error(\"Empty blob\");\r\n\t\t}\r\n\r\n\t\taudioBlobUrl = URL.createObjectURL(blob);\r\n\t\treturn audioBlobUrl;\r\n\t} catch (error) {\r\n\t\t// If fetch fails, the bundler may have already processed the URL\r\n\t\t// Return the original URL - it should work if tsup processed it correctly\r\n\t\tconsole.error(\"Could not create blob URL, using direct URL:\", error);\r\n\t\treturn incomingRingtoneUrl;\r\n\t}\r\n}\r\n\r\n/**\r\n * Loads the audio file as an ArrayBuffer\r\n * @returns Promise<ArrayBuffer> - Audio file as buffer\r\n */\r\nexport async function loadAudioAsBuffer(): Promise<ArrayBuffer> {\r\n\tif (audioBuffer) {\r\n\t\treturn audioBuffer;\r\n\t}\r\n\r\n\ttry {\r\n\t\tconst response = await fetch(incomingRingtoneUrl);\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`Failed to load audio: ${response.statusText}`);\r\n\t\t}\r\n\r\n\t\taudioBuffer = await response.arrayBuffer();\r\n\t\treturn audioBuffer;\r\n\t} catch (error) {\r\n\t\tconsole.error(\"Error loading audio as buffer:\", error);\r\n\t\tthrow error;\r\n\t}\r\n}\r\n\r\n/**\r\n * Creates an Audio element from the blob URL\r\n * @returns Promise<HTMLAudioElement> - Audio element ready to play\r\n */\r\nexport async function createAudioElement(): Promise<HTMLAudioElement> {\r\n\tconst audio = new Audio();\r\n\r\n\t// Set up audio properties before setting source\r\n\taudio.loop = true;\r\n\taudio.volume = 0.7;\r\n\taudio.preload = \"auto\";\r\n\r\n\t// Try multiple approaches to load the audio\r\n\tlet audioUrl: string = \"\";\r\n\r\n\t// First, try to get blob URL\r\n\ttry {\r\n\t\taudioUrl = await loadAudioAsBlob();\r\n\t} catch (error) {\r\n\t\tconsole.warn(\"Failed to load audio as blob, trying direct URL:\", error);\r\n\t\taudioUrl = incomingRingtoneUrl;\r\n\t}\r\n\r\n\t// Set up error handling with retry logic\r\n\tconst tryLoadAudio = async (url: string): Promise<boolean> => {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tconst checkCanPlay = () => {\r\n\t\t\t\t// Check if audio can play\r\n\t\t\t\tconst canPlay = audio.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA;\r\n\t\t\t\tif (canPlay) {\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Check for errors\r\n\t\t\t\tif (audio.error) {\r\n\t\t\t\t\tresolve(false);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Wait a bit and check again\r\n\t\t\t\tsetTimeout(checkCanPlay, 100);\r\n\t\t\t};\r\n\r\n\t\t\taudio.addEventListener(\"canplay\", () => resolve(true), { once: true });\r\n\t\t\taudio.addEventListener(\"error\", () => resolve(false), { once: true });\r\n\t\t\taudio.src = url;\r\n\t\t\taudio.load();\r\n\r\n\t\t\t// Timeout after 2 seconds\r\n\t\t\tsetTimeout(() => resolve(false), 2000);\r\n\t\t});\r\n\t};\r\n\r\n\t// Try loading with the primary URL\r\n\tlet loaded = await tryLoadAudio(audioUrl);\r\n\r\n\t// If that fails, try the original import URL directly\r\n\tif (!loaded && audioUrl !== incomingRingtoneUrl) {\r\n\t\tloaded = await tryLoadAudio(incomingRingtoneUrl);\r\n\t\tif (loaded) {\r\n\t\t\taudioUrl = incomingRingtoneUrl;\r\n\t\t}\r\n\t}\r\n\r\n\treturn audio;\r\n}\r\n\r\n/**\r\n * Cleanup function to revoke blob URLs and free memory\r\n */\r\nexport function cleanupAudioResources(): void {\r\n\tif (audioBlobUrl) {\r\n\t\tURL.revokeObjectURL(audioBlobUrl);\r\n\t\taudioBlobUrl = null;\r\n\t}\r\n\taudioBuffer = null;\r\n}\r\n\r\n/**\r\n * Get the audio URL (blob URL or fallback to direct URL)\r\n * @returns string - Audio URL\r\n */\r\nexport function getAudioUrl(): string {\r\n\treturn audioBlobUrl || incomingRingtoneUrl;\r\n}\r\n","import React from \"react\";\r\nimport { SDKPermissionGuard } from \"../components/SDKPermissionGuard\";\r\nimport { SDK_MENU_CODES } from \"../permissions\";\r\n\r\n// ─── helper ──────────────────────────────────────────────────────────────────\r\n\r\nfunction withGuard(\r\n\tmenuCodes: string | string[],\r\n\tloader: () => Promise<{ default: React.FC<any> }>,\r\n): React.LazyExoticComponent<React.FC<any>> {\r\n\treturn React.lazy(async () => {\r\n\t\tconst mod = await loader();\r\n\t\tconst Page = mod.default;\r\n\t\tconst Guarded: React.FC<any> = (props) => (\r\n\t\t\t<SDKPermissionGuard menuFeature={menuCodes}>\r\n\t\t\t\t<Page {...props} />\r\n\t\t\t</SDKPermissionGuard>\r\n\t\t);\r\n\t\treturn { default: Guarded };\r\n\t});\r\n}\r\n\r\n// ─── page list ────────────────────────────────────────────────────────────────\r\n// Add new SDK pages here — one entry per page, guard is applied automatically.\r\n\r\nexport const SDKPages = {\r\n\tCallHistory: withGuard(SDK_MENU_CODES.CALL_HISTORY, () => import(\"./callHistory\")),\r\n\tCampaigns: withGuard(SDK_MENU_CODES.CAMPAIGNS, () => import(\"./campaigns\")),\r\n\tLoginReport: withGuard(SDK_MENU_CODES.LOGIN_REPORT, () => import(\"./loginReport\")),\r\n\tCdrReports: withGuard(SDK_MENU_CODES.CDR_REPORT, () => import(\"./cdrReport\")),\r\n\tAgentPerformanceReport: withGuard(SDK_MENU_CODES.AGENT_PERFORMANCE_REPORT, () => import(\"./agentPerformanceReport\")),\r\n\tAgentDetailReport: withGuard(SDK_MENU_CODES.AGENT_DETAIL_REPORT, () => import(\"./agentDetailReport\")),\r\n} as const;\r\n","import { useCallback, useEffect, useRef, useState } from \"react\";\r\n\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport axiosInstance from \"../services/axios\";\r\n\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport { getSession } from \"@react-solutions/vault\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\n\r\nexport interface ConferenceCallPayload {\r\n mobileNumber: string;\r\n lineNumber?: number;\r\n}\r\n\r\nexport interface UseClickToConferenceReturn {\r\n handleStartConferenceCall: (payload: ConferenceCallPayload) => Promise<any>;\r\n isLoading: boolean;\r\n isSuccess: boolean;\r\n isError: boolean;\r\n error: any;\r\n data: any;\r\n}\r\n\r\nexport const useClickToConference = (): UseClickToConferenceReturn => {\r\n const [loading, setLoading] = useState(false);\r\n const [success, setSuccess] = useState(false);\r\n const [isError, setIsError] = useState(false);\r\n const [error, setError] = useState<any>(null);\r\n const [data, setData] = useState<any>(null);\r\n\r\n // Track the line we dialed so we can watch for its socket update\r\n const pendingLineRef = useRef<number | null>(null);\r\n // Track the last seen conference state to detect changes\r\n const prevConferenceRef = useRef<any[]>([]);\r\n\r\n useEffect(() => {\r\n if (pendingLineRef.current === null) return;\r\n\r\n const unsubscribe = sdkStateManager.subscribe(() => {\r\n const state = sdkStateManager.getState();\r\n const targetLine = pendingLineRef.current;\r\n\r\n if (targetLine === null) return;\r\n\r\n const line = (state.conferenceLine as any[])?.find(\r\n (l) => l.line === targetLine,\r\n );\r\n\r\n // Socket has updated the line away from IDLE — conference is live\r\n if (line && line.status !== \"IDLE\") {\r\n pendingLineRef.current = null;\r\n prevConferenceRef.current = [];\r\n sdkStateManager.setOpenConferenceDialog(true);\r\n }\r\n });\r\n\r\n return unsubscribe;\r\n }, [loading]);\r\n\r\n const handleStartConferenceCall = useCallback(\r\n async (payload: ConferenceCallPayload): Promise<any> => {\r\n const state = getSession(STORAGE_KEY) as any;\r\n\r\n if (state?.callData?.status !== \"ONCALL\") {\r\n const msg = \"Conference call requires an active call (ONCALL status)\";\r\n setIsError(true);\r\n setError(new Error(msg));\r\n throw new Error(msg);\r\n }\r\n\r\n const availableLine =\r\n payload.lineNumber != null\r\n ? state?.conferenceLine?.find(\r\n (l: any) => l.line === payload.lineNumber,\r\n )\r\n : state?.conferenceLine\r\n ?.filter((l: any) => l.line !== 1)\r\n ?.find((l: any) => l.status === \"IDLE\" && !l?.isCallStart);\r\n\r\n if (!availableLine) {\r\n const msg = \"No available conference line found\";\r\n setIsError(true);\r\n setError(new Error(msg));\r\n throw new Error(msg);\r\n }\r\n\r\n const requestPayload = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: `CALL${availableLine.line}`,\r\n target: payload.mobileNumber,\r\n line_number: Number(availableLine.line),\r\n userid: state.agentId,\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n\r\n setLoading(true);\r\n setIsError(false);\r\n setError(null);\r\n setSuccess(false);\r\n\r\n // Record which line we are waiting on so the subscriber can watch it\r\n pendingLineRef.current = availableLine.line;\r\n\r\n return axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL, requestPayload)\r\n .then((res) => {\r\n setData(res?.data);\r\n setSuccess(true);\r\n return res?.data;\r\n })\r\n .catch((err) => {\r\n pendingLineRef.current = null;\r\n setIsError(true);\r\n setError(err);\r\n return err?.response?.data;\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n },\r\n [],\r\n );\r\n\r\n return {\r\n handleStartConferenceCall,\r\n isLoading: loading,\r\n isSuccess: success,\r\n isError,\r\n error,\r\n data,\r\n };\r\n};\r\n","import { removeSession } from \"@react-solutions/vault\";\r\n\r\nimport axiosInstance from \"../services/axios\";\r\nimport { END_POINT } from \"../services/endPoint\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\nimport type { EndCallPayload } from \"../hooks/useEndCall\";\r\n\r\n// ─── Types ────────────────────────────────────────────────────────────────────\r\n\r\nexport interface StartCallPayload {\r\n mobileNumber: string;\r\n user?: string;\r\n auto_answer?: boolean;\r\n call_id?: string;\r\n reference_id?: string;\r\n call_source?: string;\r\n caseId?: string;\r\n isWrapup?: boolean;\r\n parentCallUuid?: string;\r\n}\r\n\r\nexport interface ConferenceCallPayload {\r\n mobileNumber: string;\r\n lineNumber?: number;\r\n}\r\n\r\nexport type { EndCallPayload };\r\n\r\nexport type SupervisorMonitorMode = \"listen\" | \"whisper\" | \"barge\";\r\n\r\nexport interface StartMonitoringPayload {\r\n call_id: string;\r\n mode: SupervisorMonitorMode;\r\n supervisor_extension?: string;\r\n agent_extension?: string;\r\n}\r\n\r\nexport interface StopMonitoringPayload {\r\n call_uuid: string;\r\n session_id?: string;\r\n}\r\n\r\nexport interface ChangeModePayload {\r\n call_uuid: string;\r\n mode: SupervisorMonitorMode;\r\n session_id?: string;\r\n}\r\n\r\n// ─── Actions ──────────────────────────────────────────────────────────────────\r\n\r\nexport function clickToCall(payload: StartCallPayload): Promise<any> {\r\n const state = sdkStateManager.getState() as any;\r\n\r\n // if (state?.callData?.status !== \"IDLE\" && state?.callData?.status !== \"ONCALL\"){\r\n // return Promise.reject(new Error(\"Agent is not ready\"));\r\n // }\r\n\r\n const body = {\r\n phone_number: payload.mobileNumber,\r\n user: payload.user ?? state?.agentId ?? \"\",\r\n auto_answer: payload.auto_answer ?? false,\r\n call_id: payload.call_id ?? state?.callData?.call_id ?? \"\",\r\n reference_id: payload.reference_id ?? \"\",\r\n call_source: payload.call_source ?? \"\",\r\n caseId: payload.caseId ?? \"\",\r\n isWrapup: payload.isWrapup ?? false,\r\n parentCallUuid: payload.parentCallUuid ?? \"\",\r\n };\r\n\r\n return axiosInstance\r\n .post(END_POINT.CLICK_TO_CALL, body)\r\n .then((res) => {\r\n try { sdkStateManager.resetConferenceLines(); } catch (_) {}\r\n return res.data;\r\n })\r\n .catch((err) => {\r\n return err?.response?.data;\r\n });\r\n \r\n}\r\n\r\nexport function clickToConference(payload: ConferenceCallPayload): Promise<any> {\r\n const state = sdkStateManager.getState() as any;\r\n\r\n // if (state?.callData?.status !== \"ONCALL\") {\r\n // return Promise.reject(new Error(\"Conference call requires an active call (ONCALL status)\"));\r\n // }\r\n\r\n const availableLine =\r\n payload.lineNumber != null\r\n ? state?.conferenceLine?.find((l: any) => l.line === payload.lineNumber)\r\n : state?.conferenceLine\r\n ?.filter((l: any) => l.line !== 1)\r\n ?.find((l: any) => l.status === \"IDLE\" && !l?.isCallStart);\r\n\r\n if (!availableLine) {\r\n return Promise.reject(new Error(\"No available conference line found\"));\r\n }\r\n\r\n const body = {\r\n action: \"EXTERNAL_CONFERENCE\",\r\n operation: `CALL${availableLine.line}`,\r\n target: payload.mobileNumber,\r\n line_number: Number(availableLine.line),\r\n userid: state.agentId,\r\n process: state.callData?.process_name ?? \"\",\r\n };\r\n\r\n return axiosInstance\r\n .post(END_POINT.CONFERENCE_CALL, body)\r\n .then((res) => {\r\n try { sdkStateManager.setOpenConferenceDialog(true); } catch (_) {}\r\n return res.data;\r\n })\r\n .catch((err) => {\r\n return err?.response?.data;\r\n });\r\n}\r\n\r\nexport async function endCall(options: EndCallPayload = {}): Promise<any> {\r\n const state = sdkStateManager.getState() as any;\r\n\r\n const body = {\r\n call_id: options.call_id ?? state?.callData?.call_id ?? \"\",\r\n agent_id: options.agent_id ?? state?.agentId ?? \"\",\r\n set_followUp: options.set_followUp ?? \"N\",\r\n callback_date: options.callback_date ?? \"\",\r\n callback_hrs: options.callback_hrs ?? 0,\r\n callback_mins: options.callback_mins ?? 0,\r\n mobile_number: options.mobile_number ?? state?.callData?.phone_number ?? \"\",\r\n list_comments: options.list_comments ?? \"\",\r\n call_reference_id: options.call_reference_id ?? state?.callData?.call_id ?? \"\",\r\n is_mark_as_break: options.is_mark_as_break ?? false,\r\n disposition: options.disposition ?? \"RES\",\r\n line_number: options.line_number ?? 0,\r\n reason: options.reason ?? \"normal\",\r\n };\r\n\r\n const res = await axiosInstance.post(END_POINT.END_CALL, body);\r\n sdkStateManager.resetConferenceLines();\r\n sdkStateManager.endCall();\r\n return res.data;\r\n}\r\n\r\nexport async function logout(): Promise<void> {\r\n let logoutError: Error | undefined;\r\n\r\n try {\r\n await axiosInstance.post(END_POINT.AUTH_LOGOUT);\r\n } catch (err: any) {\r\n logoutError = new Error(err?.response?.data?.message || \"Logout failed. Please try again.\");\r\n } finally {\r\n sdkStateManager.clearStorageAndReset();\r\n removeSession(STORAGE_KEY);\r\n }\r\n\r\n if (logoutError) throw logoutError;\r\n}\r\n\r\nexport async function startMonitoring(payload: StartMonitoringPayload): Promise<any> {\r\n const res = await axiosInstance.post(END_POINT.SUPERVISOR_CALL_LISTEN, payload);\r\n return res.data;\r\n}\r\n\r\nexport async function stopMonitoring(payload: StopMonitoringPayload): Promise<any> {\r\n const res = await axiosInstance.post(END_POINT.SUPERVISOR_CALL_LEAVE, payload);\r\n return res.data;\r\n}\r\n\r\nexport async function changeMonitorMode(payload: ChangeModePayload): Promise<any> {\r\n const res = await axiosInstance.post(END_POINT.SUPERVISOR_CALL_CHANGE_MODE, payload);\r\n return res.data;\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAa;AAAb;AAAA;AAAA;AAAO,IAAM,cAAc;AAAA;AAAA;;;ACA3B,IAOa,cAGA,gBAUA;AApBb;AAAA;AAAA;AAOO,IAAM,eAAe;AAGrB,IAAM,iBAAiB;AAAA,MAC5B,UAAU;AAAA,MACV,cAAc;AAAA,MACd,WAAW;AAAA,MACX,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,0BAA0B;AAAA,MAC1B,qBAAqB;AAAA,IACvB;AAEO,IAAM,kBAAkB;AAAA,MAC7B,UAAU;AAAA;AAAA,MAGV,OAAO;AAAA,MACP,eAAe;AAAA,MACf,iBAAiB;AAAA;AAAA,MAIjB,cAAc;AAAA,MACd,eAAe;AAAA,MAEf,YAAY;AAAA,MAEZ,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,eAAe;AAAA;AAAA,MAGf,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,mBAAmB;AAAA;AAAA,MAGnB,0BAA0B;AAAA,MAC1B,4BAA4B;AAAA,MAC5B,4BAA4B;AAAA;AAAA,MAG5B,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,IACtB;AAAA;AAAA;;;ACxDA;AAAA;AAAA;AAOA;AAAA;AAAA;;;ACPA,kBAkBM,iBAiwBO;AAnxBb;AAAA;AAAA;AAAA,mBAAsD;AAUtD;AACA;AAOA,IAAM,kBAAN,MAAsB;AAAA,MAQpB,cAAc;AAPd,4BAAQ;AACR,4BAAQ,aAA+B,CAAC;AACxC,4BAAiB,eAAc;AAE/B,4BAAQ;AACR,4BAAQ;AAGN,aAAK,QAAQ,KAAK,gBAAgB;AAClC,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEQ,kBAA4B;AA/BtC,YAAAA,KAAA;AAgCI,eAAO;AAAA,UACL,eAAe;AAAA,UACf,SAAS;AAAA,UACT,SAAS;AAAA,UACT,sBAAsB;AAAA,UACtB,wBAAwB;AAAA,UACxB,eAAe;AAAA,UACf,WAAW;AAAA,YACT,sBAAsB;AAAA,YACtB,sBAAsB;AAAA,YACtB,oBAAoB;AAAA,YACpB,2BAA2B;AAAA,YAC3B,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,YACjB,2BAA2B;AAAA,YAC3B,sBAAsB;AAAA,YACtB,yBAAyB;AAAA,YACzB,qBAAqB;AAAA,YACrB,aAAa;AAAA,YACb,kBAAkB;AAAA,YAClB,yBAAyB;AAAA,YACzB,mBAAmB;AAAA,YACnB,mBAAmB;AAAA,YACnB,yBAAyB;AAAA,YACzB,UAAU,CAAC;AAAA,YACX,SAAS,CAAC;AAAA,YACV,UAAU,CAAC;AAAA,UACb;AAAA,UACA,WAAW;AAAA,YACT,SAAS;AAAA,YACT,WAAW;AAAA,YACX,cAAc;AAAA,YACd,cAAc;AAAA,YACd,aAAa;AAAA,YACb,IAAI;AAAA,YACJ,UAAU;AAAA,UACZ;AAAA,UACA,eAAe;AAAA,UACf,sBAAsB,EAAE,GAAG,IAAI,GAAG,GAAG;AAAA,UACrC,gBAAgB;AAAA,YACd,KAAGA,MAAA,OAAO,WAAP,gBAAAA,IAAe,cAAa;AAAA,YAC/B,KAAG,YAAO,WAAP,mBAAe,UAAS;AAAA,UAC7B;AAAA,UACA,UAAU;AAAA,YACR,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,MAAM;AAAA,YACN,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,cAAc;AAAA,UAChB;AAAA,UACA,gBAAgB;AAAA,YACd;AAAA,cACE,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,aAAa;AAAA,cACb,aAAa;AAAA,YACf;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,aAAa;AAAA,cACb,aAAa;AAAA,YACf;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,aAAa;AAAA,cACb,aAAa;AAAA,YACf;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,aAAa;AAAA,cACb,aAAa;AAAA,YACf;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,aAAa;AAAA,cACb,aAAa;AAAA,YACf;AAAA,UACF;AAAA,UACA,MAAM;AAAA,UACN,MAAM;AAAA,UACN,aAAa;AAAA,UACb,KAAK;AAAA,UACL,qBAAqB;AAAA,UACrB,iBAAiB;AAAA,UACjB,kBAAkB;AAAA,UAClB,aAAa;AAAA,UACb,cAAc;AAAA,UACd,qBAAqB;AAAA,QACvB;AAAA,MACF;AAAA,MAEQ,kBAAwB;AAtJlC,YAAAA,KAAA;AAuJI,YAAI;AACF,gBAAM,aAAmB,yBAAW,KAAK,WAAW;AACpD,cAAI,QAAQ;AACV,kBAAM,cAAc;AACpB,iBAAK,QAAQ,iCACR,KAAK,QADG;AAAA,cAEX,SAAS,YAAY,WAAW;AAAA,cAChC,eAAe,YAAY,iBAAiB;AAAA,cAC5C,SAAS,YAAY,WAAW;AAAA,cAChC,uBAAsB,2CAAa,yBAAwB;AAAA,cAC3D,yBAAwB,2CAAa,2BAA0B;AAAA,cAC/D,eAAe,YAAY,iBAAiB;AAAA,cAC5C,WAAW,YAAY,aAAa;AAAA,gBAClC,sBAAsB;AAAA,gBACtB,sBAAsB;AAAA,gBACtB,2BAA2B;AAAA,gBAC3B,mBAAmB;AAAA,gBACnB,iBAAiB;AAAA,gBACjB,oBAAoB;AAAA,gBACpB,2BAA2B;AAAA,gBAC3B,sBAAsB;AAAA,gBACtB,yBAAyB;AAAA,gBACzB,qBAAqB;AAAA,gBACrB,aAAa;AAAA,gBACb,kBAAkB;AAAA,gBAClB,yBAAyB;AAAA,gBACzB,mBAAmB;AAAA,gBACnB,mBAAmB;AAAA,gBACnB,yBAAyB;AAAA,gBACzB,UAAU,CAAC;AAAA,gBACX,SAAS,CAAC;AAAA,gBACV,UAAU,CAAC;AAAA,cACb;AAAA,cACA,WAAW,YAAY,aAAa;AAAA,gBAClC,IAAI;AAAA,gBACJ,SAAS;AAAA,gBACT,WAAW;AAAA,gBACX,cAAc;AAAA,gBACd,cAAc;AAAA,gBACd,aAAa;AAAA,gBACb,UAAU;AAAA,cACZ;AAAA,cACA,eAAe,YAAY,iBAAiB;AAAA,cAC5C,sBAAsB,YAAY,wBAAwB;AAAA,gBACxD,GAAG;AAAA,gBACH,GAAG;AAAA,cACL;AAAA,cACA,gBAAgB,YAAY,kBAAkB;AAAA,gBAC5C,KAAGA,MAAA,OAAO,WAAP,gBAAAA,IAAe,cAAa;AAAA,gBAC/B,KAAG,YAAO,WAAP,mBAAe,UAAS;AAAA,cAC7B;AAAA,cACA,UAAU,YAAY,YAAY;AAAA,gBAChC,cAAc;AAAA,gBACd,iBAAiB;AAAA,gBACjB,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR,MAAM;AAAA,gBACN,YAAY;AAAA,gBACZ,cAAc;AAAA,cAChB;AAAA,cACA,gBACE,YAAY,kBACZ,MAAM,QAAQ,YAAY,cAAc,KACxC,YAAY,eAAe,SAAS,IAChC,YAAY,iBACZ,KAAK,MAAM;AAAA,cACjB,aAAa,YAAY;AAAA,cACzB,KAAK,YAAY,OAAO;AAAA,cACxB,qBAAqB,YAAY,uBAAuB;AAAA,cACxD,iBAAiB,YAAY,mBAAmB;AAAA,cAChD,kBAAkB,YAAY,oBAAoB;AAAA,cAClD,eAAc,iBAAY,iBAAZ,YAA4B;AAAA,YAC5C;AAAA,UACF;AAAA,QACF,SAAS,OAAO;AACd,kBAAQ,KAAK,6BAA6B,KAAK;AAAA,QACjD;AAAA,MACF;AAAA,MAEQ,gBAAsB;AAC5B,YAAI;AACF,gBAAM,kBAAkB;AAAA,YACtB,SAAS,KAAK,MAAM;AAAA,YACpB,eAAe,KAAK,MAAM;AAAA,YAC1B,SAAS,KAAK,MAAM;AAAA,YACpB,eAAe,KAAK,MAAM;AAAA,YAC1B,sBAAsB,KAAK,MAAM;AAAA,YACjC,wBAAwB,KAAK,MAAM;AAAA,YACnC,WAAW,KAAK,MAAM;AAAA,YACtB,WAAW,KAAK,MAAM;AAAA,YACtB,eAAe,KAAK,MAAM;AAAA,YAC1B,sBAAsB,KAAK,MAAM;AAAA,YACjC,gBAAgB,KAAK,MAAM;AAAA,YAC3B,UAAU,KAAK,MAAM;AAAA,YACrB,gBAAgB,KAAK,MAAM;AAAA,YAC3B,aAAa,KAAK,MAAM;AAAA,YACxB,KAAK,KAAK,MAAM;AAAA,YAChB,qBAAqB,KAAK,MAAM;AAAA,YAChC,iBAAiB,KAAK,MAAM;AAAA,YAC5B,kBAAkB,KAAK,MAAM;AAAA,YAC7B,cAAc,KAAK,MAAM;AAAA,UAC3B;AACA,uCAAW,KAAK,aAAa,eAAe;AAAA,QAC9C,SAAS,OAAO;AACd,kBAAQ,KAAK,6BAA6B,KAAK;AAAA,QACjD;AAAA,MACF;AAAA,MAEQ,kBAAwB;AAC9B,aAAK,UAAU,QAAQ,CAAC,aAAa,SAAS,CAAC;AAAA,MACjD;AAAA,MAEQ,oBAAoB,QAAgB,UAAwB;AAClE,YAAI,CAAC,UAAU,OAAO,WAAW,YAAY,OAAO,KAAK,EAAE,WAAW,GAAG;AACvE,gBAAM,IAAI,MAAM,uBAAuB;AAAA,QACzC;AACA,YACE,CAAC,YACD,OAAO,aAAa,YACpB,SAAS,KAAK,EAAE,WAAW,GAC3B;AACA,gBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC3C;AACA,aAAK,SAAS,OAAO,KAAK;AAC1B,aAAK,WAAW,SAAS,KAAK;AAAA,MAChC;AAAA,MAEO,WACL,QACA,UACA,SACA,WACA,YACA,WACA,wBACM;AA9RV,YAAAA;AA+RI,aAAK,oBAAoB,QAAQ,QAAQ;AACzC,YACE,CAAC,WACD,OAAO,YAAY,YACnB,QAAQ,KAAK,EAAE,WAAW,GAC1B;AACA,gBAAM,IAAI,MAAM,wBAAwB;AAAA,QAC1C,OAAO;AACL,eAAK,MAAM,UAAU;AACrB,eAAK,MAAM,uBAAuB;AAClC,eAAK,MAAM,yBAAyB;AACpC,eAAK,MAAM,gBAAgB;AAC3B,eAAK,MAAM,sBAAsB,0DAA0B;AAC3D,eAAK,MAAM,YAAY;AAAA,YACrB,sBAAsB;AAAA,YACtB,sBAAsB;AAAA,YACtB,oBAAoB;AAAA,YACpB,2BAA2B;AAAA,YAC3B,iBAAiB;AAAA,YACjB,2BAA2B;AAAA,YAC3B,sBAAsB;AAAA,YACtB,yBAAyB;AAAA,YACzB,qBAAqB;AAAA,YACrB,aAAa;AAAA,YACb,kBAAkB;AAAA,YAClB,yBAAyB;AAAA,YACzB,mBAAmB;AAAA,YACnB,mBAAmB;AAAA,YACnB,yBAAyB;AAAA,YACzB,UAAU,CAAC;AAAA,YACX,SAAS,CAAC;AAAA,YACV,UAAU,CAAC;AAAA,aACR,YACA,yCAAY;AAEjB,eAAK,MAAM,YAAY;AAAA,YACrB,UAAS,uCAAW,YAAW;AAAA,YAC/B,YAAW,uCAAW,cAAa;AAAA,YACnC,eAAc,uCAAW,iBAAgB;AAAA,YACzC,eAAc,uCAAW,iBAAgB;AAAA,YACzC,cAAa,uCAAW,gBAAe;AAAA,YACvC,MAAIA,MAAA,yCAAY,aAAZ,gBAAAA,IAAsB,MAAK,OAAO,WAAW,SAAS,EAAE,IAAI;AAAA,YAChE,WAAU,uCAAW,aAAY;AAAA,UACnC;AACA,eAAK,MAAM,gBAAgB;AAC3B,eAAK,cAAc;AACnB,eAAK,gBAAgB;AAAA,QACvB;AAAA,MACF;AAAA,MAEO,WAAqB;AAC1B,eAAO,mBAAK,KAAK;AAAA,MACnB;AAAA,MAEO,iBAGL;AACA,eAAO,EAAE,QAAQ,KAAK,QAAQ,UAAU,KAAK,SAAS;AAAA,MACxD;AAAA,MACO,kBAAsC;AA3V/C,YAAAA;AA4VI,gBAAOA,MAAA,KAAK,MAAM,kBAAX,gBAAAA,IAA0B;AAAA,MACnC;AAAA,MAEO,UAAU,UAAkC;AACjD,aAAK,UAAU,KAAK,QAAQ;AAC5B,eAAO,MAAM;AACX,gBAAM,QAAQ,KAAK,UAAU,QAAQ,QAAQ;AAC7C,cAAI,QAAQ,IAAI;AACd,iBAAK,UAAU,OAAO,OAAO,CAAC;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcO,WAAW,SAGT;AACP,aAAK,MAAM,UAAU;AACrB,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,wBAAwB,UAA0C;AACvE,aAAK,MAAM,uBAAuB;AAClC,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,kBAAkB,UAA0C;AACjE,aAAK,MAAM,iBAAiB;AAC5B,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,YAAkB;AACvB,aAAK,MAAM,gBAAgB,KAAK,IAAI;AACpC,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,UAAgB;AACrB,aAAK,MAAM,gBAAgB;AAC3B,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,eAAqB;AAC1B,aAAK,MAAM,gBAAgB;AAC3B,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,wBAAwB,MAAqB;AAClD,aAAK,MAAM,uBAAuB;AAClC,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,0BAA0B,MAAqB;AACpD,aAAK,MAAM,yBAAyB;AACpC,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,eAAe,MAAgC;AACpD,aAAK,MAAM,cAAc;AACzB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,gBAAgB,MAA2B;AAChD,aAAK,MAAM,eAAe;AAC1B,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,eAAe,QAAsB;AAC1C,aAAK,MAAM,cAAc;AACzB,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,eAAe,MAA+B;AACnD,aAAK,MAAM,WAAW,kCAAK,KAAK,MAAM,WAAa;AACnD,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,qBAAqB,MAAmC;AAC7D,aAAK,MAAM,iBAAiB,CAAC,GAAG,IAAI;AACpC,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,kBAAkB,MAAiC;AArc5D,YAAAA;AAscI,YACE,CAAC,KAAK,MAAM,kBACZ,CAAC,MAAM,QAAQ,KAAK,MAAM,cAAc,GACxC;AACA,eAAK,MAAM,iBAAiB,KAAK,gBAAgB,EAAE;AAAA,QACrD;AAEA,cAAM,sBAAqBA,MAAA,KAAK,MAAM,mBAAX,gBAAAA,IAA2B;AAAA,UACpD,CAAC,SAA8B;AAC7B,gBAAI,KAAK,SAAS,KAAK,MAAM;AAC3B,qBAAO;AAAA,YACT;AACA,mBAAO;AAAA,UACT;AAAA;AAEF,aAAK,MAAM,iBAAiB;AAC5B,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,uBAA6B;AAClC,aAAK,MAAM,iBAAiB;AAAA,UAC1B;AAAA,YACE,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,aAAa;AAAA,UACf;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,aAAa;AAAA,UACf;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,aAAa;AAAA,UACf;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,aAAa;AAAA,UACf;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,aAAa;AAAA,UACf;AAAA,QACF;AAEA,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA,MAEO,uBAA6B;AAClC,YAAI;AACF,0CAAc,KAAK,WAAW;AAC9B,eAAK,QAAQ,KAAK,gBAAgB;AAClC,eAAK,gBAAgB;AAAA,QACvB,SAAS,OAAO;AACd,kBAAQ,KAAK,oBAAoB,KAAK;AAAA,QACxC;AAAA,MACF;AAAA,MAEO,qBAA4C;AACjD,eAAO,KAAK,MAAM,kBAAkB,CAAC;AAAA,MACvC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,+BACL,oBACM;AACN,aAAK,MAAM,YAAY,kCAClB,KAAK,MAAM,YACX;AAEL,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,uBAA6B;AAClC,cAAM,OAAO,KAAK,kBAAkB;AACpC,aAAK,MAAM,YAAY,iCAClB,KAAK,MAAM,YADO;AAAA,UAErB,sBAAsB,KAAK;AAAA,UAC3B,2BAA2B,KAAK;AAAA,UAChC,yBAAyB,KAAK;AAAA,UAC9B,mBAAmB,KAAK;AAAA,UACxB,mBAAmB,KAAK;AAAA,QAC1B;AACA,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,kBAAkB,UAAqB;AAxkBhD,YAAAA;AAykBI,YAAI,CAAC,SAAU;AAKf,cAAM,OAAuBA,MAAA,SAAS,iBAAT,gBAAAA,IAAuB;AACpD,cAAM,iBAAiB,MAAM,QAAQ,SAAS,WAAW,IAAI,SAAS,cAAc;AAKpF,cAAM,WAAiB;AAAA,UACrB;AAAA,YACE,QAAQ,eAAe;AAAA,YACvB,QAAQ;AAAA,YACR,WAAW;AAAA,UACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMF;AAgDA,aAAK,MAAM,MAAM;AACjB,aAAK,MAAM,kBAAkB;AAC7B,aAAK,MAAM,mBAAmB;AAC9B,aAAK,MAAM,sBAAsB;AAGjC,cAAM,qBAAqB,KAAK,kBAAkB;AAClD,aAAK,+BAA+B,kBAAkB;AAEtD,aAAK,cAAc;AACnB,aAAK,gBAAgB;AAAA,MACvB;AAAA;AAAA;AAAA;AAAA,MAKO,aACL,UACA,SACS;AAlqBb,YAAAA;AAmqBI,cAAM,MAAM,KAAK,MAAM;AACvB,YAAI,CAAC,IAAK,QAAO;AAEjB,cAAM,sBAAsB,IAAI,QAAQ;AACxC,YAAI,CAAC,oBAAqB,QAAO;AACjC,YAAI,CAAC,oBAAoB,QAAS,QAAO;AAEzC,YAAI,CAAC,QAAS,QAAO;AAErB,cAAM,OAAMA,MAAA,oBAAoB,UAApB,gBAAAA,IAA2B;AAAA,UACrC,CAAC,SAAc,KAAK,SAAS;AAAA;AAE/B,eAAO,MAAM,IAAI,UAAU;AAAA,MAC7B;AAAA;AAAA,MAGO,cAAc,YAA6B;AAChD,cAAM,QAAQ,KAAK,MAAM;AACzB,YAAI,CAAC,MAAO,QAAO;AACnB,eAAO,MAAM,SAAS,GAAG,KAAK,MAAM,SAAS,UAAU;AAAA,MACzD;AAAA;AAAA,MAGO,iBAAiB,aAAgC;AACtD,eAAO,YAAY,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC;AAAA,MACtD;AAAA;AAAA,MAGO,kBAAkB,aAAgC;AACvD,eAAO,YAAY,MAAM,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC;AAAA,MACvD;AAAA;AAAA,MAGO,eAAe,MAAuB;AAC3C,cAAM,QAAQ,KAAK,MAAM;AACzB,YAAI,CAAC,MAAO,QAAO;AACnB,YAAI,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,OAAO,EAAG,QAAO;AAC3D,cAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI;AAC/C,eAAO,QAAQ,MAAM,UAAU;AAAA,MACjC;AAAA;AAAA;AAAA;AAAA,MAKO,oBAA6C;AA/sBtD,YAAAA;AAgtBI,cAAM,EAAE,KAAK,oBAAoB,IAAI,KAAK;AAG1C,YAAI,CAAC,uBAAuB,CAAC,KAAK;AAChC,iBAAO;AAAA,YACL,oBAAoB;AAAA,YACpB,sBAAsB;AAAA,YACtB,2BAA2B;AAAA,YAC3B,sBAAsB;AAAA,YACtB,yBAAyB;AAAA,YACzB,qBAAqB;AAAA,YACrB,yBAAyB;AAAA,YACzB,mBAAmB;AAAA,YACnB,mBAAmB;AAAA,YACnB,2BAA2B;AAAA,UAC7B;AAAA,QACF;AAGA,cAAM,gBAAgB,KAAK;AAAA,UACzB;AAAA,UACA,gBAAgB;AAAA,QAClB;AACA,cAAM,mBAAmB,KAAK;AAAA,UAC5B;AAAA,UACA,gBAAgB;AAAA,QAClB;AACA,cAAM,mBAAmB,iBAAiB;AAE1C,cAAM,yBAAyB,CAAC,GAACA,MAAA,KAAK,MAAM,wBAAX,gBAAAA,IAAgC;AAGjE,cAAM,gBAAgB;AACtB,cAAM,gBAAgB;AACtB,cAAM,mBAAmB,oBAAoB,CAAC;AAC9C,cAAM,sBAAsB,KAAK,aAAa,mBAAmB,EAAE;AACnE,cAAM,oBAAoB,KAAK,aAAa,iBAAiB,EAAE;AAG/D,cAAM,iBAAiB,KAAK;AAAA,UAC1B;AAAA,UACA,gBAAgB;AAAA,QAClB;AACA,cAAM,oBAAoB,KAAK;AAAA,UAC7B;AAAA,UACA,gBAAgB;AAAA,QAClB;AACA,cAAM,gBAAgB,KAAK;AAAA,UACzB;AAAA,UACA,gBAAgB;AAAA,QAClB;AAEA,eAAO;AAAA,UACL,oBAAoB,CAAC;AAAA,UACrB,sBAAsB,CAAC;AAAA,UACvB,2BAA2B,CAAC;AAAA,UAC5B,sBAAsB,CAAC;AAAA,UACvB,yBAAyB,CAAC;AAAA,UAC1B,qBAAqB,CAAC;AAAA,UACtB,yBAAyB,CAAC;AAAA,UAC1B,mBAAmB,CAAC;AAAA,UACpB,mBAAmB,CAAC;AAAA,UACpB,2BAA2B;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAEO,IAAM,kBAAkB,IAAI,gBAAgB;AAAA;AAAA;;;ACnxBnD,IAiBM,YACA,YAEO,UACA,UAEA,SAKA;AA5Bb;AAAA;AAAA;AAAA;AAiBA,IAAM,aAAa,MAAG;AAjBtB,UAAAC,KAAA;AAiByB,2BAAAA,MAAA,oCAAAA,IAAiB,eAAjB,mBAA6B,cAA7B,mBAAwC,YAAW;AAAA;AAC5E,IAAM,aAAa,MAAG;AAlBtB,UAAAA,KAAA;AAkByB,2BAAAA,MAAA,oCAAAA,IAAiB,eAAjB,mBAA6B,cAA7B,mBAAwC,gBAAe;AAAA;AAEzE,IAAM,WAAW,WAAW;AAC5B,IAAM,WAAW,WAAW;AAE5B,IAAM,UAAU;AAAA,MACtB,IAAI;AAAA,IACL;AAGO,IAAM,YAAY;AAAA,MACxB,IAAI,QAAQ;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA8B;AAAA,MAC/E,IAAI,cAAc;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAiB;AAAA,MACxE,IAAI,qBAAqB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAkB;AAAA,MAChF,IAAI,gBAAgB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAmB;AAAA,MAC5E,IAAI,YAAY;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAmB;AAAA,MACxE,IAAI,YAAY;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAmB;AAAA,MACxE,IAAI,cAAc;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAa;AAAA,MACpE,IAAI,WAAW;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAqB;AAAA,MACzE,IAAI,SAAS;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA+B;AAAA,MAEjF,IAAI,kBAAkB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA6B;AAAA,MACxF,IAAI,wBAAwB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA+B;AAAA,MAChG,IAAI,kCAAkC;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAmB;AAAA,MAC9F,IAAI,kCAAkC;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAmB;AAAA,MAC9F,IAAI,sBAAsB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAqB;AAAA,MACpF,IAAI,0BAA0B;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAqB;AAAA,MACxF,IAAI,2BAA2B;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAkC;AAAA,MACtG,IAAI,gBAAgB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA4B;AAAA,MACrF,IAAI,oBAAoB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAgC;AAAA,MAC7F,IAAI,kBAAkB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA8B;AAAA,MAEzF,IAAI,cAAc;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAc;AAAA,MACrE,IAAI,eAAe;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAuB;AAAA,MAC/E,IAAI,cAAc;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAe;AAAA,MACtE,IAAI,sBAAsB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA4C;AAAA,MAC3G,IAAI,qBAAqB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA2B;AAAA,MAEzF,IAAI,eAAe;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA2B;AAAA,MACnF,IAAI,uBAAuB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAiC;AAAA,MACjG,IAAI,eAAe;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA2B;AAAA,MACnF,IAAI,qBAAqB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA0B;AAAA,MACxF,IAAI,kBAAkB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA6C;AAAA,MAExG,IAAI,cAAc;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAgB;AAAA;AAAA,MAGvE,IAAI,mBAAmB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA8B;AAAA;AAAA,MAG1F,IAAI,yBAAyB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA0B;AAAA,MAC5F,IAAI,wBAAwB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAyB;AAAA,MAC1F,IAAI,8BAA8B;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAwB;AAAA;AAAA,MAG/F,IAAI,gBAAgB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAkB;AAAA,MAC3E,IAAI,eAAe;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA4B;AAAA,MACpF,mBAAmB,CAAC,cAAsB,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,oBAAoB,SAAS;AAAA;AAAA,MAGnG,IAAI,oBAAoB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAqB;AAAA,MAClF,IAAI,mBAAmB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAqB;AAAA,MACjF,qBAAqB,CAAC,OAAwB,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,qBAAqB,EAAE;AAAA,MACjG,kBAAkB,CAAC,OAAwB,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,qBAAqB,EAAE;AAAA,MAC9F,oBAAoB,CAAC,OAAwB,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,qBAAqB,EAAE;AAAA,MAChG,iBAAiB,CAAC,OAAwB,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,qBAAqB,EAAE;AAAA,MAC7F,mBAAmB,CAAC,OAAwB,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,qBAAqB,EAAE;AAAA,MAC/F,iBAAiB,CAAC,eAAgC,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,qBAAqB,UAAU;AAAA,MAC7G,uBAAuB,CAAC,YAA6B,WAA4B,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,qBAAqB,UAAU,UAAU,MAAM;AAAA,MAC5J,wBAAwB,CAAC,YAA6B,WAA4B,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,qBAAqB,UAAU,UAAU,MAAM;AAAA,MAC7J,8BAA8B,CAAC,eAAgC,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,qBAAqB,UAAU;AAAA,MAC1H,gCAAgC,CAAC,eAAgC,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,qBAAqB,UAAU;AAAA,MAC5H,8BAA8B,CAAC,eAAgC,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,qBAAqB,UAAU;AAAA;AAAA,MAG1H,IAAI,eAAe;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAyB;AAAA,MACjF,IAAI,sBAAsB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAgC;AAAA,MAC/F,6BAA6B,CAAC,YAAoB,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,gCAAgC,OAAO;AAAA,MACrH,0CAA0C,CAAC,YAAoB,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,gCAAgC,OAAO;AAAA,MAClI,IAAI,4BAA4B;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAsC;AAAA;AAAA,MAG3G,IAAI,aAAa;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAuB;AAAA,MAC7E,IAAI,qBAAqB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA+B;AAAA,MAC7F,IAAI,0BAA0B;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAoC;AAAA;AAAA,MAGvG,IAAI,aAAa;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAW;AAAA,MACjE,IAAI,gBAAgB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAiB;AAAA;AAAA,MAG1E,IAAI,2BAA2B;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAqC;AAAA,MACzG,IAAI,kCAAkC;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAA4C;AAAA,MACvH,IAAI,wCAAwC;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAkD;AAAA,MACnI,qBAAqB,CAAC,YAAoB,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE,gCAAgC,OAAO;AAAA;AAAA;AAAA,MAI7G,IAAI,iBAAiB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAiB;AAAA,MAC3E,IAAI,gBAAgB;AAAE,eAAO,GAAG,WAAW,CAAC,GAAG,QAAQ,EAAE;AAAA,MAAiB;AAAA,IAC3E;AAAA;AAAA;;;AC9GA,SAAS,eAAuB;AARhC,MAAAC;AASC,UAAOA,MAAA,gBAAgB,gBAAgB,MAAhC,OAAAA,MAAqC;AAC7C;AAEA,SAAS,sBAAqC;AAZ9C,MAAAA,KAAA;AAaC,QAAM,WAAW,aAAAC,QAAM,OAAO;AAAA;AAAA,IAE7B,SAAS;AAAA,MACR,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,gBAAe,MAAAD,MAAA,gBAAgB,eAAe,MAA/B,gBAAAA,IAAkC,aAAlC,YAA8C;AAAA,MAC7D,cAAa,2BAAgB,eAAe,MAA/B,mBAAkC,WAAlC,YAA4C;AAAA,MACzD,eAAe,gBACX,cAAc,WAAW,SAAS,IAAI,gBAAgB,UAAU,aAAa,KAC9E;AAAA,IACJ;AAAA,IACA,SAAS;AAAA,IACT,iBAAiB;AAAA,EAClB,CAAC;AAED,WAAS,aAAa,QAAQ;AAAA,IAC7B,CAAC,WAAuC;AACvC,YAAM,QAAQ,aAAa;AAE3B,UAAI,SAAS,OAAO,SAAS;AAE5B,cAAM,YAAY,MAAM,WAAW,SAAS,IAAI,QAAQ,UAAU,KAAK;AACvE,eAAO,QAAQ,gBAAgB;AAAA,MAChC;AAGA,cAAQ,IAAI,gBAAgB;AAAA,QAC3B,KAAK,OAAO;AAAA,QACZ,QAAQ,OAAO;AAAA,QACf,UAAU,CAAC,CAAC;AAAA,QACZ,uBAAuB,+BAAO,WAAW;AAAA,QACzC,SAAS;AAAA,UACR,eAAe,OAAO,QAAQ;AAAA,UAC9B,eAAe,OAAO,QAAQ,aAAa;AAAA,UAC3C,aAAa,OAAO,QAAQ,WAAW;AAAA,QACxC;AAAA,MACD,CAAC;AAED,MAAC,OAAe,WAAW,EAAE,YAAW,oBAAI,KAAK,GAAE,QAAQ,EAAE;AAE7D,aAAO;AAAA,IACR;AAAA,IACA,CAAC,UAAsB;AACtB,cAAQ,MAAM,8BAA8B,KAAK;AACjD,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC5B;AAAA,EACD;AAEA,WAAS,aAAa,SAAS;AAAA,IAC9B,CAAC,aAA4B;AAC5B,aAAO;AAAA,IACR;AAAA,IACA,OAAO,UAAsB;AAjE/B,UAAAA;AAkEG,YAAM,kBAAkB,MAAM;AAE9B,YAAIA,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAW,OAAO,CAAC,gBAAgB,QAAQ;AAC9D,wBAAgB,aAAa;AAC7B,gBAAQ,KAAK,2CAA2C;AAAA,MACzD;AAEA,UAAI,CAAC,MAAM,UAAU;AACpB,gBAAQ,MAAM,kBAAkB,MAAM,OAAO;AAC7C,cAAM,UAAU;AAAA,MACjB;AAEA,UAAI,MAAM,YAAY,MAAM,SAAS,UAAU,KAAK;AACnD,gBAAQ,MAAM,iBAAiB,MAAM,SAAS,QAAQ,MAAM,SAAS,IAAI;AACzE,cAAM,UAAU;AAAA,MACjB;AAEA,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC5B;AAAA,EACD;AAEA,SAAO;AACR;AAxFA,sBAIM,eAEA,iBAoFA,eAEC;AA5FP;AAAA;AAAA;AAAA,mBAA4F;AAE5F;AAEA,IAAM,iBAAgB,qBAAgB,gBAAgB,MAAhC,YAAqC;AAE3D,IAAM,kBAAkB;AAoFxB,IAAM,gBAA+B,oBAAoB;AAEzD,IAAO,gBAAQ;AAAA;AAAA;;;AC5Ff,kBACA,iBA+BE,oBAzBI,cAEA,WAMO,UAKA;AApBb;AAAA;AAAA;AAAA,mBAA+D;AAC/D,sBAA4C;AA+B1C;AAzBF,IAAM,mBAAe,4BAA4C,MAAS;AAE1E,IAAM,YAA8B;AAAA,MACnC,WAAW,CAAC,SAAS,aAAa;AACjC,gBAAQ,KAAK,4BAA4B,8BAAY,MAAM,KAAK,OAAO,EAAE;AAAA,MAC1E;AAAA,IACD;AAEO,IAAM,WAAW,MAAM;AAC7B,YAAM,UAAM,yBAAW,YAAY;AACnC,aAAO,oBAAO;AAAA,IACf;AAEO,IAAM,gBAAgB,CAAC,EAAE,SAAS,MAA+B;AACvE,YAAM,CAAC,MAAM,OAAO,QAAI,uBAAS,KAAK;AACtC,YAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,EAAE;AACzC,YAAM,CAAC,UAAU,WAAW,QAAI,uBAAqB,MAAM;AAE3D,YAAM,YAAY,CAAC,KAAa,MAAkB,WAAW;AAC5D,mBAAW,GAAG;AACd,oBAAY,GAAG;AACf,gBAAQ,IAAI;AAAA,MACb;AAEA,aACC,6CAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,UAAU,GACxC;AAAA;AAAA,QACD;AAAA,UAAC;AAAA;AAAA,YACA;AAAA,YACA,OAAO;AAAA,YACP,kBAAkB;AAAA,YAClB,SAAS,MAAM,QAAQ,KAAK;AAAA,YAC5B,cAAc,EAAE,UAAU,OAAO,YAAY,QAAQ;AAAA,YAErD;AAAA,cAAC;AAAA;AAAA,gBACA,SAAQ;AAAA,gBACR;AAAA,gBACA,SAAS,MAAM,QAAQ,KAAK;AAAA,gBAC5B,IAAI,EAAE,OAAO,OAAO;AAAA,gBAEnB;AAAA;AAAA,YACF;AAAA;AAAA,QACD;AAAA,SACD;AAAA,IAEF;AAAA;AAAA;;;ACpDA,IAAAE,eAIa;AAJb;AAAA;AAAA;AAAA,IAAAA,gBAAoC;AACpC;AAGO,IAAM,mBAAmB,MAAgB;AAJhD,UAAAC,KAAA;AAKC,YAAM,WAAW,gBAAgB,SAAS;AAC1C,YAAM,EAAE,YAAY,cAAc,QAAQ,cAAc,UAAU,SAAS,aAAa,IACvF,SAAS;AACV,YAAM,kBAAkB;AAAA,QACvB;AAAA,QACA;AAAA,QACA,iBAAiB;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,mBAAkB,MAAAA,MAAA,SAAS,wBAAT,gBAAAA,IAA8B,qBAA9B,YAAkD;AAAA,QACpE,aAAa,SAAS;AAAA,MACvB;AACA,YAAM,CAAC,UAAU,WAAW,QAAI,wBAAmB,eAAe;AAElE,mCAAU,MAAM;AACf,cAAM,cAAc,gBAAgB,UAAU,MAAM;AAtBtD,cAAAA,KAAAC;AAuBG,gBAAM,QAAQ,gBAAgB,SAAS;AACvC,gBAAM,EAAE,YAAAC,aAAY,cAAAC,eAAc,QAAAC,SAAQ,cAAAC,eAAc,UAAAC,WAAU,SAAAC,UAAS,cAAAC,eAAc,iBAAiB,IACzG,MAAM;AACP,gBAAM,kBAAkB;AAAA,YACvB,cAAAH;AAAA,YACA,QAAAD;AAAA,YACA,iBAAiBG;AAAA,YACjB,UAAAD;AAAA,YACA,YAAAJ;AAAA,YACA,cAAAC;AAAA,YACA,cAAAK;AAAA,YACA,mBAAkBP,MAAA,+CAAoBD,MAAA,MAAM,wBAAN,gBAAAA,IAA2B,qBAA/C,OAAAC,MAAmE;AAAA,YACrF,aAAa,MAAM;AAAA,UACpB;AACA,sBAAY,eAAe;AAAA,QAC5B,CAAC;AAED,eAAO;AAAA,MACR,GAAG,CAAC,CAAC;AAEL,aAAO;AAAA,IACR;AAAA;AAAA;;;AC5CA,IAAAQ,gBAMQC,qBADK;AALb;AAAA;AAAA;AAAA,IAAAD,iBAAqB;AACrB;AAKQ,IAAAC,sBAAA;AADD,IAAM,kBAAc,qBAAuB,CAAC,EAAE,SAAS,MAAM;AACnE,aAAO,6CAAC,iBAAe,UAAS;AAAA,IACjC,CAAC;AAED,gBAAY,cAAc;AAAA;AAAA;;;ACInB,SAAS,oBAAwC;AAbxD,MAAAC,KAAA;AAcE,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,MAAM,gBAAgB,SAAS,CAAC;AAEnE,gCAAU,MAAM;AACd,UAAM,cAAc,gBAAgB,UAAU,MAAM;AAClD,eAAS,gBAAgB,SAAS,CAAC;AAAA,IACrC,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAgB;AAAA,IACpB,CAAC,eAAuB,gBAAgB,cAAc,UAAU;AAAA;AAAA,IAEhE,CAAC,MAAM,eAAe;AAAA,EACxB;AAEA,QAAM,uBAAmB;AAAA,IACvB,CAAC,gBAA0B,gBAAgB,iBAAiB,WAAW;AAAA;AAAA,IAEvE,CAAC,MAAM,eAAe;AAAA,EACxB;AAEA,QAAM,wBAAoB;AAAA,IACxB,CAAC,gBAA0B,gBAAgB,kBAAkB,WAAW;AAAA;AAAA,IAExE,CAAC,MAAM,eAAe;AAAA,EACxB;AAEA,QAAM,qBAAiB;AAAA,IACrB,CAAC,SAAiB,gBAAgB,eAAe,IAAI;AAAA;AAAA,IAErD,CAAC,MAAM,gBAAgB;AAAA,EACzB;AAEA,SAAO;AAAA,IACL,cAAaA,MAAA,MAAM,oBAAN,OAAAA,MAAyB,CAAC;AAAA,IACvC,mBAAkB,WAAM,qBAAN,YAA0B,CAAC;AAAA,IAC7C,UAAU,MAAM;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAxDA,IAAAC;AAAA;AAAA;AAAA;AAAA,IAAAA,iBAAiD;AACjD;AAAA;AAAA;;;ACDA,IACAC,kBACA,qBASEC,qBAHW;AARb;AAAA;AAAA;AACA,IAAAD,mBAAgC;AAChC,0BAA6B;AAS3B,IAAAC,sBAAA;AAHK,IAAM,kBAAkD,CAAC;AAAA,MAC9D,UAAU;AAAA,IACZ,MACE;AAAA,MAAC;AAAA;AAAA,QACC,IAAI;AAAA,UACF,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,WAAW;AAAA,UACX,KAAK;AAAA,UACL,GAAG;AAAA,QACL;AAAA,QAEA;AAAA,uDAAC,oBAAAC,SAAA,EAAiB,IAAI,EAAE,UAAU,IAAI,OAAO,gBAAgB,GAAG;AAAA,UAChE,6CAAC,+BAAW,SAAQ,MAAK,YAAY,KAAK,OAAM,kBAAiB,2BAEjE;AAAA,UACA,6CAAC,+BAAW,SAAQ,SAAQ,OAAM,iBAAgB,IAAI,EAAE,WAAW,SAAS,GACzE,mBACH;AAAA;AAAA;AAAA,IACF;AAAA;AAAA;;;ACiCF,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAUY;AACV,QAAM,YAAY,cACd,MAAM,QAAQ,WAAW,IAAI,cAAc,CAAC,WAAW,IACvD,CAAC;AAEL,QAAM,cACJ,CAAC,eACA,CAAC,eAAe,YAAY,WAAW,MACxC,UAAU,WAAW;AAEvB,MAAI,YAAa,QAAO;AAExB,MAAI,UAAU,SAAS,GAAG;AACxB,UAAM,cAAc,kBAChB,UAAU,MAAM,CAAC,MAAM,eAAe,CAAC,CAAC,IACxC,UAAU,KAAK,CAAC,MAAM,eAAe,CAAC,CAAC;AAC3C,QAAI,CAAC,YAAa,QAAO;AAAA,EAC3B;AAEA,MAAI,cAAc,CAAC,cAAc,UAAU,EAAG,QAAO;AAErD,MAAI,eAAe,YAAY,SAAS,GAAG;AACzC,UAAM,UAAU,aAAa,kBAAkB,WAAW,IAAI,iBAAiB,WAAW;AAC1F,QAAI,CAAC,QAAS,QAAO;AAAA,EACvB;AAEA,SAAO;AACT;AA7GA,IAsDuCC,qBA9B1B;AAxBb;AAAA;AAAA;AACA;AACA;AAoDuC,IAAAA,sBAAA;AA9BhC,IAAM,qBAAwD,CAAC;AAAA,MACpE;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA,MACA,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAe;AAAA,MACf;AAAA,IACF,MAAM;AACJ,YAAM,EAAE,UAAU,eAAe,kBAAkB,mBAAmB,eAAe,IACnF,kBAAkB;AAEpB,UAAI,CAAC,SAAU,QAAO;AAEtB,YAAM,YAAY,YAAY;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,UAAI,CAAC,WAAW;AACd;AACA,YAAI,aAAa,OAAW,QAAO,6EAAG,oBAAS;AAC/C,YAAI,aAAc,QAAO,6CAAC,mBAAgB;AAC1C,eAAO;AAAA,MACT;AAEA,aAAO,6EAAG,UAAS;AAAA,IACrB;AAAA;AAAA;;;AC7CO,SAAS,cAAc;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AACd,GAAuB;AACtB,SACC,6CAAC,wBAAI,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,OAAO,GAC7C;AAAA,IAAC;AAAA;AAAA,MACA,IAAI;AAAA,QACH,SAAS;AAAA,QACT,YAAY,EAAE,IAAI,cAAc,IAAI,SAAS;AAAA,QAC7C,gBAAgB;AAAA,QAChB,eAAe,EAAE,IAAI,UAAU,IAAI,MAAM;AAAA,QACzC,KAAK;AAAA,MACN;AAAA,MAGA;AAAA,sDAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,MAAM,UAAU,EAAE,GACvE;AAAA,sBACA;AAAA,YAAC;AAAA;AAAA,cACA,SAAS;AAAA,cACT,MAAK;AAAA,cACL,IAAI;AAAA,gBACH,OAAO;AAAA,gBAAI,QAAQ;AAAA,gBAAI,YAAY;AAAA,gBACnC,QAAQ;AAAA,gBAAQ,cAAc;AAAA,gBAC9B,iBAAiB;AAAA,gBAAgB,OAAO;AAAA,gBACxC,WAAW,EAAE,iBAAiB,mBAAmB,OAAO,eAAe;AAAA,gBACvE,YAAY;AAAA,cACb;AAAA,cAEA,uDAAC,iBAAAC,SAAA,EAAc,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,UACtC;AAAA,UAGA;AAAA,UAED,8CAAC,wBACA;AAAA;AAAA,cAAC;AAAA;AAAA,gBACA,IAAI;AAAA,kBACH,YAAY;AAAA,kBACZ,UAAU,EAAE,IAAI,WAAW,IAAI,UAAU,IAAI,UAAU;AAAA,kBACvD,OAAO;AAAA,kBACP,YAAY;AAAA,kBACZ,YAAY;AAAA,kBACZ,UAAU;AAAA,kBACV,cAAc;AAAA,kBACd,IAAI,CAAC,WAAW,IAAI;AAAA,gBACrB;AAAA,gBAEC;AAAA;AAAA,YACF;AAAA,YACC,YACA;AAAA,cAAC;AAAA;AAAA,gBACA,IAAI;AAAA,kBACH,UAAU;AAAA,kBACV,OAAO;AAAA,kBACP,IAAI,CAAC,WAAW,IAAI;AAAA,kBACpB,IAAI;AAAA,kBACJ,YAAY;AAAA,gBACb;AAAA,gBAEC;AAAA;AAAA,YACF;AAAA,aAEF;AAAA,WACD;AAAA,QAGA,8CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,YAAY,EAAE,GACtE;AAAA,oBAAU,UACV;AAAA,YAAC;AAAA;AAAA,cACA,IAAI;AAAA,gBACH,SAAS;AAAA,gBAAQ,YAAY;AAAA,gBAAU,KAAK;AAAA,gBAC5C,IAAI;AAAA,gBAAQ,QAAQ;AAAA,gBACpB,QAAQ;AAAA,gBAAa,aAAa;AAAA,gBAClC,cAAc;AAAA,gBAAO,iBAAiB;AAAA,gBACtC,YAAY;AAAA,cACb;AAAA,cAEA;AAAA,6DAAC,wBAAI,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,cAAc,OAAO,iBAAiB,WAAW,YAAY,EAAE,GAAG;AAAA,gBAClG,8CAAC,+BAAW,IAAI,EAAE,UAAU,WAAW,OAAO,iBAAiB,GAC7D;AAAA;AAAA,kBAAM;AAAA,kBAAE;AAAA,mBACV;AAAA;AAAA;AAAA,UACD;AAAA,UAEA;AAAA,WACF;AAAA;AAAA;AAAA,EACD,GACD;AAEF;AA9GA,IACAC,kBACA,kBAgDOC;AAlDP;AAAA;AAAA;AACA,IAAAD,mBAA4C;AAC5C,uBAA0B;AAgDnB,IAAAC,sBAAA;AAAA;AAAA;;;AC7CA,SAAS,iBAAiB;AAChC,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAA4B,CAAC,CAAC;AACxD,QAAM,CAAC,aAAa,cAAc,QAAI,yBAA8B,CAAC,CAAC;AACtE,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAE5C,QAAM,uBAAmB,4BAAY,YAAY;AAVlD,QAAAC;AAWE,eAAW,IAAI;AACf,QAAI;AACH,YAAM,MAAM,MAAM,cAAc,KAAK,UAAU,eAAe,CAAC,CAAC;AAChE,eAAS,MAAM,SAAQA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,OAAO,IAAI,IAAI,KAAK,UAAU,CAAC,CAAC;AAAA,IAClE,SAAQ;AACP,eAAS,CAAC,CAAC;AAAA,IACZ,UAAE;AACD,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,QAAM,uBAAmB,4BAAY,YAAY;AAtBlD,QAAAA;AAuBE,eAAW,IAAI;AACf,QAAI;AACH,YAAM,MAAM,MAAM,cAAc,IAAI,UAAU,YAAY;AAC1D,qBAAe,MAAM,SAAQA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,IAAI,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC;AAAA,IAClE,SAAQ;AACP,qBAAe,CAAC,CAAC;AAAA,IAClB,UAAE;AACD,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,QAAM,qBAAiB,4BAAY,OAAO,cAAqC;AAC9E,UAAM,MAAM,MAAM,cAAc,IAAI,UAAU,kBAAkB,SAAS,GAAG;AAAA,MAC3E,cAAc;AAAA,IACf,CAAC;AACD,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAjDA,IAAAC;AAAA;AAAA;AAAA;AAAA,IAAAA,iBAAsC;AACtC;AACA;AAAA;AAAA;;;ACFA;AAAA;AAAA;AAAA;AAyRA,SAAS,cAAc;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAKG;AAnSH,MAAAC,KAAA;AAoSC,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,KAAK;AACtC,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAwB,IAAI;AAC5D,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAS,KAAK;AAEtD,QAAM,aAAa,YAAY;AAC9B,QAAI,CAAC,IAAI,UAAU,UAAW;AAC9B,oBAAgB,IAAI;AACpB,QAAI;AACH,YAAM,OAAO,MAAM,eAAe,IAAI,SAAS;AAC/C,kBAAY,IAAI,gBAAgB,IAAI,CAAC;AAAA,IACtC,SAAQ;AACP,cAAQ,yBAAyB;AAAA,IAClC,UAAE;AACD,sBAAgB,KAAK;AAAA,IACtB;AAAA,EACD;AAEA,QAAM,KAAK,UAAU,YAAY;AACjC,QAAM,SAAS,EAAE,UAAU,WAAW,iBAAiB,GAAG;AAE1D,SACC,8EACC;AAAA,kDAAC,6BAAS,OAAK,MACd;AAAA,mDAAC,8BAAU,IAAI,iCAAK,SAAL,EAAa,UAAU,IAAI,IACzC,uDAAC,4BAAQ,OAAO,IAAI,WAAW,OAAK,MACnC;AAAA,QAAC;AAAA;AAAA,UACA,QAAM;AAAA,UACN,IAAI,EAAE,UAAU,IAAI,UAAU,KAAK,UAAU,UAAU,cAAc,WAAW;AAAA,UAE/E,cAAI;AAAA;AAAA,MACN,GACD,GACD;AAAA,MAEA,6CAAC,8BAAU,IAAI,QAAS,cAAI,WAAU;AAAA,MAEtC,6CAAC,8BAAU,OAAM,UAAS,IAAI,QAC7B;AAAA,QAAC;AAAA;AAAA,UACA,MAAK;AAAA,UACL,OAAO,IAAI;AAAA,UACX,OAAO,IAAI,cAAc,aAAa,YAAY;AAAA;AAAA,MACnD,GACD;AAAA,MAEA,6CAAC,8BAAU,IAAI,QACb,cAAI,KAAK,IAAI,UAAU,EAAE,eAAe,GAC1C;AAAA,MAEA,6CAAC,8BAAU,IAAI,QACb,cAAI,WAAW,IAAI,KAAK,IAAI,QAAQ,EAAE,eAAe,IAAI,UAC3D;AAAA,MAEA,6CAAC,8BAAU,OAAM,UAAS,IAAI,QAC5B,cAAI,UAAU,YACd;AAAA,QAAC;AAAA;AAAA,UACA,OAAM;AAAA,UACN,SAAS;AAAA,UACT,UAAU;AAAA,UACV,MAAK;AAAA,UAEJ,yBAAe,6CAAC,qCAAiB,MAAM,IAAI,IAAK,6CAAC,kBAAAC,SAAA,EAAU;AAAA;AAAA,MAC7D,IAEA,6CAAC,yBAAK,MAAK,SAAQ,OAAM,WAAU,GAErC;AAAA,MAEA,6CAAC,8BAAU,OAAM,UAAS,IAAI,QAC5B,WAAAD,MAAA,IAAI,aAAJ,OAAAA,MAAgB,UAClB;AAAA,MAEA,6CAAC,8BAAU,OAAM,UAAS,IAAI,QAC7B,uDAAC,+BAAW,SAAS,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,MAAK,SAClD,iBAAO,6CAAC,kBAAAE,SAAA,EAAW,IAAK,6CAAC,0BAAAC,SAAA,EAAkB,GAC7C,GACD;AAAA,OACD;AAAA,IAGC,YACA,6CAAC,6BACA,uDAAC,8BAAU,SAAS,GAAG,IAAI,EAAE,GAAG,EAAE,GACjC,uDAAC,wBAAI,GAAG,GACP;AAAA,MAAC;AAAA;AAAA,QACA,UAAQ;AAAA,QACR,UAAQ;AAAA,QACR,KAAK;AAAA,QACL,SAAS,MAAM;AACd,cAAI,gBAAgB,QAAQ;AAC5B,sBAAY,IAAI;AAAA,QACjB;AAAA,QACA,OAAO,EAAE,OAAO,OAAO;AAAA;AAAA,IACxB,GACD,GACD,GACD;AAAA,IAID,6CAAC,6BACA,uDAAC,8BAAU,SAAS,GAAG,IAAI,EAAE,GAAG,EAAE,GACjC,uDAAC,6BAAS,IAAI,MAAM,eAAa,MAChC,wDAAC,wBAAI,GAAG,GAAG,SAAQ,WAAU,WAAU,kBACtC;AAAA,mDAAC,+BAAW,YAAY,KAAK,UAAS,WAAU,IAAI,KAAK,0BAEzD;AAAA,MACA,8CAAC,+BAAW,SAAQ,SAAQ,UAAS,WAAU;AAAA;AAAA,QACnC,IAAI;AAAA,SAChB;AAAA,MACA,8CAAC,+BAAW,SAAQ,SAAQ,UAAS,WAAU;AAAA;AAAA,SACtC,SAAI,aAAJ,YAAgB;AAAA,SACzB;AAAA,OACD,GACD,GACD,GACD;AAAA,KACD;AAEF;AA1ZA,IAAAC,gBACAC,kBAyBAC,2BACAC,mBACA,mBACA,eACAC,eAgEQC,qBAvDF,mBACA,mBACA,aAIA,oBAmNA,eA8JA,aAMC;AApaP;AAAA;AAAA;AAAA,IAAAL,iBAAiD;AACjD,IAAAC,mBAwBO;AACP,IAAAC,4BAA8B;AAC9B,IAAAC,oBAAsB;AACtB,wBAAuB;AACvB,oBAAmB;AACnB,IAAAC,gBAAkB;AAClB;AACA;AACA;AACA;AA4DQ,IAAAC,sBAAA;AAvDR,IAAM,oBAAoB,CAAC,YAAY,UAAU,QAAQ,cAAc,YAAY,aAAa,SAAS,SAAS;AAClH,IAAM,oBAAoB,CAAC,YAAY,cAAc,aAAa,QAAQ,SAAS;AACnF,IAAM,cAAc,oBAAI,IAAI,CAAC,QAAQ,aAAa,SAAS,WAAW,SAAS,CAAC;AAIhF,IAAM,yBAAqB,qBAAK,MAAM;AACrC,YAAM,YAAQ,2BAAS;AACvB,YAAM,EAAE,UAAU,IAAI,SAAS;AAC/B,YAAM,EAAE,OAAO,aAAa,SAAS,kBAAkB,kBAAkB,eAAe,IACvF,eAAe;AAEhB,YAAM,CAAC,QAAQ,SAAS,QAAI,yBAAqB,KAAK;AACtD,YAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,EAAE;AACvC,YAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAS,KAAK;AAC5D,YAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,CAAC;AAClC,YAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,EAAE;AAEjD,oCAAU,MAAM;AACf,YAAI,iBAAiB;AACpB,2BAAiB;AAAA,QAClB,OAAO;AACN,2BAAiB;AAAA,QAClB;AAAA,MACD,GAAG,CAAC,iBAAiB,kBAAkB,gBAAgB,CAAC;AAExD,YAAM,gBAAgB,MACpB,OAAO,CAAC,MAAM,WAAW,SAAS,EAAE,cAAc,MAAM,EACxD,OAAO,CAAC,MAAM,EAAE,UAAU,YAAY,EAAE,SAAS,OAAO,YAAY,CAAC,CAAC;AAExE,YAAM,sBAAsB,YAC1B,OAAO,CAAC,MAAG;AAtEd,YAAAT;AAsEiB,0BAAW,WAASA,MAAA,EAAE,aAAF,gBAAAA,IAAY,mBAAkB;AAAA,OAAM,EACtE,OAAO,CAAC,MAAM;AAvEjB,YAAAA,KAAA;AAwEG,cAAM,IAAI,OAAO,YAAY;AAC7B,iBACCA,MAAA,EAAE,YAAF,gBAAAA,IAAW,cAAc,SAAS,SAClC,OAAE,aAAF,mBAAY,cAAc,SAAS,SACnC,OAAE,iBAAF,mBAAgB,cAAc,SAAS;AAAA,MAEzC,CAAC;AAEF,aACC,8CAAC,wBAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAM;AAAA,YACN,SACC;AAAA,cAAC;AAAA;AAAA,gBACA,MAAK;AAAA,gBACL,OAAO;AAAA,gBACP,UAAU,CAAC,MAAM;AAAE,4BAAU,EAAE,OAAO,KAAK;AAAG,0BAAQ,CAAC;AAAA,gBAAG;AAAA,gBAC1D,aAAY;AAAA,gBACZ,IAAI,EAAE,OAAO,KAAK,UAAU,WAAW,QAAQ,GAAG;AAAA,gBAClD,cACC,6CAAC,mCAAe,UAAS,OACxB,uDAAC,cAAAU,SAAA,EAAO,IAAI,EAAE,UAAU,IAAI,OAAO,OAAO,GAAG,GAC9C;AAAA;AAAA,YAEF;AAAA;AAAA,QAEF;AAAA,QAEA,8CAAC,wBAAI,IAAI,KAAK,IAAI,GAEjB;AAAA,wDAAC,0BAAM,WAAU,OAAM,SAAS,GAAG,YAAW,UAAS,IAAI,GAC1D;AAAA;AAAA,cAAC;AAAA;AAAA,gBACA,SACC;AAAA,kBAAC;AAAA;AAAA,oBACA,MAAK;AAAA,oBACL,SAAS;AAAA,oBACT,UAAU,CAAC,GAAG,YAAY;AAAE,yCAAmB,OAAO;AAAG,8BAAQ,CAAC;AAAA,oBAAG;AAAA;AAAA,gBACtE;AAAA,gBAED,OACC,6CAAC,+BAAW,IAAI,EAAE,UAAU,UAAU,OAAO,OAAO,GAAG,0BAEvD;AAAA,gBAED,IAAI,EAAE,IAAI,EAAE;AAAA;AAAA,YACb;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACA,OAAO;AAAA,gBACP,WAAS;AAAA,gBACT,UAAU,CAAC,GAAG,MAAM;AAAE,sBAAI,GAAG;AAAE,8BAAU,CAAC;AAAG,4BAAQ,CAAC;AAAA,kBAAG;AAAA,gBAAE;AAAA,gBAC3D,MAAK;AAAA,gBACL,IAAI;AAAA,kBACH,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,UAAU;AAAA,kBACV,2BAA2B;AAAA,oBAC1B,QAAQ;AAAA,oBACR,aAAa;AAAA,oBACb,OAAO;AAAA,oBACP,YAAY;AAAA,oBACZ,eAAe;AAAA,oBACf,UAAU;AAAA,oBACV,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,cAAc;AAAA,oBACd,kBAAkB,EAAE,aAAa,OAAO;AAAA,oBACxC,kBAAkB;AAAA,sBACjB,iBAAiB,MAAM,QAAQ,QAAQ;AAAA,sBACvC,OAAO;AAAA,sBACP,WAAW,EAAE,iBAAiB,MAAM,QAAQ,QAAQ,KAAK;AAAA,oBAC1D;AAAA,kBACD;AAAA,gBACD;AAAA,gBAEA;AAAA,+DAAC,iCAAa,OAAM,OAAM,iBAAG;AAAA,kBAC7B,6CAAC,iCAAa,OAAM,YAAW,qBAAO;AAAA,kBACtC,6CAAC,iCAAa,OAAM,YAAW,sBAAQ;AAAA;AAAA;AAAA,YACxC;AAAA,aACD;AAAA,UAGA,8CAAC,mCAAe,WAAW,wBAAO,SAAQ,YAAW,IAAI,EAAE,SAAS,QAAQ,eAAe,SAAS,GAClG;AAAA,yDAAC,wBAAI,IAAI,EAAE,WAAW,QAAQ,WAAW,IAAI,GAC9C,uDAAC,0BAAM,cAAY,MAAC,MAAK,SACvB,4BACA,8EACC;AAAA,2DAAC,8BACA,uDAAC,6BACC,4BAAkB,IAAI,CAAC,QACvB;AAAA,gBAAC;AAAA;AAAA,kBAEA,OAAO,YAAY,IAAI,GAAG,IAAI,WAAW;AAAA,kBACzC,IAAI,EAAE,YAAY,KAAK,iBAAiB,WAAW,UAAU,SAAS;AAAA,kBAErE;AAAA;AAAA,gBAJI;AAAA,cAKN,CACA,GACF,GACD;AAAA,cACA,6CAAC,8BACC,oBACA,6CAAC,6BACA,uDAAC,8BAAU,SAAS,GAAG,OAAM,UAAS,IAAI,EAAE,IAAI,EAAE,GACjD,uDAAC,qCAAiB,MAAM,IAAI,GAC7B,GACD,IACG,oBAAoB,WAAW,IAClC,6CAAC,6BACA,uDAAC,8BAAU,SAAS,GAAG,OAAM,UAAS,IAAI,EAAE,IAAI,GAAG,OAAO,QAAQ,UAAU,UAAU,GAAG,8BAEzF,GACD,IAEA,oBAAoB,MAAM,OAAO,cAAc,OAAO,KAAK,WAAW,EAAE,IAAI,CAAC,KAAK,MACjF,6CAAC,iBAA8D,OAA3C,GAAG,IAAI,OAAO,IAAI,IAAI,YAAY,IAAI,CAAC,EAAc,CACzE,GAEH;AAAA,eACD,IAEA,8EACC;AAAA,2DAAC,8BACA,uDAAC,6BACC,4BAAkB,IAAI,CAAC,QACvB;AAAA,gBAAC;AAAA;AAAA,kBAEA,OAAO,YAAY,IAAI,GAAG,IAAI,WAAW;AAAA,kBACzC,IAAI,EAAE,YAAY,KAAK,iBAAiB,WAAW,UAAU,SAAS;AAAA,kBAErE;AAAA;AAAA,gBAJI;AAAA,cAKN,CACA,GACF,GACD;AAAA,cACA,6CAAC,8BACC,oBACA,6CAAC,6BACA,uDAAC,8BAAU,SAAS,GAAG,OAAM,UAAS,IAAI,EAAE,IAAI,EAAE,GACjD,uDAAC,qCAAiB,GACnB,GACD,IACG,cAAc,WAAW,IAC5B,6CAAC,6BACA,uDAAC,8BAAU,SAAS,GAAG,OAAM,UAAS,IAAI,EAAE,IAAI,GAAG,OAAO,QAAQ,UAAU,UAAU,GAAG,8BAEzF,GACD,IAEA,cAAc,MAAM,OAAO,cAAc,OAAO,KAAK,WAAW,EAAE,IAAI,CAAC,KAAK,MAC3E;AAAA,gBAAC;AAAA;AAAA,kBAEA;AAAA,kBACA,SAAS,IAAI,MAAM;AAAA,kBACnB;AAAA,kBACA,SAAS,CAAC,QAAQ,UAAU,KAAK,OAAO;AAAA;AAAA,gBAJnC,IAAI;AAAA,cAKV,CACA,GAEH;AAAA,eACD,GAEF,GACC;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACD,WAAU;AAAA,gBACV,OAAO,kBAAkB,oBAAoB,SAAS,cAAc;AAAA,gBACpE;AAAA,gBACA;AAAA,gBACA,cAAc,CAAC,GAAG,MAAM,QAAQ,CAAC;AAAA,gBACjC,qBAAqB,CAAC,MAAM;AAAE,iCAAe,SAAS,EAAE,OAAO,OAAO,EAAE,CAAC;AAAG,0BAAQ,CAAC;AAAA,gBAAG;AAAA,gBACxF,oBAAoB,CAAC,IAAI,IAAI,EAAE;AAAA,gBAC/B,IAAI,EAAE,WAAW,oBAAoB;AAAA;AAAA,YACrC;AAAA,aACF;AAAA,WACD;AAAA,SACD;AAAA,IAEF,CAAC;AAED,uBAAmB,cAAc;AAIjC,IAAM,oBAAgB,qBAAK,CAAC,EAAE,IAAI,MAAkC;AACnE,YAAM,YAAQ,2BAAS;AACvB,aACC,8CAAC,6BAAS,OAAK,MACd;AAAA,qDAAC,8BAAU,IAAI,EAAE,UAAU,WAAW,OAAO,MAAM,QAAQ,QAAQ,KAAK,GACtE,cAAI,SACN;AAAA,QACA,6CAAC,8BAAU,IAAI,EAAE,UAAU,UAAU,GAAI,cAAI,UAAS;AAAA,QACtD,8CAAC,8BAAU,IAAI,EAAE,UAAU,UAAU,GACnC;AAAA,cAAI;AAAA,UAAa;AAAA,UAAG,IAAI;AAAA,UAAU;AAAA,WACpC;AAAA,QACA,6CAAC,8BAAU,IAAI,EAAE,UAAU,WAAW,eAAe,YAAY,GAC/D,cAAI,UACN;AAAA,QACA,6CAAC,8BAAU,OAAM,UAChB,uDAAC,cAAAC,SAAA,EAAM,IAAI,EAAE,OAAO,WAAW,UAAU,IAAI,QAAQ,UAAU,GAAG,GACnE;AAAA,SACD;AAAA,IAEF,CAAC;AAED,kBAAc,cAAc;AAyI5B,IAAM,cAAwB,MAC7B,6CAAC,eACA,uDAAC,sBAAmB,GACrB;AAGD,IAAO,sBAAQ;AAAA;AAAA;;;AC1YR,SAAS,UAAU;AAAA,EACzB;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP,OAAO;AAAA,EACP,YAAY;AAAA,EACZ;AACD,GAAmB;AAClB,QAAM,YAAQ,2BAAS;AACvB,QAAM,UAAU,MAAM,QAAQ,QAAQ;AACtC,QAAM,cAAc,MAAM,QAAQ,QAAQ;AAE1C,QAAM,SAAmD;AAAA,IACxD,SAAS;AAAA,MACR,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,WAAW,iBAAa,sBAAM,SAAS,IAAI,CAAC;AAAA,MAC5C,WAAW;AAAA,QACV,iBAAiB;AAAA,QACjB,WAAW,kBAAc,sBAAM,SAAS,IAAI,CAAC;AAAA,MAC9C;AAAA,MACA,kBAAkB;AAAA,QACjB,qBAAiB,sBAAM,SAAS,GAAG;AAAA,QACnC,OAAO;AAAA,MACR;AAAA,IACD;AAAA,IACA,QAAQ;AAAA,MACP,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,WAAW,EAAE,iBAAiB,UAAU;AAAA,MACxC,kBAAkB,EAAE,iBAAiB,WAAW,OAAO,OAAO;AAAA,IAC/D;AAAA,IACA,QAAQ;AAAA,MACP,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,cAAc;AAAA,MACd,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,WAAW,EAAE,iBAAiB,WAAW,aAAa,OAAO;AAAA,IAC9D;AAAA,IACA,UAAU;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,cAAc;AAAA,MACd,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,WAAW,EAAE,aAAa,aAAa,qBAAiB,sBAAM,SAAS,IAAI,EAAE;AAAA,IAC9E;AAAA,EACD;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,SAAS,WAAW,OAAO;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,CAAC,OAAO,OAAO,GAAG,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,CAAC,EAAE,CAAE;AAAA,MAEvD;AAAA;AAAA,EACF;AAEF;AA3GA,IACAC,kBACAC,gBA2FEC,sBA1EI;AAnBN;AAAA;AAAA;AACA,IAAAF,mBAAiD;AACjD,IAAAC,iBAAsB;AA2FpB,IAAAC,uBAAA;AA1EF,IAAM,aAA0E;AAAA,MAC/E,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,UAAU;AAAA,IACX;AAAA;AAAA;;;ACTO,SAAS,eAAe;AAC9B,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAqB,CAAC,CAAC;AACzD,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAE5C,QAAM,qBAAiB,4BAAY,YAAY;AAC9C,eAAW,IAAI;AACf,QAAI;AACH,YAAM,MAAM,MAAM,cAAc,IAAI,UAAU,iBAAiB;AAC/D,mBAAa,MAAM,QAAQ,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;AAAA,IACrD,SAAQ;AACP,mBAAa,CAAC,CAAC;AAAA,IAChB,UAAE;AACD,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,QAAM,sBAAkB,4BAAY,OAAO,OAAkC;AAC5E,UAAM,MAAM,MAAM,cAAc,IAAI,UAAU,oBAAoB,EAAE,CAAC;AACrE,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,QAAM,qBAAiB,4BAAY,OAAO,SAAmD;AAC5F,UAAM,MAAM,MAAM,cAAc,KAAK,UAAU,kBAAkB,IAAI;AACrE,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,QAAM,qBAAiB,4BAAY,OAAO,IAAY,SAA4D;AACjH,UAAM,MAAM,MAAM,cAAc,IAAI,UAAU,iBAAiB,EAAE,GAAG,IAAI;AACxE,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,QAAM,uBAAmB,4BAAY,OAAO,OAAkC;AAC7E,UAAM,MAAM,MAAM,cAAc,KAAK,UAAU,mBAAmB,EAAE,CAAC;AACrE,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAgB,4BAAY,OAAO,OAAkC;AAC1E,UAAM,MAAM,MAAM,cAAc,KAAK,UAAU,gBAAgB,EAAE,CAAC;AAClE,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,QAAM,sBAAkB,4BAAY,OAAO,OAAkC;AAC5E,UAAM,MAAM,MAAM,cAAc,KAAK,UAAU,kBAAkB,EAAE,CAAC;AACpE,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAEO,SAAS,WAAW;AAC1B,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAiB,CAAC,CAAC;AAC7C,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,CAAC;AAC5C,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAoB,IAAI;AAC1D,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAE5C,QAAM,iBAAa,4BAAY,OAAO,YAAoB,WAAwC;AAhFnG,QAAAC,KAAA;AAiFE,eAAW,IAAI;AACf,QAAI;AACH,YAAM,KAAK,IAAI,gBAAgB;AAC/B,WAAI,iCAAQ,SAAQ,KAAM,IAAG,OAAO,QAAQ,OAAO,OAAO,IAAI,CAAC;AAC/D,WAAI,iCAAQ,UAAS,KAAM,IAAG,OAAO,SAAS,OAAO,OAAO,KAAK,CAAC;AAClE,UAAI,iCAAQ,OAAQ,IAAG,OAAO,UAAU,OAAO,MAAM;AACrD,UAAI,iCAAQ,aAAc,IAAG,OAAO,gBAAgB,OAAO,YAAY;AACvE,YAAM,QAAQ,GAAG,SAAS;AAC1B,YAAM,MAAM,GAAG,UAAU,gBAAgB,UAAU,CAAC,GAAG,QAAQ,IAAI,KAAK,KAAK,EAAE;AAC/E,YAAM,MAAM,MAAM,cAAc,IAAmB,GAAG;AACtD,YAAM,eAAe,MAAM,SAAQA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,KAAK,IAAI,IAAI,KAAK,QAAQ,CAAC;AACxE,eAAS,YAAY;AACrB,oBAAa,eAAI,SAAJ,mBAAU,UAAV,YAAmB,aAAa,MAAM;AACnD,mBAAa;AAAA,QACZ,kBAAiB,SAAI,SAAJ,mBAAU;AAAA,QAC3B,cAAa,SAAI,SAAJ,mBAAU;AAAA,QACvB,iBAAgB,SAAI,SAAJ,mBAAU;AAAA,MAC3B,CAAC;AAAA,IACF,SAAQ;AACP,eAAS,CAAC,CAAC;AACX,mBAAa,CAAC;AACd,mBAAa,IAAI;AAAA,IAClB,UAAE;AACD,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,QAAM,iBAAa,4BAAY,OAAO,YAAoB,SAA2C;AACpG,UAAM,MAAM,MAAM,cAAc,KAAK,UAAU,gBAAgB,UAAU,GAAG,IAAI;AAChF,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,QAAM,iBAAa,4BAAY,OAAO,YAAoB,WAAkC;AAC3F,UAAM,cAAc,OAAO,UAAU,sBAAsB,YAAY,MAAM,CAAC;AAAA,EAC/E,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAc,4BAAY,OAAO,YAAoB,WAAiD;AAC3G,UAAM,MAAM,MAAM,cAAc,KAAK,UAAU,uBAAuB,YAAY,MAAM,CAAC;AACzF,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,QAAM,uBAAmB,4BAAY,OAAO,YAAoB,SAA6B;AAC5F,UAAM,WAAW,IAAI,SAAS;AAC9B,aAAS,OAAO,QAAQ,IAAI;AAC5B,UAAM,MAAM,MAAM,cAAc,KAAK,UAAU,6BAA6B,UAAU,GAAG,UAAU;AAAA,MAClG,SAAS,EAAE,gBAAgB,sBAAsB;AAAA,IAClD,CAAC;AACD,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,QAAM,2BAAuB,4BAAY,OAAO,eAAsC;AACrF,UAAM,MAAM,MAAM,cAAc,IAAI,UAAU,+BAA+B,UAAU,GAAG;AAAA,MACzF,cAAc;AAAA,IACf,CAAC;AACD,UAAM,OAAO,IAAI;AACjB,UAAM,MAAM,OAAO,IAAI,gBAAgB,IAAI;AAC3C,UAAM,IAAI,SAAS,cAAc,GAAG;AACpC,MAAE,OAAO;AACT,MAAE,WAAW;AACb,aAAS,KAAK,YAAY,CAAC;AAC3B,MAAE,MAAM;AACR,MAAE,OAAO;AACT,WAAO,IAAI,gBAAgB,GAAG;AAAA,EAC/B,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAc,4BAAY,OAAO,eAAsC;AAC5E,UAAM,MAAM,MAAM,cAAc,IAAI,UAAU,6BAA6B,UAAU,GAAG;AAAA,MACvF,cAAc;AAAA,IACf,CAAC;AACD,UAAM,OAAO,IAAI;AACjB,UAAM,MAAM,OAAO,IAAI,gBAAgB,IAAI;AAC3C,UAAM,IAAI,SAAS,cAAc,GAAG;AACpC,MAAE,OAAO;AACT,MAAE,WAAW;AACb,aAAS,KAAK,YAAY,CAAC;AAC3B,MAAE,MAAM;AACR,MAAE,OAAO;AACT,WAAO,IAAI,gBAAgB,GAAG;AAAA,EAC/B,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAEO,SAAS,YAAY;AAC3B,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAkB,CAAC,CAAC;AAChD,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAE5C,QAAM,kBAAc,4BAAY,YAA8B;AApL/D,QAAAA;AAqLE,eAAW,IAAI;AACf,QAAI;AACH,YAAM,MAAM,MAAM,cAAc,IAAI,UAAU,cAAc;AAC5D,YAAM,OAAgB,MAAM,QAAQ,IAAI,IAAI,IACzC,IAAI,OACJ,MAAM,SAAQA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,IAAI,IAAI,IAAI,KAAK,OAAO,CAAC;AACpD,gBAAU,IAAI;AACd,aAAO;AAAA,IACR,SAAQ;AACP,gBAAU,CAAC,CAAC;AACZ,aAAO,CAAC;AAAA,IACT,UAAE;AACD,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAc,4BAAY,OAAO,YAAgD;AArMxF,QAAAA,KAAA;AAsME,UAAM,MAAM,MAAM,cAAc,KAAK,UAAU,eAAe,OAAO;AACrE,YAAO,MAAAA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,SAAV,YAAkB,IAAI;AAAA,EAC9B,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,QAAQ,SAAS,aAAa,YAAY;AACpD;AA3MA,IAAAC;AAAA;AAAA;AAAA;AAAA,IAAAA,iBAAsC;AACtC;AACA;AAAA;AAAA;;;ACFA,IA8Ia,gBAEA,mBAKA,aAEA,uBAMA,cAmBA,eAKA;AArLb;AAAA;AAAA;AA8IO,IAAM,iBAAiB,CAAC,qBAAqB,oBAAoB;AAEjE,IAAM,oBAA8C;AAAA,MAC1D,mBAAmB,CAAC,SAAS;AAAA,MAC7B,oBAAoB,CAAC,eAAe,YAAY;AAAA,IACjD;AAEO,IAAM,cAAc,CAAC,SAAS,MAAM,QAAQ;AAE5C,IAAM,wBAA4D;AAAA,MACxE,EAAE,OAAO,QAAQ,OAAO,GAAG;AAAA,MAC3B,EAAE,OAAO,UAAU,OAAO,EAAE;AAAA,MAC5B,EAAE,OAAO,OAAO,OAAO,EAAE;AAAA,IAC1B;AAEO,IAAM,eAAe;AAAA,MAC3B,EAAE,OAAO,OAAO,OAAO,EAAE;AAAA,MAAG,EAAE,OAAO,OAAO,OAAO,EAAE;AAAA,MAAG,EAAE,OAAO,OAAO,OAAO,EAAE;AAAA,MACjF,EAAE,OAAO,OAAO,OAAO,EAAE;AAAA,MAAG,EAAE,OAAO,OAAO,OAAO,EAAE;AAAA,MAAG,EAAE,OAAO,OAAO,OAAO,EAAE;AAAA,MACjF,EAAE,OAAO,OAAO,OAAO,EAAE;AAAA,IAC1B;AAeO,IAAM,gBAAgB;AAAA,MAC5B;AAAA,MAAc;AAAA,MAAW;AAAA,MAAa;AAAA,MACtC;AAAA,MAAa;AAAA,MAAU;AAAA,MAAe;AAAA,MAAW;AAAA,IAClD;AAEO,IAAM,kBAAyC;AAAA,MACrD,MAAM;AAAA,MAAI,aAAa;AAAA,MAAI,cAAc;AAAA,MAAqB,aAAa;AAAA,MAC3E,oBAAoB;AAAA,MAAG,eAAe;AAAA,MAAG,WAAW;AAAA,MAAS,SAAS;AAAA,MACtE,YAAY,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,MAAG,UAAU;AAAA,MAAgB,gBAAgB;AAAA,MAAI,cAAc;AAAA,MACzF,aAAa;AAAA,MAAG,sBAAsB;AAAA,MAAI,UAAU;AAAA,MAAI,oBAAoB;AAAA,MAC5E,sBAAsB;AAAA,MAAI,WAAW;AAAA,MAAS,SAAS;AAAA,MAAM,UAAU;AAAA,MAAG,UAAU,CAAC;AAAA,MACrF,YAAY,CAAC;AAAA,IACd;AAAA;AAAA;;;ACkBO,SAAS,aAAa,QAAgB;AA9M7C,MAAAC;AA+MC,QAAM,SAAQA,MAAA,cAAc,iCAAQ,aAAa,MAAnC,OAAAA,MAAwC;AACtD,SAAO;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,iBAAiB,QAAQ;AAAA,IACzB;AAAA,IACA,QAAQ,aAAa,KAAK;AAAA,EAC3B;AACD;AAEO,SAAS,iBAAiB,QAAgB;AAChD,QAAM,IAAI,iCAAQ;AAClB,SAAO;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,iBAAiB,MAAM,cAAc,YAClC,MAAM,WAAa,YACnB,MAAM,YAAa,YACnB;AAAA,IACH,OAAO,MAAM,cAAc,YACxB,MAAM,WAAa,YACnB,MAAM,YAAa,YACnB;AAAA,EACJ;AACD;AAEO,SAAS,mBAAmB,UAAqC;AACvE,QAAM,QAAQ,YAAY,OAAO,WAC9B,YAAY,IAAI,SAChB,YAAY,IAAI,WAChB;AACH,SAAO;AAAA,IACN,MAAM;AAAA,MACL,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,iBAAiB,UAAU,SAAS,YAAY,UAAU,WAAW,YAAY,UAAU,QAAQ,YAAY;AAAA,MAC/G,OAAiB,UAAU,SAAS,YAAY,UAAU,WAAW,YAAY,UAAU,QAAQ,YAAY;AAAA,IAChH;AAAA,IACA;AAAA,EACD;AACD;AAEO,SAAS,UAAU,UAAmB;AAC5C,SAAO;AAAA,IACN,QAAQ;AAAA,IACR,iBAAiB,WAAW,YAAY;AAAA,IACxC,OAAO,WAAW,SAAS;AAAA,IAC3B,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,WAAW;AAAA,MACV,iBAAiB,WAAW,YAAY;AAAA,IACzC;AAAA,EACD;AACD;AA5QA,IAIa,SAOA,gBAWA,YAWA,YAOA,YAOA,oBAWA,wBASA,SAWA,gBASA,gBA+GA;AAtMb;AAAA;AAAA;AAIO,IAAM,UAA0B;AAAA,MACtC,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,OAAO;AAAA,MACP,IAAI;AAAA,IACL;AAEO,IAAM,iBAAiC;AAAA,MAC7C,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,OAAO;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,YAAY;AAAA,IACb;AAIO,IAAM,aAA6B;AAAA,MACzC,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,IAAI;AAAA,IACL;AAEO,IAAM,aAA6B;AAAA,MACzC,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,IAAI;AAAA,IACL;AAEO,IAAM,aAA6B;AAAA,MACzC,WAAW,EAAE,iBAAiB,UAAU;AAAA,MACxC,oCAAoC,EAAE,QAAQ,EAAE;AAAA,IACjD;AAIO,IAAM,qBAAqC;AAAA,MACjD,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,WAAW;AAAA,MACX,YAAY;AAAA,IACb;AAEO,IAAM,yBAAyC,iCAClD,qBADkD;AAAA,MAErD,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,WAAW;AAAA,IACZ;AAIO,IAAM,UAA0B;AAAA,MACtC,4BAA4B;AAAA,QAC3B,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,oBAAoB,EAAE,aAAa,UAAU;AAAA,QAC7C,0BAA0B,EAAE,aAAa,UAAU;AAAA,MACpD;AAAA,IACD;AAIO,IAAM,iBAAiC;AAAA,MAC7C,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,cAAc;AAAA,MACd,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,IACjB;AAEO,IAAM,iBAAiC;AAAA,MAC7C,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,WAAW;AAAA,MACX,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACN;AAwGO,IAAM,gBAAwC;AAAA,MACpD,OAAW;AAAA,MACX,QAAW;AAAA,MACX,QAAW;AAAA,MACX,WAAW;AAAA,MACX,UAAW;AAAA,IACZ;AAAA;AAAA;;;AC5MA;AAAA;AAAA;AAAA;AA0FA,SAAS,cAAc,KAA4B;AAClD,QAAM,WAAW,OAAO,IAAI,KAAK;AACjC,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,SAAS,QAAQ,WAAW,KAAK,IACpC,QAAQ,MAAM,CAAC,IACf,QAAQ,WAAW,IAAI,KAAK,QAAQ,WAAW,KAC9C,QAAQ,MAAM,CAAC,IACf;AACJ,MAAI,CAAC,WAAW,KAAK,MAAM,EAAG,QAAO;AACrC,SAAO;AACR;AAEA,SAAS,mBAAmB,GAAoC;AAtGhE,MAAAC,KAAA;AAuGC,SAAO;AAAA,IACN,MAAM,EAAE,QAAQ;AAAA,IAChB,aAAa,EAAE,eAAe;AAAA,IAC9B,eAAe,EAAE,gBAAgB,qBAAqB,YAAY;AAAA,IAClE,cAAc,EAAE,eAAe,WAAW,YAAY;AAAA,IACtD,qBAAoBA,MAAA,EAAE,uBAAF,OAAAA,MAAwB;AAAA,IAC5C,gBAAe,OAAE,kBAAF,YAAmB;AAAA,IAClC,WAAW,EAAE,YAAY,EAAE,UAAU,MAAM,GAAG,CAAC,IAAI;AAAA,IACnD,SAAS,EAAE,UAAU,EAAE,QAAQ,MAAM,GAAG,CAAC,IAAI;AAAA,IAC7C,YAAY,EAAE,cAAc,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAC1C,UAAU,EAAE,YAAY;AAAA,IACxB,gBAAgB,EAAE,kBAAkB;AAAA,IACpC,cAAc,EAAE,gBAAgB;AAAA,IAChC,cAAa,OAAE,gBAAF,YAAiB;AAAA,IAC9B,uBAAsB,OAAE,yBAAF,YAA0B;AAAA,IAChD,UAAU,EAAE,YAAY;AAAA,IACxB,qBAAoB,OAAE,uBAAF,YAAwB;AAAA,IAC5C,uBAAsB,OAAE,yBAAF,YAA0B;AAAA,IAChD,WAAW,EAAE,aAAa;AAAA,IAC1B,SAAS;AAAA,IACT,WAAU,OAAE,aAAF,YAAc;AAAA,IACxB,UAAU,EAAE,YAAY,CAAC;AAAA,IACzB,aAAa,EAAE,kBAAkB,CAAC,GAAG,IAAI,CAAC,MAAG;AA7H/C,UAAAA,KAAAC;AA6HmD;AAAA,QAChD,SAAS,EAAE;AAAA,QACX,mBAAkBD,MAAA,EAAE,qBAAF,OAAAA,MAAsB;AAAA,QACxC,wBAAuBC,MAAA,EAAE,0BAAF,OAAAA,MAA2B;AAAA,MACnD;AAAA,KAAE;AAAA,EACH;AACD;AASA,SAAS,aAAa,EAAE,UAAU,aAAa,WAAW,GAA2C;AA5IrG,MAAAD;AA6IC,QAAM,eAAe,CAAC,OAAoC,UAAe;AACxE,gBAAY,CAAC,SAAS;AA9IxB,UAAAA;AA+IG,YAAM,UAAU,iCAAK,OAAL,EAAW,CAAC,KAAK,GAAG,MAAM;AAC1C,UAAI,UAAU,gBAAgB;AAC7B,gBAAQ,gBAAcA,MAAA,kBAAkB,KAAe,MAAjC,gBAAAA,IAAqC,OAAM;AAAA,MAClE;AACA,aAAO;AAAA,IACR,CAAC;AAAA,EACF;AAEA,QAAM,cAAc,kBAAkB,SAAS,YAAY,KAAK,CAAC;AACjE,QAAM,iBAAiB,SAAS,eAAe,CAAC,YAAY,SAAS,SAAS,WAAW,IACtF,CAAC,SAAS,aAAa,GAAG,WAAW,IACrC;AAEH,SACC,+CAAC,wBAAI,IAAI,EAAE,GAAG,IAAI,GACjB;AAAA,kDAAC,+BAAW,IAAI,gBAAgB,wBAAU;AAAA,IAC1C,+CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,qBAAqB,EAAE,IAAI,OAAO,IAAI,aAAa,IAAI,gBAAgB,GAAG,KAAK,GAAG,IAAI,EAAE,GACnH;AAAA,qDAAC,wBACA;AAAA,uDAAC,+BAAW,IAAI,SAAS;AAAA;AAAA,UAAc,8CAAC,UAAK,OAAO,EAAE,OAAO,MAAM,GAAG,eAAC;AAAA,WAAO;AAAA,QAC9E;AAAA,UAAC;AAAA;AAAA,YAAU,WAAS;AAAA,YAAC,MAAK;AAAA,YAAQ,OAAO,SAAS;AAAA,YACjD,UAAU,CAAC,MAAM,aAAa,QAAQ,EAAE,OAAO,KAAK;AAAA,YAAG,IAAI;AAAA;AAAA,QAAS;AAAA,SACtE;AAAA,MACA,+CAAC,wBACA;AAAA,uDAAC,+BAAW,IAAI,SAAS;AAAA;AAAA,UAAc,8CAAC,UAAK,OAAO,EAAE,OAAO,MAAM,GAAG,eAAC;AAAA,WAAO;AAAA,QAC9E,8CAAC,gCAAY,WAAS,MAAC,MAAK,SAC3B;AAAA,UAAC;AAAA;AAAA,YAAO,OAAO,SAAS;AAAA,YACvB,UAAU,CAAC,MAAM,aAAa,gBAAgB,EAAE,OAAO,KAAK;AAAA,YAC5D,UAAU;AAAA,YACT,yBAAe,IAAI,CAAC,MAAM,8CAAC,6BAAiB,OAAO,GAAI,eAAd,CAAgB,CAAW;AAAA;AAAA,QACtE,GACD;AAAA,SACD;AAAA,OACD;AAAA,IACA,+CAAC,wBAAI,IAAI,EAAE,IAAI,EAAE,GAChB;AAAA,oDAAC,+BAAW,IAAI,SAAS,yBAAW;AAAA,MACpC;AAAA,QAAC;AAAA;AAAA,UAAU,WAAS;AAAA,UAAC,MAAK;AAAA,UAAQ,WAAS;AAAA,UAAC,MAAM;AAAA,UAAG,OAAO,SAAS;AAAA,UACpE,UAAU,CAAC,MAAM,aAAa,eAAe,EAAE,OAAO,KAAK;AAAA,UAAG,IAAI;AAAA;AAAA,MAAS;AAAA,OAC7E;AAAA,IACA,+CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,qBAAqB,EAAE,IAAI,OAAO,IAAI,WAAW,IAAI,cAAc,GAAG,KAAK,EAAE,GACxG;AAAA,qDAAC,wBACA;AAAA,uDAAC,+BAAW,IAAI,SAAS;AAAA;AAAA,UAAa,8CAAC,UAAK,OAAO,EAAE,OAAO,MAAM,GAAG,eAAC;AAAA,WAAO;AAAA,QAC7E,8CAAC,gCAAY,WAAS,MAAC,MAAK,SAC3B;AAAA,UAAC;AAAA;AAAA,YAAO,OAAO,SAAS;AAAA,YACvB,UAAU,CAAC,MAAM,aAAa,eAAe,EAAE,OAAO,KAAK;AAAA,YAC1D,yBAAe,IAAI,CAAC,MAAM,8CAAC,6BAAiB,OAAO,GAAI,eAAd,CAAgB,CAAW;AAAA;AAAA,QACtE,GACD;AAAA,SACD;AAAA,MACA,+CAAC,wBACA;AAAA,sDAAC,+BAAW,IAAI,SAAS,sBAAQ;AAAA,QACjC,8CAAC,gCAAY,WAAS,MAAC,MAAK,SAC3B;AAAA,UAAC;AAAA;AAAA,YAAO,QAAOA,MAAA,SAAS,aAAT,OAAAA,MAAqB;AAAA,YACnC,UAAU,CAAC,MAAM,aAAa,YAAY,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,YAC/D,gCAAsB,IAAI,CAAC,MAAM,8CAAC,6BAAuB,OAAO,EAAE,OAAQ,YAAE,SAA5B,EAAE,KAAgC,CAAW;AAAA;AAAA,QAC/F,GACD;AAAA,SACD;AAAA,OACD;AAAA,KACD;AAEF;AAEA,SAAS,iBAAiB,EAAE,UAAU,YAAY,GAAiB;AAClE,QAAM,eAAe,CAAC,OAAoC,UACzD,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,CAAC,KAAK,GAAG,MAAM,EAAE;AAEpD,SACC,+CAAC,wBAAI,IAAI,EAAE,GAAG,IAAI,GACjB;AAAA,kDAAC,+BAAW,IAAI,gBAAgB,mCAAqB;AAAA,IACrD,+CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,qBAAqB,EAAE,IAAI,OAAO,IAAI,WAAW,IAAI,cAAc,GAAG,KAAK,EAAE,GACxG;AAAA,qDAAC,wBACA;AAAA,uDAAC,+BAAW,IAAI,SAAS;AAAA;AAAA,UAAqB,8CAAC,UAAK,OAAO,EAAE,OAAO,MAAM,GAAG,eAAC;AAAA,WAAO;AAAA,QACrF;AAAA,UAAC;AAAA;AAAA,YAAU,WAAS;AAAA,YAAC,MAAK;AAAA,YAAQ,MAAK;AAAA,YAAS,OAAO,SAAS;AAAA,YAC/D,UAAU,CAAC,MAAM,aAAa,sBAAsB,SAAS,EAAE,OAAO,KAAK,KAAK,CAAC;AAAA,YACjF,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;AAAA,YAAG,IAAI;AAAA;AAAA,QAAS;AAAA,SACrD;AAAA,MACA,+CAAC,wBACA;AAAA,sDAAC,+BAAW,IAAI,SAAS,6BAAe;AAAA,QACxC;AAAA,UAAC;AAAA;AAAA,YAAU,WAAS;AAAA,YAAC,MAAK;AAAA,YAAQ,MAAK;AAAA,YAAS,OAAO,SAAS;AAAA,YAC/D,UAAU,CAAC,MAAM,aAAa,iBAAiB,WAAW,EAAE,OAAO,KAAK,KAAK,CAAC;AAAA,YAC9E,WAAW,EAAE,WAAW,EAAE,KAAK,KAAK,MAAM,IAAI,EAAE;AAAA,YAAG,IAAI;AAAA;AAAA,QAAS;AAAA,SAClE;AAAA,MACA,+CAAC,wBACA;AAAA,sDAAC,+BAAW,IAAI,SAAS,gCAAkB;AAAA,QAC3C;AAAA,UAAC;AAAA;AAAA,YAAU,WAAS;AAAA,YAAC,MAAK;AAAA,YAAQ,MAAK;AAAA,YAAS,OAAO,SAAS;AAAA,YAC/D,UAAU,CAAC,MAAM,aAAa,sBAAsB,SAAS,EAAE,OAAO,KAAK,KAAK,EAAE;AAAA,YAClF,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;AAAA,YAAG,IAAI;AAAA;AAAA,QAAS;AAAA,SACrD;AAAA,MACA,+CAAC,wBACA;AAAA,sDAAC,+BAAW,IAAI,SAAS,kCAAoB;AAAA,QAC7C;AAAA,UAAC;AAAA;AAAA,YAAU,WAAS;AAAA,YAAC,MAAK;AAAA,YAAQ,MAAK;AAAA,YAAS,OAAO,SAAS;AAAA,YAC/D,UAAU,CAAC,MAAM,aAAa,wBAAwB,SAAS,EAAE,OAAO,KAAK,KAAK,CAAC;AAAA,YACnF,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;AAAA,YAAG,IAAI;AAAA;AAAA,QAAS;AAAA,SACrD;AAAA,MACA,+CAAC,wBACA;AAAA,uDAAC,+BAAW,IAAI,SAAS;AAAA;AAAA,UAAa,8CAAC,UAAK,OAAO,EAAE,OAAO,MAAM,GAAG,eAAC;AAAA,WAAO;AAAA,QAC7E;AAAA,UAAC;AAAA;AAAA,YAAU,WAAS;AAAA,YAAC,MAAK;AAAA,YAAQ,MAAK;AAAA,YAAS,OAAO,SAAS,eAAe;AAAA,YAC9E,UAAU,CAAC,MAAM,aAAa,eAAe,SAAS,EAAE,OAAO,KAAK,KAAK,CAAC;AAAA,YAC1E,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;AAAA,YAAG,IAAI;AAAA;AAAA,QAAS;AAAA,SACrD;AAAA,MACA,+CAAC,wBACA;AAAA,sDAAC,+BAAW,IAAI,SAAS,kCAAoB;AAAA,QAC7C;AAAA,UAAC;AAAA;AAAA,YAAU,WAAS;AAAA,YAAC,MAAK;AAAA,YAAQ,MAAK;AAAA,YAAS,OAAO,SAAS;AAAA,YAC/D,UAAU,CAAC,MAAM,aAAa,wBAAwB,SAAS,EAAE,OAAO,KAAK,KAAK,CAAC;AAAA,YACnF,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;AAAA,YAAG,IAAI;AAAA;AAAA,QAAS;AAAA,SACrD;AAAA,MACA,+CAAC,wBACA;AAAA,sDAAC,+BAAW,IAAI,SAAS,wBAAU;AAAA,QACnC,8CAAC,gCAAY,WAAS,MAAC,MAAK,SAC3B;AAAA,UAAC;AAAA;AAAA,YAAO,OAAO,SAAS;AAAA,YACvB,UAAU,CAAC,MAAM,aAAa,aAAa,EAAE,OAAO,KAAK;AAAA,YACxD,sBAAY,IAAI,CAAC,MAAM,8CAAC,6BAAiB,OAAO,GAAI,eAAd,CAAgB,CAAW;AAAA;AAAA,QACnE,GACD;AAAA,SACD;AAAA,OACD;AAAA,KACD;AAEF;AAEA,SAAS,YAAY,EAAE,UAAU,YAAY,GAAiB;AAC7D,QAAM,eAAe,CAAC,OAAoC,UACzD,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,CAAC,KAAK,GAAG,MAAM,EAAE;AAEpD,QAAM,YAAY,CAAC,QAClB,YAAY,CAAC,SAAU,iCACnB,OADmB;AAAA,IAEtB,YAAY,KAAK,WAAW,SAAS,GAAG,IACrC,KAAK,WAAW,OAAO,CAAC,MAAM,MAAM,GAAG,IACvC,CAAC,GAAG,KAAK,YAAY,GAAG,EAAE,KAAK;AAAA,EACnC,EAAE;AAEH,SACC,+CAAC,wBAAI,IAAI,EAAE,GAAG,IAAI,GACjB;AAAA,kDAAC,+BAAW,IAAI,gBAAgB,gCAAkB;AAAA,IAClD,+CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,qBAAqB,EAAE,IAAI,OAAO,IAAI,WAAW,IAAI,cAAc,GAAG,KAAK,GAAG,IAAI,EAAE,GAC/G;AAAA,qDAAC,wBACA;AAAA,uDAAC,+BAAW,IAAI,SAAS;AAAA;AAAA,UAAW,8CAAC,UAAK,OAAO,EAAE,OAAO,MAAM,GAAG,eAAC;AAAA,WAAO;AAAA,QAC3E;AAAA,UAAC;AAAA;AAAA,YAAU,WAAS;AAAA,YAAC,MAAK;AAAA,YAAQ,MAAK;AAAA,YAAO,OAAO,SAAS;AAAA,YAC7D,UAAU,CAAC,MAAM,aAAa,aAAa,EAAE,OAAO,KAAK;AAAA,YAAG,IAAI;AAAA;AAAA,QAAS;AAAA,SAC3E;AAAA,MACA,+CAAC,wBACA;AAAA,uDAAC,+BAAW,IAAI,SAAS;AAAA;AAAA,UAAS,8CAAC,UAAK,OAAO,EAAE,OAAO,MAAM,GAAG,eAAC;AAAA,WAAO;AAAA,QACzE;AAAA,UAAC;AAAA;AAAA,YAAU,WAAS;AAAA,YAAC,MAAK;AAAA,YAAQ,MAAK;AAAA,YAAO,OAAO,SAAS;AAAA,YAC7D,UAAU,CAAC,MAAM,aAAa,WAAW,EAAE,OAAO,KAAK;AAAA,YAAG,IAAI;AAAA;AAAA,QAAS;AAAA,SACzE;AAAA,OACD;AAAA,IACA,+CAAC,wBAAI,IAAI,EAAE,IAAI,EAAE,GAChB;AAAA,oDAAC,+BAAW,IAAI,SAAS,sBAAQ;AAAA,MACjC,8CAAC,gCAAY,WAAS,MAAC,MAAK,SAC3B,wDAAC,2BAAO,OAAO,SAAS,UAAU,UAAU,CAAC,MAAM,aAAa,YAAY,EAAE,OAAO,KAAK,GACxF;AAAA,QAAC;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAc;AAAA,QAClD;AAAA,QAAgB;AAAA,QAAgB;AAAA,QAAe;AAAA,QAAa;AAAA,MAC9D,EAAE,IAAI,CAAC,OAAO,8CAAC,6BAAkB,OAAO,IAAK,gBAAhB,EAAmB,CAAW,GAC5D,GACD;AAAA,OACD;AAAA,IACA,+CAAC,wBACA;AAAA,oDAAC,+BAAW,IAAI,SAAS,0BAAY;AAAA,MACrC,8CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,GAAG,UAAU,QAAQ,IAAI,IAAI,GAC5D,uBAAa,IAAI,CAAC,QAClB;AAAA,QAAC;AAAA;AAAA,UAEA,OAAO,IAAI;AAAA,UACX,SAAS,MAAM,UAAU,IAAI,KAAK;AAAA,UAClC,SAAS,SAAS,WAAW,SAAS,IAAI,KAAK,IAAI,WAAW;AAAA,UAC9D,MAAK;AAAA,UACL,IAAI,UAAU,SAAS,WAAW,SAAS,IAAI,KAAK,CAAC;AAAA;AAAA,QALhD,IAAI;AAAA,MAMV,CACA,GACF;AAAA,OACD;AAAA,KACD;AAEF;AAIA,SAAS,gBAAgB;AAAA,EACxB;AAAA,EAAU;AAAA,EAAa;AAAA,EAAiB;AAAA,EAAoB;AAC7D,GAIG;AACF,QAAM,EAAE,UAAU,IAAI,SAAS;AAC/B,QAAM,EAAE,aAAa,YAAY,IAAI,UAAU;AAE/C,QAAM,aAAa,SAAS,cAAc,CAAC;AAC3C,QAAM,aAAa,CAAC,CAAC;AACrB,QAAM,kBAAiB,mDAAiB,mBAAkB,CAAC;AAE3D,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAkB,CAAC,CAAC;AACtD,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAiC,CAAC,CAAC;AACvE,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAmB,CAAC,CAAC;AACrE,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,KAAK;AAClD,QAAM,CAAC,UAAU,WAAW,QAAI,yBAA6B,EAAE,MAAM,IAAI,aAAa,GAAG,CAAC;AAC1F,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAS,KAAK;AAExD,QAAM,iBAAa,4BAAY,YAAY;AAC1C,UAAM,OAAO,MAAM,YAAY;AAC/B,iBAAa,IAAI;AACjB,UAAM,MAA8B,CAAC;AACrC,SAAK,QAAQ,CAAC,MAAM;AAAE,UAAI,EAAE,EAAE,IAAI,EAAE;AAAA,IAAM,CAAC;AAC3C,kBAAc,GAAG;AACjB,2DAAoB;AAAA,EACrB,GAAG,CAAC,aAAa,iBAAiB,CAAC;AAEnC,gCAAU,MAAM;AAAE,eAAW;AAAA,EAAG,GAAG,CAAC,UAAU,CAAC;AAE/C,QAAM,oBAAoB,YAAY;AAjWvC,QAAAA,KAAA;AAkWE,QAAI,CAAC,SAAS,KAAK,KAAK,GAAG;AAC1B,gBAAU,0BAA0B,SAAS;AAC7C;AAAA,IACD;AACA,qBAAiB,IAAI;AACrB,QAAI;AACH,YAAM,YAAY,QAAQ;AAC1B,gBAAU,8BAA8B,SAAS;AACjD,oBAAc,KAAK;AACnB,kBAAY,EAAE,MAAM,IAAI,aAAa,GAAG,CAAC;AACzC,iBAAW;AAAA,IACZ,SAAS,KAAU;AAClB,kBAAU,MAAAA,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,mBAAqB,aAAW,2BAAK,YAAW,0BAA0B,OAAO;AAAA,IAC5F,UAAE;AACD,uBAAiB,KAAK;AAAA,IACvB;AAAA,EACD;AAEA,QAAM,YAAY,IAAI;AAAA,IACrB,aAAa,eAAe,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,OAAO;AAAA,EACpF;AACA,QAAM,kBAAkB,UAAU,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;AAEpE,QAAM,kBAAkB,MAAM;AAC7B,QAAI,iBAAiB,WAAW,EAAG;AACnC,UAAM,WAA+B,iBAAiB,IAAI,CAAC,SAAS;AAAA,MACnE,SAAS;AAAA,MAAK,kBAAkB;AAAA,MAAG,uBAAuB;AAAA,IAC3D,EAAE;AACF,gBAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,YAAY,CAAC,GAAI,KAAK,cAAc,CAAC,GAAI,GAAG,QAAQ,EAAE,EAAE;AAC1F,cAAU,GAAG,iBAAiB,MAAM,mBAAmB,SAAS;AAChE,wBAAoB,CAAC,CAAC;AAAA,EACvB;AAEA,QAAM,oBAAoB,CAAC,YAAoB;AAC9C,gBAAY,CAAC,SAAU,iCACnB,OADmB;AAAA,MAEtB,aAAa,KAAK,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,YAAY,OAAO;AAAA,IACxE,EAAE;AACF,cAAU,iBAAiB,SAAS;AAAA,EACrC;AAEA,QAAM,mBAAmB,CAAC,SAAiB,OAA+B,UAAkB;AAC3F,UAAM,SAAS,SAAS,KAAK,KAAK;AAClC,gBAAY,CAAC,SAAU,iCACnB,OADmB;AAAA,MAEtB,aAAa,KAAK,cAAc,CAAC,GAAG;AAAA,QAAI,CAAC,MACxC,EAAE,YAAY,UAAU,iCAAK,IAAL,EAAQ,CAAC,KAAK,GAAG,OAAO,KAAI;AAAA,MACrD;AAAA,IACD,EAAE;AAAA,EACH;AAEA,SACC,+CAAC,wBAAI,IAAI,EAAE,GAAG,IAAI,GAEhB;AAAA,kBACA;AAAA,MAAC;AAAA;AAAA,QACA,IAAI;AAAA,UACH,UAAU;AAAA,UAAS,OAAO;AAAA,UAAG,QAAQ;AAAA,UACrC,iBAAiB;AAAA,UACjB,SAAS;AAAA,UAAQ,YAAY;AAAA,UAAU,gBAAgB;AAAA,QACxD;AAAA,QACA,SAAS,CAAC,MAAM;AAAE,cAAI,EAAE,WAAW,EAAE,iBAAiB,CAAC,cAAe,eAAc,KAAK;AAAA,QAAG;AAAA,QAE5F,yDAAC,0BAAM,WAAW,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,QAAQ,IAAI,IAAI,GAAG,cAAc,QAAQ,UAAU,UAAU,WAAW,kCAAkC,GACjJ;AAAA,yDAAC,wBAAI,IAAI,iCAAK,iBAAL,EAAqB,iBAAiB,WAAW,OAAO,OAAO,IACvE;AAAA,0DAAC,+BAAW,YAAY,KAAK,UAAS,QAAO,YAAW,8BAA6B,8BAAgB;AAAA,YACrG,8CAAC,+BAAW,MAAK,SAAQ,SAAS,MAAM,CAAC,iBAAiB,cAAc,KAAK,GAAG,IAAI,EAAE,OAAO,OAAO,GAAG,oBAAC;AAAA,aACzG;AAAA,UACA,+CAAC,wBAAI,IAAI,EAAE,GAAG,KAAK,SAAS,QAAQ,eAAe,UAAU,KAAK,IAAI,GACrE;AAAA,2DAAC,wBACA;AAAA,6DAAC,+BAAW,IAAI,SAAS;AAAA;AAAA,gBAAW,8CAAC,UAAK,OAAO,EAAE,OAAO,MAAM,GAAG,eAAC;AAAA,iBAAO;AAAA,cAC3E;AAAA,gBAAC;AAAA;AAAA,kBAAU,WAAS;AAAA,kBAAC,MAAK;AAAA,kBAAQ,OAAO,SAAS;AAAA,kBACjD,UAAU,CAAC,MAAM,YAAY,iCAAK,WAAL,EAAe,MAAM,EAAE,OAAO,MAAM,EAAC;AAAA,kBAAG,IAAI;AAAA;AAAA,cAAS;AAAA,eACpF;AAAA,YACA,+CAAC,wBACA;AAAA,4DAAC,+BAAW,IAAI,SAAS,yBAAW;AAAA,cACpC;AAAA,gBAAC;AAAA;AAAA,kBAAU,WAAS;AAAA,kBAAC,MAAK;AAAA,kBAAQ,WAAS;AAAA,kBAAC,MAAM;AAAA,kBAAG,OAAO,SAAS;AAAA,kBACpE,UAAU,CAAC,MAAM,YAAY,iCAAK,WAAL,EAAe,aAAa,EAAE,OAAO,MAAM,EAAC;AAAA,kBAAG,IAAI;AAAA;AAAA,cAAS;AAAA,eAC3F;AAAA,aACD;AAAA,UACA,+CAAC,wBAAI,IAAI,gBACR;AAAA,0DAAC,aAAU,SAAQ,UAAS,SAAS,MAAM,cAAc,KAAK,GAAG,UAAU,eAAe,oBAAM;AAAA,YAChG;AAAA,cAAC;AAAA;AAAA,gBAAU,SAAS;AAAA,gBAAmB,UAAU;AAAA,gBAChD,WAAW,gBAAgB,8CAAC,qCAAiB,MAAM,IAAI,OAAM,WAAU,IAAK;AAAA,gBAAW;AAAA;AAAA,YAExF;AAAA,aACD;AAAA,WACD;AAAA;AAAA,IACD;AAAA,IAGD,+CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,iBAAiB,IAAI,EAAE,GACxF;AAAA,oDAAC,+BAAW,IAAI,gBAAgB,2BAAa;AAAA,MAC7C,8CAAC,aAAU,WAAW,8CAAC,WAAAE,SAAA,EAAQ,GAAI,SAAS,MAAM,cAAc,IAAI,GAAG,8BAEvE;AAAA,OACD;AAAA,IAGA,+CAAC,wBAAI,IAAI;AAAA,MACR,SAAS;AAAA,MACT,YAAY,EAAE,IAAI,WAAW,IAAI,SAAS;AAAA,MAC1C,eAAe,EAAE,IAAI,UAAU,IAAI,MAAM;AAAA,MACzC,KAAK;AAAA,MAAK,IAAI;AAAA,IACf,GACC;AAAA,oDAAC,gCAAY,MAAK,SAAQ,IAAI,EAAE,MAAM,EAAE,GACvC;AAAA,QAAC;AAAA;AAAA,UACA,UAAQ;AAAA,UACR,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,oBAAoB,EAAE,OAAO,KAAiB;AAAA,UAC/D,cAAY;AAAA,UACZ,aAAa,CAAC,aACZ,SAAsB,WAAW,IAC/B,8CAAC,+BAAW,IAAI,EAAE,OAAO,QAAQ,UAAU,UAAU,GAAG,mCAAqB,IAE9E,8CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,UAAU,QAAQ,KAAK,IAAI,GACpD,mBAAsB,IAAI,CAAC,OAC5B;AAAA,YAAC;AAAA;AAAA,cAAc,MAAK;AAAA,cACnB,OAAO,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE;AAAA,cAC/D,IAAI,EAAE,QAAQ,IAAI,UAAU,WAAW,YAAY,KAAK,iBAAiB,WAAW,OAAO,UAAU;AAAA;AAAA,YAF3F;AAAA,UAE8F,CACzG,GACF;AAAA,UAGH,IAAI;AAAA,YACH,cAAc;AAAA,YAAO,UAAU;AAAA,YAC/B,uBAAuB,EAAE,SAAS,QAAQ,UAAU,QAAQ,KAAK,KAAK,IAAI,KAAK;AAAA,UAChF;AAAA,UACA,WAAW;AAAA,YACV,YAAY,EAAE,IAAI,EAAE,WAAW,KAAK,cAAc,OAAO,IAAI,KAAK,WAAW,8BAA8B,EAAE;AAAA,UAC9G;AAAA,UAEC,0BAAgB,WAAW,IACzB,8CAAC,6BAAS,OAAM,IAAG,UAAQ,MAAC,iCAAmB,IAC/C,gBAAgB,IAAI,CAAC,MACtB,+CAAC,6BAAoB,OAAO,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,IAAI,KAAK,UAAU,UAAU,GAC9E;AAAA;AAAA,cAAC;AAAA;AAAA,gBAAS,MAAK;AAAA,gBAAQ,SAAS,iBAAiB,SAAS,EAAE,EAAE;AAAA,gBAC7D,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,WAAW,iBAAiB,EAAE,OAAO,UAAU,EAAE;AAAA;AAAA,YAAG;AAAA,YAChF,EAAE;AAAA,YAAK;AAAA,YAAO,EAAE;AAAA,YAAG;AAAA,eAHN,EAAE,EAIjB,CACA;AAAA;AAAA,MACH,GACD;AAAA,MACA,8CAAC,aAAU,SAAS,iBAAiB,UAAU,iBAAiB,WAAW,GAAG,IAAI,EAAE,YAAY,SAAS,GAAG,yBAE5G;AAAA,OACD;AAAA,IAGC,WAAW,WAAW,IACtB,8CAAC,0BAAM,SAAQ,YAAW,IAAI,EAAE,GAAG,GAAG,WAAW,UAAU,cAAc,GAAG,aAAa,SAAS,GACjG,wDAAC,+BAAW,IAAI,EAAE,OAAO,QAAQ,UAAU,SAAS,GAAG,+DAEvD,GACD,IAEA,8CAAC,mCAAe,WAAW,wBAAO,SAAQ,YAAW,IAAI,EAAE,cAAc,GAAG,UAAU,UAAU,GAC/F,yDAAC,0BAAM,MAAK,SACX;AAAA,oDAAC,8BACA,yDAAC,6BAAS,IAAI,EAAE,iBAAiB,UAAU,GAC1C;AAAA,sDAAC,8BAAU,IAAI,YAAY,wBAAU;AAAA,QACrC,8CAAC,8BAAU,IAAI,YAAY,+BAAiB;AAAA,QAC5C,8CAAC,8BAAU,IAAI,YAAY,sCAAwB;AAAA,QACnD,8CAAC,8BAAU,IAAI,iCAAM,aAAN,EAA0B,WAAW,QAAQ,IAAG,oBAAM;AAAA,SACtE,GACD;AAAA,MACA,8CAAC,8BACC,qBAAW,IAAI,CAAC,MAAG;AAzgB3B,YAAAF;AA0gBQ,8DAAC,6BAAyB,IAAI,YAC7B;AAAA,wDAAC,8BAAU,IAAI,YACb,qBAAW,EAAE,OAAO,KAAK,mBAAmB,EAAE,OAAO,KAAK,UAAU,EAAE,OAAO,IAC/E;AAAA,UACA,8CAAC,8BAAU,IAAI,YACd,wDAAC,gCAAY,MAAK,SAAQ,IAAI,EAAE,OAAO,IAAI,GAC1C;AAAA,YAAC;AAAA;AAAA,cACA,QAAOA,MAAA,EAAE,qBAAF,OAAAA,MAAsB;AAAA,cAC7B,UAAU,CAAC,MAAM,iBAAiB,EAAE,SAAS,oBAAoB,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,cAEtF,gCAAsB,IAAI,CAAC,QAC3B,8CAAC,6BAAyB,OAAO,IAAI,OAAQ,cAAI,SAAlC,IAAI,KAAoC,CACvD;AAAA;AAAA,UACF,GACD,GACD;AAAA,UACA,8CAAC,8BAAU,IAAI,YACd;AAAA,YAAC;AAAA;AAAA,cAAU,MAAK;AAAA,cAAQ,MAAK;AAAA,cAC5B,OAAO,EAAE;AAAA,cACT,UAAU,CAAC,MAAM,iBAAiB,EAAE,SAAS,yBAAyB,EAAE,OAAO,KAAK;AAAA,cACpF,WAAW;AAAA,gBACV,WAAW,EAAE,KAAK,GAAG,OAAO,EAAE,UAAU,WAAW,SAAS,UAAU,EAAE;AAAA,gBACxE,OAAO;AAAA,kBACN,cACC,8CAAC,mCAAe,UAAS,OACxB,wDAAC,+BAAW,IAAI,EAAE,UAAU,WAAW,OAAO,OAAO,GAAG,eAAC,GAC1D;AAAA,gBAEF;AAAA,cACD;AAAA,cACA,IAAI,EAAE,OAAO,KAAK,4BAA4B,EAAE,cAAc,MAAM,EAAE;AAAA;AAAA,UAAG,GAC3E;AAAA,UACA,8CAAC,8BAAU,IAAI,iCAAM,aAAN,EAA0B,WAAW,QAAQ,IAC3D,wDAAC,aAAU,SAAQ,UAAS,MAAK,SAAQ,SAAS,MAAM,kBAAkB,EAAE,OAAO,GAAG,oBAEtF,GACD;AAAA,aApCc,EAAE,OAqCjB;AAAA,OACA,GACF;AAAA,OACD,GACD;AAAA,KAEF;AAEF;AAIA,SAAS,iBAAiB;AAAA,EACzB;AAAA,EACA;AACD,GAGG;AAjkBH,MAAAA;AAkkBC,QAAM,EAAE,UAAU,IAAI,SAAS;AAC/B,QAAM,EAAE,OAAO,YAAY,YAAY,kBAAkB,qBAAqB,IAAI,SAAS;AAC3F,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAC1C,QAAM,CAAC,UAAU,WAAW,QAAI,yBAA4B,EAAE,aAAa,IAAI,YAAY,IAAI,UAAU,EAAE,CAAC;AAC5G,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,EAAE;AACvC,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAsB,IAAI;AAC9D,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,KAAK;AAChD,QAAM,gBAAY,uBAAyB,IAAI;AAE/C,gCAAU,MAAM;AACf,QAAI,gBAAiB,YAAW,gBAAgB,IAAI,EAAE,MAAM,GAAG,OAAO,IAAI,CAAC;AAAA,EAC5E,GAAG,CAAC,iBAAiB,UAAU,CAAC;AAEhC,MAAI,CAAC,iBAAiB;AACrB,WACC,8CAAC,wBAAI,IAAI,EAAE,GAAG,GAAG,WAAW,SAAS,GACpC,wDAAC,+BAAW,IAAI,EAAE,OAAO,QAAQ,UAAU,UAAU,YAAY,6BAA6B,GAAG,8DAEjG,GACD;AAAA,EAEF;AAEA,QAAM,gBAAgB,YAAY;AAzlBnC,QAAAA,KAAA;AA0lBE,UAAM,MAAM,cAAc,SAAS,WAAW;AAC9C,QAAI,KAAK;AAAE,gBAAU,KAAK,SAAS;AAAG;AAAA,IAAQ;AAC9C,cAAU,IAAI;AACd,QAAI;AACH,YAAM,WAAW,gBAAgB,IAAI,iCAAK,WAAL,EAAe,WAAUA,MAAA,SAAS,aAAT,OAAAA,MAAqB,EAAE,EAAC;AACtF,gBAAU,2BAA2B,SAAS;AAC9C,kBAAY,EAAE,aAAa,IAAI,YAAY,IAAI,UAAU,EAAE,CAAC;AAC5D,iBAAW,gBAAgB,IAAI,EAAE,MAAM,GAAG,OAAO,IAAI,CAAC;AACtD;AAAA,IACD,SAASG,MAAU;AAClB,kBAAU,WAAAA,QAAA,gBAAAA,KAAK,aAAL,mBAAe,SAAf,mBAAqB,aAAWA,QAAA,gBAAAA,KAAK,YAAW,sBAAsB,OAAO;AAAA,IACxF,UAAE;AAAU,gBAAU,KAAK;AAAA,IAAG;AAAA,EAC/B;AAEA,QAAM,eAAe,YAAY;AAxmBlC,QAAAH,KAAA;AAymBE,QAAI,CAAC,WAAY;AACjB,iBAAa,IAAI;AACjB,QAAI;AACH,YAAM,iBAAiB,gBAAgB,IAAI,UAAU;AACrD,gBAAU,+BAA+B,SAAS;AAClD,oBAAc,IAAI;AAClB,UAAI,UAAU,QAAS,WAAU,QAAQ,QAAQ;AACjD,iBAAW,gBAAgB,IAAI,EAAE,MAAM,GAAG,OAAO,IAAI,CAAC;AACtD;AAAA,IACD,SAAS,KAAU;AAClB,kBAAU,MAAAA,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,mBAAqB,aAAW,2BAAK,YAAW,0BAA0B,OAAO;AAAA,IAC5F,UAAE;AAAU,mBAAa,KAAK;AAAA,IAAG;AAAA,EAClC;AAEA,QAAM,iBAAiB,YAAY;AAvnBpC,QAAAA,KAAA;AAwnBE,QAAI;AAAE,YAAM,qBAAqB,gBAAgB,EAAE;AAAA,IAAG,SAC/C,KAAU;AAAE,kBAAU,MAAAA,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,mBAAqB,aAAW,2BAAK,YAAW,mBAAmB,OAAO;AAAA,IAAG;AAAA,EAC3G;AAEA,QAAM,WAAW,MAAM;AAAA,IAAO,CAAC,MAAG;AA5nBnC,UAAAA,KAAA;AA6nBE,cAAC,YAAUA,MAAA,EAAE,eAAF,gBAAAA,IAAc,cAAc,SAAS,OAAO,YAAY,SAAM,OAAE,gBAAF,mBAAe,SAAS;AAAA;AAAA,EAClG;AAEA,SACC,+CAAC,wBAAI,IAAI,EAAE,GAAG,IAAI,GACjB;AAAA,kDAAC,+BAAW,IAAI,gBAAgB,+BAAiB;AAAA,IACjD,+CAAC,0BAAM,SAAQ,YAAW,IAAI,EAAE,GAAG,GAAG,IAAI,KAAK,cAAc,EAAE,GAC9D;AAAA,qDAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,qBAAqB,EAAE,IAAI,OAAO,IAAI,WAAW,IAAI,cAAc,GAAG,KAAK,GAAG,IAAI,EAAE,GAC/G;AAAA,uDAAC,wBACA;AAAA,yDAAC,+BAAW,IAAI,SAAS;AAAA;AAAA,YAAa,8CAAC,UAAK,OAAO,EAAE,OAAO,MAAM,GAAG,eAAC;AAAA,aAAO;AAAA,UAC7E;AAAA,YAAC;AAAA;AAAA,cAAU,WAAS;AAAA,cAAC,MAAK;AAAA,cAAQ,aAAY;AAAA,cAAc,OAAO,SAAS;AAAA,cAC3E,UAAU,CAAC,MAAM,YAAY,CAAC,MAAO,iCAAK,IAAL,EAAQ,aAAa,EAAE,OAAO,MAAM,QAAQ,iBAAiB,EAAE,EAAE,EAAE;AAAA,cACxG,OAAO,CAAC,CAAC,SAAS,eAAe,CAAC,CAAC,cAAc,SAAS,WAAW;AAAA,cACrE,YAAY,SAAS,cAAc,cAAc,SAAS,WAAW,KAAK,KAAK;AAAA,cAC/E,IAAI;AAAA;AAAA,UAAS;AAAA,WACf;AAAA,QACA,+CAAC,wBACA;AAAA,wDAAC,+BAAW,IAAI,SAAS,yBAAW;AAAA,UACpC;AAAA,YAAC;AAAA;AAAA,cAAU,WAAS;AAAA,cAAC,MAAK;AAAA,cAAQ,OAAO,SAAS,cAAc;AAAA,cAC/D,UAAU,CAAC,MAAM,YAAY,CAAC,MAAO,iCAAK,IAAL,EAAQ,YAAY,EAAE,OAAO,MAAM,EAAE;AAAA,cAAG,IAAI;AAAA;AAAA,UAAS;AAAA,WAC5F;AAAA,QACA,+CAAC,wBACA;AAAA,wDAAC,+BAAW,IAAI,SAAS,oBAAM;AAAA,UAC/B;AAAA,YAAC;AAAA;AAAA,cAAU,WAAS;AAAA,cAAC,MAAK;AAAA,cAAQ,OAAO,SAAS,UAAU;AAAA,cAC3D,UAAU,CAAC,MAAM,YAAY,CAAC,MAAO,iCAAK,IAAL,EAAQ,QAAQ,EAAE,OAAO,MAAM,EAAE;AAAA,cAAG,IAAI;AAAA;AAAA,UAAS;AAAA,WACxF;AAAA,QACA,+CAAC,wBACA;AAAA,wDAAC,+BAAW,IAAI,SAAS,sBAAQ;AAAA,UACjC,8CAAC,gCAAY,WAAS,MAAC,MAAK,SAC3B;AAAA,YAAC;AAAA;AAAA,cAAO,QAAOA,MAAA,SAAS,aAAT,OAAAA,MAAqB;AAAA,cACnC,UAAU,CAAC,MAAM,YAAY,CAAC,MAAO,iCAAK,IAAL,EAAQ,UAAU,OAAO,EAAE,OAAO,KAAK,EAAE,EAAE;AAAA,cAC/E,gCAAsB,IAAI,CAAC,QAAQ,8CAAC,6BAAyB,OAAO,IAAI,OAAQ,cAAI,SAAlC,IAAI,KAAoC,CAAW;AAAA;AAAA,UACvG,GACD;AAAA,WACD;AAAA,QACA,+CAAC,wBAAI,IAAI,EAAE,YAAY,SAAS,GAC/B;AAAA,wDAAC,+BAAW,IAAI,SAAS,mBAAK;AAAA,UAC9B;AAAA,YAAC;AAAA;AAAA,cAAU,WAAS;AAAA,cAAC,MAAK;AAAA,cAAQ,WAAS;AAAA,cAAC,SAAS;AAAA,cAAG,SAAS;AAAA,cAChE,OAAO,SAAS,SAAS;AAAA,cACzB,UAAU,CAAC,MAAM,YAAY,CAAC,MAAO,iCAAK,IAAL,EAAQ,OAAO,EAAE,OAAO,MAAM,EAAE;AAAA,cAAG,IAAI;AAAA;AAAA,UAAS;AAAA,WACvF;AAAA,SACD;AAAA,MACA,8CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,gBAAgB,WAAW,GACtD;AAAA,QAAC;AAAA;AAAA,UAAU,SAAS;AAAA,UAAe,UAAU;AAAA,UAC5C,WAAW,SAAS,8CAAC,qCAAiB,MAAM,IAAI,OAAM,WAAU,IAAK;AAAA,UAAW;AAAA;AAAA,MAEjF,GACD;AAAA,OACD;AAAA,IAEA,8CAAC,+BAAW,IAAI,gBAAgB,oCAAsB;AAAA,IACtD,+CAAC,0BAAM,SAAQ,YAAW,IAAI,EAAE,GAAG,GAAG,IAAI,KAAK,cAAc,EAAE,GAC9D;AAAA,qDAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,KAAK,UAAU,OAAO,GAC5E;AAAA,sDAAC,aAAU,SAAQ,YAAW,WAAW,8CAAC,kBAAAI,SAAA,EAAe,GAAI,SAAS,MAAG;AAlrB9E,cAAAJ;AAkrBiF,kBAAAA,MAAA,UAAU,YAAV,gBAAAA,IAAmB;AAAA,WAAS,yBAExG;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YAAM,KAAK;AAAA,YAAW,MAAK;AAAA,YAAO,QAAO;AAAA,YAAkB,QAAM;AAAA,YACjE,UAAU,CAAC,MAAM;AAtrBvB,kBAAAA;AAurBO,oBAAM,KAAIA,MAAA,EAAE,OAAO,UAAT,gBAAAA,IAAiB;AAC3B,kBAAI,CAAC,EAAG;AACR,kBAAI,CAAC,CAAC,QAAQ,SAAS,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,EAAE,SAAS,GAAG,CAAC,GAAG;AACjF,0BAAU,qCAAqC,SAAS;AAAG;AAAA,cAC5D;AACA,4BAAc,CAAC;AAAA,YAChB;AAAA;AAAA,QAAG;AAAA,QACJ,8CAAC,+BAAW,IAAI,EAAE,UAAU,WAAW,OAAO,QAAQ,MAAM,GAAG,YAAY,6BAA6B,GACtG,uBAAa,WAAW,OAAO,kBACjC;AAAA,QACC,cACA;AAAA,UAAC;AAAA;AAAA,YAAU,SAAQ;AAAA,YAAS,MAAK;AAAA,YAChC,SAAS,MAAM;AAAE,4BAAc,IAAI;AAAG,kBAAI,UAAU,QAAS,WAAU,QAAQ,QAAQ;AAAA,YAAI;AAAA,YAAG;AAAA;AAAA,QAE/F;AAAA,QAED,8CAAC,aAAU,SAAQ,YAAW,WAAW,8CAAC,gBAAAK,SAAA,EAAa,GAAI,SAAS,gBAAgB,6BAEpF;AAAA,SACD;AAAA,MACA,8CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,gBAAgB,YAAY,IAAI,IAAI,GAC/D;AAAA,QAAC;AAAA;AAAA,UAAU,SAAS;AAAA,UAAc,UAAU,aAAa,CAAC;AAAA,UACzD,WAAW,YAAY,8CAAC,qCAAiB,MAAM,IAAI,OAAM,WAAU,IAAK;AAAA,UAAW;AAAA;AAAA,MAEpF,GACD;AAAA,OACD;AAAA,IAEA,+CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,iBAAiB,IAAI,IAAI,GAC1F;AAAA,qDAAC,+BAAW,IAAI,gBAAgB;AAAA;AAAA,QAAQ,MAAM;AAAA,QAAO;AAAA,SAAC;AAAA,MACtD;AAAA,QAAC;AAAA;AAAA,UAAc,MAAK;AAAA,UAAQ,OAAO;AAAA,UAAQ,UAAU,CAAC,MAAM,UAAU,EAAE,OAAO,KAAK;AAAA,UAAG,aAAY;AAAA,UAClG,IAAI,EAAE,OAAO,KAAK,UAAU,WAAW,QAAQ,IAAI,cAAc,OAAO;AAAA,UACxE,gBAAgB,8CAAC,mCAAe,UAAS,SAAQ,wDAAC,eAAAC,SAAA,EAAW,IAAI,EAAE,UAAU,IAAI,OAAO,OAAO,GAAG,GAAE;AAAA;AAAA,MAAmB;AAAA,OACzH;AAAA,IACC,SAAS,WAAW,IACpB,8CAAC,0BAAM,SAAQ,YAAW,IAAI,EAAE,GAAG,GAAG,WAAW,UAAU,cAAc,GAAG,aAAa,SAAS,GACjG,wDAAC,+BAAW,IAAI,EAAE,OAAO,QAAQ,UAAU,SAAS,GAClD,gBAAM,WAAW,IAAI,kBAAkB,+BACzC,GACD,IAEA,8CAAC,mCAAe,WAAW,wBAAO,SAAQ,YAAW,IAAI,EAAE,cAAc,GAAG,UAAU,UAAU,GAC/F,yDAAC,0BAAM,MAAK,SACX;AAAA,oDAAC,8BACA,yDAAC,6BAAS,IAAI,EAAE,iBAAiB,UAAU,GAC1C;AAAA,sDAAC,8BAAU,IAAI,YAAY,0BAAY;AAAA,QACvC,8CAAC,8BAAU,IAAI,YAAY,oBAAM;AAAA,QACjC,8CAAC,8BAAU,IAAI,YAAY,oBAAM;AAAA,QACjC,8CAAC,8BAAU,IAAI,YAAY,sBAAQ;AAAA,QACnC,8CAAC,8BAAU,IAAI,YAAY,0BAAY;AAAA,QACvC,8CAAC,8BAAU,IAAI,YAAY,mBAAK;AAAA,SACjC,GACD;AAAA,MACA,8CAAC,8BACC,mBAAS,IAAI,CAAC,SAAM;AA7uB5B,YAAAN;AA8uBQ,8DAAC,6BAAuB,IAAI,YAC3B;AAAA,wDAAC,8BAAU,IAAI,YAAa,eAAK,aAAY;AAAA,UAC7C,8CAAC,8BAAU,IAAI,YACd,wDAAC,yBAAK,OAAO,KAAK,UAAU,WAAW,MAAK,SAAQ,IAAI,iBAAiB,KAAK,MAAM,GAAG,GACxF;AAAA,UACA,8CAAC,8BAAU,IAAI,YAAa,eAAK,UAAU,IAAG;AAAA,UAC9C,8CAAC,8BAAU,IAAI,YAAa,WAAAA,MAAA,KAAK,iBAAL,OAAAA,MAAqB,GAAE;AAAA,UACnD,8CAAC,8BAAU,IAAI,YAAa,eAAK,eAAe,IAAG;AAAA,UACnD,8CAAC,8BAAU,IAAI,iCAAM,aAAN,EAA0B,UAAU,KAAK,UAAU,UAAU,cAAc,YAAY,YAAY,SAAS,IACzH,eAAK,QAAQ,8CAAC,4BAAQ,OAAO,KAAK,OAAO,OAAK,MAAC,WAAU,OAAM,wDAAC,UAAM,eAAK,OAAM,GAAO,IAAa,IACvG;AAAA,aAVc,KAAK,EAWpB;AAAA,OACA,GACF;AAAA,OACD,GACD;AAAA,KAEF;AAEF;AAsPA,SAAS,cAAc;AAAA,EACtB;AAAA,EAAM;AAAA,EAAO;AAAA,EAAS;AAAA,EAAS;AAAA,EAAW;AAC3C,GAAsH;AACrH,MAAI,CAAC,KAAM,QAAO;AAClB,SACC;AAAA,IAAC;AAAA;AAAA,MACA,IAAI,EAAE,UAAU,SAAS,OAAO,GAAG,QAAQ,MAAM,iBAAiB,oBAAoB,SAAS,QAAQ,YAAY,UAAU,gBAAgB,SAAS;AAAA,MACtJ,SAAS,CAAC,MAAM;AAAE,YAAI,EAAE,WAAW,EAAE,cAAe,SAAQ;AAAA,MAAG;AAAA,MAE/D,yDAAC,0BAAM,WAAW,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,QAAQ,IAAI,IAAI,GAAG,cAAc,QAAQ,UAAU,UAAU,WAAW,8BAA8B,GAC7I;AAAA,uDAAC,wBAAI,IAAI,iCAAK,iBAAL,EAAqB,cAAc,QAAQ,IAAI,EAAE,IACzD;AAAA,wDAAC,+BAAW,YAAY,KAAK,UAAS,QAAO,YAAW,8BAA8B,iBAAM;AAAA,UAC5F,8CAAC,+BAAW,MAAK,SAAQ,SAAS,SAAS,oBAAC;AAAA,WAC7C;AAAA,QACA,8CAAC,wBAAI,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,GAC3B,wDAAC,+BAAW,UAAS,WAAU,OAAM,QAAO,YAAW,8BAA8B,mBAAQ,GAC9F;AAAA,QACA,+CAAC,wBAAI,IAAI,gBACR;AAAA,wDAAC,aAAU,SAAQ,UAAS,SAAS,SAAS,oBAAM;AAAA,UACpD;AAAA,YAAC;AAAA;AAAA,cAAU,SAAQ;AAAA,cAAS,SAAS;AAAA,cAAW,UAAU;AAAA,cACzD,WAAW,UAAU,8CAAC,qCAAiB,MAAM,IAAI,OAAM,WAAU,IAAK;AAAA,cAAW;AAAA;AAAA,UAElF;AAAA,WACD;AAAA,SACD;AAAA;AAAA,EACD;AAEF;AAIA,SAAS,kBAAkB;AAAA,EAC1B;AAAA,EAAM;AAAA,EAAM;AAAA,EAAc;AAAA,EAAW;AAAA,EAAU;AAAA,EAAoB;AACpE,GAQG;AACF,QAAM,cAAU,uBAAyB,IAAI;AAC7C,MAAI,CAAC,KAAM,QAAO;AAElB,SACC;AAAA,IAAC;AAAA;AAAA,MACA,IAAI,EAAE,UAAU,SAAS,OAAO,GAAG,QAAQ,MAAM,iBAAiB,oBAAoB,SAAS,QAAQ,YAAY,UAAU,gBAAgB,SAAS;AAAA,MACtJ,SAAS,CAAC,MAAM;AAAE,YAAI,EAAE,WAAW,EAAE,cAAe,SAAQ;AAAA,MAAG;AAAA,MAE/D,yDAAC,0BAAM,WAAW,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,QAAQ,IAAI,IAAI,GAAG,cAAc,QAAQ,UAAU,UAAU,WAAW,kCAAkC,GACjJ;AAAA,uDAAC,wBAAI,IAAI,iCAAK,iBAAL,EAAqB,iBAAiB,WAAW,OAAO,OAAO,IACvE;AAAA,wDAAC,+BAAW,YAAY,KAAK,UAAS,QAAO,YAAW,8BAA6B,0BAAY;AAAA,UACjG,8CAAC,+BAAW,MAAK,SAAQ,SAAS,SAAS,IAAI,EAAE,OAAO,OAAO,GAAG,oBAAC;AAAA,WACpE;AAAA,QACA,+CAAC,wBAAI,IAAI,EAAE,GAAG,IAAI,GACjB;AAAA,wDAAC,+BAAW,UAAS,WAAU,OAAM,QAAO,YAAW,8BAA6B,IAAI,GAAG,kFAE3F;AAAA,UACA,+CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,KAAK,UAAU,QAAQ,IAAI,IAAI,GACrF;AAAA;AAAA,cAAC;AAAA;AAAA,gBAAU,SAAQ;AAAA,gBAAW,WAAW,8CAAC,kBAAAI,SAAA,EAAe;AAAA,gBACxD,SAAS,MAAG;AApjCnB,sBAAAJ;AAojCsB,0BAAAA,MAAA,QAAQ,YAAR,gBAAAA,IAAiB;AAAA;AAAA,gBAAS;AAAA;AAAA,YAE1C;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBAAM,KAAK;AAAA,gBAAS,MAAK;AAAA,gBAAO,QAAO;AAAA,gBAAkB,QAAM;AAAA,gBAC/D,UAAU,CAAC,MAAM;AAxjCxB,sBAAAA;AAyjCQ,wBAAM,KAAIA,MAAA,EAAE,OAAO,UAAT,gBAAAA,IAAiB;AAC3B,sBAAI,CAAC,EAAG;AACR,sBAAI,CAAC,QAAO,SAAQ,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,EAAE,SAAS,GAAG,CAAC,EAAG,cAAa,CAAC;AAAA,gBAC9F;AAAA;AAAA,YAAG;AAAA,YACJ,8CAAC,+BAAW,IAAI,EAAE,UAAU,WAAW,OAAO,QAAQ,MAAM,GAAG,YAAY,6BAA6B,GACtG,iBAAO,KAAK,OAAO,kBACrB;AAAA,YACC,QACA;AAAA,cAAC;AAAA;AAAA,gBAAU,SAAQ;AAAA,gBAAS,MAAK;AAAA,gBAChC,SAAS,MAAM;AAAE,+BAAa,IAAI;AAAG,sBAAI,QAAQ,QAAS,SAAQ,QAAQ,QAAQ;AAAA,gBAAI;AAAA,gBAAG;AAAA;AAAA,YAE1F;AAAA,aAEF;AAAA,UACA,8CAAC,aAAU,SAAQ,YAAW,WAAW,8CAAC,gBAAAK,SAAA,EAAa,GAAI,SAAS,oBAAoB,+BAExF;AAAA,WACD;AAAA,QACA,+CAAC,wBAAI,IAAI,gBACR;AAAA,wDAAC,aAAU,SAAQ,UAAS,SAAS,SAAS,oBAAM;AAAA,UACpD;AAAA,YAAC;AAAA;AAAA,cAAU,SAAS;AAAA,cAAU,UAAU,aAAa,CAAC;AAAA,cACrD,WAAW,YAAY,8CAAC,qCAAiB,MAAM,IAAI,OAAM,WAAU,IAAK;AAAA,cAAW;AAAA;AAAA,UAEpF;AAAA,WACD;AAAA,SACD;AAAA;AAAA,EACD;AAEF;AArlCA,IAAAE,gBACAC,kBA2BA,YACA,gBACA,oBACA,qBACA,eACA,iBACA,aACAC,eACAC,eACAC,mBACA,gBACAC,gBACA,iBACA,mBAqHGC,sBAonBG,gBA+JA,eAwKA,kBAs8BA,WAMC;AAriEP;AAAA;AAAA;AAAA,IAAAN,iBAAsE;AACtE,IAAAC,mBA0BO;AACP,iBAAoB;AACpB,qBAAwB;AACxB,yBAA4B;AAC5B,0BAA6B;AAC7B,oBAAuB;AACvB,sBAAyB;AACzB,kBAAqB;AACrB,IAAAC,gBAAsB;AACtB,IAAAC,gBAAsB;AACtB,IAAAC,oBAA0B;AAC1B,qBAAwB;AACxB,IAAAC,iBAAuB;AACvB,sBAAyB;AACzB,wBAA2B;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;AASA;AAwFG,IAAAC,uBAAA;AAonBH,IAAM,qBAAiB,qBAAK,SAASC,gBAAe;AAAA,MACnD;AAAA,MAAM;AAAA,MAAiB;AAAA,MAAU;AAAA,MAAa;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAC9D;AAAA,MAAoB;AAAA,MAAmB;AAAA,IACxC,GAAwB;AACvB,YAAM,EAAE,UAAU,IAAI,SAAS;AAC/B,YAAM,CAAC,KAAK,MAAM,QAAI,yBAAS,CAAC;AAChC,oCAAU,MAAM;AAAE,YAAI,KAAM,QAAO,CAAC;AAAA,MAAG,GAAG,CAAC,IAAI,CAAC;AAChD,UAAI,CAAC,KAAM,QAAO;AAElB,YAAM,aAAa,CAAC,cAAc,yBAAyB,8BAA8B,iBAAiB,OAAO;AACjH,YAAM,cAAc;AACpB,YAAM,mBAAmB,CAAC;AAE1B,YAAM,cAAc,CAAC,MAAuB;AAC3C,YAAI,MAAM,GAAG;AACZ,cAAI,CAAC,SAAS,KAAK,KAAK,GAAG;AAAE,sBAAU,6BAA6B,SAAS;AAAG,mBAAO;AAAA,UAAO;AAC9F,cAAI,CAAC,SAAS,cAAc;AAAE,sBAAU,6BAA6B,SAAS;AAAG,mBAAO;AAAA,UAAO;AAC/F,cAAI,CAAC,SAAS,aAAa;AAAE,sBAAU,4BAA4B,SAAS;AAAG,mBAAO;AAAA,UAAO;AAAA,QAC9F;AACA,YAAI,MAAM,GAAG;AACZ,cAAI,CAAC,SAAS,oBAAoB;AAAE,sBAAU,oCAAoC,SAAS;AAAG,mBAAO;AAAA,UAAO;AAC5G,cAAI,CAAC,SAAS,aAAa;AAAE,sBAAU,4BAA4B,SAAS;AAAG,mBAAO;AAAA,UAAO;AAAA,QAC9F;AACA,YAAI,MAAM,GAAG;AACZ,cAAI,CAAC,SAAS,WAAW;AAAE,sBAAU,0BAA0B,SAAS;AAAG,mBAAO;AAAA,UAAO;AACzF,cAAI,CAAC,SAAS,SAAS;AAAE,sBAAU,wBAAwB,SAAS;AAAG,mBAAO;AAAA,UAAO;AAAA,QACtF;AACA,eAAO;AAAA,MACR;AAEA,YAAM,kBAAkB,CAAC,WAAmB;AAC3C,YAAI,WAAW,KAAK,iBAAkB;AACtC,YAAI,SAAS,OAAO,CAAC,YAAY,GAAG,EAAG;AACvC,eAAO,MAAM;AAAA,MACd;AAEA,aACC;AAAA,QAAC;AAAA;AAAA,UACA,IAAI;AAAA,YACH,UAAU;AAAA,YAAS,OAAO;AAAA,YAAG,QAAQ;AAAA,YACrC,iBAAiB;AAAA,YACjB,SAAS;AAAA,YAAQ,YAAY;AAAA,YAAU,gBAAgB;AAAA,UACxD;AAAA,UACA,SAAS,CAAC,MAAM;AAAE,gBAAI,EAAE,WAAW,EAAE,cAAe,SAAQ;AAAA,UAAG;AAAA,UAE/D;AAAA,YAAC;AAAA;AAAA,cACA,WAAW;AAAA,cACX,IAAI;AAAA,gBACH,OAAO,EAAE,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI;AAAA,gBACtC,WAAW;AAAA,gBACX,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,cAAc;AAAA,gBACd,UAAU;AAAA,gBACV,WAAW;AAAA,cACZ;AAAA,cAGA;AAAA,+DAAC,wBAAI,IAAI,iCACL,iBADK;AAAA,kBAER,iBAAiB;AAAA,kBACjB,OAAO;AAAA,kBACP,yBAAyB,EAAE,OAAO,OAAO;AAAA,gBAC1C,IACC;AAAA,gEAAC,+BAAW,YAAY,KAAK,UAAS,QAAO,YAAW,8BACtD,4BAAkB,kBAAkB,mBACtC;AAAA,kBACA,8CAAC,+BAAW,MAAK,SAAQ,SAAS,SAAS,IAAI,EAAE,OAAO,OAAO,GAAG,oBAAC;AAAA,mBACpE;AAAA,gBAGA;AAAA,kBAAC;AAAA;AAAA,oBACA,OAAO;AAAA,oBACP,UAAU,CAAC,GAAG,MAAM,gBAAgB,CAAC;AAAA,oBACrC,SAAQ;AAAA,oBACR,eAAc;AAAA,oBACd,IAAI;AAAA,sBACH,cAAc;AAAA,sBACd,WAAW;AAAA,sBACX,kBAAkB;AAAA,wBACjB,UAAU;AAAA,wBACV,WAAW;AAAA,wBACX,eAAe;AAAA,wBACf,YAAY;AAAA,wBACZ,YAAY;AAAA,sBACb;AAAA,sBACA,mBAAmB,EAAE,OAAO,UAAU;AAAA,oBACvC;AAAA,oBACA,mBAAmB,EAAE,OAAO,EAAE,QAAQ,GAAG,iBAAiB,WAAW,cAAc,cAAc,EAAE;AAAA,oBAElG,qBAAW,IAAI,CAAC,OAAO,MACvB,8CAAC,wBAAgB,OAAc,OAAO,GAAG,UAAU,MAAM,KAAK,oBAApD,KAAsE,CAChF;AAAA;AAAA,gBACF;AAAA,gBAGA,+CAAC,wBAAI,IAAI,EAAE,MAAM,GAAG,WAAW,QAAQ,WAAW,IAAI,GACpD;AAAA,0BAAQ,KAAK,8CAAC,gBAAa,UAAoB,aAA0B,YAAY,CAAC,CAAC,iBAAiB;AAAA,kBACxG,QAAQ,KAAK,8CAAC,oBAAiB,UAAoB,aAA0B;AAAA,kBAC7E,QAAQ,KAAK,8CAAC,eAAY,UAAoB,aAA0B;AAAA,kBACxE,QAAQ,KACR;AAAA,oBAAC;AAAA;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA;AAAA,kBACD;AAAA,kBAEA,QAAQ,KACR;AAAA,oBAAC;AAAA;AAAA,sBACA;AAAA,sBACA;AAAA;AAAA,kBACD;AAAA,mBAEF;AAAA,gBAGA,+CAAC,wBAAI,IAAI,gBACR;AAAA,gEAAC,aAAU,SAAQ,UAAS,SAAS,SAAS,oBAAM;AAAA,kBACnD,MAAM,KACN,8CAAC,aAAU,SAAQ,YAAW,SAAS,MAAM,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,kBAAI;AAAA,kBAEvE,MAAM,eACN,8CAAC,aAAU,SAAS,MAAM,gBAAgB,MAAM,CAAC,GAAG,kBAAI;AAAA,kBAExD,QAAQ,eACR;AAAA,oBAAC;AAAA;AAAA,sBACA,aAAa;AAAA,wBACZ,kBACG,gBAAgB,mBAChB,gBAAgB;AAAA,wBACnB,gBAAgB;AAAA,sBACjB;AAAA,sBACA,cAAc;AAAA,sBAEd;AAAA,wBAAC;AAAA;AAAA,0BAAU,SAAS;AAAA,0BAAQ,UAAU;AAAA,0BACrC,WAAW,SAAS,8CAAC,qCAAiB,MAAM,IAAI,OAAM,WAAU,IAAK;AAAA,0BACpE,4BAAkB,WAAW;AAAA;AAAA,sBAC/B;AAAA;AAAA,kBACD;AAAA,mBAEF;AAAA;AAAA;AAAA,UACD;AAAA;AAAA,MACD;AAAA,IAEF,CAAC;AAaD,IAAM,oBAAgB,qBAAK,SAASC,eAAc;AAAA,MACjD;AAAA,MAAM;AAAA,MAAM;AAAA,MAAU;AAAA,MAAQ;AAAA,MAAQ;AAAA,IACvC,GAAuB;AAn7BvB,UAAAf;AAo7BC,UAAI,CAAC,KAAM,QAAO;AAClB,YAAM,aAAa,KAAK,cAAc,cAAc,KAAK,WAAW,IAAI;AAExE,aACC;AAAA,QAAC;AAAA;AAAA,UACA,IAAI;AAAA,YACH,UAAU;AAAA,YAAS,OAAO;AAAA,YAAG,QAAQ;AAAA,YACrC,iBAAiB;AAAA,YACjB,SAAS;AAAA,YAAQ,YAAY;AAAA,YAAU,gBAAgB;AAAA,UACxD;AAAA,UACA,SAAS,CAAC,MAAM;AAAE,gBAAI,EAAE,WAAW,EAAE,cAAe,SAAQ;AAAA,UAAG;AAAA,UAE/D,yDAAC,0BAAM,WAAW,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,GAAG,cAAc,QAAQ,UAAU,UAAU,WAAW,kCAAkC,GAC1J;AAAA,2DAAC,wBAAI,IAAI,iCAAK,iBAAL,EAAqB,iBAAiB,WAAW,OAAO,OAAO,IACvE;AAAA,4DAAC,+BAAW,YAAY,KAAK,UAAS,QAAO,YAAW,8BAA6B,sBAAQ;AAAA,cAC7F,8CAAC,+BAAW,MAAK,SAAQ,SAAS,SAAS,IAAI,EAAE,OAAO,OAAO,GAAG,oBAAC;AAAA,eACpE;AAAA,YACA,8CAAC,wBAAI,IAAI,EAAE,GAAG,IAAI,GACjB,yDAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,qBAAqB,EAAE,IAAI,OAAO,IAAI,WAAW,IAAI,cAAc,GAAG,KAAK,EAAE,GACxG;AAAA,6DAAC,wBACA;AAAA,+DAAC,+BAAW,IAAI,SAAS;AAAA;AAAA,kBAAa,8CAAC,UAAK,OAAO,EAAE,OAAO,MAAM,GAAG,eAAC;AAAA,mBAAO;AAAA,gBAC7E;AAAA,kBAAC;AAAA;AAAA,oBAAU,WAAS;AAAA,oBAAC,MAAK;AAAA,oBAAQ,aAAY;AAAA,oBAC7C,OAAO,KAAK;AAAA,oBACZ,UAAU,CAAC,MAAM,SAAS,iCAAK,OAAL,EAAW,aAAa,EAAE,OAAO,MAAM,QAAQ,iBAAiB,EAAE,EAAE,EAAC;AAAA,oBAC/F,OAAO,CAAC,CAAC;AAAA,oBAAY,YAAY,cAAc;AAAA,oBAAI,IAAI;AAAA;AAAA,gBAAS;AAAA,iBAClE;AAAA,cACA,+CAAC,wBACA;AAAA,8DAAC,+BAAW,IAAI,SAAS,yBAAW;AAAA,gBACpC;AAAA,kBAAC;AAAA;AAAA,oBAAU,WAAS;AAAA,oBAAC,MAAK;AAAA,oBAAQ,OAAO,KAAK,cAAc;AAAA,oBAC3D,UAAU,CAAC,MAAM,SAAS,iCAAK,OAAL,EAAW,YAAY,EAAE,OAAO,MAAM,EAAC;AAAA,oBAAG,IAAI;AAAA;AAAA,gBAAS;AAAA,iBACnF;AAAA,cACA,+CAAC,wBACA;AAAA,8DAAC,+BAAW,IAAI,SAAS,oBAAM;AAAA,gBAC/B;AAAA,kBAAC;AAAA;AAAA,oBAAU,WAAS;AAAA,oBAAC,MAAK;AAAA,oBAAQ,OAAO,KAAK,UAAU;AAAA,oBACvD,UAAU,CAAC,MAAM,SAAS,iCAAK,OAAL,EAAW,QAAQ,EAAE,OAAO,MAAM,EAAC;AAAA,oBAAG,IAAI;AAAA;AAAA,gBAAS;AAAA,iBAC/E;AAAA,cACA,+CAAC,wBACA;AAAA,8DAAC,+BAAW,IAAI,SAAS,sBAAQ;AAAA,gBACjC,8CAAC,gCAAY,WAAS,MAAC,MAAK,SAC3B;AAAA,kBAAC;AAAA;AAAA,oBAAO,QAAOA,MAAA,KAAK,aAAL,OAAAA,MAAiB;AAAA,oBAC/B,UAAU,CAAC,MAAM,SAAS,iCAAK,OAAL,EAAW,UAAU,OAAO,EAAE,OAAO,KAAK,EAAE,EAAC;AAAA,oBACtE,gCAAsB,IAAI,CAAC,MAAM,8CAAC,6BAAuB,OAAO,EAAE,OAAQ,YAAE,SAA5B,EAAE,KAAgC,CAAW;AAAA;AAAA,gBAC/F,GACD;AAAA,iBACD;AAAA,cACA,+CAAC,wBAAI,IAAI,EAAE,YAAY,SAAS,GAC/B;AAAA,8DAAC,+BAAW,IAAI,SAAS,mBAAK;AAAA,gBAC9B;AAAA,kBAAC;AAAA;AAAA,oBAAU,WAAS;AAAA,oBAAC,MAAK;AAAA,oBAAQ,WAAS;AAAA,oBAAC,SAAS;AAAA,oBAAG,SAAS;AAAA,oBAChE,OAAO,KAAK,SAAS;AAAA,oBACrB,UAAU,CAAC,MAAM,SAAS,iCAAK,OAAL,EAAW,OAAO,EAAE,OAAO,MAAM,EAAC;AAAA,oBAAG,IAAI;AAAA;AAAA,gBAAS;AAAA,iBAC9E;AAAA,eACD,GACD;AAAA,YACA,+CAAC,wBAAI,IAAI,gBACR;AAAA,4DAAC,aAAU,SAAQ,UAAS,SAAS,SAAS,oBAAM;AAAA,cACpD;AAAA,gBAAC;AAAA;AAAA,kBAAU,SAAS;AAAA,kBAAQ,UAAU;AAAA,kBACrC,WAAW,SAAS,8CAAC,qCAAiB,MAAM,IAAI,OAAM,WAAU,IAAK;AAAA,kBAAW;AAAA;AAAA,cAEjF;AAAA,eACD;AAAA,aACD;AAAA;AAAA,MACD;AAAA,IAEF,CAAC;AAsGD,IAAM,uBAAmB,qBAAK,SAASgB,oBAAmB;AAzlC1D,UAAAhB,KAAA;AA0lCC,YAAM,YAAQ,2BAAS;AACvB,YAAM,EAAE,UAAU,IAAI,SAAS;AAC/B,YAAM,EAAE,cAAc,IAAI,kBAAkB;AAC5C,YAAM,aAAa,iBAAiB;AACpC,YAAM,cAAc,WAAW,WAAW;AAC1C,YAAM,wBAAwB,cAAc,gBAAgB,aAAa;AAEzE,YAAM;AAAA,QACL;AAAA,QAAW;AAAA,QACX;AAAA,QAAgB;AAAA,QAChB;AAAA,QAAgB;AAAA,QAChB;AAAA,QAAkB;AAAA,QAAe;AAAA,MAClC,IAAI,aAAa;AAEjB,YAAM;AAAA,QACL;AAAA,QAAO;AAAA,QAAW;AAAA,QAAW,SAAS;AAAA,QACtC;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QACpC;AAAA,QAAkB;AAAA,QAAsB;AAAA,MACzC,IAAI,SAAS;AAEb,YAAM,EAAE,YAAY,IAAI,UAAU;AAGlC,YAAM,CAAC,cAAc,eAAe,QAAI,yBAAiC,CAAC,CAAC;AAE3E,oCAAU,MAAM;AACf,oBAAY,EAAE,KAAK,CAAC,OAAO;AAC1B,gBAAM,MAA8B,CAAC;AACrC,aAAG,QAAQ,CAAC,MAAM;AAAE,gBAAI,EAAE,EAAE,IAAI,EAAE;AAAA,UAAM,CAAC;AACzC,0BAAgB,GAAG;AAAA,QACpB,CAAC,EAAE,MAAM,MAAM;AAAA,QAAe,CAAC;AAAA,MAChC,GAAG,CAAC,WAAW,CAAC;AAEhB,YAAM,4BAAwB,4BAAY,CAAC,OAAgB;AAC1D,cAAM,MAA8B,CAAC;AACrC,WAAG,QAAQ,CAAC,MAAM;AAAE,cAAI,EAAE,EAAE,IAAI,EAAE;AAAA,QAAM,CAAC;AACzC,wBAAgB,GAAG;AAAA,MACpB,GAAG,CAAC,CAAC;AAGL,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAwB,IAAI;AAChE,YAAM,CAAC,cAAc,eAAe,QAAI,yBAAS,KAAK;AACtD,YAAM,CAAC,uBAAuB,wBAAwB,QAAI,yBAAS,KAAK;AAGxE,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,KAAK;AAClD,YAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAA0B,IAAI;AAC5E,YAAM,CAAC,UAAU,WAAW,QAAI,yBAAgC,eAAe;AAC/E,YAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAG1C,YAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,KAAK;AACpD,YAAM,CAAC,eAAe,gBAAgB,QAAI,yBAA0B,IAAI;AACxE,YAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,KAAK;AAGhD,YAAM,CAAC,UAAU,WAAW,QAAI,yBAAS,CAAC;AAC1C,YAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAS,EAAE;AACzD,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,EAAE;AAC/C,YAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAS,EAAE;AACzD,YAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAS,YAAY;AACrE,YAAM,kBAAc,uBAA6C,IAAI;AAGrE,YAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,KAAK;AACpD,YAAM,CAAC,aAAa,cAAc,QAAI,yBAA4B,EAAE,aAAa,IAAI,YAAY,IAAI,UAAU,EAAE,CAAC;AAClH,YAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAS,KAAK;AAGxD,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,KAAK;AAClD,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAsB,IAAI;AAC9D,YAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,KAAK;AAGhD,YAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAAS,KAAK;AAC1D,YAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAsB,IAAI;AAC1E,YAAM,CAAC,cAAc,eAAe,QAAI,yBAAS,KAAK;AAGtD,YAAM,CAAC,aAAa,cAAc,QAAI,yBAAwB,IAAI;AAElE,YAAM,YAAWA,MAAA,UAAU,KAAK,CAAC,MAAM,EAAE,OAAO,UAAU,MAAzC,OAAAA,MAA8C;AAC/D,YAAM,mBAAmB,UAAU;AAAA,QAAO,CAAC,MAAG;AA5qC/C,cAAAA;AA6qCE,gCAAe,SAAOA,MAAA,EAAE,WAAF,gBAAAA,IAAU,mBAAkB;AAAA;AAAA,MACnD;AAEA,oCAAU,MAAM;AAAE,uBAAe;AAAA,MAAG,GAAG,CAAC,cAAc,CAAC;AAEvD,oCAAU,MAAM;AACf,oBAAY,UAAU,WAAW,MAAM,mBAAmB,WAAW,KAAK,CAAC,GAAG,GAAG;AACjF,eAAO,MAAM;AAAE,cAAI,YAAY,QAAS,cAAa,YAAY,OAAO;AAAA,QAAG;AAAA,MAC5E,GAAG,CAAC,UAAU,CAAC;AAEf,oCAAU,MAAM;AACf,YAAI,CAAC,WAAY;AACjB,oBAAY,CAAC;AACb,mBAAW,YAAY;AAAA,UACtB,MAAM;AAAA,UAAG,OAAO;AAAA,UAChB,QAAQ,qBAAqB,eAAe,mBAAmB;AAAA,UAC/D,cAAc,mBAAmB;AAAA,QAClC,CAAC;AAAA,MACF,GAAG,CAAC,YAAY,iBAAiB,kBAAkB,iBAAiB,UAAU,CAAC;AAE/E,YAAM,mBAAe,4BAAY,CAAC,OAAO,aAAa;AACrD,YAAI,CAAC,WAAY;AACjB,mBAAW,YAAY;AAAA,UACtB,MAAM,OAAO;AAAA,UAAiB,OAAO;AAAA,UACrC,QAAQ,qBAAqB,eAAe,mBAAmB;AAAA,UAC/D,cAAc,mBAAmB;AAAA,QAClC,CAAC;AAAA,MACF,GAAG,CAAC,YAAY,UAAU,iBAAiB,kBAAkB,iBAAiB,UAAU,CAAC;AAIzF,YAAM,mBAAmB,MAAM;AAC9B,2BAAmB,IAAI;AACvB,oBAAY,eAAe;AAC3B,sBAAc,IAAI;AAAA,MACnB;AAEA,YAAM,iBAAiB,OAAO,MAAgB;AAC7C,2BAAmB,CAAC;AACpB,oBAAY,mBAAmB,CAAC,CAAC;AACjC,sBAAc,IAAI;AAClB,YAAI;AACH,gBAAM,QAAQ,MAAM,gBAAgB,EAAE,EAAE;AACxC,6BAAmB,KAAK;AACxB,sBAAY,mBAAmB,KAAK,CAAC;AAAA,QACtC,SAAQ;AAAA,QAAsB;AAAA,MAC/B;AAEA,YAAM,aAAa,YAAY;AA7tChC,YAAAA,KAAAC,KAAAgB,KAAAC,KAAAC;AA8tCE,YAAI,CAAC,SAAS,KAAK,KAAK,GAAG;AAAE,oBAAU,6BAA6B,SAAS;AAAG;AAAA,QAAQ;AACxF,kBAAU,IAAI;AACd,cAAM,cAAYnB,MAAA,SAAS,cAAT,gBAAAA,IAAoB,YAAW,IAAI,GAAG,SAAS,SAAS,QAAQ,SAAS;AAC3F,cAAM,YAAUC,MAAA,SAAS,YAAT,gBAAAA,IAAkB,YAAW,IAAI,GAAG,SAAS,OAAO,QAAQ,SAAS;AACrF,YAAI;AACH,cAAI,iBAAiB;AACpB,kBAAM,eAAe,gBAAgB,IAAI,iCAAK,WAAL,EAAe,WAAW,QAAQ,EAAC;AAC5E,sBAAU,oBAAoB,SAAS;AAAA,UACxC,OAAO;AACN,kBAAM,UAA+B,iCAAK,WAAL,EAAe,WAAW,QAAQ;AACvE,gBAAI,CAAC,QAAQ,eAAgB,QAAO,QAAQ;AAC5C,gBAAI,CAAC,QAAQ,aAAc,QAAO,QAAQ;AAC1C,gBAAI,CAAC,QAAQ,SAAU,QAAO,QAAQ;AACtC,gBAAI,CAAC,QAAQ,qBAAsB,QAAO,QAAQ;AAClD,gBAAI,QAAQ,WAAW,KAAM,QAAO,QAAQ;AAC5C,gBAAI,GAACgB,MAAA,QAAQ,eAAR,gBAAAA,IAAoB,QAAQ,QAAO,QAAQ;AAChD,gBAAI,QAAQ,YAAY,CAAC,OAAO,KAAK,QAAQ,QAAQ,EAAE,OAAQ,QAAO,QAAQ;AAC9E,kBAAM,UAAU,MAAM,eAAe,OAAgC;AACrE,sBAAU,oBAAoB,SAAS;AACvC,0BAAc,QAAQ,EAAE;AAAA,UACzB;AACA,wBAAc,KAAK;AACnB,yBAAe;AAAA,QAChB,SAAS,KAAU;AAClB,sBAAUE,OAAAD,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,gBAAAC,IAAqB,aAAW,2BAAK,YAAW,2BAA2B,OAAO;AAAA,QAC7F,UAAE;AAAU,oBAAU,KAAK;AAAA,QAAG;AAAA,MAC/B;AAEA,YAAM,cAAc,OAAO,MAAgB;AA1vC5C,YAAAnB,KAAAC;AA2vCE,YAAI;AAAE,gBAAM,iBAAiB,EAAE,EAAE;AAAG,oBAAU,oBAAoB,SAAS;AAAG,yBAAe;AAAA,QAAG,SACzF,KAAU;AAAE,sBAAUA,OAAAD,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,gBAAAC,IAAqB,aAAW,2BAAK,YAAW,mBAAmB,OAAO;AAAA,QAAG;AAAA,MAC3G;AAEA,YAAM,cAAc,OAAO,MAAgB;AA/vC5C,YAAAD,KAAAC;AAgwCE,YAAI;AAAE,gBAAM,cAAc,EAAE,EAAE;AAAG,oBAAU,mBAAmB,SAAS;AAAG,yBAAe;AAAA,QAAG,SACrF,KAAU;AAAE,sBAAUA,OAAAD,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,gBAAAC,IAAqB,aAAW,2BAAK,YAAW,mBAAmB,OAAO;AAAA,QAAG;AAAA,MAC3G;AAEA,YAAM,iBAAiB,YAAY;AApwCpC,YAAAD,KAAAC;AAqwCE,YAAI,CAAC,cAAe;AACpB,qBAAa,IAAI;AACjB,YAAI;AACH,gBAAM,gBAAgB,cAAc,EAAE;AACtC,oBAAU,qBAAqB,SAAS;AACxC,yBAAe,KAAK;AAAG,2BAAiB,IAAI;AAAG,yBAAe;AAAA,QAC/D,SAAS,KAAU;AAClB,sBAAUA,OAAAD,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,gBAAAC,IAAqB,aAAW,2BAAK,YAAW,qBAAqB,OAAO;AAAA,QACvF,UAAE;AAAU,uBAAa,KAAK;AAAA,QAAG;AAAA,MAClC;AAIA,YAAM,gBAAgB,YAAY;AAlxCnC,YAAAD,KAAAC;AAmxCE,YAAI,CAAC,WAAY;AACjB,cAAM,MAAM,cAAc,YAAY,WAAW;AACjD,YAAI,KAAK;AAAE,oBAAU,KAAK,SAAS;AAAG;AAAA,QAAQ;AAC9C,yBAAiB,IAAI;AACrB,YAAI;AACH,gBAAM,WAAW,YAAY,WAAW;AACxC,oBAAU,cAAc,SAAS;AACjC,yBAAe,KAAK;AACpB,yBAAe,EAAE,aAAa,IAAI,YAAY,IAAI,UAAU,EAAE,CAAC;AAC/D,uBAAa,CAAC;AAAG,sBAAY,CAAC;AAAA,QAC/B,SAASE,MAAU;AAClB,sBAAUF,OAAAD,MAAAG,QAAA,gBAAAA,KAAK,aAAL,gBAAAH,IAAe,SAAf,gBAAAC,IAAqB,aAAWE,QAAA,gBAAAA,KAAK,YAAW,sBAAsB,OAAO;AAAA,QACxF,UAAE;AAAU,2BAAiB,KAAK;AAAA,QAAG;AAAA,MACtC;AAEA,YAAM,eAAe,YAAY;AAlyClC,YAAAH,KAAAC;AAmyCE,YAAI,CAAC,cAAc,CAAC,WAAY;AAChC,qBAAa,IAAI;AACjB,YAAI;AACH,gBAAM,SAAS,MAAM,iBAAiB,YAAY,UAAU;AAC5D,qBAAU,iCAAQ,YAAW,kBAAkB,SAAS;AACxD,wBAAc,IAAI;AAAG,wBAAc,KAAK;AACxC,uBAAa,CAAC;AAAG,sBAAY,CAAC;AAAA,QAC/B,SAAS,KAAU;AAClB,sBAAUA,OAAAD,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,gBAAAC,IAAqB,aAAW,2BAAK,YAAW,iBAAiB,OAAO;AAAA,QACnF,UAAE;AAAU,uBAAa,KAAK;AAAA,QAAG;AAAA,MAClC;AAEA,YAAM,eAAe,YAAY;AA/yClC,YAAAD,KAAAC;AAgzCE,YAAI,CAAC,WAAY;AACjB,YAAI;AAAE,gBAAM,YAAY,UAAU;AAAG,oBAAU,kBAAkB,SAAS;AAAA,QAAG,SACtE,KAAU;AAAE,sBAAUA,OAAAD,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,gBAAAC,IAAqB,aAAW,2BAAK,YAAW,iBAAiB,OAAO;AAAA,QAAG;AAAA,MACzG;AAEA,YAAM,yBAAyB,YAAY;AArzC5C,YAAAD,KAAAC;AAszCE,YAAI,CAAC,WAAY;AACjB,YAAI;AAAE,gBAAM,qBAAqB,UAAU;AAAA,QAAG,SACvC,KAAU;AAAE,sBAAUA,OAAAD,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,gBAAAC,IAAqB,aAAW,2BAAK,YAAW,mBAAmB,OAAO;AAAA,QAAG;AAAA,MAC3G;AAEA,YAAM,oBAAoB,OAAO,WAAmB;AA3zCrD,YAAAD,KAAAC;AA4zCE,YAAI,CAAC,WAAY;AACjB,uBAAe,MAAM;AACrB,YAAI;AACH,gBAAM,MAAM,MAAM,YAAY,YAAY,MAAM;AAChD,qBAAU,2BAAK,YAAW,0BAA0B,SAAS;AAAA,QAC9D,SAAS,KAAU;AAClB,sBAAUA,OAAAD,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,gBAAAC,IAAqB,aAAW,2BAAK,YAAW,eAAe,OAAO;AAAA,QACjF,UAAE;AAAU,yBAAe,IAAI;AAAA,QAAG;AAAA,MACnC;AAEA,YAAM,oBAAoB,YAAY;AAt0CvC,YAAAD,KAAAC;AAu0CE,YAAI,CAAC,cAAc,CAAC,iBAAkB;AACtC,wBAAgB,IAAI;AACpB,YAAI;AACH,gBAAM,WAAW,YAAY,iBAAiB,EAAE;AAChD,oBAAU,gBAAgB,SAAS;AACnC,4BAAkB,KAAK;AAAG,8BAAoB,IAAI;AAClD,uBAAa,QAAQ;AAAA,QACtB,SAAS,KAAU;AAClB,sBAAUA,OAAAD,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,gBAAAC,IAAqB,aAAW,2BAAK,YAAW,iBAAiB,OAAO;AAAA,QACnF,UAAE;AAAU,0BAAgB,KAAK;AAAA,QAAG;AAAA,MACrC;AAEA,YAAM,KAAK;AACX,YAAM,aAAY,8BAAI,WAAJ,mBAAY,mBAAkB;AAChD,YAAM,YAAY,8BAAI,WAAJ,mBAAY,mBAAkB;AAChD,YAAM,aAAY,8BAAI,WAAJ,mBAAY,mBAAkB;AAChD,YAAM,eAAa,8BAAI,WAAJ,mBAAY,mBAAkB;AAIjD,aACC,+CAAC,wBAAI,IAAI,EAAE,YAAY,6BAA6B,GAGnD;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAM;AAAA,YACN,SACC,+CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAE,GACxD;AAAA;AAAA,gBAAC;AAAA;AAAA,kBAAU,WAAW,8CAAC,eAAAmB,SAAA,EAAY;AAAA,kBAClC,SAAS,MAAM;AAAE,mCAAe;AAAG,wBAAI,WAAY,cAAa;AAAA,kBAAG;AAAA,kBAAG;AAAA;AAAA,cAEvE;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACA,aAAa;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,gBAAgB;AAAA,kBACjB;AAAA,kBACA,cAAc;AAAA,kBAEd,wDAAC,aAAU,WAAW,8CAAC,WAAAlB,SAAA,EAAQ,GAAI,SAAS,kBAAkB,0BAE9D;AAAA;AAAA,cACD;AAAA,eACD;AAAA;AAAA,QAEF;AAAA,QAGA,+CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,eAAe,EAAE,IAAI,UAAU,IAAI,MAAM,GAAG,KAAK,KAAK,GAAG,IAAI,GAGxF;AAAA;AAAA,YAAC;AAAA;AAAA,cACA,WAAW;AAAA,cACX,IAAI;AAAA,gBACH,OAAO,wBACJ,EAAE,IAAI,QAAQ,IAAI,GAAG,IACrB,EAAE,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI;AAAA,gBAClC,UAAU,wBACP,EAAE,IAAI,QAAQ,IAAI,GAAG,IACrB,EAAE,IAAI,QAAQ,IAAI,IAAI;AAAA,gBACzB,YAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,WAAW,EAAE,IAAI,wBAAwB,SAAS,KAAK,IAAI,sBAAsB;AAAA,gBACjF,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR,WAAW;AAAA,gBACX,YAAY;AAAA,cACb;AAAA,cAEC,kCACA,+CAAC,wBAAI,IAAI;AAAA,gBACR,SAAS;AAAA,gBACT,eAAe,EAAE,IAAI,OAAO,IAAI,SAAS;AAAA,gBACzC,YAAY;AAAA,gBACZ,KAAK;AAAA,gBACL,GAAG;AAAA,gBACH,QAAQ;AAAA,gBACR,WAAW,EAAE,IAAI,WAAW,IAAI,OAAO;AAAA,gBACvC,WAAW,EAAE,IAAI,QAAQ,IAAI,UAAU;AAAA,cACxC,GACC;AAAA,8DAAC,4BAAQ,OAAM,oBAAmB,OAAK,MAAC,WAAU,SACjD;AAAA,kBAAC;AAAA;AAAA,oBACA,MAAK;AAAA,oBACL,SAAS,MAAM,yBAAyB,KAAK;AAAA,oBAC7C,IAAI;AAAA,sBACH,OAAO;AAAA,sBACP,iBAAiB;AAAA,sBACjB,YAAY;AAAA,sBACZ,WAAW,EAAE,iBAAiB,UAAU;AAAA,oBACzC;AAAA,oBAEA,wDAAC,oBAAAmB,SAAA,EAAiB,UAAS,SAAQ;AAAA;AAAA,gBACpC,GACD;AAAA,gBACC,iBAAiB,IAAI,CAAC,GAAG,QAAQ;AAv6CzC,sBAAArB;AAw6CQ,wBAAM,QAAQ,EAAE,OAAO;AACvB,wBAAM,UAAU,EAAE,UAAU,SAAS,YAAY;AACjD,wBAAM,eAAcA,MAAA,cAAc,MAAM,MAApB,OAAAA,MAAyB;AAC7C,yBACC;AAAA,oBAAC;AAAA;AAAA,sBAEA,OAAK;AAAA,sBACL,WAAU;AAAA,sBACV,OAAO,GAAG,EAAE,IAAI,WAAM,EAAE,UAAU,OAAO;AAAA,sBAEzC;AAAA,wBAAC;AAAA;AAAA,0BACA,SAAS,MAAM,cAAc,EAAE,EAAE;AAAA,0BACjC,IAAI;AAAA,4BACH,OAAO;AAAA,4BACP,QAAQ;AAAA,4BACR,cAAc;AAAA,4BACd,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,QAAQ;AAAA,4BACR,YAAY;AAAA,4BACZ,iBAAiB,QAAQ,SAAS;AAAA,4BAClC,OAAO;AAAA,4BACP,YAAY;AAAA,4BACZ,YAAY;AAAA,4BACZ,UAAU;AAAA,4BACV,YAAY,aAAa,WAAW;AAAA,4BACpC,WAAW,QACR,cAAc,WAAW,OACzB,cAAc,WAAW;AAAA,4BAC5B,YAAY;AAAA,4BACZ,WAAW;AAAA,8BACV,WAAW,cAAc,WAAW;AAAA,4BACrC;AAAA,0BACD;AAAA,0BAEC,gBAAM;AAAA;AAAA,sBACR;AAAA;AAAA,oBAhCK,EAAE;AAAA,kBAiCR;AAAA,gBAEF,CAAC;AAAA,iBACF,IAED,gFACA;AAAA,+DAAC,wBAAI,IAAI;AAAA,kBACR,SAAS;AAAA,kBAAQ,YAAY;AAAA,kBAAU,gBAAgB;AAAA,kBACvD,IAAI;AAAA,kBAAG,IAAI;AAAA,kBAAM,cAAc;AAAA,kBAAkB,iBAAiB;AAAA,kBAAW,KAAK;AAAA,gBACnF,GACC;AAAA,iEAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,KAAK,UAAU,EAAE,GACvE;AAAA,kEAAC,4BAAQ,OAAM,YAAW,OAAK,MAC9B;AAAA,sBAAC;AAAA;AAAA,wBACA,MAAK;AAAA,wBACL,SAAS,MAAM,yBAAyB,IAAI;AAAA,wBAC5C,IAAI,EAAE,GAAG,KAAK,OAAO,OAAO;AAAA,wBAE5B,wDAAC,mBAAAsB,SAAA,EAAgB,UAAS,SAAQ;AAAA;AAAA,oBACnC,GACD;AAAA,oBACA,8CAAC,+BAAW,IAAI,EAAE,YAAY,KAAK,UAAU,WAAW,OAAO,QAAQ,YAAY,6BAA6B,GAAG,uBAEnH;AAAA,qBACD;AAAA,kBACA;AAAA,oBAAC;AAAA;AAAA,sBACA,SACC;AAAA,wBAAC;AAAA;AAAA,0BAAS,MAAK;AAAA,0BAAQ,SAAS;AAAA,0BAC/B,UAAU,CAAC,MAAM,gBAAgB,EAAE,OAAO,OAAO;AAAA,0BAAG,IAAI,EAAE,GAAG,IAAI;AAAA;AAAA,sBAAG;AAAA,sBAEtE,OAAO,8CAAC,+BAAW,IAAI,EAAE,UAAU,WAAW,OAAO,OAAO,GAAG,2BAAa;AAAA,sBAC5E,IAAI,EAAE,IAAI,EAAE;AAAA;AAAA,kBACb;AAAA,mBACD;AAAA,gBAEA,8CAAC,wBAAI,IAAI,EAAE,MAAM,GAAG,UAAU,QAAQ,GAAG,EAAE,GACzC,oBACA,8CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,gBAAgB,UAAU,IAAI,EAAE,GAC3D,wDAAC,qCAAiB,MAAM,IAAI,IAAI,EAAE,OAAO,UAAU,GAAG,GACvD,IACG,iBAAiB,WAAW,IAC/B,8CAAC,+BAAW,IAAI,EAAE,WAAW,UAAU,IAAI,GAAG,OAAO,QAAQ,UAAU,UAAU,GAAG,0BAEpF,IAEA,iBAAiB,IAAI,CAAC,MAAM;AA1/CnC,sBAAAtB,KAAAC;AA2/CQ,wBAAM,QAAQ,EAAE,OAAO;AACvB,wBAAM,OAAO,KAAGD,MAAA,EAAE,cAAF,gBAAAA,IAAa,MAAM,GAAG,OAAM,OAAO,WAAIC,MAAA,EAAE,YAAF,gBAAAA,IAAW,MAAM,GAAG,OAAM,OAAO;AACxF,yBACC;AAAA,oBAAC;AAAA;AAAA,sBAEA,WAAW;AAAA,sBACX,SAAS,MAAM,cAAc,EAAE,EAAE;AAAA,sBACjC,IAAI,QAAQ,yBAAyB,iCACjC,qBADiC;AAAA,wBAEpC,WAAW,EAAE,aAAa,WAAW,iBAAiB,WAAW,WAAW,gCAAgC;AAAA,sBAC7G;AAAA,sBAEA;AAAA,uEAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,gBAAgB,iBAAiB,YAAY,UAAU,IAAI,IAAI,GAC1F;AAAA,wEAAC,+BAAW,IAAI,EAAE,YAAY,KAAK,UAAU,WAAW,OAAO,WAAW,YAAY,6BAA6B,GACjH,YAAE,MACJ;AAAA,0BACA,8CAAC,yBAAK,OAAO,EAAE,UAAU,SAAS,MAAK,SAAQ,IAAI,aAAa,EAAE,MAAM,GAAG;AAAA,2BAC5E;AAAA,wBACA,+CAAC,+BAAW,IAAI,EAAE,UAAU,WAAW,OAAO,QAAQ,YAAY,6BAA6B,GAC7F;AAAA,4BAAE;AAAA,0BAAY;AAAA,0BAAQ,EAAE,YAAY;AAAA,0BAAU;AAAA,0BAAI;AAAA,2BACpD;AAAA;AAAA;AAAA,oBAhBK,EAAE;AAAA,kBAiBR;AAAA,gBAEF,CAAC,GAEH;AAAA,iBACA;AAAA;AAAA,UAED;AAAA,UAGA,8CAAC,wBAAI,IAAI,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,KAAK,UAAU,GAAG,UAAU,SAAS,GACtG,WAAC,KACD;AAAA,YAAC;AAAA;AAAA,cACA,WAAW;AAAA,cACX,IAAI;AAAA,gBACH,cAAc;AAAA,gBACd,SAAS;AAAA,gBAAQ,YAAY;AAAA,gBAAU,gBAAgB;AAAA,gBACvD,WAAW;AAAA,gBAAK,QAAQ;AAAA,gBAAsB,iBAAiB;AAAA,cAChE;AAAA,cAEA,yDAAC,wBAAI,IAAI,EAAE,WAAW,SAAS,GAC9B;AAAA,8DAAC,gBAAAsB,SAAA,EAAa,IAAI,EAAE,UAAU,IAAI,OAAO,QAAQ,IAAI,EAAE,GAAG;AAAA,gBAC1D,8CAAC,+BAAW,IAAI,EAAE,UAAU,WAAW,OAAO,QAAQ,YAAY,6BAA6B,GAAG,+CAElG;AAAA,iBACD;AAAA;AAAA,UACD,IAEA,gFAEC;AAAA;AAAA,cAAC;AAAA;AAAA,gBACA,WAAW;AAAA,gBACX,IAAI;AAAA,kBACH,cAAc;AAAA,kBACd,GAAG,EAAE,IAAI,KAAK,IAAI,IAAI;AAAA,kBACtB,QAAQ;AAAA,kBACR,WAAW;AAAA,gBACZ;AAAA,gBAGA;AAAA,iEAAC,wBAAI,IAAI;AAAA,oBACR,SAAS;AAAA,oBAAQ,YAAY,EAAE,IAAI,cAAc,IAAI,SAAS;AAAA,oBAC9D,gBAAgB;AAAA,oBAAiB,UAAU;AAAA,oBAAQ,KAAK;AAAA,oBAAG,IAAI;AAAA,kBAChE,GACC;AAAA,mEAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,UAAU,OAAO,GAC1E;AAAA,oEAAC,+BAAW,IAAI,EAAE,YAAY,KAAK,UAAU,EAAE,IAAI,QAAQ,IAAI,SAAS,GAAG,OAAO,WAAW,YAAY,6BAA6B,GACpI,aAAG,MACL;AAAA,sBACA,8CAAC,yBAAK,OAAO,GAAG,UAAU,SAAS,MAAK,SAAQ,IAAI,aAAa,GAAG,MAAM,GAAG;AAAA,uBAC9E;AAAA,oBACC,CAAC,cACD,+CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,GAAG,UAAU,OAAO,GACpD;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACA,aAAa;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,gBAAgB;AAAA,0BACjB;AAAA,0BACA,cAAc;AAAA,0BAEd;AAAA,4BAAC;AAAA;AAAA,8BAAU,SAAQ;AAAA,8BAAW,WAAW,8CAAC,YAAAC,SAAA,EAAS;AAAA,8BAClD,SAAS,MAAM,eAAe,EAAE;AAAA,8BAAG;AAAA;AAAA,0BAEpC;AAAA;AAAA,sBACD;AAAA,uBACE,WAAW,aACZ;AAAA,wBAAC;AAAA;AAAA,0BACA,aAAa;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,gBAAgB;AAAA,0BACjB;AAAA,0BACA,cAAc;AAAA,0BAEd;AAAA,4BAAC;AAAA;AAAA,8BAAU,WAAW,8CAAC,kBAAAC,SAAA,EAAc;AAAA,8BAAI,SAAS,MAAM,YAAY,EAAE;AAAA,8BACrE,IAAI,EAAE,iBAAiB,WAAW,WAAW,EAAE,iBAAiB,UAAU,EAAE;AAAA,8BAAG;AAAA;AAAA,0BAEhF;AAAA;AAAA,sBACD;AAAA,sBAEA,YACA;AAAA,wBAAC;AAAA;AAAA,0BACA,aAAa;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,gBAAgB;AAAA,0BACjB;AAAA,0BACA,cAAc;AAAA,0BAEd;AAAA,4BAAC;AAAA;AAAA,8BAAU,WAAW,8CAAC,cAAAC,SAAA,EAAU;AAAA,8BAAI,SAAS,MAAM,YAAY,EAAE;AAAA,8BACjE,IAAI,EAAE,iBAAiB,WAAW,WAAW,kCAAkC,WAAW,EAAE,iBAAiB,UAAU,EAAE;AAAA,8BAAG;AAAA;AAAA,0BAE7H;AAAA;AAAA,sBACD;AAAA,sBAED;AAAA,wBAAC;AAAA;AAAA,0BACA,aAAa;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,gBAAgB;AAAA,0BACjB;AAAA,0BACA,cAAc;AAAA,0BAEd;AAAA,4BAAC;AAAA;AAAA,8BAAU,SAAQ;AAAA,8BAAS,WAAW,8CAAC,eAAAC,SAAA,EAAY;AAAA,8BACnD,SAAS,MAAM;AAAE,iDAAiB,EAAE;AAAG,+CAAe,IAAI;AAAA,8BAAG;AAAA,8BAAG;AAAA;AAAA,0BAEjE;AAAA;AAAA,sBACD;AAAA,uBACD;AAAA,qBAEF;AAAA,kBAGC,GAAG,eACH,8CAAC,+BAAW,IAAI,EAAE,UAAU,WAAW,OAAO,QAAQ,IAAI,KAAK,YAAY,8BAA8B,YAAY,IAAI,GACvH,aAAG,aACL;AAAA,kBAED;AAAA,oBAAC;AAAA;AAAA,sBACA,IAAI;AAAA,wBACH,WAAW;AAAA,wBACX,IAAI;AAAA,wBACJ,wBAAwB,EAAE,QAAQ,EAAE;AAAA,wBACpC,8BAA8B,EAAE,iBAAiB,WAAW,cAAc,EAAE;AAAA,wBAC5E,8BAA8B;AAAA,0BAC7B,iBAAiB;AAAA,0BACjB,cAAc;AAAA,0BACd,WAAW,EAAE,iBAAiB,UAAU;AAAA,wBACzC;AAAA,sBACD;AAAA,sBAED;AAAA,wBAAC;AAAA;AAAA,0BACA,IAAI;AAAA,4BACH,SAAS;AAAA,4BACT,UAAU;AAAA,4BACV,KAAK;AAAA,0BACN;AAAA,0BAEC;AAAA,4BACA;AAAA,8BACC,QAAQ;AAAA,8BACR,QAAQ;AAAA,gCACP,EAAE,OAAO,QAAQ,OAAO,GAAG,gBAAgB,MAAM;AAAA,gCACjD,EAAE,OAAO,QAAQ,OAAO,GAAG,eAAe,MAAM;AAAA,8BACjD;AAAA,4BACD;AAAA,4BACA;AAAA,8BACC,QAAQ;AAAA,8BACR,QAAQ;AAAA,gCACP,EAAE,OAAO,SAAU,OAAO,GAAG,aAAa,QAAQ;AAAA,gCAClD,EAAE,OAAO,UAAU,QAAO,uCAAW,mBAAkB,YAAY,WAAW;AAAA,8BAC/E;AAAA,4BACD;AAAA,4BACA;AAAA,8BACC,QAAQ;AAAA,8BACR,QAAQ;AAAA,gCACP,EAAE,OAAO,YAAkB,OAAO,mBAAmB,GAAG,QAAQ,EAAE,MAAM;AAAA,gCACxE,EAAE,OAAO,kBAAkB,OAAO,QAAO,QAAG,uBAAH,YAAyB,CAAC,EAAE;AAAA,8BACtE;AAAA,4BACD;AAAA,4BACA;AAAA,8BACC,QAAQ;AAAA,8BACR,QAAQ;AAAA,gCACP,EAAE,OAAO,SAAS,OAAO,IAAG,QAAG,yBAAH,YAA2B,EAAE,UAAS,QAAG,gBAAH,YAAkB,CAAC,YAAY;AAAA,gCACjG,EAAE,OAAO,SAAS,OAAO,IAAG,QAAG,eAAH,YAAiB,CAAC,aAAY,QAAG,mBAAH,YAAqB,CAAC,iBAAgB,QAAG,oBAAH,YAAsB,CAAC,WAAW;AAAA,8BACnI;AAAA,4BACD;AAAA,0BACD,EAAE,IAAI,CAAC,MAAM,QACZ;AAAA,4BAAC;AAAA;AAAA,8BAEA,IAAI;AAAA,gCACH,SAAS;AAAA,gCACT,eAAe;AAAA,gCACf,KAAK;AAAA,gCACL,IAAI;AAAA,gCACJ,IAAI;AAAA,gCACJ,cAAc;AAAA,gCACd,iBAAiB;AAAA,gCACjB,YAAY,aAAa,KAAK,MAAM;AAAA,gCACpC,MAAM;AAAA,gCACN,UAAU;AAAA,8BACX;AAAA,8BAEC,eAAK,OAAO,IAAI,CAAC,UACjB,+CAAC,wBAAsB,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,KAAK,GAC7E;AAAA,+EAAC,+BAAW,IAAI,EAAE,YAAY,8BAA8B,UAAU,WAAW,YAAY,KAAK,OAAO,QAAQ,YAAY,UAAU,YAAY,EAAE,GACnJ;AAAA,wCAAM;AAAA,kCAAM;AAAA,mCACd;AAAA,gCACA,8CAAC,+BAAW,IAAI,EAAE,YAAY,8BAA8B,UAAU,WAAW,YAAY,KAAK,OAAO,QAAQ,YAAY,SAAS,GACpI,gBAAM,OACR;AAAA,mCANS,MAAM,KAOhB,CACA;AAAA;AAAA,4BAvBI;AAAA,0BAwBN,CACA;AAAA;AAAA,sBACF;AAAA;AAAA,kBACA;AAAA;AAAA;AAAA,YACD;AAAA,YAGA;AAAA,cAAC;AAAA;AAAA,gBACA,WAAW;AAAA,gBACX,IAAI;AAAA,kBACH,cAAc;AAAA,kBACd,UAAU;AAAA,kBACV,QAAQ;AAAA,kBACR,WAAW;AAAA,gBACZ;AAAA,gBAGA;AAAA,iEAAC,wBAAI,IAAI;AAAA,oBACR,SAAS;AAAA,oBACT,YAAY,EAAE,IAAI,cAAc,IAAI,SAAS;AAAA,oBAC7C,gBAAgB;AAAA,oBAChB,eAAe,EAAE,IAAI,UAAU,IAAI,MAAM;AAAA,oBACzC,KAAK;AAAA,oBACL,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE;AAAA,oBACrB,IAAI;AAAA,oBACJ,cAAc;AAAA,oBACd,iBAAiB;AAAA,kBAClB,GAEC;AAAA,mEAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,UAAU,OAAO,GAC1E;AAAA,oEAAC,+BAAW,IAAI,EAAE,YAAY,KAAK,UAAU,QAAQ,OAAO,WAAW,YAAY,6BAA6B,GAAG,mBAEnH;AAAA,sBACA;AAAA,wBAAC;AAAA;AAAA,0BACA,aAAa;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,gBAAgB;AAAA,0BACjB;AAAA,0BACA,cAAc;AAAA,0BAEd,wDAAC,aAAU,SAAQ,YAAW,SAAS,MAAM,cAAc,IAAI,GAAG,UAAU,YAAY,WAAW,8CAAC,kBAAAvB,SAAA,EAAe,IAAI,EAAE,UAAU,GAAG,GAAG,GAAI,MAAK,SAAQ,0BAE1J;AAAA;AAAA,sBACD;AAAA,sBACA;AAAA,wBAAC;AAAA;AAAA,0BACA,aAAa;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,gBAAgB;AAAA,0BACjB;AAAA,0BACA,cAAc;AAAA,0BAEd,wDAAC,aAAU,SAAQ,WAAU,SAAS,cAAc,UAAU,gBAAgB,cAAc,GAAG,WAAW,8CAAC,gBAAAC,SAAA,EAAa,IAAI,EAAE,UAAU,GAAG,GAAG,GAAI,MAAK,SAAQ,0BAE/J;AAAA;AAAA,sBACD;AAAA,sBACA;AAAA,wBAAC;AAAA;AAAA,0BACA,aAAa;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,gBAAgB;AAAA,0BACjB;AAAA,0BACA,cAAc;AAAA,0BAEd,wDAAC,aAAU,SAAQ,WAAU,SAAS,MAAM,eAAe,IAAI,GAAG,UAAU,YAAY,WAAW,8CAAC,WAAAH,SAAA,EAAQ,IAAI,EAAE,UAAU,GAAG,GAAG,GAAI,MAAK,SAAQ,sBAEnJ;AAAA;AAAA,sBACD;AAAA,uBACD;AAAA,oBAEA,+CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,OAAO,EAAE,IAAI,QAAQ,IAAI,OAAO,EAAE,GAC3F;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACA,MAAK;AAAA,0BACL,OAAO;AAAA,0BACP,UAAU,CAAC,MAAM;AAAE,0CAAc,EAAE,OAAO,KAAK;AAAG,wCAAY,CAAC;AAAA,0BAAG;AAAA,0BAClE,aAAY;AAAA,0BACZ,IAAI,EAAE,OAAO,EAAE,IAAI,QAAQ,IAAI,IAAI,GAAG,UAAU,WAAW,QAAQ,IAAI,cAAc,OAAO;AAAA,0BAC5F,gBAAgB,8CAAC,mCAAe,UAAS,SAAQ,wDAAC,eAAAI,SAAA,EAAW,IAAI,EAAE,UAAU,IAAI,OAAO,OAAO,GAAG,GAAE;AAAA;AAAA,sBACrG;AAAA,sBACA,8CAAC,gCAAY,MAAK,SAAQ,IAAI,EAAE,UAAU,IAAI,GAC7C;AAAA,wBAAC;AAAA;AAAA,0BACA,OAAO;AAAA,0BACP,UAAU,CAAC,MAAM;AAAE,gDAAoB,EAAE,OAAO,KAAK;AAAG,wCAAY,CAAC;AAAA,0BAAG;AAAA,0BACxE,IAAI,EAAE,QAAQ,IAAI,cAAc,QAAQ,UAAU,UAAU;AAAA,0BAE3D,wBAAc,IAAI,CAAC,MAAM,8CAAC,6BAAiB,OAAO,GAAI,eAAd,CAAgB,CAAW;AAAA;AAAA,sBACrE,GACD;AAAA,uBACD;AAAA,qBACD;AAAA,kBAGA,8CAAC,wBAAI,IAAI;AAAA,oBACR,WAAW;AAAA,oBACX,WAAW;AAAA,oBACX,yBAAyB;AAAA,oBACzB,wBAAwB,EAAE,QAAQ,EAAE;AAAA,oBACpC,8BAA8B,EAAE,iBAAiB,QAAQ,cAAc,EAAE;AAAA,kBAC1E,GACC,yDAAC,0BAAM,MAAK,SAAQ,IAAI,EAAE,UAAU,IAAI,GACvC;AAAA,kEAAC,8BACA,wDAAC,6BAAS,IAAI,EAAE,iBAAiB,UAAU,GACzC;AAAA,sBACA;AAAA,sBAAU;AAAA,sBAAU;AAAA,sBAAY;AAAA,sBAChC;AAAA,sBAAW;AAAA,sBAAc;AAAA,sBACzB;AAAA,sBAAc;AAAA,sBAAgB;AAAA,sBAC9B;AAAA,sBAAgB;AAAA,sBAAgB;AAAA,sBAAS;AAAA,oBAC1C,EAAE,IAAI,CAAC,QACN,8CAAC,8BAAoB,IAAI,kCAAK,aAAgB,QAAQ,YAAY,EAAE,WAAW,SAAS,IAAI,CAAC,IAC3F,iBADc,GAEhB,CACA,GACF,GACD;AAAA,oBACA,8CAAC,8BACC,yBACA,8CAAC,6BACA,wDAAC,8BAAU,SAAS,IAAI,OAAM,UAAS,IAAI,EAAE,IAAI,EAAE,GAClD,wDAAC,qCAAiB,MAAM,IAAI,IAAI,EAAE,OAAO,UAAU,GAAG,GACvD,GACD,IACG,MAAM,WAAW,IACpB,8CAAC,6BACA;AAAA,sBAAC;AAAA;AAAA,wBAAU,SAAS;AAAA,wBAAI,OAAM;AAAA,wBAC7B,IAAI,EAAE,IAAI,GAAG,OAAO,QAAQ,YAAY,6BAA6B;AAAA,wBAAG;AAAA;AAAA,oBAEzE,GACD,IAEA,MAAM,IAAI,CAAC,SAAS;AA50DhC,0BAAAN;AA60Da,4BAAM,eAAe,CAAC,eAAe,aAAa,UAAU,aAAa;AACzE,4BAAM,cAAc,KAAK,UAAU,IAAI,YAAY;AACnD,4BAAM,iBAAiB,aAAa,SAAS,UAAU;AACvD,4BAAM,kBAAkB,CAAC,EAAC,uCAAW;AACrC,4BAAM,cAAc,eAAe;AACnC,4BAAM,eAAe,eAAe;AACpC,4BAAM,aACL,mBACG,yBACA,eACA,CAAC,eACD,CAAC,gBACD,gBAAgB,KAAK;AACzB,4BAAM,cACL,CAAC,kBAAkB,0BACjB,CAAC,wBAAwB,gCACzB,cAAc,sBACd,eAAe,wBACf,CAAC,cAAc,sBACf,gBAAgB,KAAK,KAAK,kBAC1B,QAAQ,KAAK,WAAW;AAC3B,4BAAM,EAAE,MAAM,UAAU,OAAO,UAAU,IAAI,mBAAmB,KAAK,QAAQ;AAC7E,6BACC,+CAAC,6BAAuB,IAAI,YAC3B;AAAA,sEAAC,8BAAU,IAAI,YAAa,eAAK,aAAY;AAAA,wBAC7C,8CAAC,8BAAU,IAAI,YACd,wDAAC,yBAAK,OAAO,KAAK,UAAU,WAAW,MAAK,SAAQ,IAAI,iBAAiB,KAAK,MAAM,GAAG,GACxF;AAAA,wBACA,8CAAC,8BAAU,IAAI,YACd,wDAAC,yBAAK,OAAO,WAAW,MAAK,SAAQ,IAAI,UAAU,GACpD;AAAA,wBACA,8CAAC,8BAAU,IAAI,YAAa,eAAK,UAAU,IAAG;AAAA,wBAC9C,8CAAC,8BAAU,IAAI,iCAAK,aAAL,EAAiB,UAAU,KAAK,UAAU,UAAU,cAAc,YAAY,YAAY,SAAS,IACjH,wDAAC,4BAAQ,OAAO,KAAK,kBAAkB,IACtC,wDAAC,UAAM,eAAK,kBAAkB,IAAG,GAClC,GACD;AAAA,wBACA,8CAAC,8BAAU,IAAI,YACb,eAAK,kBACF,aAAa,KAAK,eAAe,KAAK,UAAU,KAAK,eAAe,KACrE,IACJ;AAAA,wBACA,8CAAC,8BAAU,IAAI,YAAa,WAAAA,MAAA,KAAK,iBAAL,OAAAA,MAAqB,GAAE;AAAA,wBACnD,8CAAC,8BAAU,IAAI,iCAAK,aAAL,EAAiB,YAAY,SAAS,IACnD,eAAK,YAAY,IAAI,KAAK,KAAK,SAAS,EAAE,eAAe,IAAI,IAC/D;AAAA,wBACA,8CAAC,8BAAU,IAAI,iCAAK,aAAL,EAAiB,YAAY,SAAS,IACnD,eAAK,gBAAgB,IAAI,KAAK,KAAK,aAAa,EAAE,eAAe,IAAI,IACvE;AAAA,wBACA,8CAAC,8BAAU,IAAI,iCAAK,aAAL,EAAiB,YAAY,SAAS,IACnD,eAAK,gBAAgB,IAAI,KAAK,KAAK,aAAa,EAAE,eAAe,IAAI,IACvE;AAAA,wBACA,8CAAC,8BAAU,IAAI,YAAa,eAAK,eAAe,IAAG;AAAA,wBACnD,8CAAC,8BAAU,IAAI,iCAAK,aAAL,EAAiB,YAAY,SAAS,IACnD,eAAK,cAAc,IAAI,KAAK,KAAK,WAAW,EAAE,eAAe,IAAI,IACnE;AAAA,wBACA,8CAAC,8BAAU,IAAI,iCAAK,aAAL,EAAiB,UAAU,KAAK,UAAU,UAAU,cAAc,YAAY,YAAY,SAAS,IAChH,eAAK,QACL,8CAAC,4BAAQ,OAAO,KAAK,OAAO,OAAK,MAAC,WAAU,OAC3C,wDAAC,UAAM,eAAK,OAAM,GACnB,IACG,IACL;AAAA,wBACA,+CAAC,8BAAU,IAAI,iCAAK,aAAL,EAAiB,WAAW,UAAU,YAAY,SAAS,IAEzE;AAAA,wEAAC,4BAAQ,OAAO,aACf,wDAAC,UACA;AAAA,4BAAC;AAAA;AAAA,8BACA,MAAK;AAAA,8BACL,SAAS,MAAM,kBAAkB,KAAK,EAAE;AAAA,8BACxC,UAAU,CAAC;AAAA,8BACX,IAAI;AAAA,gCACH,OAAO,aAAa,YAAY;AAAA,gCAChC,iBAAiB,aAAa,YAAY;AAAA,gCAC1C,cAAc;AAAA,gCACd,YAAY;AAAA,gCACZ,WAAW;AAAA,kCACV,iBAAiB,aAAa,YAAY;AAAA,kCAC1C,OAAO,aAAa,SAAS;AAAA,kCAC7B,WAAW,aAAa,eAAe;AAAA,kCACvC,WAAW,aAAa,gCAAgC;AAAA,gCACzD;AAAA,8BACD;AAAA,8BAEC,0BAAgB,KAAK,KACnB,8CAAC,qCAAiB,MAAM,IAAI,IAC5B,8CAAC,cAAA4B,SAAA,EAAU,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,0BACrC,GACD,GACD;AAAA,0BAEA;AAAA,4BAAC;AAAA;AAAA,8BACA,aAAa;AAAA,gCACZ,gBAAgB;AAAA,gCAChB,gBAAgB;AAAA,8BACjB;AAAA,8BACA,cAAc;AAAA,8BAEd,wDAAC,4BAAQ,OACR,iBACG,kCAA6B,WAAW,YAAY,EAAE,QAAQ,KAAK,GAAG,CAAC,KACvE,eAAe,KAAK,WAAW,IAElC,wDAAC,UACA;AAAA,gCAAC;AAAA;AAAA,kCACA,MAAK;AAAA,kCACL,SAAS,MAAM;AAAE,wDAAoB,IAAI;AAAG,sDAAkB,IAAI;AAAA,kCAAG;AAAA,kCACrE,UAAU;AAAA,kCACV,IAAI;AAAA,oCACH,IAAI;AAAA,oCACJ,OAAO,iBAAiB,YAAY;AAAA,oCACpC,iBAAiB,iBAAiB,gBAAgB;AAAA,oCAClD,cAAc;AAAA,oCACd,YAAY;AAAA,oCACZ,WAAW;AAAA,sCACV,iBAAiB,iBAAiB,gBAAgB;AAAA,sCAClD,OAAO,iBAAiB,YAAY;AAAA,sCACpC,WAAW,iBAAiB,SAAS;AAAA,sCACrC,WAAW,iBAAiB,SAAS;AAAA,oCACtC;AAAA,kCACD;AAAA,kCAEA,wDAAC,cAAAC,SAAA,EAAW,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,8BACnC,GACD,GACD;AAAA;AAAA,0BACD;AAAA,2BACD;AAAA,2BAxGc,KAAK,EAyGpB;AAAA,oBAEF,CAAC,GAEH;AAAA,qBACD,GACD;AAAA,kBAEC,MAAM,SAAS,KACf;AAAA,oBAAC;AAAA;AAAA,sBACA,WAAU;AAAA,sBACV,OAAO;AAAA,sBACP,MAAM;AAAA,sBACN,aAAa;AAAA,sBACb,cAAc,CAAC,GAAG,MAAM;AAAE,oCAAY,CAAC;AAAG,qCAAa,CAAC;AAAA,sBAAG;AAAA,sBAC3D,qBAAqB,CAAC,MAAM;AAAE,2CAAmB,SAAS,EAAE,OAAO,OAAO,EAAE,CAAC;AAAG,oCAAY,CAAC;AAAA,sBAAG;AAAA,sBAChG,oBAAoB,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,sBAClC,IAAI;AAAA,wBACH,UAAU;AAAA,wBACV,iCAAiC,EAAE,WAAW,IAAI,IAAI,EAAE;AAAA,wBACxD,0EAA0E,EAAE,UAAU,UAAU;AAAA,sBACjG;AAAA;AAAA,kBACD;AAAA;AAAA;AAAA,YAEF;AAAA,aACD,GAEF;AAAA,WACD;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YACA,MAAM;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,YACR,SAAS,MAAM,cAAc,KAAK;AAAA,YAClC,oBAAoB;AAAA,YACpB,mBAAmB;AAAA,YACnB,eAAe,MAAM;AAAE,6BAAe;AAAG,kBAAI,WAAY,cAAa;AAAA,YAAG;AAAA;AAAA,QAC1E;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,MAAM;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,SAAS,MAAM,eAAe,KAAK;AAAA;AAAA,QACpC;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,MAAM;AAAA,YACN,MAAM;AAAA,YACN,cAAc;AAAA,YACd,WAAW;AAAA,YACX,UAAU;AAAA,YACV,oBAAoB;AAAA,YACpB,SAAS,MAAM;AAAE,4BAAc,KAAK;AAAG,4BAAc,IAAI;AAAA,YAAG;AAAA;AAAA,QAC7D;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,MAAM;AAAA,YACN,OAAM;AAAA,YACN,SAAS,YAAY,+CAAe,IAAI;AAAA,YACxC,SAAS;AAAA,YACT,WAAW;AAAA,YACX,SAAS,MAAM;AAAE,6BAAe,KAAK;AAAG,+BAAiB,IAAI;AAAA,YAAG;AAAA;AAAA,QACjE;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,MAAM;AAAA,YACN,OAAM;AAAA,YACN,SAAS,eAAe,qDAAkB,WAAW;AAAA,YACrD,SAAS;AAAA,YACT,WAAW;AAAA,YACX,SAAS,MAAM;AAAE,gCAAkB,KAAK;AAAG,kCAAoB,IAAI;AAAA,YAAG;AAAA;AAAA,QACvE;AAAA,SACD;AAAA,IAEF,CAAC;AAID,IAAM,YAAsB,MAC3B,8CAAC,eACA,wDAAC,oBAAiB,GACnB;AAGD,IAAO,oBAAQ;AAAA;AAAA;;;AC3hEf,SAAS,4BAA4B,QAAmC;AACvE,QAAM,KAAK,IAAI,gBAAgB;AAC/B,MAAI,OAAO,WAAY,IAAG,OAAO,cAAc,OAAO,UAAU;AAChE,MAAI,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,QAAQ;AAC1D,MAAI,OAAO,SAAU,YAAW,MAAM,OAAO,SAAU,IAAG,OAAO,YAAY,EAAE;AAC/E,MAAI,OAAO,SAAU,YAAW,MAAM,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,EAAE,CAAC;AACvF,MAAI,OAAO,WAAY,YAAW,MAAM,OAAO,WAAY,IAAG,OAAO,cAAc,OAAO,EAAE,CAAC;AAC7F,QAAM,MAAM,GAAG,SAAS;AACxB,SAAO,MAAM,IAAI,GAAG,KAAK;AAC1B;AAEA,SAAS,wBAAwB,QAA6D;AAC7F,QAAM,KAAK,IAAI,gBAAgB;AAC/B,MAAI,iCAAQ,WAAY,IAAG,OAAO,cAAc,OAAO,UAAU;AACjE,MAAI,iCAAQ,SAAU,IAAG,OAAO,YAAY,OAAO,QAAQ;AAC3D,QAAM,MAAM,GAAG,SAAS;AACxB,SAAO,MAAM,IAAI,GAAG,KAAK;AAC1B;AAEA,SAAS,oBAAoB,MAAY,UAAwB;AAChE,QAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,QAAM,IAAI,SAAS,cAAc,GAAG;AACpC,IAAE,OAAO;AACT,IAAE,WAAW;AACb,WAAS,KAAK,YAAY,CAAC;AAC3B,IAAE,MAAM;AACR,IAAE,OAAO;AACT,MAAI,gBAAgB,GAAG;AACxB;AAEO,SAAS,iBAAiB;AAChC,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAkC,CAAC,CAAC;AAChE,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,EAAE;AAErC,QAAM,kBAAc,4BAAY,OAAO,WAA6C;AA7CrF,QAAAC,KAAA;AA8CE,eAAW,IAAI;AACf,aAAS,EAAE;AACX,QAAI;AACH,YAAM,KAAK,4BAA4B,MAAM;AAC7C,YAAM,MAAM,MAAM,cAAc;AAAA,QAC/B,GAAG,UAAU,mBAAmB,GAAG,EAAE;AAAA,MACtC;AACA,gBAAU,MAAM,QAAQ,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;AAAA,IAClD,SAAS,KAAU;AAClB,gBAAU,CAAC,CAAC;AACZ;AAAA,UACC,MAAAA,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,mBAAqB,cACpB,sCAAK,aAAL,mBAAe,SAAf,mBAAqB,YACrB,2BAAK,YACL;AAAA,MACF;AAAA,IACD,UAAE;AACD,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,QAAM,mBAAe,4BAAY,OAAO,WAA4D;AACnG,UAAM,KAAK,4BAA4B,MAAM;AAC7C,UAAM,MAAM,MAAM,cAAc;AAAA,MAC/B,GAAG,UAAU,YAAY,GAAG,EAAE;AAAA,IAC/B;AACA,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,QAAM,yBAAqB;AAAA,IAC1B,OAAO,SAAiB,WAAyF;AAChH,YAAM,KAAK,wBAAwB,MAAM;AACzC,YAAM,MAAM,MAAM,cAAc;AAAA,QAC/B,GAAG,UAAU,4BAA4B,OAAO,CAAC,GAAG,EAAE;AAAA,MACvD;AACA,aAAO,MAAM,QAAQ,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC;AAAA,IAC9C;AAAA,IACA,CAAC;AAAA,EACF;AAEA,QAAM,wBAAoB,4BAAY,OAAO,WAA6C;AAtF3F,QAAAA;AAuFE,UAAM,KAAK,4BAA4B,MAAM;AAC7C,UAAM,MAAM,MAAM,cAAc;AAAA,MAC/B,GAAG,UAAU,yBAAyB,GAAG,EAAE;AAAA,MAC3C,EAAE,cAAc,OAAO;AAAA,IACxB;AACA,wBAAoB,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,iBAAgBA,MAAA,OAAO,eAAP,OAAAA,MAAqB,QAAQ,OAAO;AAAA,EAC/F,GAAG,CAAC,CAAC;AAEL,QAAM,+BAA2B;AAAA,IAChC,OAAO,SAAiB,WAAuE;AAC9F,YAAM,KAAK,wBAAwB,MAAM;AACzC,YAAM,MAAM,MAAM,cAAc;AAAA,QAC/B,GAAG,UAAU,yCAAyC,OAAO,CAAC,GAAG,EAAE;AAAA,QACnE,EAAE,cAAc,OAAO;AAAA,MACxB;AACA,0BAAoB,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,kBAAkB,OAAO,OAAO;AAAA,IAC3E;AAAA,IACA,CAAC;AAAA,EACF;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAtHA,IAAAC;AAAA;AAAA;AAAA;AAAA,IAAAA,iBAAsC;AACtC;AACA;AAAA;AAAA;;;ACFA,IAIa,MAGA,QAWA,uBAIAC,aAWA,aAOA,kBAOA,SAYAC,aAKA,cAeA,aAYA,aAcA,iBAoBA,YAMA,UAKA,uBAOA,qBAOA,qBAQA,aASA,cAYA,gBAWA,eAQA,eAYA,iBAKA,eAQA,qBAOA,oBASA;AA/Ob,IAAAC,eAAA;AAAA;AAAA;AAIO,IAAM,OACZ;AAEM,IAAM,SAAS;AAAA,MACrB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,IAAI;AAAA,MACJ,SAAS;AAAA,IACV;AAEO,IAAM,wBAAwB;AAI9B,IAAMF,cAA6B;AAAA,MACzC,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,IAAI;AAAA,IACL;AAEO,IAAM,cAA8B;AAAA,MAC1C,4BAA4B,EAAE,OAAO,OAAO;AAAA,MAC5C,kCAAkC,EAAE,OAAO,OAAO;AAAA,MAClD,gBAAgB,EAAE,OAAO,OAAO;AAAA,MAChC,6BAA6B,EAAE,OAAO,kBAAkB;AAAA,IACzD;AAEO,IAAM,mBAAmC;AAAA,MAC/C,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,IAAI;AAAA,IACL;AAEO,IAAM,UAA0B;AAAA,MACtC,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,wBAAwB;AAAA,QACvB,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,cAAc;AAAA,QACd,IAAI;AAAA,QACJ,IAAI;AAAA,MACL;AAAA,IACD;AAEO,IAAMC,cAA6B;AAAA,MACzC,iBAAiB;AAAA,MACjB,WAAW,EAAE,iBAAiB,UAAU;AAAA,IACzC;AAEO,IAAM,eAA+B;AAAA,MAC3C,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,uCAAuC;AAAA,QACtC,YAAY;AAAA,QACZ,UAAU;AAAA,MACX;AAAA,MACA,qCAAqC;AAAA,QACpC,YAAY;AAAA,QACZ,UAAU;AAAA,MACX;AAAA,IACD;AAIO,IAAM,cAA8B;AAAA,MAC1C,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,iBAAiB;AAAA,IAClB;AAEO,IAAM,cAA8B;AAAA,MAC1C,4BAA4B;AAAA,QAC3B,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,QAAQ;AAAA,MACT;AAAA,MACA,yBAAyB;AAAA,QACxB,YAAY;AAAA,QACZ,UAAU;AAAA,MACX;AAAA,IACD;AAEO,IAAM,kBAAkB,CAAC,YAAqC;AAAA,MACpE,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,IAAI;AAAA,MACJ,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,aAAa,SAAS,YAAY;AAAA,MAClC,iBAAiB,SAAS,YAAY;AAAA,MACtC,OAAO,SAAS,SAAS;AAAA,MACzB,WAAW;AAAA,QACV,iBAAiB,SAAS,YAAY;AAAA,QACtC,aAAa;AAAA,MACd;AAAA,IACD;AAIO,IAAM,aAA6B;AAAA,MACzC,YAAY;AAAA,MACZ,OAAO,OAAO;AAAA,MACd,UAAU;AAAA,IACX;AAEO,IAAM,WAA2B;AAAA,MACvC,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAEO,IAAM,wBAAwC;AAAA,MACpD,YAAY;AAAA,MACZ,OAAO,OAAO;AAAA,MACd,UAAU;AAAA,MACV,oBAAoB;AAAA,IACrB;AAEO,IAAM,sBAAsC;AAAA,MAClD,YAAY;AAAA,MACZ,OAAO,OAAO;AAAA,MACd,UAAU;AAAA,MACV,oBAAoB;AAAA,IACrB;AAEO,IAAM,sBAAsC;AAAA,MAClD,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,oBAAoB;AAAA,IACrB;AAIO,IAAM,cAA8B;AAAA,MAC1C,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,OAAO,OAAO;AAAA,MACd,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAEO,IAAM,eAA+B;AAAA,MAC3C,YAAY;AAAA,MACZ,iBAAiB,OAAO;AAAA,MACxB,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW,EAAE,iBAAiB,OAAO,KAAK;AAAA,IAC3C;AAEO,IAAM,iBAAiC;AAAA,MAC7C,YAAY;AAAA,MACZ,iBAAiB,OAAO;AAAA,MACxB,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAIO,IAAM,gBAAgC;AAAA,MAC5C,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAW;AAAA,MACX,UAAU;AAAA,IACX;AAEO,IAAM,gBAAgC;AAAA,MAC5C,YAAY;AAAA,MACZ,YACC;AAAA,MACD,OAAO;AAAA,MACP,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,IAAI;AAAA,MACJ,IAAI;AAAA,IACL;AAEO,IAAM,kBAAkC;AAAA,MAC9C,GAAG;AAAA,MACH,iBAAiB;AAAA,IAClB;AAEO,IAAM,gBAAgC;AAAA,MAC5C,IAAI;AAAA,MACJ,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,iBAAiB;AAAA,IAClB;AAEO,IAAM,sBAAsC;AAAA,MAClD,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,iBAAiB;AAAA,MACjB,cAAc;AAAA,IACf;AAEO,IAAM,qBAAqB,CAAC,YAAoC;AAAA,MACtE,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,UAAU;AAAA,IACX;AAEO,IAAM,oBAAoB,CAAC,QAAgB,cAAsC;AAAA,MACvF,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,OAAO;AAAA,MACP,oBAAoB,EAAE,IAAI,IAAI;AAAA,IAC/B;AAAA;AAAA;;;ACxPA;AAAA;AAAA;AAAA;AAgGA,SAAS,aAAa,OAAwD;AAC7E,QAAM,UAAM,aAAAE,SAAM;AAClB,MAAI,UAAU,QAAS,QAAO,EAAE,OAAO,IAAI,QAAQ,KAAK,GAAG,KAAK,IAAI;AACpE,MAAI,UAAU,OAAQ,QAAO,EAAE,OAAO,IAAI,QAAQ,SAAS,GAAG,KAAK,IAAI;AACvE,MAAI,UAAU,QAAS,QAAO,EAAE,OAAO,IAAI,QAAQ,OAAO,GAAG,KAAK,IAAI;AACtE,SAAO;AACR;AAtGA,IAAAC,gBACAC,mBAwBAC,eACAC,kBACAC,gBAEA,cACA,gBACA,6BACA,qBACA,uBA4PMC,sBAxMA,YAqBA,oBA6nBA,aAMC;AA7uBP;AAAA;AAAA;AAAA,IAAAL,iBAAuE;AACvE,IAAAC,oBAuBO;AACP,IAAAC,gBAAsB;AACtB,IAAAC,mBAAyB;AACzB,IAAAC,iBAAuB;AAEvB,mBAA6B;AAC7B,qBAAoB;AACpB,kCAAqC;AACrC,0BAA6B;AAC7B,4BAA+B;AAE/B;AACA;AACA;AACA;AACA;AACA;AAEA;AASA,IAAAE;AA0OM,IAAAD,uBAAA;AA5MN,iBAAAN,QAAM,OAAO,eAAAQ,OAAO;AAIpB,IAAM,aAAa,CAClB,GACA,GACA,QACY;AACZ,YAAM,KAAK,EAAE,GAAG;AAChB,YAAM,KAAK,EAAE,GAAG;AAChB,UAAI,OAAO,OAAO,YAAY,OAAO,OAAO,SAAU,QAAO,KAAK;AAClE,aAAO,OAAO,kBAAM,EAAE,EAAE,cAAc,OAAO,kBAAM,EAAE,CAAC;AAAA,IACvD;AAYA,IAAM,yBAAqB,qBAAK,SAASC,sBAAqB;AAC7D,YAAM,EAAE,UAAU,IAAI,SAAS;AAC/B,YAAM;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,IAAI,eAAe;AAGnB,YAAM,CAAC,WAAW,YAAY,QAAI,6BAAuB,aAAAT,SAAM,EAAE,QAAQ,KAAK,CAAC;AAC/E,YAAM,CAAC,SAAS,UAAU,QAAI,6BAAuB,aAAAA,SAAM,CAAC;AAC5D,YAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAqB,OAAO;AAC1E,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,EAAE;AAG/C,YAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,CAAC;AAClC,YAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,qBAAqB;AACpE,YAAM,CAAC,SAAS,UAAU,QAAI,yBAAkB,UAAU;AAC1D,YAAM,CAAC,SAAS,UAAU,QAAI,yBAAkB,KAAK;AAGrD,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,KAAK;AAClD,YAAM,CAAC,aAAa,cAAc,QAAI,yBAAuC,IAAI;AACjF,YAAM,CAAC,UAAU,WAAW,QAAI,yBAAiC,CAAC,CAAC;AACnE,YAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAS,KAAK;AAG5D,YAAM,kBAAc;AAAA,QACnB,OAAO,eAA8B,gBAA+B;AACnE,gBAAM,KAAK,wCAAiB;AAC5B,gBAAM,KAAK,oCAAe;AAC1B,cAAI,CAAC,MAAM,CAAC,IAAI;AACf,qBAAS,2BAA2B;AACpC;AAAA,UACD;AACA,gBAAM,SAA4B;AAAA,YACjC,YAAY,GAAG,OAAO,qBAAqB;AAAA,YAC3C,UAAU,GAAG,OAAO,qBAAqB;AAAA,UAC1C;AACA,gBAAM,YAAY,MAAM;AACxB,kBAAQ,CAAC;AAAA,QACV;AAAA,QACA,CAAC,WAAW,SAAS,aAAa,QAAQ;AAAA,MAC3C;AAEA,oCAAU,MAAM;AACf,YAAI,aAAa,QAAS,aAAY;AAAA,MAEvC,GAAG,CAAC,WAAW,OAAO,CAAC;AAGvB,YAAM,mBAAmB,CAAC,UAAsB;AAC/C,2BAAmB,KAAK;AACxB,cAAM,QAAQ,aAAa,KAAK;AAChC,YAAI,OAAO;AACV,uBAAa,MAAM,KAAK;AACxB,qBAAW,MAAM,GAAG;AAAA,QACrB;AAAA,MACD;AAGA,YAAM,mBAAe,wBAAQ,MAAM;AAClC,YAAI,OAAO,CAAC,GAAG,UAAU;AACzB,YAAI,WAAW,KAAK,GAAG;AACtB,gBAAM,IAAI,WAAW,KAAK,EAAE,YAAY;AACxC,iBAAO,KAAK;AAAA,YACX,CAAC,MACA,EAAE,SAAS,YAAY,EAAE,SAAS,CAAC,KACnC,EAAE,QAAQ,YAAY,EAAE,SAAS,CAAC;AAAA,UACpC;AAAA,QACD;AACA,aAAK,KAAK,CAAC,GAAG,MAAM;AACnB,gBAAM,MAAM,WAAW,GAAG,GAAG,OAAO;AACpC,iBAAO,YAAY,QAAQ,MAAM,CAAC;AAAA,QACnC,CAAC;AACD,eAAO;AAAA,MACR,GAAG,CAAC,YAAY,YAAY,SAAS,OAAO,CAAC;AAE7C,YAAM,oBAAgB;AAAA,QACrB,MACC,aAAa;AAAA,UACZ,OAAO;AAAA,UACP,OAAO,cAAc;AAAA,QACtB;AAAA,QACD,CAAC,cAAc,MAAM,WAAW;AAAA,MACjC;AAEA,YAAM,aAAa,CAAC,QAAiB;AACpC,YAAI,YAAY,KAAK;AACpB,qBAAW,CAAC,MAAO,MAAM,QAAQ,SAAS,KAAM;AAAA,QACjD,OAAO;AACN,qBAAW,GAAG;AACd,qBAAW,KAAK;AAAA,QACjB;AAAA,MACD;AAGA,YAAM,aAAa,OAAO,QAA+B;AACxD,uBAAe,GAAG;AAClB,oBAAY,CAAC,CAAC;AACd,sBAAc,IAAI;AAClB,2BAAmB,IAAI;AACvB,YAAI;AACH,gBAAM,KAAK,oCAAa,aAAAA,SAAM;AAC9B,gBAAM,KAAK,gCAAW,aAAAA,SAAM;AAC5B,gBAAM,OAAO,MAAM,mBAAmB,IAAI,SAAS;AAAA,YAClD,YAAY,GAAG,OAAO,qBAAqB;AAAA,YAC3C,UAAU,GAAG,OAAO,qBAAqB;AAAA,UAC1C,CAAC;AACD,sBAAY,IAAI;AAAA,QACjB,SAAQ;AACP,sBAAY,CAAC,CAAC;AAAA,QACf,UAAE;AACD,6BAAmB,KAAK;AAAA,QACzB;AAAA,MACD;AAEA,YAAM,cAAc,MAAM;AACzB,sBAAc,KAAK;AACnB,mBAAW,MAAM;AAChB,yBAAe,IAAI;AACnB,sBAAY,CAAC,CAAC;AAAA,QACf,GAAG,GAAG;AAAA,MACP;AAGA,YAAM,oBAAoB,YAAY;AACrC,cAAM,KAAK,oCAAa,aAAAA,SAAM;AAC9B,cAAM,KAAK,gCAAW,aAAAA,SAAM;AAC5B,YAAI;AACH,gBAAM,kBAAkB;AAAA,YACvB,YAAY,GAAG,OAAO,qBAAqB;AAAA,YAC3C,UAAU,GAAG,OAAO,qBAAqB;AAAA,UAC1C,CAAC;AACD,oBAAU,kBAAkB,SAAS;AAAA,QACtC,SAAS,KAAU;AAClB,qBAAU,2BAAK,YAAW,0BAA0B,OAAO;AAAA,QAC5D;AAAA,MACD;AAEA,YAAM,uBAAuB,YAAY;AACxC,YAAI,CAAC,YAAa;AAClB,YAAI;AACH,gBAAM,yBAAyB,YAAY,SAAS;AAAA,YACnD,aAAa,oCAAa,aAAAA,SAAM,GAAG,OAAO,qBAAqB;AAAA,YAC/D,WAAW,gCAAW,aAAAA,SAAM,GAAG,OAAO,qBAAqB;AAAA,UAC5D,CAAC;AACD,oBAAU,kBAAkB,SAAS;AAAA,QACtC,SAAS,KAAU;AAClB,qBAAU,2BAAK,YAAW,0BAA0B,OAAO;AAAA,QAC5D;AAAA,MACD;AAGA,YAAM,UAA4C;AAAA,QACjD,EAAE,IAAI,YAAY,OAAO,YAAY;AAAA,QACrC,EAAE,IAAI,WAAW,OAAO,UAAU;AAAA,QAClC,EAAE,IAAI,cAAc,OAAO,SAAS;AAAA,QACpC,EAAE,IAAI,aAAa,OAAO,SAAS;AAAA,QACnC,EAAE,IAAI,kBAAkB,OAAO,cAAc;AAAA,QAC7C,EAAE,IAAI,kBAAkB,OAAO,cAAc;AAAA,QAC7C,EAAE,IAAI,4BAA4B,OAAO,mBAAmB;AAAA,QAC5D,EAAE,IAAI,0BAA0B,OAAO,iBAAiB;AAAA,QACxD,EAAE,IAAI,0BAA0B,OAAO,iBAAiB;AAAA,QACxD,EAAE,IAAI,kBAAkB,OAAO,gBAAgB;AAAA,MAChD;AAGA,aACC,8CAAC,oDAAqB,aAAa,kCAClC,yDAAC,yBAAI,IAAI,EAAE,SAAS,QAAQ,eAAe,UAAU,YAAY,KAAK,GACrE;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAM;AAAA,YACN,SACC,+CAAC,2BAAM,WAAU,OAAM,YAAW,UAAS,SAAS,GACnD;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,MAAK;AAAA,kBACL,OAAO;AAAA,kBACP,UAAU,CAAC,MAAM;AAChB,kCAAc,EAAE,OAAO,KAAK;AAC5B,4BAAQ,CAAC;AAAA,kBACV;AAAA,kBACA,aAAY;AAAA,kBACZ,IAAI,EAAE,OAAO,KAAK,UAAU,WAAW,QAAQ,IAAI,YAAY,KAAK;AAAA,kBACpE,cACC,8CAAC,oCAAe,UAAS,OACxB,wDAAC,eAAAU,SAAA,EAAW,IAAI,EAAE,UAAU,IAAI,OAAO,OAAO,GAAG,GAClD;AAAA;AAAA,cAEF;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACA,aAAa;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,gBAAgB;AAAA,kBACjB;AAAA,kBACA,cAAc;AAAA,kBAEd;AAAA,oBAAC;AAAA;AAAA,sBACA,WAAW,8CAAC,iBAAAC,SAAA,EAAa,IAAI,EAAE,UAAU,UAAU,GAAG;AAAA,sBACtD,UAAU,CAAC,WAAW;AAAA,sBACtB,SAAS;AAAA,sBACT,IAAI,EAAE,QAAQ,GAAG;AAAA,sBACjB;AAAA;AAAA,kBAED;AAAA;AAAA,cACD;AAAA,eACD;AAAA;AAAA,QAEF;AAAA,QAEA,+CAAC,yBAAI,IAAI,EAAE,MAAM,GAAG,UAAU,QAAQ,IAAI,KAAK,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,EAAE,GAErE;AAAA,yDAAC,yBAAI,IAAI,aACR;AAAA;AAAA,cAAC;AAAA;AAAA,gBACA,OAAM;AAAA,gBACN,OAAO;AAAA,gBACP,UAAU,CAAC,MAAM;AAChB,+BAAa,CAAiB;AAC9B,qCAAmB,EAAE;AAAA,gBACtB;AAAA,gBACA,WAAW;AAAA,kBACV,WAAW,EAAE,MAAM,SAAS,IAAI,YAAY;AAAA,gBAC7C;AAAA;AAAA,YACD;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACA,OAAM;AAAA,gBACN,OAAO;AAAA,gBACP,UAAU,CAAC,MAAM;AAChB,6BAAW,CAAiB;AAC5B,qCAAmB,EAAE;AAAA,gBACtB;AAAA,gBACA,WAAW;AAAA,kBACV,WAAW,EAAE,MAAM,SAAS,IAAI,YAAY;AAAA,gBAC7C;AAAA;AAAA,YACD;AAAA,YACA,8CAAC,2BAAM,WAAU,OAAM,SAAS,KAC7B,WAAC,SAAS,QAAQ,OAAO,EAAmB,IAAI,CAAC,MAClD;AAAA,cAAC;AAAA;AAAA,gBAEA,SAAS,MAAM,iBAAiB,CAAC;AAAA,gBACjC,IAAI,gBAAgB,oBAAoB,CAAC;AAAA,gBACzC,eAAa;AAAA,gBAEZ,gBAAM,UAAU,UAAU,MAAM,SAAS,cAAc;AAAA;AAAA,cALnD;AAAA,YAMN,CACA,GACF;AAAA,aACD;AAAA,UAEC,SACA;AAAA,YAAC;AAAA;AAAA,cACA,UAAS;AAAA,cACT,IAAI,EAAE,IAAI,GAAG,YAAY,MAAM,UAAU,UAAU;AAAA,cAElD;AAAA;AAAA,UACF;AAAA,UAGA,WACA,8CAAC,yBAAI,IAAI,EAAE,WAAW,UAAU,IAAI,IAAI,GACvC,wDAAC,sCAAiB,IAAI,EAAE,OAAO,OAAO,KAAK,GAAG,MAAM,IAAI,GACzD;AAAA,UAID,+CAAC,2BAAM,WAAW,GAAG,IAAI,kBACxB;AAAA,0DAAC,oCACA,yDAAC,2BAAM,MAAK,SAAQ,IAAI,SACvB;AAAA,4DAAC,+BACA,wDAAC,8BACC,kBAAQ,IAAI,CAAC,QACb,8CAAC,+BAAuB,IAAIC,aAC3B;AAAA,gBAAC;AAAA;AAAA,kBACA,QAAQ,YAAY,IAAI;AAAA,kBACxB,WAAW,YAAY,IAAI,KAAK,UAAU;AAAA,kBAC1C,SAAS,MAAM,WAAW,IAAI,EAAE;AAAA,kBAChC,IAAI;AAAA,kBAEH,cAAI;AAAA;AAAA,cACN,KARe,IAAI,EASpB,CACA,GACF,GACD;AAAA,cACA,+CAAC,+BACC;AAAA,8BAAc,IAAI,CAAC,KAAK,QAAQ;AAChC,wBAAM,aAAa,CAAC,IAAI;AACxB,yBACC,+CAAC,8BAAuC,OAAK,MAAC,IAAIC,aACjD;AAAA,kEAAC,+BAAU,IAAI,YACb,cAAI,YAAY,UAClB;AAAA,oBACA,8CAAC,+BAAU,IAAI,UACb,cAAI,WAAW,UACjB;AAAA,oBACA,8CAAC,+BACC,cAAI,aACJ;AAAA,sBAAC;AAAA;AAAA,wBACA,OAAO,IAAI;AAAA,wBACX,MAAK;AAAA,wBACL,IAAI;AAAA;AAAA,oBACL,IAEA,UAEF;AAAA,oBACA,8CAAC,+BAAU,IAAI,EAAE,WAAW,SAAS,GACpC;AAAA,sBAAC;AAAA;AAAA,wBACA,OAAO,IAAI;AAAA,wBACX,MAAK;AAAA,wBACL,SAAS,CAAC,MAAM;AACf,4BAAE,gBAAgB;AAClB,qCAAW,GAAG;AAAA,wBACf;AAAA,wBACA,IAAI;AAAA;AAAA,oBACL,GACD;AAAA,oBACA,8CAAC,+BAAU,IAAI,UACb,cAAI,qBACF,aAAAb,SAAM,IAAI,cAAc,EAAE,OAAO,qBAAqB,IACtD,UACJ;AAAA,oBACA,8CAAC,+BAAU,IAAI,UACb,uBACA;AAAA,sBAAC;AAAA;AAAA,wBACA,OAAM;AAAA,wBACN,MAAK;AAAA,wBACL,IAAI;AAAA;AAAA,oBACL,QAEA,aAAAA,SAAM,IAAI,cAAc,EAAE,OAAO,qBAAqB,GAExD;AAAA,oBACA,8CAAC,+BAAU,IAAI,uBACb,cAAI,4BAA4B,UAClC;AAAA,oBACA,8CAAC,+BAAU,IAAI,qBACb,cAAI,0BAA0B,UAChC;AAAA,oBACA,8CAAC,+BAAU,IAAI,qBACb,cAAI,0BAA0B,UAChC;AAAA,oBACA,8CAAC,+BAAU,IAAI,EAAE,UAAU,IAAI,GAC7B,cAAI,kBAAkB,QACnB,MAAM;AACP,4BAAM,MAAM,KAAK,IAAI,IAAI,gBAAgB,GAAG;AAC5C,4BAAM,WACL,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY;AACjD,4BAAM,SACL,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY;AACjD,6BACC;AAAA,wBAAC;AAAA;AAAA,0BACA,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI;AAAA,0BAEtD;AAAA,0EAAC,yBAAI,IAAI,mBAAmB,MAAM,GACjC;AAAA,8BAAC;AAAA;AAAA,gCACA,IAAI;AAAA,kCACH,OAAO,GAAG,GAAG;AAAA,kCACb,QAAQ;AAAA,kCACR,cAAc;AAAA,kCACd,YAAY,0BAA0B,QAAQ,OAAO,QAAQ;AAAA,kCAC7D,YAAY;AAAA,gCACb;AAAA;AAAA,4BACD,GACD;AAAA,4BACA;AAAA,8BAAC;AAAA;AAAA,gCACA,OAAO,GAAG,KAAK,MAAM,GAAG,CAAC;AAAA,gCACzB,MAAK;AAAA,gCACL,IAAI,kBAAkB,QAAQ,QAAQ;AAAA;AAAA,4BACvC;AAAA;AAAA;AAAA,sBACD;AAAA,oBAEF,GAAG,IACF,UACJ;AAAA,uBAtFc,GAAG,IAAI,OAAO,IAAI,GAAG,EAuFpC;AAAA,gBAEF,CAAC;AAAA,gBACA,CAAC,WAAW,cAAc,WAAW,KACrC,8CAAC,8BACA;AAAA,kBAAC;AAAA;AAAA,oBACA,SAAS,QAAQ;AAAA,oBACjB,IAAI;AAAA,sBACH,WAAW;AAAA,sBACX,IAAI;AAAA,sBACJ,OAAO;AAAA,sBACP,WAAW;AAAA,oBACZ;AAAA,oBACA;AAAA;AAAA,gBAED,GACD;AAAA,iBAEF;AAAA,eACD,GACD;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACA,WAAU;AAAA,gBACV,OAAO,aAAa;AAAA,gBACpB;AAAA,gBACA,cAAc,CAAC,GAAG,MAAM,QAAQ,CAAC;AAAA,gBACjC;AAAA,gBACA,oBAAoB,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,gBACtC,qBAAqB,CAAC,MAAM;AAC3B,iCAAe,SAAS,EAAE,OAAO,OAAO,EAAE,CAAC;AAC3C,0BAAQ,CAAC;AAAA,gBACV;AAAA,gBACA,IAAI;AAAA;AAAA,YACL;AAAA,aACD;AAAA,UAGA;AAAA,YAAC;AAAA;AAAA,cACA,MAAM;AAAA,cACN,SAAS;AAAA,cACT,UAAS;AAAA,cACT,WAAS;AAAA,cACT,YAAY,EAAE,IAAI,cAAc;AAAA,cAEhC;AAAA,+DAAC,iCAAY,IAAI,eAChB;AAAA,iEAAC,yBACA;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACA,SAAQ;AAAA,wBACR,IAAI;AAAA,0BACH,YAAY;AAAA,0BACZ,YAAY;AAAA,0BACZ,UAAU;AAAA,0BACV,eAAe;AAAA,wBAChB;AAAA,wBACA;AAAA;AAAA,oBAED;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACA,SAAQ;AAAA,wBACR,IAAI;AAAA,0BACH,YAAY;AAAA,0BACZ,SAAS;AAAA,0BACT,UAAU;AAAA,0BACV,IAAI;AAAA,wBACL;AAAA,wBAEC;AAAA,qEAAa;AAAA,0BAAS;AAAA,0BAAS,2CAAa;AAAA,0BAAU;AAAA,2BACtD,2CAAa,eAAc,IAAI,MAAM;AAAA;AAAA;AAAA,oBACvC;AAAA,qBACD;AAAA,kBACA,+CAAC,yBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,GAC1D;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACA,aAAa;AAAA,0BACZ,gBAAgB;AAAA,0BAChB,gBAAgB;AAAA,wBACjB;AAAA,wBACA,cAAc;AAAA,wBAEd;AAAA,0BAAC;AAAA;AAAA,4BACA,MAAK;AAAA,4BACL,WAAW,8CAAC,iBAAAW,SAAA,EAAa,IAAI,EAAE,UAAU,UAAU,GAAG;AAAA,4BACtD,SAAS;AAAA,4BACT,IAAI,EAAE,YAAY,SAAS;AAAA,4BAC3B;AAAA;AAAA,wBAED;AAAA;AAAA,oBACD;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACA,SAAS;AAAA,wBACT,MAAK;AAAA,wBACL,IAAI;AAAA,0BACH,OAAO;AAAA,0BACP,iBAAiB;AAAA,0BACjB,WAAW,EAAE,iBAAiB,wBAAwB;AAAA,wBACvD;AAAA,wBAEA,wDAAC,cAAAG,SAAA,EAAU,UAAS,SAAQ;AAAA;AAAA,oBAC7B;AAAA,qBACD;AAAA,mBACD;AAAA,gBAEA,8CAAC,mCAAc,IAAI,iBACjB,4BACA,8CAAC,yBAAI,IAAI,EAAE,GAAG,GAAG,WAAW,SAAS,GACpC;AAAA,kBAAC;AAAA;AAAA,oBACA,MAAM;AAAA,oBACN,IAAI,EAAE,OAAO,gCAAgC;AAAA;AAAA,gBAC9C,GACD,IACG,SAAS,SAAS,IACrB,8CAAC,yBAAI,IAAI,EAAE,GAAG,KAAK,WAAW,KAAK,WAAW,OAAO,GACnD,iBAAO;AAAA,kBACP,SAAS;AAAA,oBACR,CAAC,KAAK,MAAM;AACX,4BAAM,UAAU,EAAE,gBACf,aAAAd,SAAM,EAAE,SAAS,EAAE,OAAO,aAAa,IACvC;AACH,0BAAI,CAAC,IAAI,OAAO,EAAG,KAAI,OAAO,IAAI,CAAC;AACnC,0BAAI,OAAO,EAAE,KAAK,CAAC;AACnB,6BAAO;AAAA,oBACR;AAAA,oBACA,CAAC;AAAA,kBACF;AAAA,gBACD,EAAE,IAAI,CAAC,CAAC,MAAM,YAAY,MACzB,+CAAC,2BAAiB,WAAW,GAAG,IAAI,eACnC;AAAA,gEAAC,yBAAI,IAAI,qBACR;AAAA,oBAAC;AAAA;AAAA,sBACA,IAAI;AAAA,wBACH,YAAY;AAAA,wBACZ,YAAY;AAAA,wBACZ,UAAU;AAAA,wBACV,OAAO;AAAA,wBACP,eAAe;AAAA,sBAChB;AAAA,sBAEC;AAAA;AAAA,kBACF,GACD;AAAA,kBACA,+CAAC,yBAAI,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,GACzB;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACA,IAAI;AAAA,0BACH,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,KAAK;AAAA,0BACL,IAAI;AAAA,0BACJ,IAAI;AAAA,0BACJ,cAAc;AAAA,wBACf;AAAA,wBAEA;AAAA;AAAA,4BAAC;AAAA;AAAA,8BACA,IAAI;AAAA,gCACH,MAAM;AAAA,gCACN,YAAY;AAAA,gCACZ,UAAU;AAAA,gCACV,YAAY;AAAA,gCACZ,OAAO;AAAA,gCACP,eAAe;AAAA,gCACf,eAAe;AAAA,8BAChB;AAAA,8BACA;AAAA;AAAA,0BAED;AAAA,0BACA;AAAA,4BAAC;AAAA;AAAA,8BACA,IAAI;AAAA,gCACH,MAAM;AAAA,gCACN,YAAY;AAAA,gCACZ,UAAU;AAAA,gCACV,YAAY;AAAA,gCACZ,OAAO;AAAA,gCACP,eAAe;AAAA,gCACf,eAAe;AAAA,8BAChB;AAAA,8BACA;AAAA;AAAA,0BAED;AAAA;AAAA;AAAA,oBACD;AAAA,oBACC,aAAa,IAAI,CAAC,GAAG,MACrB;AAAA,sBAAC;AAAA;AAAA,wBAEA,IAAI;AAAA,0BACH,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,KAAK;AAAA,0BACL,IAAI;AAAA,0BACJ,cACC,IAAI,aAAa,SAAS,IACvB,uBACA;AAAA,wBACL;AAAA,wBAEA;AAAA;AAAA,4BAAC;AAAA;AAAA,8BACA,WAAU;AAAA,8BACV,IAAI;AAAA,gCACH,MAAM;AAAA,gCACN,YAAY;AAAA,gCACZ,UAAU;AAAA,gCACV,YAAY;AAAA,gCACZ,OAAO,EAAE,YAAY,OAAO,QAAQ;AAAA,gCACpC,SAAS;AAAA,gCACT,YAAY;AAAA,gCACZ,KAAK;AAAA,8BACN;AAAA,8BAEA;AAAA,8EAAC,UAAK,OAAO,EAAE,UAAU,SAAS,GAAI,oBAAI;AAAA,gCACzC,EAAE,gBACA,aAAAA,SAAM,EAAE,SAAS,EAAE,OAAO,uBAAuB,IACjD;AAAA;AAAA;AAAA,0BACJ;AAAA,0BACA;AAAA,4BAAC;AAAA;AAAA,8BACA,WAAU;AAAA,8BACV,IAAI;AAAA,gCACH,MAAM;AAAA,gCACN,YAAY;AAAA,gCACZ,UAAU;AAAA,gCACV,YAAY;AAAA,gCACZ,OAAO,EAAE,aAAa,OAAO,MAAM;AAAA,gCACnC,SAAS;AAAA,gCACT,YAAY;AAAA,gCACZ,KAAK;AAAA,8BACN;AAAA,8BAEA;AAAA,8EAAC,UAAK,OAAO,EAAE,UAAU,SAAS,GAAI,oBAAI;AAAA,gCACzC,EAAE,iBACA,aAAAA,SAAM,EAAE,UAAU,EAAE,OAAO,uBAAuB,IAClD;AAAA;AAAA;AAAA,0BACJ;AAAA;AAAA;AAAA,sBA/CK;AAAA,oBAgDN,CACA;AAAA,qBACF;AAAA,qBAxGW,IAyGZ,CACA,GACF,IAEA,8CAAC,yBAAI,IAAI,EAAE,GAAG,GAAG,WAAW,SAAS,GACpC;AAAA,kBAAC;AAAA;AAAA,oBACA,IAAI;AAAA,sBACH,YAAY;AAAA,sBACZ,OAAO;AAAA,sBACP,WAAW;AAAA,sBACX,UAAU;AAAA,oBACX;AAAA,oBACA;AAAA;AAAA,gBAED,GACD,GAEF;AAAA;AAAA;AAAA,UACD;AAAA,WACD;AAAA,SACD,GACD;AAAA,IAEF,CAAC;AAID,IAAM,cAAwB,MAC7B,8CAAC,eACA,wDAAC,sBAAmB,GACrB;AAGD,IAAO,sBAAQ;AAAA;AAAA;;;ACjuBf,SAAS,cAAc,QAAiC;AACvD,QAAM,KAAK,IAAI,gBAAgB;AAC/B,MAAI,OAAO,WAAY,IAAG,OAAO,cAAc,OAAO,UAAU;AAChE,MAAI,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,QAAQ;AAC1D,MAAI,OAAO,UAAU;AACpB,eAAW,MAAM,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,EAAE,CAAC;AAAA,EACnE;AACA,MAAI,OAAO,UAAU;AACpB,eAAW,MAAM,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,EAAE,CAAC;AAAA,EACnE;AACA,MAAI,OAAO,UAAW,IAAG,OAAO,aAAa,OAAO,SAAS;AAC7D,MAAI,OAAO,OAAQ,IAAG,OAAO,UAAU,OAAO,MAAM;AACpD,MAAI,OAAO,OAAQ,IAAG,OAAO,UAAU,OAAO,MAAM;AACpD,MAAI,OAAO,KAAM,IAAG,OAAO,QAAQ,OAAO,OAAO,IAAI,CAAC;AACtD,MAAI,OAAO,UAAW,IAAG,OAAO,aAAa,OAAO,OAAO,SAAS,CAAC;AACrE,QAAM,MAAM,GAAG,SAAS;AACxB,SAAO,MAAM,IAAI,GAAG,KAAK;AAC1B;AAIO,SAAS,eAAe;AAC9B,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAiC,CAAC,CAAC;AACjE,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAS,CAAC;AAClD,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,EAAE;AAErC,QAAM,mBAAe,4BAAY,OAAO,WAA2C;AAvCpF,QAAAe,KAAA;AAwCE,eAAW,IAAI;AACf,aAAS,EAAE;AACX,QAAI;AACH,YAAM,KAAK,cAAc,MAAM;AAC/B,YAAM,MAAM,MAAM,cAAc,IAAoB,GAAG,UAAU,kBAAkB,GAAG,EAAE,EAAE;AAC1F,kBAAW,MAAAA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,SAAV,YAAkB,CAAC,CAAC;AAC/B,uBAAgB,eAAI,SAAJ,mBAAU,UAAV,YAAmB,CAAC;AAAA,IACrC,SAAS,KAAU;AAClB;AAAA,SACC,wDAAK,aAAL,mBAAe,SAAf,mBAAqB,YAArB,aACG,sCAAK,aAAL,mBAAe,SAAf,mBAAqB,WADxB,YAEG,2BAAK,YAFR,YAGG;AAAA,MACJ;AACA,iBAAW,CAAC,CAAC;AACb,sBAAgB,CAAC;AAAA,IAClB,UAAE;AACD,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAc,4BAAY,OAAO,WAA2C;AA7DnF,QAAAA;AA8DE,UAAM,KAAK,cAAc,MAAM;AAC/B,UAAM,MAAM,MAAM,cAAc,IAAI,GAAG,UAAU,uBAAuB,GAAG,EAAE,IAAI;AAAA,MAChF,cAAc;AAAA,IACf,CAAC;AACD,UAAM,OAAO,IAAI;AACjB,UAAM,MAAM,OAAO,IAAI,gBAAgB,IAAI;AAC3C,UAAM,IAAI,SAAS,cAAc,GAAG;AACpC,MAAE,OAAO;AACT,MAAE,WAAW,eAAcA,MAAA,OAAO,eAAP,OAAAA,MAAqB,QAAQ;AACxD,aAAS,KAAK,YAAY,CAAC;AAC3B,MAAE,MAAM;AACR,MAAE,OAAO;AACT,WAAO,IAAI,gBAAgB,GAAG;AAAA,EAC/B,GAAG,CAAC,CAAC;AAEL,QAAM,qBAAiB,4BAAY,OAAO,aAAoC;AAC7E,UAAM,MAAM,MAAM,cAAc,IAAI,UAAU,kBAAkB,QAAQ,GAAG;AAAA,MAC1E,cAAc;AAAA,IACf,CAAC;AACD,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAsBO,SAAS,gBAAgB;AAC/B,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAiC,CAAC,CAAC;AAC/D,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAiC,CAAC,CAAC;AAC/D,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAE5C,QAAM,kBAAc,4BAAY,YAA2B;AAzH5D,QAAAA;AA0HE,QAAI;AACH,YAAM,MAAM,MAAM,cAAc;AAAA,QAC/B,UAAU;AAAA,QACV,EAAE,QAAQ,EAAE,MAAM,QAAQ,EAAE;AAAA,MAC7B;AACA,YAAM,MAAM,MAAM,QAAQ,IAAI,IAAI,IAC/B,IAAI,OACJ,MAAM,SAASA,MAAA,IAAI,SAAJ,gBAAAA,IAAkB,IAAI,IACnC,IAAI,KAAa,OAClB,CAAC;AACL,YAAM,SAAkC,IACtC,OAAO,CAAC,MAAM;AACd,cAAM,WAAW,OAAO,EAAE,SAAS,YAAY,EAAE,SAAS,OAAO,EAAE,KAAK,OAAO,EAAE;AACjF,eAAO,aAAa;AAAA,MACrB,CAAC,EACA,IAAI,CAAC,OAAO;AAAA,QACZ,IAAI,EAAE;AAAA,QACN,QAAQ,EAAE;AAAA,QACV,UAAU,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK,EAAE;AAAA,MACpE,EAAE;AACH,gBAAU,MAAM;AAAA,IACjB,SAAQ;AACP,gBAAU,CAAC,CAAC;AAAA,IACb;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAc,4BAAY,YAA2B;AApJ5D,QAAAA;AAqJE,QAAI;AACH,YAAM,MAAM,MAAM,cAAc;AAAA,QAC/B,UAAU;AAAA,MACX;AACA,YAAM,MAAM,MAAM,QAAQ,IAAI,IAAI,IAC/B,IAAI,OACJ,MAAM,SAASA,MAAA,IAAI,SAAJ,gBAAAA,IAAkB,IAAI,IACnC,IAAI,KAAa,OAClB,CAAC;AACL,gBAAW,IAAwB,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,KAAK,EAAE,CAAC;AAAA,IAC5E,SAAQ;AACP,gBAAU,CAAC,CAAC;AAAA,IACb;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,QAAM,eAAW,4BAAY,YAA2B;AACvD,eAAW,IAAI;AACf,QAAI;AACH,YAAM,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,CAAC;AAAA,IACjD,UAAE;AACD,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,aAAa,WAAW,CAAC;AAE7B,SAAO,EAAE,QAAQ,QAAQ,SAAS,aAAa,aAAa,SAAS;AACtE;AA9KA,IAAAC;AAAA;AAAA;AAAA;AAAA,IAAAA,iBAAsC;AACtC;AACA;AAAA;AAAA;;;ACFA,IAsGa,mBAEA;AAxGb,IAAAC,cAAA;AAAA;AAAA;AAsGO,IAAM,oBAAoB;AAE1B,IAAM,wBAAwB,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA;;;ACxGvD,IAIaC,OAEAC,SAaA,iBAOA,WASA,eAEAC,cAUA,gBAKA,cAUA,iBAMA,YAMA,mBAIA,eAMA,wBAKA,oBAMA,aAkBA,cAOAC,UAcAC,aASAC,cAOAC,aAKA,cAMA,YAKA,YAOA,YAOA,gBAQA,gBAkBA,cAiBAC,cASA,eAUA,cAYAC,eASA,SAMA;AA7Qb,IAAAC,eAAA;AAAA;AAAA;AAIO,IAAMT,QAAO;AAEb,IAAMC,UAAS;AAAA,MACrB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,IAAI;AAAA,MACJ,SAAS;AAAA,IACV;AAIO,IAAM,kBAAkC;AAAA,MAC9C,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAYD;AAAA,IACb;AAEO,IAAM,YAA4B;AAAA,MACxC,MAAM;AAAA,MACN,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,IAAI;AAAA,IACL;AAIO,IAAM,gBAAgB;AAEtB,IAAME,eAA8B;AAAA,MAC1C,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAEO,IAAM,iBAAiC;AAAA,MAC7C,IAAI;AAAA,IACL;AAGO,IAAM,eAAe;AAAA,MAC3B,OAAO;AAAA,MACP,4BAA4B,EAAE,cAAc,OAAO,QAAQ,eAAe,IAAI,IAAI;AAAA,MAClF,yBAAyB,EAAE,IAAI,GAAG,IAAI,OAAO,UAAU,UAAU;AAAA,MACjE,6BAA6B,EAAE,IAAI,EAAE;AAAA,MACrC,8CAA8C,EAAE,UAAU,SAAS;AAAA,MACnE,sCAAsC,EAAE,aAAa,UAAU;AAAA,MAC/D,iCAAiC,EAAE,IAAI,OAAO,IAAI,GAAG,UAAU,GAAG;AAAA,IACnE;AAEO,IAAM,kBAAkC;AAAA,MAC9C,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAGO,IAAM,aAA6B;AAAA,MACzC,QAAQ;AAAA,MACR,YAAY;AAAA,IACb;AAGO,IAAM,oBAAoC;AAAA,MAChD,UAAU;AAAA,IACX;AAEO,IAAM,gBAAgC;AAAA,MAC5C,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,cAAc;AAAA,IACf;AAEO,IAAM,yBAAyB;AAAA,MACrC,WAAW;AAAA,MACX,uBAAuB,EAAE,UAAU,WAAW,WAAW,IAAI,IAAI,IAAI;AAAA,IACtE;AAEO,IAAM,qBAAqC;AAAA,MACjD,UAAU;AAAA,IACX;AAIO,IAAM,cAA8B;AAAA,MAC1C,OAAO;AAAA,MACP,4BAA4B;AAAA,QAC3B,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,cAAc,EAAE,aAAa,UAAU;AAAA,QACvC,oBAAoB,EAAE,aAAa,UAAU;AAAA,QAC7C,0BAA0B,EAAE,aAAa,WAAW,aAAa,QAAQ;AAAA,MAC1E;AAAA,MACA,yBAAyB;AAAA,QACxB,UAAU;AAAA,QACV,kBAAkB,EAAE,OAAO,WAAW,SAAS,EAAE;AAAA,MAClD;AAAA,IACD;AAIO,IAAM,eAA+B;AAAA,MAC3C,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,IAAI;AAAA,IACL;AAEO,IAAMC,WAA0B;AAAA,MACtC,UAAU;AAAA,MACV,YAAYH;AAAA,MACZ,wBAAwB;AAAA,QACvB,YAAYA;AAAA,QACZ,UAAU;AAAA,QACV,cAAc;AAAA,QACd,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,YAAY;AAAA,MACb;AAAA,IACD;AAGO,IAAMI,cAA6B;AAAA,MACzC,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU;AAAA,IACX;AAEO,IAAMC,eAA8B;AAAA,MAC1C,4BAA4B,EAAE,OAAO,OAAO;AAAA,MAC5C,kCAAkC,EAAE,OAAO,OAAO;AAAA,MAClD,gBAAgB,EAAE,OAAO,OAAO;AAAA,MAChC,6BAA6B,EAAE,OAAO,kBAAkB;AAAA,IACzD;AAEO,IAAMC,cAA6B;AAAA,MACzC,iBAAiB;AAAA,MACjB,WAAW,EAAE,iBAAiB,UAAU;AAAA,IACzC;AAEO,IAAM,eAA+B;AAAA,MAC3C,YAAY;AAAA,MACZ,OAAOL,QAAO;AAAA,MACd,UAAU;AAAA,IACX;AAEO,IAAM,aAA6B;AAAA,MACzC,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAEO,IAAM,aAA6B;AAAA,MACzC,YAAY;AAAA,MACZ,OAAOA,QAAO;AAAA,MACd,UAAU;AAAA,MACV,oBAAoB;AAAA,IACrB;AAEO,IAAM,aAA6B;AAAA,MACzC,YAAY;AAAA,MACZ,OAAOA,QAAO;AAAA,MACd,UAAU;AAAA,MACV,oBAAoB;AAAA,IACrB;AAEO,IAAM,iBAAiC;AAAA,MAC7C,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,oBAAoB;AAAA,IACrB;AAIO,IAAM,iBAAiB,CAAC,UAAkB;AAChD,YAAM,KAAK,SAAS,IAAI,YAAY;AACpC,UAAI,QAAQ;AACZ,UAAI,KAAK;AACT,UAAI,EAAE,SAAS,SAAS,GAAG;AAAE,gBAAQA,QAAO;AAAO,aAAK;AAAA,MAAW,WAC1D,EAAE,SAAS,UAAU,GAAG;AAAE,gBAAQA,QAAO;AAAM,aAAK;AAAA,MAAW,WAC/D,EAAE,SAAS,UAAU,GAAG;AAAE,gBAAQA,QAAO;AAAQ,aAAK;AAAA,MAAW;AAC1E,aAAO;AAAA,QACN,YAAYD;AAAA,QACZ,SAAS;AAAA,QACT;AAAA,QACA,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,cAAc;AAAA,MACf;AAAA,IACD;AAEO,IAAM,eAAe,CAAC,UAAkB;AAC9C,YAAM,KAAK,SAAS,IAAI,YAAY;AACpC,UAAI,QAAQ;AACZ,UAAI,KAAK;AACT,UAAI,EAAE,SAAS,UAAU,GAAG;AAAE,gBAAQC,QAAO;AAAO,aAAK;AAAA,MAAW,WAC3D,EAAE,SAAS,WAAW,KAAK,EAAE,SAAS,QAAQ,GAAG;AAAE,gBAAQA,QAAO;AAAK,aAAK;AAAA,MAAW;AAChG,aAAO;AAAA,QACN,YAAYD;AAAA,QACZ,SAAS;AAAA,QACT;AAAA,QACA,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,cAAc;AAAA,MACf;AAAA,IACD;AAEO,IAAMO,eAA8B;AAAA,MAC1C,YAAYP;AAAA,MACZ,iBAAiB;AAAA,MACjB,OAAOC,QAAO;AAAA,MACd,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAEO,IAAM,gBAAgC;AAAA,MAC5C,YAAYD;AAAA,MACZ,iBAAiB;AAAA,MACjB,OAAOC,QAAO;AAAA,MACd,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,cAAc;AAAA,IACf;AAEO,IAAM,eAA+B;AAAA,MAC3C,YAAYD;AAAA,MACZ,iBAAiB;AAAA,MACjB,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,cAAc;AAAA,IACf;AAIO,IAAMQ,gBAA+B;AAAA,MAC3C,WAAW;AAAA,MACX,YAAYR;AAAA,MACZ,uCAAuC,EAAE,YAAYA,OAAM,UAAU,UAAU;AAAA,MAC/E,qCAAqC,EAAE,YAAYA,OAAM,UAAU,UAAU;AAAA,IAC9E;AAIO,IAAM,UAA0B;AAAA,MACtC,IAAI;AAAA,MACJ,YAAYA;AAAA,MACZ,UAAU;AAAA,IACX;AAEO,IAAM,eAA+B;AAAA,MAC3C,WAAW;AAAA,MACX,IAAI;AAAA,IACL;AAAA;AAAA;;;AChRA;AAAA;AAAA;AAAA;AAAA,IAAAU,gBACAC,mBA0BAC,eACAC,kBACA,qBACAC,mBACAC,gBAEAC,eACAC,iBACAC,8BACAC,sBACAC,wBAoHGC,sBA5DG,qBAIAC,aAgBA,eAuGA,WA4LA,gBA8BA,kBAiSA,WAMC;AAztBP;AAAA;AAAA;AAAA,IAAAZ,iBAA+E;AAC/E,IAAAC,oBAyBO;AACP,IAAAC,gBAAsB;AACtB,IAAAC,mBAAyB;AACzB,0BAA6B;AAC7B,IAAAC,oBAA0B;AAC1B,IAAAC,iBAAuB;AAEvB,IAAAC,gBAA6B;AAC7B,IAAAC,kBAAoB;AACpB,IAAAC,+BAAqC;AACrC,IAAAC,uBAA6B;AAC7B,IAAAC,yBAA+B;AAE/B;AACA;AACA;AACA;AACA;AAEA;AAUA,IAAAG;AACA,IAAAC;AAiGG,IAAAH,uBAAA;AA9DH,kBAAAI,QAAM,OAAO,gBAAAC,OAAO;AAEpB,IAAM,sBAAsB;AAI5B,IAAMJ,cAAa,CAAC,GAAsB,GAAsB,QAAyB;AACxF,YAAM,KAAK,EAAE,GAA8B;AAC3C,YAAM,KAAK,EAAE,GAA8B;AAC3C,UAAI,OAAO,OAAO,YAAY,OAAO,OAAO,SAAU,QAAO,KAAK;AAClE,UAAI,OAAO,OAAO,aAAa,OAAO,OAAO,UAAW,SAAQ,KAAK,IAAI,MAAM,KAAK,IAAI;AACxF,aAAO,OAAO,kBAAM,EAAE,EAAE,cAAc,OAAO,kBAAM,EAAE,CAAC;AAAA,IACvD;AAUA,IAAM,oBAAgB,qBAAK,SAASK,eAAc;AAAA,MACjD;AAAA,MAAU;AAAA,MAAe;AAAA,IAC1B,GAAuB;AACtB,YAAM,CAAC,UAAU,WAAW,QAAI,yBAAwB,IAAI;AAC5D,YAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,YAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,KAAK;AACxC,YAAM,cAAc,kBAAkB;AAEtC,YAAM,aAAa,YAAY;AAC9B,YAAI,SAAU;AACd,YAAI;AACH,qBAAW,IAAI;AACf,mBAAS,KAAK;AACd,gBAAM,OAAO,MAAM,eAAe,QAAQ;AAC1C,sBAAY,IAAI,gBAAgB,IAAI,CAAC;AAAA,QACtC,SAAQ;AACP,mBAAS,IAAI;AAAA,QACd,UAAE;AACD,qBAAW,KAAK;AAAA,QACjB;AAAA,MACD;AAEA,YAAM,iBAAiB,YAAY;AAClC,YAAI;AACH,gBAAM,OAAO,WACV,MAAM,MAAM,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAC1C,MAAM,eAAe,QAAQ;AAChC,gBAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,gBAAM,IAAI,SAAS,cAAc,GAAG;AACpC,YAAE,OAAO;AACT,YAAE,WAAW,aAAa,QAAQ;AAClC,YAAE,MAAM;AACR,cAAI,gBAAgB,GAAG;AAAA,QACxB,SAAQ;AAAA,QAER;AAAA,MACD;AAEA,UAAI,UAAU;AACb,eACC,+CAAC,yBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,GAC1D;AAAA;AAAA,YAAC;AAAA;AAAA,cACA,UAAQ;AAAA,cACR,UAAQ;AAAA,cACR,KAAK;AAAA,cACL,SAAS,MAAM;AACd,oBAAI,SAAS,WAAW,OAAO,EAAG,KAAI,gBAAgB,QAAQ;AAC9D,4BAAY,IAAI;AAAA,cACjB;AAAA,cACA,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG;AAAA;AAAA,UACjC;AAAA,UACA,8CAAC,6BAAQ,OAAM,YACd,wDAAC,gCAAW,MAAK,SAAQ,SAAS,gBAAgB,IAAI,EAAE,OAAOC,QAAO,MAAM,GAAG,IAAI,GAClF,wDAAC,oBAAAC,SAAA,EAAiB,IAAI,EAAE,UAAU,GAAG,GAAG,GACzC,GACD;AAAA,WACD;AAAA,MAEF;AAEA,YAAM,WAAW,WAAW,SAAS;AACrC,YAAM,YAAY,eAAe,QAAQ,0BAA0B;AACnE,YAAM,UAAU,eAAe,QAAQ,0BAA0B;AAEjE,aACC,+CAAC,yBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,GAC1D;AAAA,sDAAC,6BAAQ,OAAO,WACf,wDAAC,UACA;AAAA,UAAC;AAAA;AAAA,YAAW,MAAK;AAAA,YAAQ,SAAS;AAAA,YAAY;AAAA,YAC7C,IAAI,EAAE,OAAO,cAAc,YAAYD,QAAO,OAAO,GAAG,IAAI;AAAA,YAC3D,oBAAU,8CAAC,sCAAiB,MAAM,IAAI,IAAK,8CAAC,kBAAAE,SAAA,EAAc,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,QAClF,GACD,GACD;AAAA,QACA,8CAAC,6BAAQ,OAAO,SACf,wDAAC,UACA;AAAA,UAAC;AAAA;AAAA,YAAW,MAAK;AAAA,YAAQ,SAAS;AAAA,YAAgB;AAAA,YACjD,IAAI,EAAE,OAAO,cAAc,YAAYF,QAAO,MAAM,GAAG,IAAI;AAAA,YAC3D,wDAAC,oBAAAC,SAAA,EAAiB,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,QACzC,GACD,GACD;AAAA,SACD;AAAA,IAEF,CAAC;AAmBD,IAAM,gBAAY,qBAAK,SAASE,WAAU;AAAA,MACzC;AAAA,MAAW;AAAA,MAAS;AAAA,MAAe;AAAA,MACnC;AAAA,MAAY;AAAA,MACZ;AAAA,MAAQ;AAAA,MAAkB;AAAA,MAC1B;AAAA,MAAQ;AAAA,MAAkB;AAAA,IAC3B,GAAmB;AAClB,YAAM,WAAW,CAAC,UAAsB;AACvC,2BAAmB,KAAK;AACxB,cAAM,YAAQ,cAAAN,SAAM;AACpB,YAAI,KAAY,MAAM,QAAQ,KAAK;AACnC,cAAM,KAAY;AAClB,YAAI,UAAU,OAAQ,MAAK,MAAM,QAAQ,MAAM,EAAE,QAAQ,KAAK;AAAA,iBACrD,UAAU,QAAS,MAAK,MAAM,QAAQ,OAAO,EAAE,QAAQ,KAAK;AACrE,sBAAc,EAAE;AAChB,oBAAY,EAAE;AAAA,MACf;AAEA,YAAM,UAAM,cAAAA,SAAM;AAElB,YAAM,cAAc,CAAC,MAAkC;AACtD,YAAI,CAAC,EAAG,QAAO;AACf,cAAM,cAAU,cAAAA,SAAM;AACtB,eAAO,EAAE,QAAQ,OAAO,IAAI,UAAU;AAAA,MACvC;AAEA,YAAM,oBAAoB,CAAC,MAAoB;AAC9C,cAAM,UAAU,YAAY,CAAC;AAC7B,sBAAc,OAAO;AACrB,2BAAmB,EAAE;AACrB,YAAI,WAAW,WAAW,QAAQ,SAAS,OAAO,GAAG;AACpD,sBAAY,OAAO;AAAA,QACpB;AAAA,MACD;AAEA,YAAM,kBAAkB,CAAC,MAAoB;AAC5C,YAAI,UAAU,YAAY,CAAC;AAC3B,YAAI,WAAW,aAAa,QAAQ,SAAS,SAAS,GAAG;AACxD,oBAAU;AAAA,QACX;AACA,oBAAY,OAAO;AACnB,2BAAmB,EAAE;AAAA,MACtB;AAEA,YAAM,WAAW,WAAW,QAAQ,SAAS,GAAG,IAAI,UAAU;AAC9D,YAAM,oBAAoB,OAAO,SAAS,KAAK,iBAAiB,WAAW,OAAO;AAClF,YAAM,oBAAoB,OAAO,SAAS,KAAK,iBAAiB,WAAW,OAAO;AAElF,aACC,+CAAC,yBAAI,IAAIO,cAER;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAO;AAAA,YACP,UAAU,CAAC,MAAM,kBAAkB,CAAiB;AAAA,YACpD,eAAa;AAAA,YACb,aAAa;AAAA,YACb,QAAO;AAAA,YACP,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,IAAI,aAAa,EAAE;AAAA;AAAA,QAC7D;AAAA,QACA,8CAAC,gCAAW,IAAI,iBAAiB,gBAAE;AAAA,QACnC;AAAA,UAAC;AAAA;AAAA,YACA,OAAO;AAAA,YACP,UAAU,CAAC,MAAM,gBAAgB,CAAiB;AAAA,YAClD,eAAa;AAAA,YACb,aAAa;AAAA,aACR,YAAY,EAAE,aAAa,UAAU,IAAI,CAAC,IAL/C;AAAA,YAMA,QAAO;AAAA,YACP,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,IAAI,aAAa,EAAE;AAAA;AAAA,QAC7D;AAAA,QAGA;AAAA,UAAC;AAAA;AAAA,YACA,SAAS,eAAe,UAAU,YAAY;AAAA,YAC9C,SAAS,MAAM,SAAS,OAAO;AAAA,YAC/B,IAAI;AAAA,YACJ;AAAA;AAAA,QAED;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,SAAS,eAAe,SAAS,YAAY;AAAA,YAC7C,SAAS,MAAM,SAAS,MAAM;AAAA,YAC9B,IAAI;AAAA,YACJ;AAAA;AAAA,QAED;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,SAAS,eAAe,UAAU,YAAY;AAAA,YAC9C,SAAS,MAAM,SAAS,OAAO;AAAA,YAC/B,IAAI;AAAA,YACJ;AAAA;AAAA,QAED;AAAA,QAGA,+CAAC,iCAAY,MAAK,SAAQ,IAAI,mBAC7B;AAAA,wDAAC,gCAAW,IAAI,oBAAoB,oBAAM;AAAA,UAC1C;AAAA,YAAC;AAAA;AAAA,cACA,UAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAM;AAAA,cACN,UAAU,CAAC,MAAM;AAChB,sBAAM,MAAM,EAAE,OAAO;AACrB,oBAAI,IAAI,SAAS,mBAAmB,GAAG;AACtC,iCAAe,oBAAoB,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAAA,gBAChE,OAAO;AACN,iCAAe,GAAG;AAAA,gBACnB;AAAA,cACD;AAAA,cACA,aAAa,CAAC,aAAa;AAC1B,sBAAM,MAAM;AACZ,oBAAI,IAAI,WAAW,KAAK,IAAI,WAAW,OAAO,OAAQ,QAAO;AAC7D,uBAAO,GAAG,IAAI,MAAM;AAAA,cACrB;AAAA,cACA,IAAI;AAAA,cACJ,WAAW,EAAE,YAAY,EAAE,IAAI,uBAAuB,EAAE;AAAA,cAExD;AAAA,+DAAC,8BAAS,OAAO,qBAChB;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACA,SAAS;AAAA,sBACT,eAAe,iBAAiB,SAAS,KAAK,CAAC;AAAA,sBAC/C,MAAK;AAAA;AAAA,kBACN;AAAA,kBAAE;AAAA,mBAEH;AAAA,gBACC,OAAO,IAAI,CAAC,MACZ,+CAAC,8BAAoB,OAAO,EAAE,IAC7B;AAAA,gEAAC,8BAAS,SAAS,iBAAiB,SAAS,EAAE,EAAE,GAAG,MAAK,SAAQ;AAAA,kBACjE;AAAA,oBAAC;AAAA;AAAA,sBACA,QAAM;AAAA,sBACN,IAAI,EAAE,UAAU,WAAW,UAAU,IAAI;AAAA,sBACzC,OAAO,EAAE,YAAY,EAAE;AAAA,sBAEtB,YAAE,YAAY,EAAE;AAAA;AAAA,kBAClB;AAAA,qBARc,EAAE,EASjB,CACA;AAAA;AAAA;AAAA,UACF;AAAA,WACD;AAAA,QAGA,+CAAC,iCAAY,MAAK,SAAQ,IAAI,mBAC7B;AAAA,wDAAC,gCAAW,IAAI,oBAAoB,wBAAU;AAAA,UAC9C;AAAA,YAAC;AAAA;AAAA,cACA,UAAQ;AAAA,cACR,OAAO;AAAA,cACP,OAAM;AAAA,cACN,IAAI;AAAA,cACJ,WAAW,EAAE,YAAY,EAAE,IAAI,uBAAuB,EAAE;AAAA,cACxD,UAAU,CAAC,MAAM;AAChB,sBAAM,MAAM,EAAE,OAAO;AACrB,oBAAI,IAAI,SAAS,EAAE,GAAG;AACrB,iCAAe,oBAAoB,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAAA,gBAChE,OAAO;AACN,iCAAe,GAAG;AAAA,gBACnB;AAAA,cACD;AAAA,cACA,aAAa,CAAC,aAAa;AAC1B,sBAAM,MAAM;AACZ,oBAAI,IAAI,WAAW,EAAG,QAAO;AAC7B,oBAAI,IAAI,WAAW,OAAO,OAAQ,QAAO;AACzC,uBAAO,GAAG,IAAI,MAAM;AAAA,cACrB;AAAA,cAEA;AAAA,+DAAC,8BAAS,OAAO,IAChB;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACA,SAAS,iBAAiB,WAAW,OAAO,UAAU,OAAO,SAAS;AAAA,sBACtE,MAAK;AAAA;AAAA,kBACN;AAAA,kBAAE;AAAA,mBAEH;AAAA,gBACC,OAAO,IAAI,CAAC,MACZ,+CAAC,8BAAoB,OAAO,EAAE,IAC7B;AAAA,gEAAC,8BAAS,SAAS,iBAAiB,SAAS,EAAE,EAAE,GAAG,MAAK,SAAQ;AAAA,kBAChE,EAAE;AAAA,qBAFW,EAAE,EAGjB,CACA;AAAA;AAAA;AAAA,UACF;AAAA,WACD;AAAA,SACD;AAAA,IAEF,CAAC;AASD,IAAM,qBAAiB,qBAAK,SAASC,gBAAe,EAAE,OAAO,SAAS,GAAwB;AAC7F,aACC;AAAA,QAAC;AAAA;AAAA,UACA,MAAK;AAAA,UACL,aAAY;AAAA,UACZ;AAAA,UACA,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK;AAAA,UACxC,WAAW;AAAA,YACV,OAAO;AAAA,cACN,gBACC,8CAAC,oCAAe,UAAS,SACxB,wDAAC,eAAAC,SAAA,EAAW,IAAI,EAAE,OAAO,WAAW,UAAU,GAAG,GAAG,GACrD;AAAA,cAED,cAAc,QACb,8CAAC,oCAAe,UAAS,OACxB,wDAAC,gCAAW,MAAK,SAAQ,SAAS,MAAM,SAAS,EAAE,GAAG,MAAK,OAC1D,wDAAC,cAAAC,SAAA,EAAU,IAAI,EAAE,UAAU,IAAI,OAAO,UAAU,GAAG,GACpD,GACD,IACG;AAAA,YACL;AAAA,UACD;AAAA,UACA,IAAI;AAAA;AAAA,MACL;AAAA,IAEF,CAAC;AAID,IAAM,uBAAmB,qBAAK,SAASC,oBAAmB;AAEzD,YAAM,CAAC,WAAW,YAAY,QAAI,6BAAuB,cAAAX,SAAM,EAAE,QAAQ,KAAK,CAAC;AAC/E,YAAM,CAAC,SAAS,UAAU,QAAI,6BAAuB,cAAAA,SAAM,CAAC;AAC5D,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAqB,OAAO;AAChE,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,EAAE;AAC/C,YAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAmB,CAAC,CAAC;AACrE,YAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAmB,CAAC,CAAC;AAGrE,YAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,CAAC;AAClC,YAAM,CAAC,aAAa,cAAc,QAAI,yBAAiB,iBAAiB;AACxE,YAAM,CAAC,SAAS,UAAU,QAAI,yBAAkB,eAAe;AAC/D,YAAM,CAAC,SAAS,UAAU,QAAI,yBAAkB,MAAM;AAGtD,YAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAS,EAAE;AACzD,YAAM,kBAAc,uBAAkD,MAAS;AAE/E,oCAAU,MAAM;AACf,oBAAY,UAAU,WAAW,MAAM,mBAAmB,WAAW,KAAK,CAAC,GAAG,GAAG;AACjF,eAAO,MAAM;AAAE,cAAI,YAAY,QAAS,cAAa,YAAY,OAAO;AAAA,QAAG;AAAA,MAC5E,GAAG,CAAC,UAAU,CAAC;AAGf,YAAM;AAAA,QACL;AAAA,QAAS;AAAA,QAAc;AAAA,QAAS;AAAA,QAAO;AAAA,QACvC;AAAA,QAAc;AAAA,QAAa;AAAA,MAC5B,IAAI,aAAa;AAEjB,YAAM,EAAE,QAAQ,QAAQ,UAAU,aAAa,IAAI,cAAc;AAEjE,oCAAU,MAAM;AACf,qBAAa;AAAA,MACd,GAAG,CAAC,YAAY,CAAC;AAEjB,YAAM,kBAAc,4BAAY,CAAC,YAAqC;AACrE,cAAM,KAAK,oCAAa,cAAAA,SAAM;AAC9B,cAAM,KAAK,gCAAW,cAAAA,SAAM;AAC5B,eAAO;AAAA,UACN,YAAY,GAAG,OAAO,qBAAqB;AAAA,UAC3C,UAAU,GAAG,OAAO,qBAAqB;AAAA,UACzC,UAAU,iBAAiB,SAAS,IAAI,mBAAmB;AAAA,UAC3D,UAAU,iBAAiB,SAAS,IAAI,mBAAmB;AAAA,UAC3D,QAAQ,mBAAmB;AAAA,UAC3B,MAAM,UAAU;AAAA,UAChB,WAAW;AAAA,QACZ;AAAA,MACD,GAAG,CAAC,WAAW,SAAS,kBAAkB,kBAAkB,iBAAiB,WAAW,CAAC;AAEzF,oCAAU,MAAM;AACf,gBAAQ,CAAC;AACT,qBAAa,YAAY,CAAC,CAAC;AAAA,MAC5B,GAAG,CAAC,aAAa,YAAY,CAAC;AAE9B,YAAM,uBAAmB;AAAA,QACxB,CAAC,IAAgD,YAAoB;AACpE,kBAAQ,OAAO;AACf,uBAAa,YAAY,OAAO,CAAC;AAAA,QAClC;AAAA,QACA,CAAC,aAAa,YAAY;AAAA,MAC3B;AAEA,YAAM,8BAA0B,4BAAY,CAAC,MAA2C;AACvF,uBAAe,SAAS,EAAE,OAAO,OAAO,EAAE,CAAC;AAC3C,gBAAQ,CAAC;AAAA,MACV,GAAG,CAAC,CAAC;AAEL,YAAM,iBAAa,4BAAY,CAAC,QAAiB;AAChD,mBAAW,CAAC,YAAY;AACvB,cAAI,YAAY,KAAK;AACpB,uBAAW,CAAC,MAAO,MAAM,QAAQ,SAAS,KAAM;AAChD,mBAAO;AAAA,UACR;AACA,qBAAW,KAAK;AAChB,iBAAO;AAAA,QACR,CAAC;AAAA,MACF,GAAG,CAAC,CAAC;AAEL,YAAM,oBAAgB,wBAAQ,MAAM;AACnC,cAAM,OAAO,CAAC,GAAG,OAAO;AACxB,aAAK,KAAK,CAAC,GAAG,MAAM;AACnB,gBAAM,MAAMH,YAAW,GAAG,GAAG,OAAO;AACpC,iBAAO,YAAY,QAAQ,MAAM,CAAC;AAAA,QACnC,CAAC;AACD,eAAO;AAAA,MACR,GAAG,CAAC,SAAS,SAAS,OAAO,CAAC;AAE9B,YAAM,wBAAoB,4BAAY,YAAY;AACjD,cAAM,KAAK,oCAAa,cAAAG,SAAM;AAC9B,cAAM,KAAK,gCAAW,cAAAA,SAAM;AAC5B,YAAI;AACH,gBAAM,YAAY;AAAA,YACjB,YAAY,GAAG,OAAO,qBAAqB;AAAA,YAC3C,UAAU,GAAG,OAAO,qBAAqB;AAAA,YACzC,UAAU,iBAAiB,SAAS,IAAI,mBAAmB;AAAA,YAC3D,UAAU,iBAAiB,SAAS,IAAI,mBAAmB;AAAA,YAC3D,QAAQ,mBAAmB;AAAA,UAC5B,CAAC;AAAA,QACF,SAAS,KAAU;AAClB,oBAAS,2BAAK,YAAW,wBAAwB;AAAA,QAClD;AAAA,MACD,GAAG,CAAC,WAAW,SAAS,kBAAkB,kBAAkB,iBAAiB,aAAa,QAAQ,CAAC;AAEnG,YAAM,UAA4C;AAAA,QACjD,EAAE,IAAI,eAAe,OAAO,eAAe;AAAA,QAC3C,EAAE,IAAI,iBAAiB,OAAO,aAAa;AAAA,QAC3C,EAAE,IAAI,YAAY,OAAO,YAAY;AAAA,QACrC,EAAE,IAAI,cAAc,OAAO,SAAS;AAAA,QACpC,EAAE,IAAI,aAAa,OAAO,YAAY;AAAA,QACtC,EAAE,IAAI,aAAa,OAAO,SAAS;AAAA,QACnC,EAAE,IAAI,aAAa,OAAO,YAAY;AAAA,QACtC,EAAE,IAAI,mBAAmB,OAAO,gBAAgB;AAAA,QAChD,EAAE,IAAI,mBAAmB,OAAO,gBAAgB;AAAA,QAChD,EAAE,IAAI,sBAAsB,OAAO,mBAAmB;AAAA,QACtD,EAAE,IAAI,oBAAoB,OAAO,iBAAiB;AAAA,QAClD,EAAE,IAAI,qBAAqB,OAAO,kBAAkB;AAAA,QACpD,EAAE,IAAI,eAAe,OAAO,cAAc;AAAA,QAC1C,EAAE,IAAI,WAAW,OAAO,UAAU;AAAA,QAClC,EAAE,IAAI,kBAAkB,OAAO,cAAc;AAAA,MAC9C;AAEA,aACC,8CAAC,qDAAqB,aAAa,mCAClC,yDAAC,yBAAI,IAAI,iBAER;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAM;AAAA,YACN,SACC,+CAAC,2BAAM,WAAU,OAAM,YAAW,UAAS,SAAS,GACnD;AAAA,4DAAC,kBAAe,OAAO,YAAY,UAAU,eAAe;AAAA,cAC5D;AAAA,gBAAC;AAAA;AAAA,kBACA,aAAa;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,gBAAgB;AAAA,kBACjB;AAAA,kBACA,cAAc;AAAA,kBAEd;AAAA,oBAAC;AAAA;AAAA,sBACA,WAAW,8CAAC,iBAAAY,SAAA,EAAa,IAAI,EAAE,UAAU,qBAAqB,GAAG;AAAA,sBACjE,UAAU,CAAC,QAAQ;AAAA,sBACnB,SAAS;AAAA,sBACT,IAAI,EAAE,QAAQ,GAAG;AAAA,sBACjB;AAAA;AAAA,kBAED;AAAA;AAAA,cACD;AAAA,eACD;AAAA;AAAA,QAEF;AAAA,QAEA,+CAAC,yBAAI,IAAI,WAER;AAAA,yDAAC,yBAAI,IAAI,gBACR;AAAA;AAAA,cAAC;AAAA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,eAAe;AAAA,gBACf,aAAa;AAAA,gBACb;AAAA,gBACA,oBAAoB;AAAA,gBACpB;AAAA,gBACA;AAAA,gBACA,gBAAgB;AAAA,gBAChB;AAAA,gBACA;AAAA,gBACA,gBAAgB;AAAA;AAAA,YACjB;AAAA,YACC,SAAS,8CAAC,2BAAM,UAAS,SAAQ,IAAI,SAAU,iBAAM;AAAA,aACvD;AAAA,UAEC,WACA,8CAAC,yBAAI,IAAI,cACR,wDAAC,sCAAiB,IAAI,EAAE,OAAOT,QAAO,KAAK,GAAG,MAAM,IAAI,GACzD;AAAA,UAID,+CAAC,2BAAM,WAAW,GAAG,IAAI,cACxB;AAAA,0DAAC,oCACA,yDAAC,2BAAM,MAAK,SAAQ,IAAIU,UACvB;AAAA,4DAAC,+BACA,yDAAC,8BACC;AAAA,wBAAQ,IAAI,CAAC,QACb,8CAAC,+BAAuB,IAAIC,aAC3B;AAAA,kBAAC;AAAA;AAAA,oBACA,QAAQ,YAAY,IAAI;AAAA,oBACxB,WAAW,YAAY,IAAI,KAAK,UAAU;AAAA,oBAC1C,SAAS,MAAM,WAAW,IAAI,EAAE;AAAA,oBAChC,IAAIC;AAAA,oBAEH,cAAI;AAAA;AAAA,gBACN,KARe,IAAI,EASpB,CACA;AAAA,gBACD,8CAAC,+BAAU,IAAI,iCAAMD,cAAN,EAA6B,UAAU,IAAI,IAAG,uBAAS;AAAA,iBACvE,GACD;AAAA,cACA,8CAAC,+BACC,WAAC,WAAW,cAAc,WAAW,IACrC,8CAAC,8BACA;AAAA,gBAAC;AAAA;AAAA,kBAAU,SAAS,QAAQ,SAAS;AAAA,kBAAG,OAAM;AAAA,kBAC7C,IAAI,EAAE,IAAI,GAAG,OAAO,QAAQ,YAAYE,OAAM,UAAU,UAAU;AAAA,kBAAG;AAAA;AAAA,cAEtE,GACD,IAEA,cAAc,IAAI,CAAC,KAAK,QACvB,+CAAC,8BAAmC,OAAK,MAAC,IAAIC,aAC7C;AAAA,8DAAC,+BAAU,IAAI,cAAe,cAAI,eAAe,IAAG;AAAA,gBACpD,8CAAC,+BAAU,IAAI,YACb,cAAI,oBACF,cAAAjB,SAAM,IAAI,aAAa,EAAE,OAAO,qBAAqB,IACrD,IACJ;AAAA,gBACA,8CAAC,+BACC,cAAI,WACJ,8CAAC,0BAAK,OAAO,IAAI,UAAU,MAAK,SAAQ,IAAI,eAAe,IAAI,QAAQ,GAAG,IACvE,MACL;AAAA,gBACA,8CAAC,+BACC,cAAI,aACJ,8CAAC,0BAAK,OAAO,IAAI,YAAY,MAAK,SAAQ,IAAI,aAAa,IAAI,UAAU,GAAG,IACzE,MACL;AAAA,gBACA,8CAAC,+BAAU,IAAI,YAAa,cAAI,aAAa,IAAG;AAAA,gBAChD,8CAAC,+BACC,cAAI,YACJ,8CAAC,0BAAK,OAAO,IAAI,WAAW,MAAK,SAAQ,IAAIkB,cAAa,IACvD,MACL;AAAA,gBACA,8CAAC,+BAAU,IAAI,YAAa,cAAI,aAAa,IAAG;AAAA,gBAChD,8CAAC,+BAAU,IAAI,YAAa,cAAI,mBAAmB,IAAG;AAAA,gBACtD,8CAAC,+BAAU,IAAI,YAAa,cAAI,mBAAmB,IAAG;AAAA,gBACtD,8CAAC,+BAAU,IAAI,gBAAiB,cAAI,sBAAsB,IAAG;AAAA,gBAC7D,8CAAC,+BAAU,IAAI,gBAAiB,cAAI,oBAAoB,IAAG;AAAA,gBAC3D,8CAAC,+BAAU,IAAI,gBAAiB,cAAI,qBAAqB,IAAG;AAAA,gBAC5D,8CAAC,+BAAU,IAAI,YAAa,cAAI,eAAe,IAAG;AAAA,gBAClD,8CAAC,+BAAU,IAAI,YACb,cAAI,UACJ,8CAAC,6BAAQ,OAAO,IAAI,SACnB,wDAAC,UAAK,OAAO,EAAE,SAAS,gBAAgB,UAAU,KAAK,UAAU,UAAU,cAAc,YAAY,YAAY,UAAU,eAAe,SAAS,GACjJ,cAAI,SACN,GACD,IACG,IACL;AAAA,gBACA,8CAAC,+BACA;AAAA,kBAAC;AAAA;AAAA,oBACA,OAAO,IAAI,iBAAiB,QAAQ;AAAA,oBACpC,MAAK;AAAA,oBACL,IAAI,IAAI,iBAAiB,gBAAgB;AAAA;AAAA,gBAC1C,GACD;AAAA,gBACA,8CAAC,+BACC,cAAI,WACJ;AAAA,kBAAC;AAAA;AAAA,oBACA,UAAU,IAAI;AAAA,oBACd,eAAe,IAAI;AAAA,oBACnB;AAAA;AAAA,gBACD,IACG,MACL;AAAA,mBAtDc,IAAI,YAAY,GAuD/B,CACA,GAEH;AAAA,eACD,GACD;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACA,WAAU;AAAA,gBACV,OAAO;AAAA,gBACP;AAAA,gBACA,cAAc;AAAA,gBACd;AAAA,gBACA,oBAAoB,CAAC,GAAG,qBAAqB;AAAA,gBAC7C,qBAAqB;AAAA,gBACrB,IAAIC;AAAA;AAAA,YACL;AAAA,aACD;AAAA,WACD;AAAA,SACD,GACD;AAAA,IAEF,CAAC;AAID,IAAM,YAAsB,MAC3B,8CAAC,eACA,wDAAC,oBAAiB,GACnB;AAGD,IAAO,oBAAQ;AAAA;AAAA;;;ACptBf,SAAS,QAAQ,QAAuC;AACvD,QAAM,KAAK,IAAI,gBAAgB;AAC/B,MAAI,OAAO,WAAY,IAAG,OAAO,cAAc,OAAO,UAAU;AAChE,MAAI,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,QAAQ;AAC1D,MAAI,OAAO,SAAU,YAAW,MAAM,OAAO,SAAU,IAAG,OAAO,YAAY,EAAE;AAC/E,MAAI,OAAO,SAAU,YAAW,MAAM,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,EAAE,CAAC;AACvF,MAAI,OAAO,WAAY,YAAW,MAAM,OAAO,WAAY,IAAG,OAAO,cAAc,OAAO,EAAE,CAAC;AAC7F,MAAI,OAAO,MAAO,IAAG,OAAO,SAAS,OAAO,OAAO,KAAK,CAAC;AACzD,QAAM,MAAM,GAAG,SAAS;AACxB,SAAO,MAAM,IAAI,GAAG,KAAK;AAC1B;AAEO,SAAS,4BAA4B;AAC3C,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAyB,CAAC,CAAC;AACvD,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,EAAE;AAErC,QAAM,kBAAc,4BAAY,OAAO,WAAkC;AAtB1E,QAAAC,KAAA;AAuBE,eAAW,IAAI;AACf,aAAS,EAAE;AACX,QAAI;AACH,YAAM,MAAM,MAAM,cAAc;AAAA,QAC/B,GAAG,UAAU,+BAA+B,GAAG,QAAQ,MAAM,CAAC;AAAA,MAC/D;AACA,gBAAU,MAAM,QAAQ,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;AAAA,IAClD,SAAS,KAAU;AAClB,iBAAS,MAAAA,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,mBAAqB,aAAW,2BAAK,YAAW,oCAAoC;AAC7F,gBAAU,CAAC,CAAC;AAAA,IACb,UAAE;AACD,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAc,4BAAY,OAAO,WAAkC;AAtC1E,QAAAA;AAuCE,UAAM,MAAM,MAAM,cAAc;AAAA,MAC/B,GAAG,UAAU,qCAAqC,GAAG,QAAQ,MAAM,CAAC;AAAA,MACpE,EAAE,cAAc,OAAO;AAAA,IACxB;AACA,UAAM,MAAM,IAAI,gBAAgB,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;AACpD,UAAM,IAAI,SAAS,cAAc,GAAG;AACpC,MAAE,OAAO;AACT,MAAE,WAAW,sBAAqBA,MAAA,OAAO,eAAP,OAAAA,MAAqB,QAAQ;AAC/D,MAAE,MAAM;AACR,QAAI,gBAAgB,GAAG;AAAA,EACxB,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,QAAQ,SAAS,OAAO,UAAU,aAAa,YAAY;AACrE;AApDA,IAAAC;AAAA;AAAA;AAAA;AAAA,IAAAA,iBAAsC;AACtC;AACA;AAAA;AAAA;;;ACQA,SAAS,WAAW,QAAiC;AACpD,QAAM,KAAK,IAAI,gBAAgB;AAC/B,MAAI,OAAO,WAAY,IAAG,OAAO,cAAc,OAAO,UAAU;AAChE,MAAI,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,QAAQ;AAC1D,MAAI,OAAO,SAAU,YAAW,MAAM,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,EAAE,CAAC;AACvF,MAAI,OAAO,SAAU,YAAW,MAAM,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,EAAE,CAAC;AACvF,MAAI,OAAO,UAAW,IAAG,OAAO,aAAa,OAAO,SAAS;AAC7D,MAAI,OAAO,OAAQ,IAAG,OAAO,UAAU,OAAO,MAAM;AACpD,MAAI,OAAO,OAAQ,IAAG,OAAO,UAAU,OAAO,MAAM;AACpD,MAAI,OAAO,KAAM,IAAG,OAAO,QAAQ,OAAO,OAAO,IAAI,CAAC;AACtD,MAAI,OAAO,UAAW,IAAG,OAAO,aAAa,OAAO,OAAO,SAAS,CAAC;AACrE,QAAM,MAAM,GAAG,SAAS;AACxB,SAAO,MAAM,IAAI,GAAG,KAAK;AAC1B;AAEO,SAAS,uBAAuB;AACtC,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAA2C,IAAI;AAC3E,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAS,KAAK;AACxD,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,EAAE;AAEjD,QAAM,kBAAc;AAAA,IACnB,OAAO,SAAiB,WAAoC;AA/B9D,UAAAC,KAAA;AAgCG,UAAI,CAAC,QAAS;AACd,uBAAiB,IAAI;AACrB,qBAAe,EAAE;AACjB,UAAI;AACH,cAAM,KAAK,IAAI,gBAAgB;AAC/B,YAAI,OAAO,WAAY,IAAG,OAAO,cAAc,OAAO,UAAU;AAChE,YAAI,OAAO,SAAU,IAAG,OAAO,YAAY,OAAO,QAAQ;AAC1D,cAAM,QAAQ,GAAG,SAAS;AAC1B,cAAM,MAAM,GAAG,UAAU,oBAAoB,OAAO,CAAC,GAAG,QAAQ,IAAI,KAAK,KAAK,EAAE;AAChF,cAAM,MAAM,MAAM,cAAc,IAA+B,GAAG;AAClE,kBAAU,IAAI,IAAI;AAAA,MACnB,SAAS,KAAU;AAClB,yBAAe,MAAAA,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,mBAAqB,aAAW,2BAAK,YAAW,6BAA6B;AAC5F,kBAAU,IAAI;AAAA,MACf,UAAE;AACD,yBAAiB,KAAK;AAAA,MACvB;AAAA,IACD;AAAA,IACA,CAAC;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,eAAe,aAAa,gBAAgB,YAAY;AAC1E;AAEO,SAAS,qBAAqB;AACpC,QAAM,CAAC,SAAS,UAAU,QAAI,yBAA+C,CAAC,CAAC;AAC/E,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,CAAC;AACpC,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,EAAE;AAErC,QAAM,eAAW,4BAAY,OAAO,WAA4B;AA9DjE,QAAAA,KAAA;AA+DE,eAAW,IAAI;AACf,aAAS,EAAE;AACX,QAAI;AACH,YAAM,MAAM,MAAM,cAAc;AAAA,QAC/B,GAAG,UAAU,UAAU,GAAG,WAAW,MAAM,CAAC;AAAA,MAC7C;AACA,mBAAW,MAAAA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,YAAV,mBAAmB,SAAQ,CAAC,CAAC;AACxC,iBAAS,eAAI,SAAJ,mBAAU,YAAV,mBAAmB,UAAS,CAAC;AAAA,IACvC,SAAS,KAAU;AAClB,iBAAS,sCAAK,aAAL,mBAAe,SAAf,mBAAqB,aAAW,2BAAK,YAAW,6BAA6B;AACtF,iBAAW,CAAC,CAAC;AACb,eAAS,CAAC;AAAA,IACX,UAAE;AACD,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,SAAS,OAAO,SAAS,OAAO,UAAU,SAAS;AAC7D;AAEA,eAAsB,mBAAmB,UAAiC;AACzE,QAAM,MAAM,MAAM,cAAc,IAAI,UAAU,kBAAkB,QAAQ,GAAG;AAAA,IAC1E,cAAc;AAAA,EACf,CAAC;AACD,SAAO,IAAI;AACZ;AAxFA,IAAAC;AAAA;AAAA;AAAA;AAAA,IAAAA,iBAAsC;AACtC;AACA;AAAA;AAAA;;;ACFA,IAEa,GA0BA,cAEA,QAEA,aAKAC,cASAC,eAUAC,YAMA,kBAaA,WAOA,WAWA,YAQA,YAOA,UAUA,WAaA,eAOA,iBAUAC,iBAQA,WAUA,YAUA,UAKAC;AArLb,IAAAC,eAAA;AAAA;AAAA;AAEO,IAAM,IAAI;AAAA,MAChB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AAEO,IAAM,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI;AAE/E,IAAM,SAAS,EAAE,YAAY,+BAA+B,UAAU,IAAI,YAAY,IAAI;AAE1F,IAAM,cAA8B;AAAA,MAC1C,YAAY,EAAE;AAAA,MACd,WAAW;AAAA,IACZ;AAEO,IAAML,eAA8B;AAAA,MAC1C,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,IAAI;AAAA,IACL;AAEO,IAAMC,gBAA+B;AAAA,MAC3C,OAAO;AAAA,MACP,4BAA4B;AAAA,QAC3B,cAAc;AAAA,QACd,UAAU;AAAA,QACV,QAAQ;AAAA,MACT;AAAA,MACA,yBAAyB,EAAE,IAAI,OAAO,UAAU,GAAG;AAAA,IACpD;AAEO,IAAMC,aAA4B;AAAA,MACxC,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,UAAU;AAAA,IACX;AAEO,IAAM,mBAAmC;AAAA,MAC/C,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACT;AAEO,IAAM,YAA4B;AAAA,MACxC,SAAS;AAAA,MACT,qBAAqB,EAAE,IAAI,WAAW,IAAI,kBAAkB,IAAI,iBAAiB;AAAA,MACjF,KAAK;AAAA,MACL,IAAI;AAAA,IACL;AAEO,IAAM,YAAY,CAAC,WAAmC;AAAA,MAC5D,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,IAClB;AAEO,IAAM,aAA6B;AAAA,MACzC,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,IAAI;AAAA,IACL;AAEO,IAAM,aAA6B;AAAA,MACzC,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,OAAO;AAAA,IACR;AAEO,IAAM,WAA2B;AAAA,MACvC,SAAS;AAAA,MACT,YAAY,EAAE,IAAI,cAAc,IAAI,SAAS;AAAA,MAC7C,gBAAgB;AAAA,MAChB,eAAe,EAAE,IAAI,UAAU,IAAI,MAAM;AAAA,MACzC,KAAK;AAAA,MACL,cAAc,aAAa,EAAE,EAAE;AAAA,MAC/B,IAAI;AAAA,IACL;AAEO,IAAM,YAAY,CAAC,YAAqC;AAAA,MAC9D,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,OAAO,SAAS,EAAE,OAAO,EAAE;AAAA,MAC3B,cAAc,aAAa,SAAS,EAAE,OAAO,aAAa;AAAA,MAC1D,IAAI;AAAA,MACJ,YAAY;AAAA,MACZ,WAAW,EAAE,OAAO,EAAE,GAAG;AAAA,IAC1B;AAEO,IAAM,gBAAgC;AAAA,MAC5C,QAAQ,aAAa,EAAE,EAAE;AAAA,MACzB,cAAc;AAAA,MACd,UAAU;AAAA,MACV,YAAY;AAAA,IACb;AAEO,IAAM,kBAAkC;AAAA,MAC9C,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,YAAY,EAAE;AAAA,MACd,cAAc,aAAa,EAAE,EAAE;AAAA,MAC/B,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,IACjB;AAEO,IAAMC,kBAAiC;AAAA,MAC7C,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,eAAe;AAAA,MACf,OAAO,EAAE;AAAA,IACV;AAEO,IAAM,YAA4B;AAAA,MACxC,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,IAAI;AAAA,IACL;AAEO,IAAM,aAA6B;AAAA,MACzC,UAAU;AAAA,MACV,wBAAwB;AAAA,QACvB,UAAU;AAAA,QACV,cAAc;AAAA,QACd,IAAI;AAAA,QACJ,IAAI;AAAA,MACL;AAAA,IACD;AAEO,IAAM,WAA2B;AAAA,MACvC,iBAAiB;AAAA,MACjB,WAAW,EAAE,iBAAiB,UAAU;AAAA,IACzC;AAEO,IAAMC,gBAA+B;AAAA,MAC3C,WAAW;AAAA,MACX,uCAAuC,EAAE,UAAU,UAAU;AAAA,MAC7D,qCAAqC,EAAE,UAAU,UAAU;AAAA,IAC5D;AAAA;AAAA;;;ACzLA;AAAA;AAAA;AAAA;AA2EA,SAAS,SAAS,EAAE,OAAO,OAAO,MAAM,GAA6D;AACpG,SACC,+CAAC,yBAAI,IAAI,UAAU,KAAK,GACvB;AAAA,kDAAC,gCAAW,IAAI,YAAa,iBAAM;AAAA,IACnC,8CAAC,gCAAW,IAAI,YAAa,iBAAM;AAAA,KACpC;AAEF;AAEA,SAAS,WAAW,EAAE,OAAO,GAAuB;AACnD,QAAM,IAAI,iCAAQ;AAClB,QAAM,QAAQ,MAAM;AACpB,QAAM,UAAU,MAAM;AACtB,SACC;AAAA,IAAC;AAAA;AAAA,MACA,OAAO,UAAU;AAAA,MACjB,MAAK;AAAA,MACL,IAAI;AAAA,QACH,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,YAAY,QAAQ,EAAE,MAAM,UAAU,EAAE,MAAM,EAAE;AAAA,QAChD,OAAO,QAAQ,EAAE,QAAQ,UAAU,EAAE,QAAQ,EAAE;AAAA,QAC/C,QAAQ,aAAa,QAAQ,uBAAuB,UAAU,uBAAuB,oBACpF;AAAA,QACD,YAAY;AAAA,MACb;AAAA;AAAA,EACD;AAEF;AAEA,SAAS,aAAa,EAAE,KAAK,GAAqB;AACjD,QAAM,QAAO,6BAAM,mBAAkB;AACrC,SACC;AAAA,IAAC;AAAA;AAAA,MACA,OAAO,QAAQ;AAAA,MACf,MAAK;AAAA,MACL,IAAI;AAAA,QACH,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,YAAY,OAAO,EAAE,MAAM,EAAE;AAAA,QAC7B,OAAO,OAAO,EAAE,QAAQ,EAAE;AAAA,QAC1B,QAAQ,aAAa,OAAO,uBAAuB,qBAAqB;AAAA,QACxE,YAAY;AAAA,MACb;AAAA;AAAA,EACD;AAEF;AAEA,SAASE,eAAc,EAAE,UAAU,cAAc,GAAuD;AACvG,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAwB,IAAI;AAC5D,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,KAAK;AAExC,MAAI,CAAC,eAAe;AACnB,WACC,+CAAC,yBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,GAC1D;AAAA,oDAAC,6BAAQ,OAAM,0BACd,wDAAC,UACA,wDAAC,gCAAW,MAAK,SAAQ,UAAQ,MAAC,IAAI,EAAE,GAAG,IAAI,GAC9C,wDAAC,kBAAAC,SAAA,EAAc,IAAI,EAAE,UAAU,GAAG,GAAG,GACtC,GACD,GACD;AAAA,MACA,8CAAC,6BAAQ,OAAM,0BACd,wDAAC,UACA,wDAAC,gCAAW,MAAK,SAAQ,UAAQ,MAAC,IAAI,EAAE,GAAG,IAAI,GAC9C,wDAAC,qBAAAC,SAAA,EAAiB,IAAI,EAAE,UAAU,GAAG,GAAG,GACzC,GACD,GACD;AAAA,OACD;AAAA,EAEF;AAEA,QAAM,aAAa,YAAY;AAC9B,QAAI,SAAU;AACd,QAAI;AACH,iBAAW,IAAI;AACf,eAAS,KAAK;AACd,YAAM,OAAO,MAAM,mBAAmB,QAAQ;AAC9C,kBAAY,IAAI,gBAAgB,IAAI,CAAC;AAAA,IACtC,SAAQ;AACP,eAAS,IAAI;AAAA,IACd,UAAE;AACD,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD;AAEA,QAAM,iBAAiB,YAAY;AAClC,QAAI;AACH,YAAM,OAAO,WACV,MAAM,MAAM,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAC1C,MAAM,mBAAmB,QAAQ;AACpC,YAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,YAAM,IAAI,SAAS,cAAc,GAAG;AACpC,QAAE,OAAO;AACT,QAAE,WAAW,aAAa,QAAQ;AAClC,QAAE,MAAM;AACR,UAAI,gBAAgB,GAAG;AAAA,IACxB,SAAQ;AAAA,IAER;AAAA,EACD;AAEA,MAAI,UAAU;AACb,WACC,+CAAC,yBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,GAC1D;AAAA;AAAA,QAAC;AAAA;AAAA,UACA,UAAQ;AAAA,UACR,UAAQ;AAAA,UACR,KAAK;AAAA,UACL,SAAS,MAAM;AACd,gBAAI,SAAS,WAAW,OAAO,EAAG,KAAI,gBAAgB,QAAQ;AAC9D,wBAAY,IAAI;AAAA,UACjB;AAAA,UACA,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG;AAAA;AAAA,MACjC;AAAA,MACA,8CAAC,6BAAQ,OAAM,YACd,wDAAC,gCAAW,MAAK,SAAQ,SAAS,gBAAgB,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAC7E,wDAAC,qBAAAA,SAAA,EAAiB,IAAI,EAAE,UAAU,GAAG,GAAG,GACzC,GACD;AAAA,OACD;AAAA,EAEF;AAEA,SACC,+CAAC,yBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,GAC1D;AAAA,kDAAC,6BAAQ,OAAO,QAAQ,0BAA0B,QACjD,wDAAC,UACA;AAAA,MAAC;AAAA;AAAA,QACA,MAAK;AAAA,QACL,SAAS;AAAA,QACT,UAAU,WAAW;AAAA,QACrB,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;AAAA,QAE5B,oBAAU,8CAAC,sCAAiB,MAAM,IAAI,IAAK,8CAAC,kBAAAD,SAAA,EAAc,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,IAClF,GACD,GACD;AAAA,IACA,8CAAC,6BAAQ,OAAO,QAAQ,0BAA0B,YACjD,wDAAC,UACA;AAAA,MAAC;AAAA;AAAA,QACA,MAAK;AAAA,QACL,SAAS;AAAA,QACT,UAAU,WAAW;AAAA,QACrB,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;AAAA,QAE5B,wDAAC,qBAAAC,SAAA,EAAiB,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,IACzC,GACD,GACD;AAAA,IACC,SAAS,8CAAC,0BAAK,OAAM,WAAU,MAAK,SAAQ,IAAI,EAAE,UAAU,UAAU,QAAQ,GAAG,GAAG;AAAA,KACtF;AAEF;AAxOA,IAAAC,gBACAC,mBAgBAC,gBACAC,mBACAC,sBACA,iBAcAC,eACAC,8BACAC,sBACA,mBAwCEC,sBA+JI,0BAu1BA,mBAMC;AAzkCP;AAAA;AAAA;AAAA,IAAAR,iBAAuE;AACvE,IAAAC,oBAeO;AACP,IAAAC,iBAAuB;AACvB,IAAAC,oBAA0B;AAC1B,IAAAC,uBAA6B;AAC7B,sBAaO;AACP,IAAAC,gBAAkC;AAClC,IAAAC,+BAAqC;AACrC,IAAAC,uBAA6B;AAC7B,wBAA2B;AAE3B;AACA;AACA;AACA;AACA;AAMA,IAAAE;AA4BE,IAAAD,uBAAA;AA+JF,IAAM,+BAA2B;AAAA,MAChC,CAAC,EAAE,UAAU,QAAQ,MAAM,kBAAkB,gBAAgB,kBAAkB,MAA8B;AA7O9G,YAAAE,KAAA;AA8OE,cAAM,oBAAoB,SAAS;AACnC,cAAM,iBAAiB,qBACpB,qCAAU,YAAW,KACrB,gBAAgB,SAAS,EAAE,YAAW,qCAAU,YAAW;AAE9D,cAAM,CAAC,YAAY,aAAa,QAAI,yBAAiB,qBAAqB,OAAO;AACjF,cAAM,CAAC,WAAW,YAAY,QAAI,yBAAuB,kDAAoB,cAAAC,SAAM,CAAC;AACpF,cAAM,CAAC,SAAS,UAAU,QAAI,yBAAuB,8CAAkB,cAAAA,SAAM,CAAC;AAE9E,cAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,CAAC;AAC5C,cAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,CAAC;AACxC,cAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,EAAE;AAEjD,cAAM,EAAE,QAAQ,eAAe,aAAa,gBAAgB,YAAY,IACvE,qBAAqB;AACtB,cAAM;AAAA,UACL,SAAS;AAAA,UACT,OAAO;AAAA,UACP,SAAS;AAAA,UACT,OAAO;AAAA,UACP,UAAU;AAAA,UACV;AAAA,QACD,IAAI,mBAAmB;AAEvB,cAAM,WAAqC,iCAAQ,YAAW;AAC9D,cAAM,aAAY,mCAAS,cAAY,qCAAU,aAAY;AAC7D,cAAM,qBAAqB,CAAC,qBAAqB,iBAAiB,CAAC,WAAW,EAAC,qCAAU;AAEzF,cAAM,oBAAgB;AAAA,UACrB,CAAC,IAAW,OAAc;AACzB,gBAAI,CAAC,eAAgB;AACrB,wBAAY,gBAAgB;AAAA,cAC3B,YAAY,GAAG,QAAQ,KAAK,EAAE,OAAO,qBAAqB;AAAA,cAC1D,UAAU,GAAG,WAAO,cAAAA,SAAM,GAAG,KAAK,QAC/B,cAAAA,SAAM,EAAE,OAAO,qBAAqB,IACpC,GAAG,MAAM,KAAK,EAAE,OAAO,qBAAqB;AAAA,YAChD,CAAC;AAAA,UACF;AAAA,UACA,CAAC,gBAAgB,WAAW;AAAA,QAC7B;AAEA,cAAM,iBAAa;AAAA,UAClB,CAAC,IAAW,IAAW,MAAc,aAAqB;AACzD,gBAAI,CAAC,eAAgB;AACrB,qBAAS;AAAA,cACR,YAAY,GAAG,QAAQ,KAAK,EAAE,OAAO,qBAAqB;AAAA,cAC1D,UAAU,GAAG,WAAO,cAAAA,SAAM,GAAG,KAAK,QAC/B,cAAAA,SAAM,EAAE,OAAO,qBAAqB,IACpC,GAAG,MAAM,KAAK,EAAE,OAAO,qBAAqB;AAAA,cAC/C,QAAQ;AAAA,cACR,MAAM,OAAO;AAAA,cACb,WAAW;AAAA,YACZ,CAAC;AAAA,UACF;AAAA,UACA,CAAC,gBAAgB,QAAQ;AAAA,QAC1B;AAEA,cAAM,eAAe,CAAC,IAAmB,OAAsB;AAC9D,gBAAM,WAAW,kBAAM;AACvB,gBAAM,SAAS,kBAAM;AACrB,cAAI,CAAC,YAAY,CAAC,OAAQ;AAC1B,wBAAc,UAAU,MAAM;AAC9B,qBAAW,CAAC;AACZ,cAAI,cAAc,EAAG,YAAW,UAAU,QAAQ,GAAG,WAAW;AAAA,QACjE;AAEA,cAAM,WAAW,CAAC,UAAkB;AACnC,wBAAc,KAAK;AACnB,gBAAM,YAAQ,cAAAA,SAAM;AACpB,cAAI,KAAY;AAChB,gBAAM,KAAY;AAClB,cAAI,UAAU,OAAQ,MAAK,MAAM,QAAQ,MAAM;AAAA,mBACtC,UAAU,QAAS,MAAK,MAAM,QAAQ,OAAO;AACtD,uBAAa,EAAE;AACf,qBAAW,EAAE;AACb,uBAAa,IAAI,EAAE;AAAA,QACpB;AAEA,sCAAU,MAAM;AACf,cAAI,eAAgB,eAAc,oCAAa,cAAAA,SAAM,GAAG,gCAAW,cAAAA,SAAM,CAAC;AAAA,QAE3E,GAAG,CAAC,cAAc,CAAC;AAEnB,sCAAU,MAAM;AACf,cAAI,cAAc,KAAK,aAAa,SAAS;AAC5C,uBAAW,WAAW,SAAS,SAAS,WAAW;AAAA,UACpD;AAAA,QAED,GAAG,CAAC,WAAW,SAAS,WAAW,CAAC;AAGpC,cAAM,qBAAiB,wBAAQ,MAAM;AACpC,mBAAQ,iCAAQ,gBAAe,CAAC,GAAG,IAAI,CAAC,OAAO;AAAA,YAC9C,MAAM,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA,YACzC,UAAU,EAAE;AAAA,YACZ,WAAW,EAAE;AAAA,UACd,EAAE;AAAA,QACH,GAAG,CAAC,MAAM,CAAC;AAEX,cAAM,mBAAe,wBAAQ,MAAM;AAClC,gBAAM,KAAK,iCAAQ;AACnB,cAAI,CAAC,GAAI,QAAO,CAAC;AACjB,gBAAM,QAAQ,GAAG,qBAAqB;AACtC,iBAAO;AAAA,YACN,EAAE,MAAM,oBAAoB,OAAO,GAAG,eAAe,KAAM,GAAG,gBAAgB,QAAS,KAAK,WAAW,GAAG,iBAAiB,OAAO,EAAE,KAAK;AAAA,YACzI,EAAE,MAAM,QAAQ,OAAO,GAAG,aAAa,KAAM,GAAG,cAAc,QAAS,KAAK,WAAW,GAAG,eAAe,OAAO,UAAU;AAAA,YAC1H,EAAE,MAAM,SAAS,OAAO,GAAG,cAAc,KAAM,GAAG,eAAe,QAAS,KAAK,WAAW,GAAG,gBAAgB,OAAO,EAAE,MAAM;AAAA,UAC7H;AAAA,QACD,GAAG,CAAC,MAAM,CAAC;AAEX,cAAM,0BAAsB,wBAAQ,MAAM;AACzC,gBAAM,QAAQ,CAAC,IAAI,iCAAQ,qBAAoB,CAAC,CAAE,EAAE;AAAA,YACnD,CAAC,GAAG,MAAM,EAAE,cAAc,EAAE;AAAA,UAC7B;AACA,gBAAM,QAAQ,MAAM,OAAO,CAAC,GAAG,MAAM,KAAK,EAAE,aAAa,IAAI,CAAC;AAC9D,iBAAO,MAAM,IAAI,CAAC,OAAO;AAAA,YACxB,QAAQ,EAAE;AAAA,YACV,OAAO,EAAE;AAAA,YACT,YAAY,EAAE;AAAA,YACd,YAAY,EAAE;AAAA,YACd,KAAK,QAAQ,IAAK,EAAE,YAAY,QAAS,MAAM;AAAA,UAChD,EAAE;AAAA,QACH,GAAG,CAAC,MAAM,CAAC;AAEX,cAAM,wBAAoB;AAAA,UACzB,MAAM,oBAAoB,OAAO,CAAC,GAAG,MAAM,KAAK,EAAE,SAAS,IAAI,CAAC;AAAA,UAChE,CAAC,mBAAmB;AAAA,QACrB;AAEA,cAAM,mBAAe,wBAAQ,MAAM;AAClC,mBAAQ,iCAAQ,iBAAgB,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO;AAAA,YAClD,MAAM,EAAE;AAAA,YACR,OAAO,EAAE;AAAA,YACT,YAAY,EAAE;AAAA,YACd,OAAO,aAAa,IAAI,aAAa,MAAM;AAAA,UAC5C,EAAE;AAAA,QACH,GAAG,CAAC,MAAM,CAAC;AAEX,cAAM,mBAAe,wBAAQ,MAAM;AAClC,gBAAM,SAAQ,iCAAQ,iBAAgB,CAAC;AACvC,gBAAM,aAAa,MAAM,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,YAAY,CAAC;AACjE,iBAAO,MAAM,IAAI,CAAC,GAAG,MAAO,iCACxB,IADwB;AAAA,YAE3B,YAAY,aAAa,IAAK,EAAE,aAAa,aAAc,MAAM;AAAA,YACjE,YAAY,EAAE,aAAa,IAAK,EAAE,gBAAgB,EAAE,aAAc,MAAM;AAAA,YACxE,OAAO,aAAa,IAAI,aAAa,MAAM;AAAA,UAC5C,EAAE;AAAA,QACH,GAAG,CAAC,MAAM,CAAC;AAEX,cAAM,uBAAmB,wBAAQ,MAAM;AACtC,cAAI,eAAe,QAAS,QAAO;AACnC,cAAI,eAAe,QAAS,QAAO,iCAAwB,cAAAA,SAAM,EAAE,OAAO,WAAW,CAAC;AACtF,cAAI,eAAe,OAAQ,QAAO;AAClC,cAAI,aAAa,SAAS;AACzB,gBAAI,UAAU,OAAO,SAAS,KAAK;AAClC,qBAAO,6BAAwB,UAAU,OAAO,aAAa,CAAC;AAC/D,mBAAO,6BAAwB,UAAU,OAAO,aAAa,CAAC,OAAO,QAAQ,OAAO,aAAa,CAAC;AAAA,UACnG;AACA,iBAAO;AAAA,QACR,GAAG,CAAC,YAAY,WAAW,OAAO,CAAC;AAEnC,cAAM,iBAAa,4BAAY,MAAM;AACpC,cAAI,OAAQ,QAAO;AAAA,QACpB,GAAG,CAAC,MAAM,CAAC;AAEX,YAAI,CAAC,gBAAgB;AACpB,iBACC,+CAAC,yBAAI,IAAI,EAAE,GAAG,GAAG,WAAW,SAAS,GACpC;AAAA,0DAAC,gCAAW,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,GAAG,gCAAkB;AAAA,YAC1D,8CAAC,aAAU,SAAS,YAAY,qBAAO;AAAA,aACxC;AAAA,QAEF;AAEA,YAAI,oBAAoB;AACvB,iBACC,8CAAC,yBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,WAAW,IAAI,GAC1F,wDAAC,sCAAiB,MAAM,IAAI,GAC7B;AAAA,QAEF;AAEA,cAAM,OAAO,CAAC,YAAY,gBAAgB,eAAe;AAEzD,eACC,8CAAC,qDAAqB,aAAa,mCAClC,yDAAC,yBAAI,IAAI,aACR;AAAA,wDAAC,iBAAc,OAAO,WAAW,UAAU,mBAAmB,QAAQ,YAAY;AAAA,UAElF,+CAAC,yBAAI,IAAIC,cACR;AAAA;AAAA,cAAC;AAAA;AAAA,gBACA,OAAO;AAAA,gBACP,UAAU,CAAC,QAAQ;AAClB,+BAAa,GAAmB;AAChC,gCAAc,QAAQ;AAAA,gBACvB;AAAA,gBACA,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,IAAIC,cAAa,EAAE;AAAA;AAAA,YAC7D;AAAA,YACA,8CAAC,gCAAW,IAAI,EAAE,UAAU,IAAI,OAAO,EAAE,GAAG,GAAG,gBAAE;AAAA,YACjD;AAAA,cAAC;AAAA;AAAA,gBACA,OAAO;AAAA,gBACP,UAAU,CAAC,QAAQ;AAClB,6BAAW,GAAmB;AAC9B,gCAAc,QAAQ;AAAA,gBACvB;AAAA,gBACA,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,IAAIA,cAAa,EAAE;AAAA;AAAA,YAC7D;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACA,SAAS,eAAe,UAAU,YAAY;AAAA,gBAC9C,SAAS,MAAM,SAAS,OAAO;AAAA,gBAC/B;AAAA;AAAA,YAED;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACA,SAAS,eAAe,SAAS,YAAY;AAAA,gBAC7C,SAAS,MAAM,SAAS,MAAM;AAAA,gBAC9B;AAAA;AAAA,YAED;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACA,SAAS,eAAe,UAAU,YAAY;AAAA,gBAC9C,SAAS,MAAM,SAAS,OAAO;AAAA,gBAC/B;AAAA;AAAA,YAED;AAAA,aACD;AAAA,UAEA,+CAAC,yBAAI,IAAIC,YACP;AAAA,6BACA,8CAAC,yBAAI,IAAI,kBACR,wDAAC,sCAAiB,GACnB;AAAA,YAGA,eACA,8CAAC,2BAAM,UAAS,SAAQ,IAAI,EAAE,IAAI,EAAE,GAAG,SAAS,MAAM,eAAe,EAAE,GACrE,uBACF;AAAA,YAID,8CAAC,yBAAI,IAAI,WACP;AAAA,cACA,EAAE,IAAGJ,MAAA,mCAAS,eAAT,OAAAA,MAAuB,GAAG,GAAG,eAAe,GAAG,EAAE,KAAK;AAAA,cAC3D,EAAE,IAAG,wCAAS,kBAAT,YAA0B,GAAG,GAAG,YAAY,GAAG,EAAE,MAAM;AAAA,cAC5D,EAAE,IAAG,wCAAS,gBAAT,YAAwB,GAAG,GAAG,UAAU,GAAG,EAAE,IAAI;AAAA,cACtD,EAAE,IAAG,mCAAS,oBAAmB,YAAY,GAAG,WAAW,GAAG,EAAE,OAAO;AAAA,cACvE,EAAE,GAAG,KAAI,wCAAS,eAAT,YAAuB,GAAG,QAAQ,CAAC,CAAC,KAAK,GAAG,eAAe,GAAG,EAAE,MAAM;AAAA,cAC/E,EAAE,IAAG,mCAAS,2BAA0B,YAAY,GAAG,kBAAkB,GAAG,EAAE,KAAK;AAAA,cACnF,EAAE,IAAG,mCAAS,wBAAuB,YAAY,GAAG,cAAc,GAAG,EAAE,KAAK;AAAA,cAC5E,EAAE,IAAG,mCAAS,wBAAuB,YAAY,GAAG,eAAe,GAAG,EAAE,OAAO;AAAA,cAC/E,EAAE,IAAG,mCAAS,uBAAsB,YAAY,GAAG,cAAc,GAAG,EAAE,MAAM;AAAA,cAC5E;AAAA,gBACC,GAAG,KAAI,wCAAS,iBAAT,YAAyB,GAAG,QAAQ,CAAC,CAAC;AAAA,gBAC7C,GAAG,aAAY,mCAAS,kBAAiB,KAAK,QAAQ,cAAc,MAAM,EAAE;AAAA,gBAC5E,GAAG,EAAE;AAAA,cACN;AAAA,YACD,EAAE,IAAI,CAAC,KAAK,MACX,8CAAC,YAAiB,OAAO,IAAI,GAAG,OAAO,IAAI,GAAG,OAAO,IAAI,KAA1C,CAA6C,CAC5D,GACF;AAAA,YAGA,+CAAC,yBAAI,IAAI,UACR;AAAA,4DAAC,yBAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,KAAK,UAAU,OAAO,GACrD,eAAK,IAAI,CAAC,KAAK,QACf,8CAAC,yBAAc,SAAS,MAAM,aAAa,GAAG,GAAG,IAAI,UAAU,cAAc,GAAG,GAC9E,iBADQ,GAEV,CACA,GACF;AAAA,cACA,8CAAC,aAAU,MAAK,SAAQ,WAAW,8CAAC,eAAAK,SAAA,EAAW,GAAI,SAAS,MAAM,aAAa,GAAG,oBAElF;AAAA,eACD;AAAA,YAGC,cAAc,KACd,+CAAC,yBACA;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,IAAI;AAAA,oBACH,SAAS;AAAA,oBACT,qBAAqB,EAAE,IAAI,OAAO,IAAI,UAAU;AAAA,oBAChD,KAAK;AAAA,oBACL,IAAI;AAAA,kBACL;AAAA,kBAEA;AAAA,mEAAC,yBAAI,IAAI,eACR;AAAA,qEAAC,yBAAI,IAAI,iBACR;AAAA,sEAAC,gCAAW,IAAIC,iBAAiB,4BAAiB;AAAA,wBAClD;AAAA,0BAAC;AAAA;AAAA,4BACA,OAAO;AAAA,4BACP,MAAK;AAAA,4BACL,IAAI;AAAA,8BACH,UAAU;AAAA,8BACV,YAAY;AAAA,8BACZ,YAAY,EAAE;AAAA,8BACd,OAAO,EAAE;AAAA,8BACT,QAAQ;AAAA,4BACT;AAAA;AAAA,wBACD;AAAA,yBACD;AAAA,sBACA,8CAAC,yBAAI,IAAI,EAAE,GAAG,GAAG,QAAQ,IAAI,GAC5B,wDAAC,uCAAoB,OAAM,QAAO,QAAO,QACxC,yDAAC,4BAAS,MAAM,gBAAgB,QAAQ,GACvC;AAAA,sEAAC,iCAAc,iBAAgB,OAAM,QAAQ,EAAE,IAAI;AAAA,wBACnD,8CAAC,yBAAM,SAAQ,QAAO,MAAM,EAAE,UAAU,IAAI,MAAM,EAAE,GAAG,GAAG;AAAA,wBAC1D,8CAAC,yBAAM,MAAM,EAAE,UAAU,IAAI,MAAM,EAAE,GAAG,GAAG,eAAe,OAAO;AAAA,wBACjE;AAAA,0BAAC,gBAAAC;AAAA,0BAAA;AAAA,4BACA,gBAAgB,CAAC,UAAU,GAAG,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC;AAAA,4BAC5D,cAAc,EAAE,UAAU,IAAI,cAAc,GAAG,QAAQ,aAAa,EAAE,EAAE,GAAG;AAAA;AAAA,wBAC5E;AAAA,wBACA,8CAAC,0BAAO,cAAc,EAAE,UAAU,GAAG,GAAG;AAAA,wBACxC,8CAAC,uBAAI,SAAQ,YAAW,MAAK,YAAW,MAAM,EAAE,MAAM,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG;AAAA,wBAC5E,8CAAC,uBAAI,SAAQ,aAAY,MAAK,aAAY,MAAM,EAAE,KAAK,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG;AAAA,yBAC9E,GACD,GACD;AAAA,uBACD;AAAA,oBAEA,+CAAC,yBAAI,IAAI,eACR;AAAA,oEAAC,yBAAI,IAAI,iCAAK,kBAAL,EAAsB,gBAAgB,aAAa,IAC3D,wDAAC,gCAAW,IAAID,iBAAgB,wCAA0B,GAC3D;AAAA,sBACA,8CAAC,yBAAI,IAAI,EAAE,GAAG,GAAG,QAAQ,IAAI,GAC3B,uBAAa,SAAS,IACtB,8CAAC,uCAAoB,OAAM,QAAO,QAAO,QACxC,yDAAC,4BACA;AAAA;AAAA,0BAAC;AAAA;AAAA,4BACA,MAAM;AAAA,4BACN,IAAG;AAAA,4BACH,IAAG;AAAA,4BACH,aAAa;AAAA,4BACb,aAAa;AAAA,4BACb,SAAQ;AAAA,4BACR,SAAQ;AAAA,4BACR,UAAU;AAAA,4BAET,uBAAa,IAAI,CAAC,OAAO,QACzB,8CAAC,wBAAe,MAAM,MAAM,SAAjB,GAAwB,CACnC;AAAA;AAAA,wBACF;AAAA,wBACA;AAAA,0BAAC,gBAAAC;AAAA,0BAAA;AAAA,4BACA,WAAW,CAAC,MAAM,MAAM,UAAU;AAAA,8BACjC,GAAI,MAAc,QAAQ,SAAS,KAAM,MAAc,QAAQ,IAAI,QAAQ,CAAC,CAAC;AAAA,8BAC7E;AAAA,4BACD;AAAA,4BACA,cAAc,EAAE,UAAU,IAAI,cAAc,GAAG,QAAQ,aAAa,EAAE,EAAE,GAAG;AAAA;AAAA,wBAC5E;AAAA,wBACA,8CAAC,0BAAO,cAAc,EAAE,UAAU,GAAG,GAAG;AAAA,yBACzC,GACD,IAEA;AAAA,wBAAC;AAAA;AAAA,0BACA,IAAI;AAAA,4BACH,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,QAAQ;AAAA,4BACR,OAAO,EAAE;AAAA,4BACT,UAAU;AAAA,0BACX;AAAA,0BACA;AAAA;AAAA,sBAED,GAEF;AAAA,uBACD;AAAA;AAAA;AAAA,cACD;AAAA,cAEA,+CAAC,yBAAI,IAAI,iCAAK,gBAAL,EAAoB,IAAI,EAAE,IAClC;AAAA,+DAAC,yBAAI,IAAI,iBACR;AAAA,gEAAC,gCAAW,IAAID,iBAAgB,wCAA0B;AAAA,kBAC1D;AAAA,oBAAC;AAAA;AAAA,sBACA,OAAO,GAAG,iBAAiB,QAAQ,sBAAsB,IAAI,KAAK,GAAG;AAAA,sBACrE,MAAK;AAAA,sBACL,IAAI;AAAA,wBACH,UAAU;AAAA,wBACV,YAAY;AAAA,wBACZ,YAAY,EAAE;AAAA,wBACd,OAAO,EAAE;AAAA,wBACT,QAAQ;AAAA,sBACT;AAAA;AAAA,kBACD;AAAA,mBACD;AAAA,gBACA,8CAAC,yBAAI,IAAI,EAAE,GAAG,GAAG,QAAQ,IAAI,GAC3B,8BAAoB,SAAS,IAC7B,8CAAC,uCAAoB,OAAM,QAAO,QAAO,QACxC;AAAA,kBAAC;AAAA;AAAA,oBACA,MAAM;AAAA,oBACN,QAAQ,EAAE,KAAK,IAAI,OAAO,IAAI,MAAM,GAAG,QAAQ,GAAG;AAAA,oBAElD;AAAA,oEAAC,iCAAc,iBAAgB,OAAM,QAAQ,EAAE,IAAI;AAAA,sBACnD,8CAAC,yBAAM,SAAQ,UAAS,MAAM,EAAE,UAAU,IAAI,MAAM,EAAE,GAAG,GAAG;AAAA,sBAC5D,8CAAC,yBAAM,MAAM,EAAE,UAAU,IAAI,MAAM,EAAE,GAAG,GAAG,eAAe,OAAO;AAAA,sBACjE;AAAA,wBAAC,gBAAAC;AAAA,wBAAA;AAAA,0BACA,cAAc,EAAE,UAAU,IAAI,cAAc,GAAG,QAAQ,aAAa,EAAE,EAAE,GAAG;AAAA;AAAA,sBAC5E;AAAA,sBACA,8CAAC,uBAAI,SAAQ,SAAQ,MAAK,SAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,GAClE;AAAA,wBAAC;AAAA;AAAA,0BACA,SAAQ;AAAA,0BACR,UAAS;AAAA,0BACT,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,MAAM,EAAE,GAAG;AAAA;AAAA,sBACpD,GACD;AAAA;AAAA;AAAA,gBACD,GACD,IAEA;AAAA,kBAAC;AAAA;AAAA,oBACA,IAAI;AAAA,sBACH,SAAS;AAAA,sBACT,YAAY;AAAA,sBACZ,gBAAgB;AAAA,sBAChB,QAAQ;AAAA,sBACR,OAAO,EAAE;AAAA,sBACT,UAAU;AAAA,oBACX;AAAA,oBACA;AAAA;AAAA,gBAED,GAEF;AAAA,iBACD;AAAA,cAEA;AAAA,gBAAC;AAAA;AAAA,kBACA,IAAI;AAAA,oBACH,SAAS;AAAA,oBACT,qBAAqB,EAAE,IAAI,OAAO,IAAI,UAAU;AAAA,oBAChD,KAAK;AAAA,kBACN;AAAA,kBAEA;AAAA,mEAAC,yBAAI,IAAI,eACR;AAAA,oEAAC,yBAAI,IAAI,iCAAK,kBAAL,EAAsB,gBAAgB,aAAa,IAC3D,wDAAC,gCAAW,IAAID,iBAAgB,4BAAc,GAC/C;AAAA,sBACA,8CAAC,yBAAI,IAAI,EAAE,GAAG,GAAG,QAAQ,IAAI,GAC3B,uBAAa,SAAS,IACtB,8CAAC,uCAAoB,OAAM,QAAO,QAAO,QACxC,yDAAC,4BACA;AAAA,sEAAC,uBAAI,MAAM,cAAc,IAAG,OAAM,IAAG,OAAM,aAAa,IAAI,SAAQ,SAAQ,SAAQ,QAClF,uBAAa,IAAI,CAAC,OAAO,QACzB,8CAAC,wBAAe,MAAM,MAAM,SAAjB,GAAwB,CACnC,GACF;AAAA,wBACA;AAAA,0BAAC,gBAAAC;AAAA,0BAAA;AAAA,4BACA,cAAc,EAAE,UAAU,IAAI,cAAc,GAAG,QAAQ,aAAa,EAAE,EAAE,GAAG;AAAA;AAAA,wBAC5E;AAAA,wBACA,8CAAC,0BAAO,cAAc,EAAE,UAAU,GAAG,GAAG;AAAA,yBACzC,GACD,IAEA;AAAA,wBAAC;AAAA;AAAA,0BACA,IAAI;AAAA,4BACH,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,QAAQ;AAAA,4BACR,OAAO,EAAE;AAAA,4BACT,UAAU;AAAA,0BACX;AAAA,0BACA;AAAA;AAAA,sBAED,GAEF;AAAA,uBACD;AAAA,oBAEA,+CAAC,yBAAI,IAAI,eACR;AAAA,oEAAC,yBAAI,IAAI,iCAAK,kBAAL,EAAsB,gBAAgB,aAAa,IAC3D,wDAAC,gCAAW,IAAID,iBAAgB,uCAAyB,GAC1D;AAAA,sBACA,8CAAC,yBAAI,IAAI,EAAE,GAAG,EAAE,GACd,uBAAa,SAAS,IACtB,aAAa,IAAI,CAAC,MAAG;AAvsBjC,4BAAAN,KAAAQ,KAAAC;AAwsBa,8EAAC,yBAAsB,IAAI,EAAE,IAAI,GAAG,gBAAgB,EAAE,IAAI,EAAE,EAAE,GAC7D;AAAA;AAAA,4BAAC;AAAA;AAAA,8BACA,IAAI;AAAA,gCACH,SAAS;AAAA,gCACT,YAAY;AAAA,gCACZ,gBAAgB;AAAA,gCAChB,IAAI;AAAA,8BACL;AAAA,8BAEA;AAAA,+EAAC,yBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAE,GACxD;AAAA;AAAA,oCAAC;AAAA;AAAA,sCACA,IAAI;AAAA,wCACH,OAAO;AAAA,wCACP,QAAQ;AAAA,wCACR,cAAc;AAAA,wCACd,YAAY,EAAE;AAAA,wCACd,YAAY;AAAA,sCACb;AAAA;AAAA,kCACD;AAAA,kCACA,8CAAC,gCAAW,IAAI,EAAE,UAAU,IAAI,YAAY,KAAK,OAAO,EAAE,GAAG,GAC3D,YAAE,WACJ;AAAA,mCACD;AAAA,gCACA,+CAAC,gCAAW,IAAI,iCAAK,SAAL,EAAa,UAAU,IAAI,YAAY,KAAK,OAAO,EAAE,MAAM,IACzE;AAAA,oCAAE;AAAA,kCAAW;AAAA,kCACd;AAAA,oCAAC;AAAA;AAAA,sCACA,WAAU;AAAA,sCACV,IAAI,iCAAK,SAAL,EAAa,OAAO,EAAE,IAAI,IAAI,IAAI;AAAA,sCACtC;AAAA;AAAA,wCACE,EAAE;AAAA,wCAAc;AAAA,wCAAQ,EAAE;AAAA,wCAAY;AAAA;AAAA;AAAA,kCACzC;AAAA,mCACD;AAAA;AAAA;AAAA,0BACD;AAAA,0BACA;AAAA,4BAAC;AAAA;AAAA,8BACA,IAAI;AAAA,gCACH,QAAQ;AAAA,gCACR,YAAY,EAAE;AAAA,gCACd,cAAc;AAAA,gCACd,UAAU;AAAA,gCACV,IAAI;AAAA,8BACL;AAAA,8BAEA;AAAA,gCAAC;AAAA;AAAA,kCACA,IAAI;AAAA,oCACH,QAAQ;AAAA,oCACR,OAAO,IAAGT,MAAA,EAAE,eAAF,OAAAA,MAAgB,CAAC;AAAA,oCAC3B,YAAY,EAAE;AAAA,oCACd,cAAc;AAAA,kCACf;AAAA;AAAA,8BACD;AAAA;AAAA,0BACD;AAAA,0BACA;AAAA,4BAAC;AAAA;AAAA,8BACA,IAAI;AAAA,gCACH,SAAS;AAAA,gCACT,UAAU;AAAA,gCACV,WAAW;AAAA,gCACX,QAAQ;AAAA,8BACT;AAAA,8BAEA;AAAA,+EAAC,gCAAW,IAAI,EAAE,UAAU,IAAI,OAAO,EAAE,GAAG,GACzC;AAAA,oCAAAQ,MAAA,EAAE,eAAF,OAAAA,MAAgB,GAAG,QAAQ,CAAC;AAAA,kCAAE;AAAA,mCACjC;AAAA,gCACA,+CAAC,gCAAW,IAAI,EAAE,UAAU,IAAI,OAAO,EAAE,GAAG,GAAG;AAAA;AAAA,oCACvCC,MAAA,EAAE,eAAF,OAAAA,MAAgB,GAAG,QAAQ,CAAC;AAAA,kCAAE;AAAA,mCACtC;AAAA,gCACA,+CAAC,gCAAW,IAAI,EAAE,UAAU,IAAI,OAAO,EAAE,GAAG,GAAG;AAAA;AAAA,kCACxC,8CAAC,UAAK,OAAO,iCAAK,SAAL,EAAa,OAAO,EAAE,GAAG,IAAI,YAAE,kBAAiB;AAAA,mCACpE;AAAA,gCACA,+CAAC,gCAAW,IAAI,EAAE,UAAU,IAAI,OAAO,EAAE,GAAG,GAAG;AAAA;AAAA,kCACxC,8CAAC,UAAK,OAAO,iCAAK,SAAL,EAAa,OAAO,EAAE,GAAG,IAAI,YAAE,kBAAiB;AAAA,mCACpE;AAAA,gCACA,+CAAC,gCAAW,IAAI,EAAE,UAAU,IAAI,OAAO,EAAE,GAAG,GAAG;AAAA;AAAA,kCACxC,8CAAC,UAAK,OAAO,iCAAK,SAAL,EAAa,OAAO,EAAE,GAAG,IAAI,YAAE,oBAAmB;AAAA,mCACtE;AAAA,gCACA,+CAAC,gCAAW,IAAI,EAAE,UAAU,IAAI,OAAO,EAAE,GAAG,GAAG;AAAA;AAAA,kCACzC,8CAAC,UAAK,OAAO,iCAAK,SAAL,EAAa,OAAO,EAAE,GAAG,IAAI,YAAE,iBAAgB;AAAA,mCAClE;AAAA;AAAA;AAAA,0BACD;AAAA,6BA7ES,EAAE,SA8EZ;AAAA,uBACA,IAED,8CAAC,yBAAI,IAAI,EAAE,WAAW,UAAU,IAAI,GAAG,OAAO,EAAE,IAAI,UAAU,GAAG,GAAG,2BAEpE,GAEF;AAAA,uBACD;AAAA;AAAA;AAAA,cACD;AAAA,eACD;AAAA,YAIA,cAAc,KACd;AAAA,cAAC;AAAA;AAAA,gBACA,IAAI;AAAA,kBACH,cAAc;AAAA,kBACd,QAAQ;AAAA,kBACR,UAAU;AAAA,kBACV,YAAY;AAAA,gBACb;AAAA,gBAEA;AAAA,gEAAC,yBAAI,IAAI,iBACR,yDAAC,yBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAE,GACxD;AAAA,kEAAC,gCAAW,IAAIH,iBAAgB,0BAAY;AAAA,oBAC5C;AAAA,sBAAC;AAAA;AAAA,wBACA,OAAO,GAAG,QAAQ;AAAA,wBAClB,MAAK;AAAA,wBACL,IAAI;AAAA,0BACH,UAAU;AAAA,0BACV,YAAY;AAAA,0BACZ,YAAY,EAAE;AAAA,0BACd,OAAO,EAAE;AAAA,0BACT,QAAQ,aAAa,EAAE,EAAE;AAAA,wBAC1B;AAAA;AAAA,oBACD;AAAA,qBACD,GACD;AAAA,kBACC,YACA,8CAAC,2BAAM,UAAS,SAAQ,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,SAAS,MAAM,YAAY,EAAE,GACzE,oBACF;AAAA,kBAED,+CAAC,oCAAe,IAAI,EAAE,UAAU,WAAW,GACzC;AAAA,kCACA;AAAA,sBAAC;AAAA;AAAA,wBACA,IAAI;AAAA,0BACH,UAAU;AAAA,0BACV,KAAK;AAAA,0BACL,MAAM;AAAA,0BACN,OAAO;AAAA,0BACP,QAAQ;AAAA,0BACR,YAAY;AAAA,0BACZ,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,gBAAgB;AAAA,0BAChB,QAAQ;AAAA,wBACT;AAAA,wBAEA,wDAAC,sCAAiB,MAAM,IAAI;AAAA;AAAA,oBAC7B;AAAA,oBAED,+CAAC,2BAAM,MAAK,SAAQ,IAAI,YACvB;AAAA,oEAAC,+BACA,wDAAC,8BACC;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,sBACD,EAAE,IAAI,CAAC,UACN,8CAAC,+BAAsB,IAAI,WACzB,mBADc,KAEhB,CACA,GACF,GACD;AAAA,sBACA,+CAAC,+BACC;AAAA,mCAAW,IAAI,CAAC,KAAK,QAAK;AA92BtC,8BAAAN;AA+2BY,gFAAC,8BAAmC,OAAK,MAAC,IAAI,UAC7C;AAAA,0EAAC,+BAAU,IAAI,EAAE,YAAY,KAAK,OAAO,EAAE,KAAK,GAC9C,cAAI,eAAe,IACrB;AAAA,4BACA,8CAAC,+BAAU,IAAI,EAAE,OAAO,UAAU,GAChC,cAAI,oBACF,cAAAC,SAAM,IAAI,aAAa,EAAE,OAAO,qBAAqB,IACrD,IACJ;AAAA,4BACA,8CAAC,+BACA,wDAAC,gBAAa,MAAM,IAAI,YAAY,IAAI,GACzC;AAAA,4BACA,8CAAC,+BACA,wDAAC,cAAW,QAAQ,IAAI,cAAc,IAAI,GAC3C;AAAA,4BACA,8CAAC,+BACC,cAAI,YACJ;AAAA,8BAAC;AAAA;AAAA,gCACA,OAAO,IAAI;AAAA,gCACX,MAAK;AAAA,gCACL,IAAI;AAAA,kCACH,iBAAiB;AAAA,kCACjB,OAAO,EAAE;AAAA,kCACT,YAAY;AAAA,kCACZ,UAAU;AAAA,kCACV,QAAQ;AAAA,gCACT;AAAA;AAAA,4BACD,IAEA,IAEF;AAAA,4BACA,8CAAC,+BAAU,IAAI,EAAE,OAAO,UAAU,GAAI,cAAI,aAAa,IAAG;AAAA,4BAC1D,8CAAC,+BAAU,IAAI,EAAE,YAAY,KAAK,OAAO,EAAE,MAAM,oBAAoB,eAAe,GAClF,cAAI,mBAAmB,IACzB;AAAA,4BACA,8CAAC,+BAAU,IAAI,EAAE,YAAY,KAAK,OAAO,EAAE,OAAO,oBAAoB,eAAe,GACnF,cAAI,mBAAmB,IACzB;AAAA,4BACA,8CAAC,+BAAU,IAAI,EAAE,YAAY,KAAK,oBAAoB,eAAe,GACnE,cAAI,sBAAsB,IAC5B;AAAA,4BACA,8CAAC,+BAAU,IAAI,EAAE,YAAY,KAAK,OAAO,EAAE,QAAQ,oBAAoB,eAAe,GACpF,cAAI,qBAAqB,IAC3B;AAAA,4BACA,8CAAC,+BAAU,IAAI,EAAE,OAAO,UAAU,GAAI,cAAI,eAAe,IAAG;AAAA,4BAC5D,8CAAC,+BACC,cAAI,iBACJ;AAAA,8BAAC;AAAA;AAAA,gCACA,OAAM;AAAA,gCACN,MAAK;AAAA,gCACL,IAAI;AAAA,kCACH,iBAAiB;AAAA,kCACjB,OAAO,EAAE;AAAA,kCACT,YAAY;AAAA,kCACZ,UAAU;AAAA,kCACV,QAAQ;AAAA,kCACR,cAAc;AAAA,gCACf;AAAA;AAAA,4BACD,IAEA;AAAA,8BAAC;AAAA;AAAA,gCACA,OAAM;AAAA,gCACN,MAAK;AAAA,gCACL,IAAI;AAAA,kCACH,iBAAiB;AAAA,kCACjB,OAAO;AAAA,kCACP,YAAY;AAAA,kCACZ,UAAU;AAAA,kCACV,QAAQ;AAAA,kCACR,cAAc;AAAA,gCACf;AAAA;AAAA,4BACD,GAEF;AAAA,4BACA,8CAAC,+BACC,cAAI,WACJ;AAAA,8BAACd;AAAA,8BAAA;AAAA,gCACA,UAAU,IAAI;AAAA,gCACd,gBAAea,MAAA,IAAI,kBAAJ,OAAAA,MAAqB;AAAA;AAAA,4BACrC,IAEA,IAEF;AAAA,+BApFc,IAAI,YAAY,GAqF/B;AAAA,yBACA;AAAA,wBACA,CAAC,cAAc,WAAW,WAAW,KACrC,8CAAC,8BACA;AAAA,0BAAC;AAAA;AAAA,4BACA,SAAS;AAAA,4BACT,IAAI,EAAE,WAAW,UAAU,IAAI,GAAG,OAAO,EAAE,IAAI,UAAU,GAAG;AAAA,4BAC5D;AAAA;AAAA,wBAED,GACD;AAAA,yBAEF;AAAA,uBACD;AAAA,qBACD;AAAA,kBACA;AAAA,oBAAC;AAAA;AAAA,sBACA,WAAU;AAAA,sBACV,OAAO;AAAA,sBACP,MAAM;AAAA,sBACN,cAAc,CAAC,GAAG,MAAM,WAAW,CAAC;AAAA,sBACpC,aAAa;AAAA,sBACb,qBAAqB,CAAC,MAAM;AAC3B,uCAAe,SAAS,EAAE,OAAO,OAAO,EAAE,CAAC;AAC3C,mCAAW,CAAC;AAAA,sBACb;AAAA,sBACA,oBAAoB,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,sBACtC,IAAIU;AAAA;AAAA,kBACL;AAAA;AAAA;AAAA,YACD;AAAA,YAIA,cAAc,KACd,+CAAC,yBACA;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,IAAI;AAAA,oBACH,SAAS;AAAA,oBACT,qBAAqB;AAAA,sBACpB,IAAI;AAAA,sBACJ,IAAI;AAAA,sBACJ,IAAI;AAAA,oBACL;AAAA,oBACA,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE;AAAA,oBACtB,IAAI;AAAA,kBACL;AAAA,kBAEA;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACA,QAAO,mCAAS,uBAAsB;AAAA,wBACtC,OAAM;AAAA,wBACN,OAAO,EAAE;AAAA;AAAA,oBACV;AAAA,oBACA,8CAAC,YAAS,QAAO,wCAAS,gBAAT,YAAwB,GAAG,OAAM,gBAAe,OAAO,EAAE,QAAQ;AAAA,oBAClF;AAAA,sBAAC;AAAA;AAAA,wBACA,QAAO,mCAAS,wBAAuB;AAAA,wBACvC,OAAM;AAAA,wBACN,OAAO,EAAE;AAAA;AAAA,oBACV;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACA,QAAO,mCAAS,2BAA0B;AAAA,wBAC1C,OAAM;AAAA,wBACN,OAAO,EAAE;AAAA;AAAA,oBACV;AAAA;AAAA;AAAA,cACD;AAAA,cAEA,+CAAC,yBACA;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACA,IAAI;AAAA,sBACH,UAAU;AAAA,sBACV,YAAY;AAAA,sBACZ,OAAO;AAAA,sBACP,eAAe;AAAA,sBACf,eAAe;AAAA,sBACf,IAAI;AAAA,sBACJ,YAAY;AAAA,oBACb;AAAA,oBACA;AAAA;AAAA,gBAED;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACA,IAAI;AAAA,sBACH,SAAS;AAAA,sBACT,qBAAqB,EAAE,IAAI,WAAW,IAAI,iBAAiB;AAAA,sBAC3D,KAAK;AAAA,oBACN;AAAA,oBAEC;AAAA,sBACA;AAAA,wBACC,OAAO;AAAA,wBACP,QAAO,mCAAS,sBACb,cAAAT,SAAM,QAAQ,cAAc,EAAE,OAAO,qBAAqB,IAC1D;AAAA,wBACH,OAAO,EAAE;AAAA,sBACV;AAAA,sBACA;AAAA,wBACC,OAAO;AAAA,wBACP,OAAO,IAAG,wCAAS,iBAAT,YAAyB,CAAC;AAAA,wBACpC,OAAO,EAAE;AAAA,sBACV;AAAA,sBACA;AAAA,wBACC,OAAO;AAAA,wBACP,QAAO,mCAAS,mBAAkB;AAAA,wBAClC,OAAO,EAAE;AAAA,sBACV;AAAA,sBACA;AAAA,wBACC,OAAO;AAAA,wBACP,OAAO,KAAI,wCAAS,eAAT,YAAuB,GAAG,QAAQ,CAAC,CAAC;AAAA,wBAC/C,OAAO,EAAE;AAAA,sBACV;AAAA,oBACD,EAAE,IAAI,CAAC,SACN;AAAA,sBAAC;AAAA;AAAA,wBAEA,OAAO,KAAK;AAAA,wBACZ,OAAO,KAAK;AAAA,wBACZ,OAAO,KAAK;AAAA;AAAA,sBAHP,KAAK;AAAA,oBAIX,CACA;AAAA;AAAA,gBACF;AAAA,iBACD;AAAA,eACD;AAAA,aAEF;AAAA,WACD,GACD;AAAA,MAEF;AAAA,IACD;AAEA,IAAM,oBAAsD,CAAC,UAC5D,8CAAC,eACA,wDAAC,6CAA6B,MAAO,GACtC;AAGD,IAAO,4BAAQ;AAAA;AAAA;;;ACzkCf,IA+Ca;AA/Cb,IAAAU,cAAA;AAAA;AAAA;AA+CO,IAAM,UAAoB;AAAA,MAChC,EAAE,KAAK,MAAM,OAAO,WAAW,OAAO,QAAQ;AAAA,MAC9C,EAAE,KAAK,QAAQ,OAAO,aAAa,OAAO,QAAQ;AAAA,MAClD,EAAE,KAAK,SAAS,OAAO,UAAU,OAAO,QAAQ;AAAA,MAChD,EAAE,KAAK,SAAS,OAAO,eAAe,OAAO,SAAS,OAAO,QAAQ;AAAA,MACrE,EAAE,KAAK,OAAO,OAAO,YAAY,OAAO,SAAS,OAAO,QAAQ;AAAA,MAChE,EAAE,KAAK,QAAQ,OAAO,UAAU,OAAO,SAAS,OAAO,QAAQ;AAAA,MAC/D,EAAE,KAAK,WAAW,OAAO,WAAW,OAAO,SAAS,OAAO,QAAQ;AAAA,MACnE,EAAE,KAAK,YAAY,OAAO,YAAY,OAAO,SAAS,OAAO,QAAQ;AAAA,MACrE,EAAE,KAAK,OAAO,OAAO,OAAO,OAAO,QAAQ,OAAO,QAAQ;AAAA,MAC1D,EAAE,KAAK,YAAY,OAAO,aAAa,OAAO,QAAQ,OAAO,QAAQ;AAAA,MACrE,EAAE,KAAK,QAAQ,OAAO,aAAa,OAAO,QAAQ,OAAO,QAAQ;AAAA,MACjE,EAAE,KAAK,QAAQ,OAAO,aAAa,OAAO,QAAQ,OAAO,QAAQ;AAAA,MACjE,EAAE,KAAK,UAAU,OAAO,eAAe,OAAO,QAAQ,OAAO,QAAQ;AAAA,MACrE,EAAE,KAAK,aAAa,OAAO,cAAc,OAAO,UAAU,OAAO,QAAQ;AAAA,MACzE,EAAE,KAAK,QAAQ,OAAO,aAAa,OAAO,QAAQ,OAAO,QAAQ;AAAA,MACjE,EAAE,KAAK,cAAc,OAAO,eAAe,OAAO,QAAQ;AAAA,MAC1D,EAAE,KAAK,aAAa,OAAO,eAAe,OAAO,SAAS,OAAO,QAAQ;AAAA,IAC1E;AAAA;AAAA;;;ACjEA,IAGaC,IA0BAC,cAKAC,cASAC,YAOAC,mBAaAC,eAOA,aAiBA,gBAQAC,aAWAC,aAOAC,aAMAC,eAMA,eAMAC,eAUA;AA7Ib,IAAAC,eAAA;AAAA;AAAA;AAGO,IAAMX,KAAI;AAAA,MAChB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AAEO,IAAMC,eAA8B;AAAA,MAC1C,YAAYD,GAAE;AAAA,MACd,WAAW;AAAA,IACZ;AAEO,IAAME,eAA8B;AAAA,MAC1C,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,IAAI;AAAA,IACL;AAEO,IAAMC,aAA4B;AAAA,MACxC,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,UAAU;AAAA,IACX;AAEO,IAAMC,oBAAmC;AAAA,MAC/C,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACT;AAEO,IAAMC,gBAA+B;AAAA,MAC3C,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,IAAI;AAAA,IACL;AAEO,IAAM,cAA8B;AAAA,MAC1C,UAAU;AAAA,MACV,wBAAwB;AAAA,QACvB,UAAU;AAAA,QACV,cAAc;AAAA,QACd,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,cAAc;AAAA,MACf;AAAA,MACA,uBAAuB;AAAA,QACtB,QAAQ;AAAA,MACT;AAAA,IACD;AAEO,IAAM,iBAAiC;AAAA,MAC7C,UAAU;AAAA,MACV,UAAU;AAAA,MACV,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,SAAS;AAAA,IACV;AAEO,IAAMC,cAA6B;AAAA,MACzC,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,IAAI;AAAA,IACL;AAEO,IAAMC,cAA6B;AAAA,MACzC,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,IAAI;AAAA,IACL;AAEO,IAAMC,cAA6B;AAAA,MACzC,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,WAAW,EAAE,iBAAiB,UAAU;AAAA,IACzC;AAEO,IAAMC,gBAA+B;AAAA,MAC3C,WAAW;AAAA,MACX,uCAAuC,EAAE,UAAU,UAAU;AAAA,MAC7D,qCAAqC,EAAE,UAAU,UAAU;AAAA,IAC5D;AAEO,IAAM,gBAAgC;AAAA,MAC5C,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAEO,IAAMC,gBAA+B;AAAA,MAC3C,OAAO;AAAA,MACP,4BAA4B;AAAA,QAC3B,cAAc;AAAA,QACd,UAAU;AAAA,QACV,QAAQ;AAAA,MACT;AAAA,MACA,yBAAyB,EAAE,IAAI,OAAO,UAAU,GAAG;AAAA,IACpD;AAEO,IAAM,aAA6B;AAAA,MACzC,WAAW;AAAA,MACX,IAAI;AAAA,MACJ,OAAOV,GAAE;AAAA,MACT,UAAU;AAAA,IACX;AAAA;AAAA;;;AClJA;AAAA;AAAA;AAAA;AA+DA,SAAS,OAAO,GAAmB;AAClC,MAAI,CAAC,KAAK,KAAK,EAAG,QAAO;AACzB,QAAM,IAAI,KAAK,MAAM,IAAI,IAAI;AAC7B,QAAM,IAAI,KAAK,MAAO,IAAI,OAAQ,EAAE;AACpC,QAAM,KAAK,KAAK,MAAM,IAAI,EAAE;AAC5B,SAAO,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,GAAG;AAClE;AAEA,SAAS,OAAO,KAAmB,KAAkB;AAvErD,MAAAY,KAAA;AAwEC,UAAQ,KAAK;AAAA,IACZ,KAAK;AAAM,aAAO,IAAI,WAAW;AAAA,IACjC,KAAK;AAAQ,aAAO,IAAI,YAAY;AAAA,IACpC,KAAK;AAAW,aAAO,IAAI,eAAe;AAAA,IAC1C,KAAK;AAAS,aAAO,IAAI,cAAc;AAAA,IACvC,KAAK;AAAS,cAAOA,MAAA,IAAI,eAAJ,OAAAA,MAAkB;AAAA,IACvC,KAAK;AAAO,cAAO,SAAI,kBAAJ,YAAqB;AAAA,IACxC,KAAK;AAAQ,cAAO,SAAI,gBAAJ,YAAmB;AAAA,IACvC,KAAK;AAAW,cAAO,SAAI,YAAJ,YAAe;AAAA,IACtC,KAAK;AAAY,cAAO,SAAI,aAAJ,YAAgB;AAAA,IACxC,KAAK;AAAO,cAAO,SAAI,eAAJ,YAAkB;AAAA,IACrC,KAAK;AAAY,cAAO,SAAI,yBAAJ,YAA4B;AAAA,IACpD,KAAK;AAAQ,cAAO,SAAI,oBAAJ,YAAuB;AAAA,IAC3C,KAAK;AAAQ,cAAO,SAAI,oBAAJ,YAAuB;AAAA,IAC3C,KAAK;AAAU,cAAO,SAAI,kBAAJ,YAAqB;AAAA,IAC3C,KAAK;AAAa,cAAO,SAAI,qBAAJ,YAAwB;AAAA,IACjD,KAAK;AAAQ,cAAO,SAAI,oBAAJ,YAAuB;AAAA,IAC3C,KAAK;AAAa,cAAO,SAAI,iBAAJ,YAAoB;AAAA,IAC7C,KAAK;AAAc,aAAO,IAAI,kBAAkB;AAAA,IAChD;AAAS,aAAO;AAAA,EACjB;AACD;AAEA,SAAS,gBAAgB,KAAmB,KAAqB;AAChE,QAAM,IAAI,OAAO,KAAK,GAAG;AACzB,QAAM,UAAU,CAAC,OAAO,YAAY,QAAQ,QAAQ,UAAU,aAAa,MAAM;AACjF,MAAI,QAAQ,SAAS,GAAG,EAAG,QAAO,OAAO,OAAO,CAAC,KAAK,CAAC;AACvD,MAAI,QAAQ,YAAa,QAAO,KAAK,OAAO,GAAG,CAAC,MAAM;AACtD,MAAI,QAAQ,aAAc,QAAO,QAAI,cAAAC,SAAM,CAAC,EAAE,OAAO,mBAAmB,IAAI;AAC5E,SAAO,KAAK,OAAO,KAAK,OAAO,CAAC;AACjC;AAEA,SAAS,YAAY,KAAuB;AAC3C,MAAI,CAAC,IAAK,QAAO,CAAC;AAClB,SAAO,OAAO,GAAG,EACf,MAAM,OAAO,EACb,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AACjB;AA9GA,IAAAC,gBACAC,mBAmBAC,sBACA,mBACAC,gBACAC,eACAC,8BACAC,sBACAC,oBAyLGC,sBAjGG,+BAoUA,wBAMC;AA5bP;AAAA;AAAA;AAAA,IAAAR,iBAAuE;AACvE,IAAAC,oBAkBO;AACP,IAAAC,uBAA6B;AAC7B,wBAA2B;AAC3B,IAAAC,iBAAuB;AACvB,IAAAC,gBAAkC;AAClC,IAAAC,+BAAqC;AACrC,IAAAC,uBAA6B;AAC7B,IAAAC,qBAA2B;AAE3B;AACA;AACA;AACA;AACA;AAEA,IAAAE;AACA,IAAAC;AAgLG,IAAAF,uBAAA;AAjGH,IAAM,oCAAgC,qBAAK,MAAM;AAChD,YAAM,CAAC,WAAW,YAAY,QAAI,6BAAuB,cAAAT,SAAM,EAAE,QAAQ,KAAK,CAAC;AAC/E,YAAM,CAAC,SAAS,UAAU,QAAI,6BAAuB,cAAAA,SAAM,CAAC;AAC5D,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAiB,OAAO;AAC5D,YAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,EAAE;AAEvC,YAAM,CAAC,SAAS,UAAU,QAAI,yBAAiB,OAAO;AACtD,YAAM,CAAC,OAAO,QAAQ,QAAI,yBAAgB,MAAM;AAChD,YAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,CAAC;AAClC,YAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,EAAE;AAEjD,YAAM,CAAC,eAAe,gBAAgB,QAAI,yBAA8B,IAAI;AAE5E,YAAM,EAAE,QAAQ,SAAS,OAAO,UAAU,aAAa,YAAY,IAClE,0BAA0B;AAE3B,YAAM,kBAAc;AAAA,QACnB,OAAO,IAAmB,OAAsB;AAC/C,gBAAM,WAAW,kBAAM;AACvB,gBAAM,SAAS,kBAAM;AACrB,cAAI,CAAC,YAAY,CAAC,QAAQ;AACzB,qBAAS,mBAAmB;AAC5B;AAAA,UACD;AACA,kBAAQ,CAAC;AACT,gBAAM,YAAY;AAAA,YACjB,YAAY,SAAS,OAAO,qBAAqB;AAAA,YACjD,UAAU,OAAO,OAAO,qBAAqB;AAAA,UAC9C,CAAC;AAAA,QACF;AAAA,QACA,CAAC,WAAW,SAAS,aAAa,QAAQ;AAAA,MAC3C;AAEA,oCAAU,MAAM;AACf,YAAI,aAAa,QAAS,aAAY;AAAA,MAEvC,GAAG,CAAC,CAAC;AAEL,YAAM,WAAW,CAAC,UAAkB;AACnC,sBAAc,KAAK;AACnB,cAAM,YAAQ,cAAAA,SAAM;AACpB,YAAI,KAAY;AAChB,cAAM,KAAY;AAClB,YAAI,UAAU,OAAQ,MAAK,MAAM,QAAQ,MAAM;AAAA,iBACtC,UAAU,QAAS,MAAK,MAAM,QAAQ,OAAO;AACtD,qBAAa,EAAE;AACf,mBAAW,EAAE;AACb,oBAAY,IAAI,EAAE;AAAA,MACnB;AAEA,YAAM,eAAW,wBAAQ,MAAM;AAC9B,YAAI,CAAC,OAAQ,QAAO;AACpB,cAAM,IAAI,OAAO,YAAY;AAC7B,eAAO,OAAO;AAAA,UACb,CAAC,OACC,EAAE,YAAY,IAAI,YAAY,EAAE,SAAS,CAAC,MAC1C,EAAE,WAAW,IAAI,YAAY,EAAE,SAAS,CAAC;AAAA,QAC5C;AAAA,MACD,GAAG,CAAC,QAAQ,MAAM,CAAC;AAEnB,YAAM,aAAS,wBAAQ,MAAM;AAC5B,eAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM;AACnC,gBAAM,KAAK,OAAO,GAAG,OAAO;AAC5B,gBAAM,KAAK,OAAO,GAAG,OAAO;AAC5B,cAAI,OAAO,OAAO,YAAY,OAAO,OAAO,UAAU;AACrD,mBAAO,UAAU,QAAQ,KAAK,KAAK,KAAK;AAAA,UACzC;AACA,iBAAO,UAAU,QACd,OAAO,EAAE,EAAE,cAAc,OAAO,EAAE,CAAC,IACnC,OAAO,EAAE,EAAE,cAAc,OAAO,EAAE,CAAC;AAAA,QACvC,CAAC;AAAA,MACF,GAAG,CAAC,UAAU,SAAS,KAAK,CAAC;AAE7B,YAAM,QAAQ,OAAO,MAAM,OAAO,aAAa,OAAO,cAAc,WAAW;AAE/E,YAAM,aAAa,CAAC,QAAgB;AACnC,iBAAS,YAAY,OAAO,UAAU,QAAQ,SAAS,KAAK;AAC5D,mBAAW,GAAG;AAAA,MACf;AAEA,YAAM,eAAe,YAAY;AAChC,YAAI,CAAC,aAAa,CAAC,SAAS;AAC3B,mBAAS,mBAAmB;AAC5B;AAAA,QACD;AACA,YAAI;AACH,gBAAM,YAAY;AAAA,YACjB,YAAY,UAAU,OAAO,qBAAqB;AAAA,YAClD,UAAU,QAAQ,OAAO,qBAAqB;AAAA,UAC/C,CAAC;AAAA,QACF,SAAS,KAAU;AAClB,oBAAS,2BAAK,YAAW,wBAAwB;AAAA,QAClD;AAAA,MACD;AAEA,UAAI,eAAe;AAClB,eACC;AAAA,UAAC;AAAA;AAAA,YACA,UAAU;AAAA,YACV,QAAQ,MAAM,iBAAiB,IAAI;AAAA,YACnC,kBAAkB;AAAA,YAClB,gBAAgB;AAAA,YAChB,mBAAmB;AAAA,YACnB,MAAK;AAAA;AAAA,QACN;AAAA,MAEF;AAEA,aACC,8CAAC,qDAAqB,aAAa,mCAClC,yDAAC,yBAAI,IAAIY,cACR;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAM;AAAA,YACN,SACC,+CAAC,2BAAM,WAAU,OAAM,YAAW,UAAS,SAAS,GACnD;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,MAAK;AAAA,kBACL,OAAO;AAAA,kBACP,UAAU,CAAC,MAAM;AAChB,8BAAU,EAAE,OAAO,KAAK;AACxB,4BAAQ,CAAC;AAAA,kBACV;AAAA,kBACA,aAAY;AAAA,kBACZ,IAAI;AAAA,kBACJ,cACC,8CAAC,oCAAe,UAAS,OACxB,wDAAC,eAAAC,SAAA,EAAW,IAAI,EAAE,UAAU,IAAI,OAAO,OAAO,GAAG,GAClD;AAAA;AAAA,cAEF;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAW,8CAAC,qBAAAC,SAAA,EAAiB,IAAI,EAAE,UAAU,UAAU,GAAG;AAAA,kBAC1D,UAAU,CAAC,OAAO;AAAA,kBAClB,SAAS;AAAA,kBACT;AAAA;AAAA,cAED;AAAA,eACD;AAAA;AAAA,QAEF;AAAA,QAEA,+CAAC,yBAAI,IAAIC,cACR;AAAA;AAAA,YAAC;AAAA;AAAA,cACA,OAAO;AAAA,cACP,UAAU,CAAC,QAAQ;AAClB,6BAAa,GAAmB;AAChC,8BAAc,QAAQ;AAAA,cACvB;AAAA,cACA,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,IAAIC,cAAa,EAAE;AAAA;AAAA,UAC7D;AAAA,UACA,8CAAC,yBAAI,WAAU,QAAO,IAAI,EAAE,UAAU,IAAI,OAAOC,GAAE,GAAG,GAAG,gBAEzD;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACA,OAAO;AAAA,cACP,UAAU,CAAC,QAAQ;AAClB,2BAAW,GAAmB;AAC9B,8BAAc,QAAQ;AAAA,cACvB;AAAA,cACA,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,IAAID,cAAa,EAAE;AAAA;AAAA,UAC7D;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACA,SAAS,eAAe,UAAU,YAAY;AAAA,cAC9C,SAAS,MAAM,SAAS,OAAO;AAAA,cAC/B;AAAA;AAAA,UAED;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACA,SAAS,eAAe,SAAS,YAAY;AAAA,cAC7C,SAAS,MAAM,SAAS,MAAM;AAAA,cAC9B;AAAA;AAAA,UAED;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACA,SAAS,eAAe,UAAU,YAAY;AAAA,cAC9C,SAAS,MAAM,SAAS,OAAO;AAAA,cAC/B;AAAA;AAAA,UAED;AAAA,UACA,8CAAC,aAAU,SAAQ,YAAW,SAAS,MAAM,YAAY,GAAG,oBAE5D;AAAA,WACD;AAAA,QAEC,SACA,8CAAC,2BAAM,UAAS,SAAQ,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,GAAG,SAAS,MAAM,SAAS,EAAE,GAC1E,iBACF;AAAA,QAGD,+CAAC,yBAAI,IAAIE,YACP;AAAA,qBACA,8CAAC,yBAAI,IAAIC,mBACR,wDAAC,sCAAiB,GACnB;AAAA,UAGD,+CAAC,2BAAM,WAAW,GAAG,IAAIC,eACxB;AAAA,0DAAC,oCACA,yDAAC,2BAAM,MAAK,SAAQ,IAAI,aACvB;AAAA,4DAAC,+BACA,yDAAC,8BACC;AAAA,wBAAQ,IAAI,CAAC,QACb,8CAAC,+BAAwB,OAAO,IAAI,SAAS,QAAQ,IAAIC,aACxD;AAAA,kBAAC;AAAA;AAAA,oBACA,QAAQ,YAAY,IAAI;AAAA,oBACxB,WAAW,YAAY,IAAI,MAAM,QAAQ;AAAA,oBACzC,SAAS,MAAM,WAAW,IAAI,GAAG;AAAA,oBAEhC,cAAI;AAAA;AAAA,gBACN,KAPe,IAAI,GAQpB,CACA;AAAA,gBACD,8CAAC,+BAAU,IAAI,iCAAKA,cAAL,EAAiB,OAAO,GAAG,IAAG,oBAAM;AAAA,iBACpD,GACD;AAAA,cACA,+CAAC,+BACC;AAAA,sBAAM,IAAI,CAAC,KAAK,QAChB;AAAA,kBAAC;AAAA;AAAA,oBAEA,OAAK;AAAA,oBACL,SAAS,MAAM,iBAAiB,GAAG;AAAA,oBACnC,IAAIC;AAAA,oBAEH;AAAA,8BAAQ,IAAI,CAAC,QAAQ;AACrB,4BAAI,IAAI,QAAQ,SAAS;AACxB,gCAAM,SAAS,YAAY,IAAI,UAAU;AACzC,gCAAM,QAAQ,OAAO,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI;AAC1C,gCAAM,WAAW,OAAO,SAAS;AACjC,gCAAM,UAAU,WAAW,GAAG,KAAK,WAAM;AACzC,gCAAM,QAAQ,OAAO,KAAK,IAAI,KAAK;AACnC,iCACC;AAAA,4BAAC;AAAA;AAAA,8BAEA,OAAO,IAAI,SAAS;AAAA,8BACpB,IAAI,iCAAKC,cAAL,EAAiB,UAAU,IAAI;AAAA,8BAEnC,wDAAC,6BAAQ,OAAc,WAAU,OAAM,OAAK,MAC3C,wDAAC,yBAAI,WAAU,QAAO,IAAI,gBACxB,qBAAW,UACb,GACD;AAAA;AAAA,4BARK,IAAI;AAAA,0BASV;AAAA,wBAEF;AACA,4BAAI,IAAI,QAAQ,cAAc;AAC7B,gCAAM,OAAO,gBAAgB,KAAK,IAAI,GAAG;AACzC,iCACC;AAAA,4BAAC;AAAA;AAAA,8BAEA,OAAO,IAAI,SAAS;AAAA,8BACpB,IAAI,iCAAKA,cAAL,EAAiB,YAAY,SAAS;AAAA,8BAEzC;AAAA;AAAA,4BAJI,IAAI;AAAA,0BAKV;AAAA,wBAEF;AACA,4BAAI,IAAI,QAAQ,QAAQ;AACvB,gCAAM,OAAO,gBAAgB,KAAK,IAAI,GAAG;AACzC,iCACC;AAAA,4BAAC;AAAA;AAAA,8BAEA,OAAO,IAAI,SAAS;AAAA,8BACpB,IAAI,iCAAKA,cAAL,EAAiB,UAAU,IAAI;AAAA,8BAEnC,wDAAC,6BAAQ,OAAO,QAAQ,IAAI,WAAU,OAAM,OAAK,MAChD,wDAAC,yBAAI,WAAU,QAAO,IAAI,gBACxB,gBACF,GACD;AAAA;AAAA,4BARK,IAAI;AAAA,0BASV;AAAA,wBAEF;AACA,+BACC,8CAAC,+BAAwB,OAAO,IAAI,SAAS,QAAQ,IAAIA,aACvD,0BAAgB,KAAK,IAAI,GAAG,KADd,IAAI,GAEpB;AAAA,sBAEF,CAAC;AAAA,sBACD,8CAAC,+BAAU,IAAIA,aAAY,OAAM,UAChC;AAAA,wBAAC;AAAA;AAAA,0BACA,MAAK;AAAA,0BACL,SAAS,CAAC,MAAM;AACf,8BAAE,gBAAgB;AAClB,6CAAiB,GAAG;AAAA,0BACrB;AAAA,0BACA,IAAI,EAAE,OAAON,GAAE,KAAK;AAAA,0BAEpB,wDAAC,kBAAAO,SAAA,EAAe,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,sBACvC,GACD;AAAA;AAAA;AAAA,kBAvEK,IAAI,WAAW;AAAA,gBAwErB,CACA;AAAA,gBACA,MAAM,WAAW,KAAK,CAAC,WACvB,8CAAC,8BACA,wDAAC,+BAAU,SAAS,QAAQ,SAAS,GAAG,IAAI,YAAY,2BAExD,GACD;AAAA,iBAEF;AAAA,eACD,GACD;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACA,WAAU;AAAA,gBACV,OAAO,SAAS;AAAA,gBAChB;AAAA,gBACA,cAAc,CAAC,GAAG,MAAM,QAAQ,CAAC;AAAA,gBACjC;AAAA,gBACA,qBAAqB,CAAC,MAAM;AAC3B,iCAAe,SAAS,EAAE,OAAO,OAAO,EAAE,CAAC;AAC3C,0BAAQ,CAAC;AAAA,gBACV;AAAA,gBACA,oBAAoB,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,gBACtC,IAAIC;AAAA;AAAA,YACL;AAAA,aACD;AAAA,WACD;AAAA,SACD,GACD;AAAA,IAEF,CAAC;AAED,IAAM,yBAAmC,MACxC,8CAAC,eACA,wDAAC,iCAA8B,GAChC;AAGD,IAAO,iCAAQ;AAAA;AAAA;;;AC5bf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACyBA,IAAM,kBAAN,MAAsD;AAAA,EAAtD;AACC,wBAAQ,UAAoC;AAC5C,wBAAQ,YAA0B;AAClC,wBAAQ,WAAkB;AAC1B,wBAAQ,cAAoD;AAAA;AAAA,EAE5D,MAAM,KAAK,QAAiD;AAC3D,SAAK,SAAS;AAAA,MACb,eAAe;AAAA,MACf,WAAW;AAAA,MACX,eAAe;AAAA,OACZ;AAGJ,SAAK,UAAU,OAAO,YAAY,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS;AAE3F,UAAM,SAAS,MAAM,KAAK,aAAa;AAEvC,SAAK,mBAAmB;AAExB,WAAO;AAAA,EACR;AAAA,EAEA,gBAAyB;AACxB,WAAO,KAAK,WAAW,QAAQ,KAAK,aAAa;AAAA,EAClD;AAAA,EAEA,YAAuC;AACtC,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,cAA6B;AAC5B,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,MAAc,eAAoC;AA5DnD,QAAAC;AA6DE,QAAI,CAAC,KAAK,QAAQ;AACjB,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAC/C;AAOA,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,YAAY,sBAAsB;AAAA;AAAA,QAC9D,QAAQ;AAAA,QACR,SAAS;AAAA,UACT,gBAAgB;AAAA,QAChB;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACpB,QAAQ,QAAOA,MAAA,KAAK,OAAO,YAAZ,OAAAA,MAAuB,EAAE;AAAA;AAAA,UAExC,UAAU,KAAK,OAAO;AAAA,QACvB,CAAC;AAAA,MACF,CAAC;AAOD,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAK,WAAW,KAAK;AAGrB,aAAO;AAAA,IACR,SAAS,OAAO;AAEf,YAAM;AAAA,IACP;AAAA,EACD;AAAA,EAEA,MAAc,YAAY,KAAa,SAAyC;AAnGjF,QAAAA;AAoGE,UAAM,UAAU,GAAG,KAAK,OAAO,GAAG,GAAG;AACrC,UAAM,eAAaA,MAAA,KAAK,WAAL,gBAAAA,IAAa,kBAAiB;AAEjD,aAAS,UAAU,GAAG,WAAW,YAAY,WAAW;AACvD,UAAI;AACH,cAAM,WAAW,MAAM,MAAM,SAAS,OAAO;AAC7C,eAAO;AAAA,MACR,SAAS,OAAO;AACf,YAAI,YAAY,YAAY;AAC3B,gBAAM;AAAA,QACP;AAEA,cAAM,QAAQ,KAAK,IAAI,MAAO,KAAK,IAAI,GAAG,UAAU,CAAC,GAAG,GAAK;AAC7D,cAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,KAAK,CAAC;AAAA,MAC1D;AAAA,IACD;AAEA,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACvC;AAAA,EAEQ,qBAA2B;AAClC,QAAI,KAAK,YAAY;AACpB,oBAAc,KAAK,UAAU;AAAA,IAC9B;AAAA,EAGD;AAED;AAEO,IAAM,eAAe,IAAI,gBAAgB;AAEhD,IAAI,OAAO,WAAW,aAAa;AAClC,EAAC,OAAe,eAAe;AAChC;;;ADrIA;;;AEDA,IAAAC,gBAAsC;AAEtC;AAEA;AAEA;AACA,IAAAC,gBAA8B;AAE9B;AACA;AAqBO,IAAM,YAAY,MAAM;AAC9B,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAE5C,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAE5C,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAE5C,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAS,IAAI;AAEvC,QAAM,CAAC,MAAM,OAAO,QAAI,wBAAS,IAAI;AAErC,QAAM,EAAE,UAAU,IAAI,SAAS;AAE/B,QAAM,mBAAe,2BAAY,YAAY;AA5C9C,QAAAC,KAAA;AA6CE,eAAW,IAAI;AAEf,QAAI;AACH,YAAM,cAAc,KAAK,UAAU,WAAW;AAAA,IAC/C,SAAS,KAAU;AAClB,YAAM,YAAU,MAAAA,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,mBAAqB,YAAW;AAChD,gBAAU,SAAS,OAAO;AAAA,IAC3B,UAAE;AACD,sBAAgB,qBAAqB;AACrC,uCAAc,WAAW;AACzB,iBAAW,IAAI;AACf,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACN,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;ACpEA,IAAAC,gBAAsC;AAEtC;AAEA;AAEA;AACA,IAAAC,gBAA2B;AAC3B;AAiCO,IAAM,aAAa,MAAM;AAC/B,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAE5C,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAE5C,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAE5C,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAS,IAAI;AAEvC,QAAM,CAAC,MAAM,OAAO,QAAI,wBAAS,IAAI;AAErC,QAAM,oBAAgB;AAAA,IACrB,OAAOC,QAAuB,CAAC,MAAM;AArDvC,UAAAC,KAAA;AAsDG,YAAM,YAAQ,0BAAW,WAAW;AAEpC,iBAAW,IAAI;AAEf,YAAM,UAAU;AAAA,QACf,UAAS,WAAAD,SAAA,gBAAAA,MAAM,YAAN,aAAiBC,MAAA,+BAAO,aAAP,gBAAAA,IAAiB,YAAlC,YAA6C;AAAA,QACtD,WAAU,WAAAD,SAAA,gBAAAA,MAAM,aAAN,YAAkB,+BAAO,YAAzB,YAAoC;AAAA,QAC9C,eAAc,KAAAA,SAAA,gBAAAA,MAAM,iBAAN,YAAsB;AAAA,QACpC,gBAAe,KAAAA,SAAA,gBAAAA,MAAM,kBAAN,YAAuB;AAAA,QACtC,eAAc,KAAAA,SAAA,gBAAAA,MAAM,iBAAN,YAAsB;AAAA,QACpC,gBAAe,KAAAA,SAAA,gBAAAA,MAAM,kBAAN,YAAuB;AAAA,QACtC,gBAAe,WAAAA,SAAA,gBAAAA,MAAM,kBAAN,aAAuB,oCAAO,aAAP,mBAAiB,iBAAxC,YAAwD;AAAA,QACvE,gBAAe,KAAAA,SAAA,gBAAAA,MAAM,kBAAN,YAAuB;AAAA,QACtC,oBAAmB,WAAAA,SAAA,gBAAAA,MAAM,sBAAN,aAA2B,oCAAO,aAAP,mBAAiB,YAA5C,YAAuD;AAAA,QAC1E,mBAAkB,KAAAA,SAAA,gBAAAA,MAAM,qBAAN,YAA0B;AAAA,QAC5C,cAAa,KAAAA,SAAA,gBAAAA,MAAM,gBAAN,YAAqB;AAAA,QAClC,cAAa,KAAAA,SAAA,gBAAAA,MAAM,gBAAN,YAAqB;AAAA,QAClC,SAAQ,KAAAA,SAAA,gBAAAA,MAAM,WAAN,YAAgB;AAAA,MACzB;AAEA,aAAO,cACL,KAAK,UAAU,UAAU,OAAO,EAChC,KAAK,CAAC,QAAQ;AACd,wBAAgB,qBAAqB;AACrC,wBAAgB,QAAQ;AAExB,gBAAQ,2BAAK,IAAI;AAEjB,mBAAW,IAAI;AAEf,eAAO,2BAAK;AAAA,MACb,CAAC,EACA,MAAM,CAAC,QAAQ;AAtFpB,YAAAC;AAuFK,mBAAW,IAAI;AAEf,iBAAS,GAAG;AAEZ,gBAAOA,MAAA,2BAAK,aAAL,gBAAAA,IAAe;AAAA,MACvB,CAAC,EACA,QAAQ,MAAM;AACd,mBAAW,KAAK;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,IACA,CAAC;AAAA,EACF;AAEA,SAAO;AAAA,IACN;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AC5GA,IAAAC,gBAAsC;AAEtC;AACA;AAEA;AACA,IAAAC,gBAA2B;AAC3B;AA6BO,IAAM,iBAAiB,MAAM;AACnC,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAE5C,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAE5C,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAE5C,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAS,IAAI;AAEvC,QAAM,CAAC,MAAM,OAAO,QAAI,wBAAS,IAAI;AAErC,QAAM,sBAAkB,2BAAY,OAAOC,UAA2B;AA/CvE,QAAAC,KAAA;AAgDE,UAAM,YAAQ,0BAAW,WAAW;AACpC,UAAM,UAASA,MAAA,+BAAO,aAAP,gBAAAA,IAAiB;AAEhC,eAAW,IAAI;AAEf,QAAI,WAAW,UAAU,WAAW,YAAY,WAAW,UAAU;AAIpE,YAAM,YAAY,gBAAgB,SAAS;AAC3C,YAAM,eAAe,WAAW;AAEhC,UAAI,iBAAiB;AACrB,UAAID,SAAA,gBAAAA,MAAM,gBAAgB;AACzB,yBAAiBA,MAAK;AAAA,MACvB,YAAW,eAAU,cAAV,mBAAqB,yBAAyB;AACxD,YAAI,cAAc;AACjB,cAAI,UAAU,cAAc;AAC3B,6BAAiB,UAAU;AAAA,UAC5B,YAAW,oCAAO,aAAP,mBAAiB,SAAS;AACpC,6BAAiB,MAAM,SAAS;AAChC,4BAAgB,gBAAgB,cAAc;AAAA,UAC/C;AAAA,QACD,WAAW,UAAU,cAAc;AAClC,0BAAgB,gBAAgB,IAAI;AAAA,QACrC;AAAA,MACD,WAAW,UAAU,cAAc;AAClC,wBAAgB,gBAAgB,IAAI;AAAA,MACrC;AAEA,YAAM,UAAU;AAAA,QACf,cAAcA,SAAA,gBAAAA,MAAM;AAAA,QACpB,OAAM,WAAAA,SAAA,gBAAAA,MAAM,SAAN,YAAc,+BAAO,YAArB,YAAgC;AAAA,QACtC,cAAa,KAAAA,SAAA,gBAAAA,MAAM,gBAAN,YAAqB;AAAA,QAClC,UAAS,gDAAO,aAAP,mBAAiB,YAAjB,YAA4BA,SAAA,gBAAAA,MAAM,YAAlC,YAA6C;AAAA,QACtD,eAAc,KAAAA,SAAA,gBAAAA,MAAM,iBAAN,YAAsB;AAAA,QACpC,cAAa,KAAAA,SAAA,gBAAAA,MAAM,gBAAN,YAAqB;AAAA,QAClC,SAAQ,KAAAA,SAAA,gBAAAA,MAAM,WAAN,YAAgB;AAAA,QACxB,WAAU,KAAAA,SAAA,gBAAAA,MAAM,aAAN,YAAkB;AAAA,QAC5B,iBAAe,iBAAAA,SAAA,gBAAAA,MAAM,mBAAN,YAAwBA,MAAK,mBAA7B,YAA+C,mBAA/C,YAAiE;AAAA,MACjF;AAEA,aAAO,cACL,KAAK,UAAU,eAAe,OAAO,EACrC,KAAK,CAAC,QAAQ;AACd,wBAAgB,qBAAqB;AACrC,gBAAQ,2BAAK,IAAI;AAEjB,mBAAW,IAAI;AAEf,eAAO,2BAAK;AAAA,MACb,CAAC,EACA,MAAM,CAAC,QAAQ;AApGpB,YAAAC;AAqGK,mBAAW,IAAI;AAEf,iBAAS,GAAG;AAEZ,gBAAOA,MAAA,2BAAK,aAAL,gBAAAA,IAAe;AAAA,MACvB,CAAC,EACA,QAAQ,MAAM;AACd,mBAAW,KAAK;AAAA,MACjB,CAAC;AAAA,IACH,OAAO;AACN,iBAAW,KAAK;AAChB,YAAM,oBAAoB;AAAA,IAC3B;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACN;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AJtHA;;;AKNA,IAAAC,gBAAoC;AACpC;AAEO,IAAM,2BAA2B,MAAM;AAC7C,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAA6B,gBAAgB,gBAAgB,CAAC;AAExF,+BAAU,MAAM;AACf,UAAM,cAAc,gBAAgB,UAAU,MAAM;AACnD,eAAS,gBAAgB,gBAAgB,CAAC;AAAA,IAC3C,CAAC;AAED,WAAO;AAAA,EACR,GAAG,CAAC,CAAC;AAEL,SAAO;AACR;;;ACfA,IAAAC,gBAAoC;AACpC;AAGO,SAAS,cAAwB;AACvC,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAmB,gBAAgB,SAAS,CAAC;AAEvE,+BAAU,MAAM;AACf,UAAM,cAAc,gBAAgB,UAAU,MAAM;AACnD,eAAS,gBAAgB,SAAS,CAAC;AAAA,IACpC,CAAC;AAED,WAAO;AAAA,EACR,GAAG,CAAC,CAAC;AAEL,SAAO;AACR;;;AChBA,IAAAC,gBAAsC;AAEtC;AACA;AA8CO,IAAM,oBAAoB,MAA+B;AAC/D,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAc,IAAI;AAC5C,QAAM,CAAC,MAAM,OAAO,QAAI,wBAAc,IAAI;AAE1C,QAAM,aAAa,MAAM;AACxB,eAAW,KAAK;AAChB,eAAW,KAAK;AAChB,aAAS,IAAI;AAAA,EACd;AAGA,QAAMC,uBAAkB,2BAAY,OAAO,YAAoC;AAC9E,eAAW;AACX,eAAW,IAAI;AAEf,WAAO,cACL,KAAK,UAAU,wBAAwB,OAAO,EAC9C,KAAK,CAAC,QAAQ;AACd,cAAQ,2BAAK,IAAI;AACjB,iBAAW,IAAI;AACf,aAAO,2BAAK;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AA1EnB,UAAAC;AA2EI,iBAAW,IAAI;AACf,eAAS,GAAG;AACZ,cAAOA,MAAA,2BAAK,aAAL,gBAAAA,IAAe;AAAA,IACvB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAW,KAAK;AAAA,IACjB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAGL,QAAMC,sBAAiB,2BAAY,OAAO,YAAmC;AAC5E,eAAW;AACX,eAAW,IAAI;AAEf,WAAO,cACL,KAAK,UAAU,uBAAuB,OAAO,EAC7C,KAAK,CAAC,QAAQ;AACd,cAAQ,2BAAK,IAAI;AACjB,iBAAW,IAAI;AACf,aAAO,2BAAK;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AAhGnB,UAAAD;AAiGI,iBAAW,IAAI;AACf,eAAS,GAAG;AACZ,cAAOA,MAAA,2BAAK,aAAL,gBAAAA,IAAe;AAAA,IACvB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAW,KAAK;AAAA,IACjB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAOL,QAAM,iBAAa,2BAAY,OAAO,YAA+B;AACpE,eAAW;AACX,eAAW,IAAI;AAEf,WAAO,cACL,KAAK,UAAU,6BAA6B,OAAO,EACnD,KAAK,CAAC,QAAQ;AACd,cAAQ,2BAAK,IAAI;AACjB,iBAAW,IAAI;AACf,aAAO,2BAAK;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AA1HnB,UAAAA;AA2HI,iBAAW,IAAI;AACf,eAAS,GAAG;AACZ,cAAOA,MAAA,2BAAK,aAAL,gBAAAA,IAAe;AAAA,IACvB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAW,KAAK;AAAA,IACjB,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACN,iBAAAD;AAAA,IACA,gBAAAE;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;APpIA;;;AQVA,IAAAC,iBAAkC;;;ACAlC,IAAAC,kBAAoB;AACpB,IAAAC,gBAAkB;AAClB,2BAA0B;AAC1B,mBAAkB;AAClB,+BAA8B;AAC9B,oBAAmB;AACnB,iBAAgB;AAChB,oBAAmB;AACnB,IAAAC,gBAAkB;AAClB,qBAAoB;AACpB,mBAAkB;AAClB,IAAAC,oBAAsB;AACtB,IAAAC,uBAAyB;AACzB,IAAAC,iCAAmC;AACnC,IAAAC,mBAAqB;AACrB,0BAAyB;AACzB,yBAAwB;AACxB,sBAAqB;AACrB,sBAAqB;AACrB,IAAAC,mBAcO;AACP,IAAAC,iBAAmD;;;AChCnD,sBAAqB;AACrB,kBAAiB;AACjB,qBAAoB;AACpB,uBAAsB;AACtB,mBAAkB;AAClB,4BAA2B;AAC3B,mBAAkB;AAClB,2BAA0B;AAC1B,uBAAsB;AACtB,6BAA4B;AAC5B,qBAAoB;AACpB,0BAAyB;AACzB,oCAAmC;AACnC,sBAAqB;AACrB,IAAAC,mBAqBO;AAEP,IAAAC,iBAAoD;AAGpD;;;ACxCA,IAAAC,gBAAwC;AAExC;AACA;AAWA,IAAM,eAAe;AAAA,EACpB,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AACP;AAEA,IAAM,UAAU,CAAC,OAA4B,WAA2C;AACvF,MAAI,OAAO,SAAS,aAAa;AAChC,WAAO,iCACH,QADG;AAAA,MAEN,WAAW,OAAO;AAAA,IACnB;AAAA,EACD,WAAW,OAAO,SAAS,aAAa;AACvC,WAAO,iCACH,QADG;AAAA,MAEN,WAAW;AAAA,MACX,MAAM,OAAO;AAAA,IACd;AAAA,EACD,WAAW,OAAO,SAAS,WAAW;AACrC,WAAO,iCACH,QADG;AAAA,MAEN,SAAS;AAAA,MACT,OAAO,OAAO;AAAA,IACf;AAAA,EACD,WAAW,OAAO,SAAS,SAAS;AACnC,WAAO;AAAA,MACN,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,MACT,OAAO;AAAA,MACP,MAAM;AAAA,IACP;AAAA,EACD;AACA,QAAM,MAAM,iBAAiB;AAC9B;AAEO,IAAM,gBAAgB,CAC5B,QAAwB,CAAC,MACqD;AAC9E,QAAM,EAAE,YAAY,MAAM,UAAU,KAAK,IAAI;AAE7C,QAAM,EAAE,UAAU,IAAI,SAAS;AAE/B,QAAM,CAAC,OAAO,QAAQ,QAAI,0BAAW,SAAS,YAAY;AAE1D,QAAM,iBAAa;AAAA,IAClB,CAAC,KAAa,SAAS,CAAC,MAAM;AAC7B,eAAS;AAAA,QACR,MAAM;AAAA,QACN,SAAS;AAAA,MACV,CAAC;AAED,oBACE,IAAI,KAAK,MAAM,EACf,KAAK,CAAC,QAAQ;AAxEnB,YAAAC,KAAA;AAyEK,aAAIA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,SAAS;AACtB,mBAAS;AAAA,YACR,MAAM;AAAA,YACN,SAAS,IAAI;AAAA,UACd,CAAC;AAED,iDAAY,IAAI,MAAM;AAAA,QACvB,OAAO;AACN,mBAAS;AAAA,YACR,MAAM;AAAA,YACN,SAAS,IAAI;AAAA,UACd,CAAC;AAED,qBAAU,SAAI,SAAJ,mBAAU,SAAS,OAAO;AAEpC,6CAAU,IAAI,MAAM;AAAA,QACrB;AAAA,MACD,CAAC,EACA,MAAM,CAAC,QAAQ;AA3FpB,YAAAA,KAAA;AA4FK,cAAM,QAAQ;AAAA,UACb,SAAQ,MAAAA,MAAA,IAAI,aAAJ,gBAAAA,IAAc,WAAd,YAAwB;AAAA,UAChC,WACC,eAAI,aAAJ,mBAAc,SAAd,mBAAoB,aACpB,eAAI,aAAJ,mBAAc,SAAd,mBAAoB,YACpB,IAAI,WACJ;AAAA,UACD,OAAM,eAAI,aAAJ,mBAAc,SAAd,YAAsB;AAAA,UAC5B,aAAY,eAAI,aAAJ,mBAAc,eAAd,YAA4B;AAAA,UACxC,OAAM,gCAAK,SAAL,YAAa;AAAA,UACnB,OAAM,gCAAK,SAAL,YAAa;AAAA,QACpB;AAEA,kBAAU,MAAM,SAAS,OAAO;AAEhC,iBAAS;AAAA,UACR,MAAM;AAAA,UACN,SAAS;AAAA,QACV,CAAC;AAED,2CAAU,OAAO;AAAA,MAClB,CAAC,EACA,QAAQ,MAAM;AACd,iBAAS;AAAA,UACR,MAAM;AAAA,UACN,SAAS;AAAA,QACV,CAAC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,CAAC,WAAW,SAAS,SAAS;AAAA,EAC/B;AAEA,SAAO,CAAC,YAAY,KAAK;AAC1B;AAEO,IAAM,iBAAiB,CAC7B,QAAwB,CAAC,MAIrB;AACJ,QAAM,EAAE,YAAY,MAAM,UAAU,MAAM,uBAAuB,MAAM,IAAI;AAE3E,QAAM,EAAE,UAAU,IAAI,SAAS;AAE/B,QAAM,CAAC,OAAO,QAAQ,QAAI,0BAAW,SAAS,YAAY;AAE1D,QAAM,kBAAc;AAAA,IACnB,OAAO,KAAa,SAAY,SAAS,CAAC,MAAM;AA5IlD,UAAAA,KAAA;AA6IG,eAAS;AAAA,QACR,MAAM;AAAA,QACN,SAAS;AAAA,MACV,CAAC;AAED,UAAI;AACH,YAAI;AACH,gBAAM,MAAM,MAAM,cAAc,KAAK,KAAK,SAAS,MAAM;AACzD,mBAAS;AAAA,YACR,MAAM;AAAA,YACN,SAAS,IAAI;AAAA,UACd,CAAC;AAED,iDAAY,IAAI,MAAM;AACtB,cAAI,CAAC,sBAAsB;AAC1B,uBAAUA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,SAAS,SAAS;AAAA,UACvC;AAAA,QACD,SAAS,KAAU;AAClB,gBAAM,QAAQ;AAAA,YACb,SAAQ,eAAI,aAAJ,mBAAc,WAAd,YAAwB;AAAA,YAChC,WACC,eAAI,aAAJ,mBAAc,SAAd,mBAAoB,aACpB,eAAI,aAAJ,mBAAc,SAAd,mBAAoB,YACpB,IAAI,WACJ;AAAA,YACD,OAAM,eAAI,aAAJ,mBAAc,SAAd,YAAsB;AAAA,YAC5B,aAAY,eAAI,aAAJ,mBAAc,eAAd,YAA4B;AAAA,YACxC,OAAM,gCAAK,SAAL,YAAa;AAAA,YACnB,OAAM,gCAAK,SAAL,YAAa;AAAA,UACpB;AAEA,oBAAU,MAAM,SAAS,OAAO;AAEhC,mBAAS;AAAA,YACR,MAAM;AAAA,YACN,SAAS;AAAA,UACV,CAAC;AAED,6CAAU,OAAO;AAAA,QAClB;AAAA,MACD,UAAE;AACD,iBAAS;AAAA,UACR,MAAM;AAAA,UACN,SAAS;AAAA,QACV,CAAC;AAAA,MACF;AAAA,IACD;AAAA,IACA,CAAC,WAAW,SAAS,SAAS;AAAA,EAC/B;AAEA,SAAO,CAAC,aAAa,KAAK;AAC3B;;;ADnJA;AACA;AACA;;;AE/CA,IAAAC,mBAAkC;AAElC,IAAM,YAAY,CAAC;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AACF,MAQK;AACH,QAAM,YAAQ,2BAAS;AACvB,SAAO;AAAA,IACL,UAAU;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,WAAW;AAAA,QACT,WAAW;AAAA,QACX,QAAQ,aAAa,MAAM,QAAQ,QAAQ,IAAI;AAAA,MACjD;AAAA,MACA,YAAY;AAAA,QACV,SAAS;AAAA,QACT,WAAW,sBAAsB,MAAM,QAAQ,QAAQ,KAAK;AAAA,MAC9D;AAAA,OACG;AAAA,IAEL,SAAS;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,cAAc;AAAA,MACd,WAAW;AAAA,MACX,QAAQ,aAAa,MAAM,QAAQ,QAAQ,IAAI;AAAA,MAC/C,QAAQ;AAAA,MACR,WAAW;AAAA,QACT,WAAW;AAAA,QACX,QAAQ,aAAa,MAAM,QAAQ,QAAQ,IAAI;AAAA,MACjD;AAAA,MACA,YAAY;AAAA,QACV,SAAS;AAAA,QACT,WAAW,sBAAsB,MAAM,QAAQ,QAAQ,KAAK;AAAA,MAC9D;AAAA,OACG;AAAA,IAEL,UAAU;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,cAAc;AAAA,MACd,iBAAiB,MAAM,QAAQ,KAAK,GAAG;AAAA,MACvC,WAAW,eAAe,MAAM,QAAQ,QAAQ,KAAK;AAAA,MACrD,QAAQ,aAAa,MAAM,QAAQ,QAAQ,IAAI;AAAA,MAC/C,QAAQ;AAAA,MACR,WAAW;AAAA,QACT,WAAW,eAAe,MAAM,QAAQ,QAAQ,IAAI;AAAA,QACpD,QAAQ,aAAa,MAAM,QAAQ,QAAQ,IAAI;AAAA,MACjD;AAAA,MACA,YAAY;AAAA,QACV,SAAS;AAAA,QACT,WAAW,sBAAsB,MAAM,QAAQ,QAAQ,KAAK;AAAA,MAC9D;AAAA,OACG;AAAA,EAEP;AACF;AAEA,IAAO,iBAAQ;;;AFkPZ,IAAAC,sBAAA;AAvPH,IAAM,qBAAqB,CAAC,EAAE,MAAM,cAAc,MAAW;AArE7D,MAAAC,KAAA;AAsEC,QAAM,QAAQ,YAAY;AAC1B,QAAM,YAAQ,2BAAS;AACvB,QAAM,EAAE,UAAU,IAAI,SAAS;AAC/B,QAAM,EAAE,UAAU,SAAS,SAAS,IAAI,eAAU;AAAA,IACjD,YAAUA,MAAA,MAAM,cAAN,gBAAAA,IAAiB,aAAY,CAAC;AAAA,IACxC,WAAS,WAAM,cAAN,mBAAiB,YAAW,CAAC;AAAA,IACtC,YAAU,WAAM,cAAN,mBAAiB,aAAY,CAAC;AAAA,EACzC,CAAC;AAED,QAAM,CAAC,qBAAqB,sBAAsB,QAAI,yBAAS,KAAK;AACpE,QAAM,CAAC,qBAAqB,sBAAsB,QAAI,yBAAS,KAAK;AACpE,QAAM,CAAC,4BAA4B,6BAA6B,QAAI,yBAAS,KAAK;AAClF,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,yBAAS,KAAK;AAGhE,QAAM,sBAAqB,6BAAM,aAAU,WAAM,aAAN,mBAAgB,iBAAgB,CAAC,EAAC,6BAAM;AAGnF,QAAM,0BACL,CAAC,EAAC,6BAAM,WACR,6BAAM,UAAS,OACd,WAAM,mBAAN,mBAAgD;AAAA,IAChD,CAAC,SAAS,KAAK,OAAO,KAAK,QAAQ,KAAK,WAAU,6BAAM,UAAS,CAAC,CAAC,KAAK;AAAA;AAI1E,QAAM,mBAAmB;AAEzB,QAAM,0BAA0B,0BAA0B,mDAAmD;AAE7G,QAAM,yBAAyB,CAAC,MAA2B,SAAc;AACxE,oBAAgB,kBAAkB,kCAAK,OAAS,KAAM;AAAA,EACvD;AAEA,QAAM,wBAAwB,CAAC,MAA2B,SAAc;AAxGzE,QAAAA,KAAAC,KAAAC,KAAAC,KAAAC;AAyGE,UAAM,YAAY,kCAAK,OAAS;AAGhC,QAAI,UAAU,YAAUJ,MAAA,MAAM,aAAN,gBAAAA,IAAgB,eAAc;AACrD,gBAAU,iDAAiD,OAAO;AAClE;AAAA,IACD;AAGA,UAAM,qBAAqBC,MAAA,MAAM,mBAAN,gBAAAA,IAAgD;AAAA,MAC1E,CAAC,MAAM,EAAE,SAAS,UAAU,QAAQ,EAAE,UAAU,UAAU,SAAS,CAAC,CAAC,EAAE;AAAA;AAExE,QAAI,mBAAmB;AACtB,gBAAU,kDAAkD,OAAO;AACnE;AAAA,IACD;AAEA,QAAI,CAAC,UAAU,SAAS,UAAU,MAAM,SAAS,IAAI;AACpD,gBAAU,wBAAwB,OAAO;AACzC;AAAA,IACD;AAEA,2BAAuB,IAAI;AAE3B,UAAM,UAAU;AAAA,MACf,QAAQ;AAAA,MACR,WAAW,OAAO,UAAU,IAAI;AAAA;AAAA;AAAA,MAGhC,QAAQ,UAAU;AAAA,MAClB,aAAa,OAAO,UAAU,IAAI;AAAA,MAClC,SAAQC,MAAA,MAAM,YAAN,OAAAA,MAAiB;AAAA,MACzB,UAASE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,OAAAC,MAAgC;AAAA,IAC1C;AAEA,kBACE,KAAK,UAAU,iBAAiB,OAAO,EACvC,KAAK,CAAC,QAAQ;AA9IlB,UAAAJ;AA+II,iBAAUA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,SAAS,SAAS;AAAA,IACvC,CAAC,EACA,MAAM,CAAC,QAAQ;AAjJnB,UAAAA,KAAAC,KAAAC,KAAAC;AAkJI,YAAM,YACLF,OAAAD,MAAA,IAAI,aAAJ,gBAAAA,IAAc,SAAd,gBAAAC,IAAoB,aACpBE,OAAAD,MAAA,IAAI,aAAJ,gBAAAA,IAAc,SAAd,gBAAAC,IAAoB,YACpB,IAAI,WACJ;AACD,gBAAU,SAAS,OAAO;AAAA,IAC3B,CAAC,EACA,QAAQ,MAAM;AACd,6BAAuB,KAAK;AAAA,IAC7B,CAAC;AAAA,EACH;AAEA,QAAM,wBAAwB,CAAC,MAA2B,SAAc;AA9JzE,QAAAH,KAAAC,KAAAC,KAAAC,KAAAC;AA+JE,UAAM,YAAY,kCAAK,OAAS;AAChC,2BAAuB,IAAI;AAE3B,UAAM,UAAU;AAAA,MACf,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,WAAW,OAAO,UAAU,IAAI;AAAA,MAChC,eAAe,UAAU;AAAA,MACzB,SAAQJ,MAAA,MAAM,YAAN,OAAAA,MAAiB;AAAA,MACzB,UAASE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,OAAAC,MAAgC;AAAA,MACzC,UAASE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,IAErC;AAEA,kBACE,KAAK,UAAU,uBAAuB,OAAO,EAC7C,KAAK,CAAC,QAAQ;AA/KlB,UAAAJ,KAAAC,KAAAC;AAgLI,YAAIF,MAAA,MAAM,aAAN,gBAAAA,IAAgB,UAAS,GAAG;AAC/B,yBAAiB;AAAA,MAClB;AACA,YAAIC,MAAA,MAAM,aAAN,gBAAAA,IAAgB,UAAS,GAAG;AAC/B,yBAAiB;AAAA,MAClB;AACA,iBAAUC,MAAA,IAAI,SAAJ,gBAAAA,IAAU,SAAS,SAAS;AAAA,IACvC,CAAC,EACA,MAAM,CAAC,QAAQ;AAxLnB,UAAAF,KAAAC,KAAAC,KAAAC;AAyLI,YAAM,YACLF,OAAAD,MAAA,IAAI,aAAJ,gBAAAA,IAAc,SAAd,gBAAAC,IAAoB,aACpBE,OAAAD,MAAA,IAAI,aAAJ,gBAAAA,IAAc,SAAd,gBAAAC,IAAoB,YACpB,IAAI,WACJ;AACD,gBAAU,SAAS,OAAO;AAAA,IAC3B,CAAC,EACA,QAAQ,MAAM;AACd,6BAAuB,KAAK;AAAA,IAC7B,CAAC;AAAA,EACH;AAEA,QAAM,+BAA+B,CAAC,MAA2B,MAAW,SAAiB;AArM9F,QAAAH,KAAAC,KAAAC,KAAAC,KAAAC;AAsME,UAAM,YAAY,kCAAK,OAAS;AAChC,kCAA8B,IAAI;AAElC,UAAM,UAAU;AAAA,MACf,QAAQ,SAAS,aAAa,SAAS;AAAA,MACvC,WAAW;AAAA,MACX,iBAAiB,SAAS,aAAa,OAAO,UAAU,IAAI,KAAK,SAAS,UAAU,IAAI;AAAA,MACxF,SAAQJ,MAAA,MAAM,YAAN,OAAAA,MAAiB;AAAA,MACzB,UAASE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,OAAAC,MAAgC;AAAA,MAEzC,YAAWE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,MACtC,aAAa,OAAO,UAAU,IAAI;AAAA,IACnC;AAEA,kBACE,KAAK,UAAU,iCAAiC,OAAO,EACvD,KAAK,CAAC,QAAQ;AAtNlB,UAAAJ;AAuNI,iBAAUA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,SAAS,SAAS;AAAA,IACvC,CAAC,EACA,MAAM,CAAC,QAAQ;AAzNnB,UAAAA,KAAAC,KAAAC,KAAAC;AA0NI,YAAM,YACLF,OAAAD,MAAA,IAAI,aAAJ,gBAAAA,IAAc,SAAd,gBAAAC,IAAoB,aACpBE,OAAAD,MAAA,IAAI,aAAJ,gBAAAA,IAAc,SAAd,gBAAAC,IAAoB,YACpB,IAAI,WACJ;AACD,gBAAU,SAAS,OAAO;AAAA,IAC3B,CAAC,EACA,QAAQ,MAAM;AACd,oCAA8B,KAAK;AAAA,IACpC,CAAC;AAAA,EACH;AAEA,QAAM,sBAAsB,CAAC,MAA2B,SAAc;AAtOvE,QAAAH,KAAAC,KAAAC,KAAAC;AAuOE,UAAM,YAAY,kCAAK,OAAS;AAGhC,QAAI,UAAU,SAAS,GAAG;AACzB,gBAAU,wDAAwD,OAAO;AACzE;AAAA,IACD;AAEA,yBAAqB,IAAI;AAKzB,UAAM,UAAU;AAAA,MACf,UAASF,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,MACpC,WAAUC,MAAA,MAAM,YAAN,OAAAA,MAAiB;AAAA,MAC3B,gBAAeC,MAAA,UAAU,UAAV,OAAAA,MAAmB;AAAA,MAClC,aAAa,OAAO,UAAU,IAAI;AAAA,MAClC,QAAQ;AAAA,IACT;AAEA,kBACE,KAAK,UAAU,qBAAqB,OAAO,EAC3C,KAAK,CAAC,QAAQ;AA9PlB,UAAAH;AA+PI,iBAAUA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,SAAS,SAAS;AAAA,IACvC,CAAC,EACA,MAAM,CAAC,QAAQ;AAjQnB,UAAAA,KAAAC,KAAAC,KAAAC;AAkQI,YAAM,YACLF,OAAAD,MAAA,IAAI,aAAJ,gBAAAA,IAAc,SAAd,gBAAAC,IAAoB,aACpBE,OAAAD,MAAA,IAAI,aAAJ,gBAAAA,IAAc,SAAd,gBAAAC,IAAoB,YACpB,IAAI,WACJ;AACD,gBAAU,SAAS,OAAO;AAAA,IAC3B,CAAC,EACA,QAAQ,MAAM;AACd,2BAAqB,KAAK;AAAA,IAC3B,CAAC;AAAA,EACH;AAEA,QAAM,CAAC,YAAY,IAAI,eAMpB;AAEH,QAAM,CAAC,YAAY,IAAI,eAOpB;AAEH,QAAM,mBAAmB,MAAM;AA/RhC,QAAAH,KAAAC,KAAAC,KAAAC;AAgSE,UAAM,UAAU;AAAA,MACf,UAAQH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,UAAS;AAAA,MACjC,SAAS,QAAOC,MAAA,MAAM,YAAN,OAAAA,MAAiB,EAAE;AAAA,MACnC,YAAWE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,MACtC,aAAa;AAAA,IACd;AACA,iBAAa,UAAU,WAAW,OAAO;AAAA,EAC1C;AAEA,QAAM,mBAAmB,MAAM;AAzShC,QAAAH,KAAAC,KAAAC,KAAAC;AA0SE,UAAM,UAAU;AAAA,MACf,UAAQH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,UAAS;AAAA,MACjC,WAAW;AAAA,MACX,SAAS,QAAOC,MAAA,MAAM,YAAN,OAAAA,MAAiB,EAAE;AAAA,MACnC,YAAWE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,MACtC,aAAa;AAAA,IACd;AAEA,iBAAa,UAAU,WAAW,OAAO;AAAA,EAC1C;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MAEA,IAAI;AAAA,QACH,QAAQ;AAAA,MACT;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,SAAS;AAAA,cACT,MAAM;AAAA,cACN,OAAO;AAAA,YACR;AAAA,YAEA,wDAAC,+BAAW;AAAA;AAAA,eAAM,kCAAM,SAAN,YAAc;AAAA,cAAG;AAAA,eAAE;AAAA;AAAA,QACtC;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,SAAS;AAAA,cACT,OAAO;AAAA,YACR;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACA,SAAQ;AAAA,gBACR,IAAI;AAAA,kBACH,IAAI;AAAA,kBACJ,cAAc;AAAA,kBACd,OAAO;AAAA,gBACR;AAAA,gBAEC,6CAAM,WAAN,YAAgB;AAAA;AAAA,YAClB;AAAA;AAAA,QACD;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,SAAS;AAAA,cACT,MAAM;AAAA,YACP;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACA,MAAK;AAAA,gBACL,aAAY;AAAA,gBACZ,WAAS;AAAA,gBACT,QAAO,6BAAM,UAAS;AAAA,gBACtB,OAAO;AAAA,gBACP,YAAY;AAAA,gBACZ,WACC,6BAAM,UAAS,KACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAQA,EAAE,UAAS,kCAAM,WAAN,YAAgB,EAAE,KAC7B;AAAA,gBAED,UAAU,CAAC,MAAM;AAChB,yCAAuB,MAAM,EAAE,OAAO,EAAE,OAAO,MAAM,CAAC;AAAA,gBACvD;AAAA;AAAA,YACD;AAAA;AAAA,QACD;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,SAAS;AAAA,cACT,MAAM;AAAA,YACP;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACA,IAAI;AAAA,kBACH,OAAO;AAAA,kBACP,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,KAAK;AAAA,gBACN;AAAA,gBAEC;AAAA,gDAAM,UAAS,KACf,6CAAC,4BAAQ,QAAO,6BAAM,gCAA6B,SAAS,UAC3D;AAAA,oBAAC;AAAA;AAAA,sBACA,UAAS,6BAAM,gCAA6B,cAAc;AAAA,sBAC1D,KAAI,6BAAM,4CAAmC,mBAAK,YAAa,mBAAK;AAAA,sBACpE,SAAS,MAAM;AACd,4BAAI,KAAK,8BAA4B;AACpC,uDAA6B,MAAM,EAAE,QAAQ,MAAM,GAAG,YAAY;AAAA,wBACnE,OAAO;AACN,uDAA6B,MAAM,EAAE,QAAQ,KAAK,GAAG,UAAU;AAAA,wBAChE;AAAA,sBACD;AAAA,sBACA,WACE,6BAAM,8CAAoC,6BAAM,iCACjD;AAAA,sBAGA,eAAK,+BACL;AAAA,wBAAC;AAAA;AAAA,0BACA,IAAI;AAAA,4BACH,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,KAAK;AAAA,4BACL,OAAO;AAAA,0BACR;AAAA,0BAEA;AAAA;AAAA,8BAAC;AAAA;AAAA,gCACA,SAAQ;AAAA,gCACR,IAAI;AAAA,kCACH,UAAU;AAAA,kCACV,OAAO,KAAK,+BAA6B,SAAS;AAAA,gCACnD;AAAA,gCACA;AAAA;AAAA,4BAED;AAAA,4BACC,6BACA,6CAAC,qCAAiB,MAAK,QAAO,IAAI,EAAE,OAAO,MAAM,QAAQ,QAAQ,KAAK,GAAG,IAEzE,6CAAC,iBAAAE,SAAA,EAAU;AAAA;AAAA;AAAA,sBAEb,IAEA;AAAA,wBAAC;AAAA;AAAA,0BACA,IAAI;AAAA,4BACH,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,KAAK;AAAA,4BACL,OAAO;AAAA,0BACR;AAAA,0BAEA;AAAA;AAAA,8BAAC;AAAA;AAAA,gCACA,SAAQ;AAAA,gCACR,IAAI,EAAE,OAAO,KAAK,+BAA6B,SAAS,QAAQ,UAAU,OAAO;AAAA,gCACjF;AAAA;AAAA,4BAED;AAAA,4BACC,6BACA,6CAAC,qCAAiB,MAAK,QAAO,IAAI,EAAE,OAAO,MAAM,QAAQ,QAAQ,KAAK,GAAG,IAEzE,6CAAC,aAAAC,SAAA,EAAM;AAAA;AAAA;AAAA,sBAET;AAAA;AAAA,kBAEF,GACD;AAAA,mBAGA,6BAAM,UAAS,KACf;AAAA,oBAAC;AAAA;AAAA,sBACA,OACC,mBACG,2BAA2B,4BAC3B;AAAA,sBAGJ,uDAAC,UACA;AAAA,wBAAC;AAAA;AAAA,0BACA,UAAS,6BAAM,gCAA6B,aAAa;AAAA,0BACzD,OAAM;AAAA,0BACN,KACC,6BAAM,iCAA8B,mBACjC,mBAAK,YACL,iCACE,UADF;AAAA,4BAED,QAAQ,aAAa,MAAM,QAAQ,QAAQ,KAAK;AAAA,4BAChD,WAAW;AAAA,8BACV,SAAS;AAAA,8BACT,WAAW,eAAe,MAAM,QAAQ,QAAQ,KAAK;AAAA,8BACrD,QAAQ,aAAa,MAAM,QAAQ,QAAQ,KAAK;AAAA,4BACjD;AAAA,4BACA,YAAY;AAAA,8BACX,SAAS;AAAA,8BACT,WAAW,sBAAsB,MAAM,QAAQ,QAAQ,KAAK;AAAA,4BAC7D;AAAA,0BACD;AAAA,0BAEF,SAAS,MAAM;AACd,kDAAsB,MAAM,CAAC,CAAC;AAAA,0BAC/B;AAAA,0BACA,WACC,6BAAM,iCACN,iBACA;AAAA,0BAGA,gCACA,6CAAC,qCAAiB,MAAK,QAAO,OAAM,WAAU,IAE9C;AAAA,4BAAC,YAAAC;AAAA,4BAAA;AAAA,8BACA,IAAI;AAAA,gCACH,QACC,6BAAM,iCAA8B,mBAAmB,YAAY;AAAA,8BACrE;AAAA;AAAA,0BACD;AAAA;AAAA,sBAEF,GACD;AAAA;AAAA,kBACD;AAAA,mBAGA,6BAAM,UAAS,KACf,6CAAC,4BAAQ,OAAM,cACd;AAAA,oBAAC;AAAA;AAAA,sBACA,UAAS,6BAAM,oCAA+B,cAAc;AAAA,sBAC5D,KAAI,6BAAM,oCAA+B,mBAAK,WAAY,mBAAK;AAAA,sBAC/D,SAAS,MAAM;AACd,8CAAsB,MAAM,EAAE,aAAa,KAAK,CAAC;AAAA,sBAClD;AAAA,sBACA,WAAU,6BAAM;AAAA,sBAEf,gCAAsB,6CAAC,qCAAiB,MAAK,QAAO,IAAK,6CAAC,iBAAAC,SAAA,EAAU;AAAA;AAAA,kBACtE,GACD;AAAA,mBAGA,6BAAM,UAAS,KACf,6CAAC,4BAAQ,QAAO,6BAAM,gCAA6B,SAAS,UAC3D;AAAA,oBAAC;AAAA;AAAA,sBACA,UAAS,6BAAM,gCAA6B,cAAc;AAAA,sBAC1D,KAAI,6BAAM,4CAAmC,mBAAK,YAAa,mBAAK;AAAA,sBACpE,SAAS,MAAM;AACd,4BAAI,KAAK,8BAA4B;AACpC,uDAA6B,MAAM,EAAE,QAAQ,MAAM,GAAG,YAAY;AAAA,wBACnE,OAAO;AACN,uDAA6B,MAAM,EAAE,QAAQ,KAAK,GAAG,UAAU;AAAA,wBAChE;AAAA,sBACD;AAAA,sBACA,WACE,6BAAM,8CAAoC,6BAAM,iCACjD;AAAA,sBAGA,uCACA,6CAAC,qCAAiB,MAAK,QAAO,IAAI,EAAE,OAAO,MAAM,QAAQ,QAAQ,KAAK,GAAG,IACtE,KAAK,+BACR,6CAAC,iBAAAH,SAAA,EAAU,IAEX,6CAAC,aAAAC,SAAA,EAAM;AAAA;AAAA,kBAET,GACD;AAAA,mBAGA,6BAAM,UAAS,KACf,6CAAC,4BAAQ,OAAM,YACd;AAAA,oBAAC;AAAA;AAAA,sBACA,UACC,6BAAM,kCAA8B,6BAAM,gDACvC,cACA;AAAA,sBAEJ,OAAM;AAAA,sBACN,KACC,6BAAM,kCAA8B,6BAAM,gDACzC,iCACI,UADJ;AAAA,wBAEC,QAAQ,aAAa,MAAM,QAAQ,MAAM,KAAK;AAAA,wBAC9C,WAAW;AAAA,0BACV,SAAS;AAAA,0BACT,WAAW,eAAe,MAAM,QAAQ,MAAM,KAAK;AAAA,0BACnD,QAAQ,aAAa,MAAM,QAAQ,MAAM,KAAK;AAAA,wBAC/C;AAAA,wBACA,YAAY;AAAA,0BACX,SAAS;AAAA,0BACT,WAAW,sBAAsB,MAAM,QAAQ,QAAQ,KAAK;AAAA,wBAC7D;AAAA,sBACD,KACE,mBACE;AAAA,sBAGN,SAAS,MAAM;AACd,4CAAoB,MAAM;AAAA,0BACzB,aAAa;AAAA,0BACb,aAAa;AAAA,0BACb,QAAQ;AAAA,0BACR,QAAQ;AAAA,wBACT,CAAC;AAAA,sBACF;AAAA,sBACA,WACC,6BAAM,kCACN,6BAAM,iDACN;AAAA,sBAGA,8BAAoB,6CAAC,qCAAiB,MAAK,QAAO,OAAM,SAAQ,IAAK,6CAAC,eAAAG,SAAA,EAAQ;AAAA;AAAA,kBAChF,GACD;AAAA;AAAA;AAAA,YAEF;AAAA;AAAA,QACD;AAAA;AAAA;AAAA,IAlSK,KAAK;AAAA,EAmSX;AAEF;AAEO,SAAS,mBAAmB;AA9lBnC,MAAAT,KAAA;AA+lBC,QAAM,QAAQ,YAAY;AAC1B,QAAM,EAAE,UAAU,IAAI,SAAS;AAE/B,QAAM,CAAC,sBAAsB,uBAAuB,QAAI,yBAAS,KAAK;AAEtE,QAAM,cAAc,MAAM;AACzB,oBAAgB,wBAAwB,KAAK;AAAA,EAC9C;AAEA,QAAM,0BAA0B,MAAM;AAxmBvC,QAAAA,KAAAC,KAAAC,KAAAC,KAAAC,KAAAM,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAA;AAymBE,4BAAwB,IAAI;AAE5B,UAAM,UAAU;AAAA,MACf,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAQjB,MAAA,MAAM,YAAN,OAAAA,MAAiB;AAAA,MACzB,UAASE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,OAAAC,MAAgC;AAAA,MACzC,YAAWQ,OAAAN,OAAAD,MAAA,MAAM,YAAN,gBAAAA,IAAe,eAAf,gBAAAC,IAA2B,eAA3B,OAAAM,MAAyC;AAAA,MACpD,eAAcE,OAAAD,MAAA,MAAM,YAAN,gBAAAA,IAAe,iBAAf,OAAAC,MAA+B;AAAA,MAC7C,kBAAiBE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,MAC5C,UAASE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,MACpC,gBAAe,MAAAC,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,YAAgC;AAAA,IAChD;AAEA,kBACE,KAAK,UAAU,yBAAyB,OAAO,EAC/C,KAAK,CAAC,QAAQ;AAznBlB,UAAAjB;AA0nBI,iBAAUA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,SAAS,SAAS;AACtC,sBAAgB,qBAAqB;AACrC,kBAAY;AAAA,IACb,CAAC,EACA,MAAM,CAAC,QAAQ;AA9nBnB,UAAAA,KAAAC,KAAAC,KAAAC;AA+nBI,YAAM,YACLF,OAAAD,MAAA,IAAI,aAAJ,gBAAAA,IAAc,SAAd,gBAAAC,IAAoB,aACpBE,OAAAD,MAAA,IAAI,aAAJ,gBAAAA,IAAc,SAAd,gBAAAC,IAAoB,YACpB,IAAI,WACJ;AACD,gBAAU,SAAS,OAAO;AAAA,IAC3B,CAAC,EACA,QAAQ,MAAM;AACd,8BAAwB,KAAK;AAAA,IAC9B,CAAC;AAAA,EACH;AAEA,QAAM,+BAA+B,MAAM;AA3oB5C,QAAAH,KAAAC,KAAAC,KAAAC,KAAAC,KAAAM,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAA;AA4oBE,UAAM,UAAU;AAAA,MACf,QAAQ;AAAA,MACR,SAAQjB,MAAA,MAAM,YAAN,OAAAA,MAAiB;AAAA,MACzB,UAASE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,OAAAC,MAAgC;AAAA,MACzC,YAAWQ,OAAAN,OAAAD,MAAA,MAAM,YAAN,gBAAAA,IAAe,eAAf,gBAAAC,IAA2B,eAA3B,OAAAM,MAAyC;AAAA,MACpD,eAAcE,OAAAD,MAAA,MAAM,YAAN,gBAAAA,IAAe,iBAAf,OAAAC,MAA+B;AAAA,MAC7C,kBAAiBE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,MAC5C,UAASE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,MACpC,gBAAe,MAAAC,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,YAAgC;AAAA,IAChD;AAEA,kBACE,KAAK,UAAU,0BAA0B,OAAO,EAChD,KAAK,CAAC,QAAQ;AAzpBlB,UAAAjB;AA0pBI,iBAAUA,MAAA,IAAI,SAAJ,gBAAAA,IAAU,SAAS,SAAS;AACtC,sBAAgB,qBAAqB;AACrC,kBAAY;AAAA,IAGb,CAAC,EACA,MAAM,CAAC,QAAQ;AAhqBnB,UAAAA,KAAAC,KAAAC,KAAAC;AAiqBI,YAAM,YACLF,OAAAD,MAAA,IAAI,aAAJ,gBAAAA,IAAc,SAAd,gBAAAC,IAAoB,aACpBE,OAAAD,MAAA,IAAI,aAAJ,gBAAAA,IAAc,SAAd,gBAAAC,IAAoB,YACpB,IAAI,WACJ;AACD,gBAAU,SAAS,OAAO;AAAA,IAC3B,CAAC;AAAA,EACH;AAEA,QAAM,iBAAgBH,MAAA,+BAAO,mBAAP,gBAAAA,IAAuB,KAAK,CAAC,UAAS,6BAAM;AAClE,QAAM,uBACL,gDAAO,mBAAP,mBAAuB,OAAO,CAAC,UAAS,6BAAM,+CAA9C,mBAAiF,WAAjF,YAA2F;AAE5F,QAAM,UAAS,oCAAO,mBAAP,mBAAuB,KAAK,CAAC,UAAS,6BAAM;AAC3D,QAAM,YAAW,oCAAO,mBAAP,mBAAuB,KAAK,CAAC,UAAS,6BAAM;AAC7D,SACC,6EACC;AAAA,IAAC;AAAA;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,mBAAgB;AAAA,MAChB,oBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE;AAAA,MAE9C,wDAAC,0BAAM,IAAI,EAAE,cAAc,EAAE,GAC5B;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,SAAS;AAAA,cACT,eAAe;AAAA,cACf,WAAW;AAAA,cACX,QAAQ;AAAA,YACT;AAAA,YAEA;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACN,IAAI,EAAE,eAAe,aAAa,YAAY,QAAQ,UAAU,OAAO;AAAA,kBAEtE;AAAA,yDAAO,YAAP,YAAkB;AAAA,oBAAG;AAAA;AAAA;AAAA,cACvB;AAAA,cAEA,6CAAC,wBAUA;AAAA,gBAAC;AAAA;AAAA,kBACA,SAAS;AAAA,kBACT,OAAM;AAAA,kBAEN,uDAAC,aAAAkB,SAAA,EAAM,IAAI,EAAE,OAAO,eAAe,GAAG;AAAA;AAAA,cACvC,GACD;AAAA;AAAA;AAAA,QACD;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,WAAW;AAAA,cACX,QAAQ;AAAA,cACR,cAAc;AAAA,YACf;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACA,WAAW;AAAA,gBACX,IAAI;AAAA,kBACH,SAAS;AAAA,kBACT,WAAW;AAAA,gBACZ;AAAA,gBAEA,wDAAC,0BAAM,IAAI,EAAE,QAAQ,+BAA+B,GACnD;AAAA,+DAAC,8BACA,wDAAC,6BAAS,IAAI,EAAE,QAAQ,iCAAiC,GACxD;AAAA,iEAAC,8BAAU,IAAI,EAAE,SAAS,MAAM,GAAG,kBAAI;AAAA,oBACvC,6CAAC,8BAAU,IAAI,EAAE,SAAS,MAAM,GAAG,oBAAM;AAAA,oBACzC,6CAAC,8BAAU,IAAI,EAAE,SAAS,MAAM,GAAG,2BAAa;AAAA,oBAChD,6CAAC,8BAAU,IAAI,EAAE,SAAS,MAAM,GAAG,0BAAY;AAAA,qBAChD,GACD;AAAA,kBACA,6CAAC,8BACC,yCAAO,eAAe,IAAI,CAAC,SAC3B,6CAAC,sBAAmC,MAAY,iBAAvB,KAAK,IAAgD,IAEhF;AAAA,mBACD;AAAA;AAAA,YACD;AAAA;AAAA,QACD;AAAA,QACA,6CAAC,wBAAI,IAAI,EAAE,WAAW,UAAU,GAAG,EAAE,GACpC,uDAAC,4BAAQ,SAAO,WAAM,cAAN,mBAAiB,wBAAuB,uCAAuC,IAC9F,uDAAC,wBAAI,WAAU,QACd;AAAA,UAAC;AAAA;AAAA,YACA,SAAQ;AAAA,YACR,OAAM;AAAA,YACN,MAAK;AAAA,YACL,SAAS;AAAA,YACT,UAAU,wBAAwB,uBAAuB,OAAK,WAAM,cAAN,mBAAiB;AAAA,YAC/E,IAAI,EAAE,IAAI,GAAG,cAAc,QAAQ,eAAe,aAAa;AAAA,YAE9D;AAAA,qCACA;AAAA,gBAAC;AAAA;AAAA,kBACA,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,IAAI,EAAE,aAAa,MAAM;AAAA;AAAA,cAC1B,IAEA;AAAA,gBAAC;AAAA;AAAA,kBACA,UAAU,CAAC,GAAC,WAAM,cAAN,mBAAiB;AAAA,kBAC7B,IAAI;AAAA,oBACH,WAAS,WAAM,cAAN,mBAAiB,wBAAuB,8BAA8B;AAAA,oBAC/E,WAAW,EAAE,WAAS,WAAM,cAAN,mBAAiB,wBAAuB,8BAA8B,aAAa;AAAA,oBACzG,aAAa;AAAA,oBACb,OAAO;AAAA,oBACP,QAAQ;AAAA,oBACR,UAAU;AAAA,oBACV,YAAY;AAAA,oBACZ,YAAY;AAAA,oBACZ,eAAe;AAAA,oBACf,eAAe;AAAA,oBACf,OAAO;AAAA,oBACP,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,cAAc;AAAA,kBACf;AAAA,kBAEA,uDAAC,qBAAAC,SAAA,EAAc,IAAI,EAAE,SAAO,WAAM,cAAN,mBAAiB,wBAAuB,oBAAoB,SAAS,UAAU,QAAQ,YAAY,MAAM,GAAG;AAAA;AAAA,cACzI;AAAA,cACC;AAAA;AAAA;AAAA,QAEH,GACD,GACD,GACD;AAAA,SACD;AAAA;AAAA,EACD,GACD;AAEF;AAEO,SAAS,mBAAmB,EAAE,KAAK,GAAQ;AAnzBlD,MAAAnB,KAAA;AAozBC,QAAM,QAAQ,YAAY;AAC1B,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAS,EAAE;AASnD,QAAM,CAAC,cAAc,EAAE,WAAW,kBAAkB,CAAC,IAAI,eAAoC;AAAA,IAC5F,WAAW,MAAM;AAEhB,sBAAgB,0BAA0B,KAAK;AAAA,IAChD;AAAA,EACD,CAAC;AAED,QAAM,CAAC,mBAAmB,IAAI,eAAoB,CAAC,CAAC;AAEpD,QAAM,CAAC,yBAAyB,EAAE,WAAW,yBAAyB,CAAC,IAAI,eAAoB;AAAA,IAC9F,WAAW,MAAM;AAChB,sBAAgB,eAAe,IAAI;AACnC,sBAAgB,0BAA0B,KAAK;AAAA,IAChD;AAAA,EACD,CAAC;AAED,QAAM,CAAC,uBAAuB,EAAE,WAAW,uBAAuB,CAAC,IAAI,eAAoB;AAAA,IAC1F,WAAW,MAAM;AAChB,sBAAgB,eAAe,IAAI;AAAA,IACpC;AAAA,EACD,CAAC;AAED,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,yBAAS,QAAQ;AACnE,QAAM,CAAC,oBAAoB,qBAAqB,QAAI,yBAA6B,IAAI;AACrF,QAAM,CAAC,qBAAqB,sBAAsB,QAAI,yBAA6C,IAAI;AAEvG,QAAM,eAAe,GAACA,MAAA,MAAM,cAAN,gBAAAA,IAAiB;AACvC,QAAM,kBAAkB,GAAC,WAAM,cAAN,mBAAiB;AAC1C,QAAM,4BAA4B,eAAe,IAAI,MAAM,kBAAkB,IAAI;AACjF,QAAM,qBACL,6BAA6B,IAAK,eAAe,YAAY,YAAa;AAE3E,QAAM,CAAC,mBAAmB,EAAE,MAAM,gBAAgB,WAAW,wBAAwB,CAAC,IACrF,eAAoB,EAAE,sBAAsB,KAAK,CAAC;AAEnD,QAAM;AAAA,IACL;AAAA,IACA,EAAE,MAAM,uBAAuB,WAAW,+BAA+B;AAAA,EAC1E,IAAI,cAAmB,EAAE,sBAAsB,KAAK,CAAC;AAErD,QAAM;AAAA,IACL;AAAA,IACA,EAAE,MAAM,sBAAsB,WAAW,8BAA8B;AAAA,EACxE,IAAI,eAKD,EAAE,sBAAsB,KAAK,CAAC;AAEjC,QAAM,cAAc,MAAM;AACzB,oBAAgB,0BAA0B,KAAK;AAAA,EAChD;AAEA,QAAM,qBAAqB,CAAC,MAAW,MAAc,OAA8B,cAAc;AAp3BlG,QAAAA,KAAAC,KAAAC,KAAAC,KAAAC,KAAAM,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAG,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAA;AAq3BE,QAAI,SAAS,WAAW;AACvB,YAAM,UAAU;AAAA,QACf,gBAAe9B,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,OAAAC,MAAgC;AAAA,QAC/C,QAAQ,MAAM;AAAA,QACd,MAAM;AAAA,QACN,cAAaC,MAAA,6BAAM,iBAAN,OAAAA,MAAsB;AAAA,QACnC,kBAAiBE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,QAC5C,WAAW,QAAOO,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,eAAhB,OAAAC,MAA8B,EAAE;AAAA,QAClD,eAAcE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,OAAAC,MAAgC;AAAA,MAC/C;AACA,mBAAa,UAAU,eAAe,OAAO;AAAA,IAC9C,WAAW,SAAS,SAAS;AAC5B,YAAM,UAAU;AAAA,QACf,gBAAeE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,OAAAC,MAAgC;AAAA,QAC/C,QAAQ,MAAM;AAAA,QACd,MAAM;AAAA,QACN,cAAaC,MAAA,6BAAM,eAAN,OAAAA,MAAoB;AAAA,QACjC,kBAAiBI,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAG,MAA2B;AAAA,QAC5C,WAAW,QAAOE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,eAAhB,OAAAC,MAA8B,EAAE;AAAA,QAClD,eAAcE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,OAAAC,MAAgC;AAAA,MAC/C;AACA,mBAAa,UAAU,eAAe,OAAO;AAAA,IAC9C,WAAW,SAAS,SAAS;AAC5B,YAAM,UAAU;AAAA,QACf,gBAAeE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,OAAAC,MAAgC;AAAA,QAC/C,QAAQ,MAAM;AAAA,QACd,MAAM;AAAA,QACN,eAAe,SAAS,YAAY,aAAa;AAAA,QACjD,cAAaE,OAAAD,MAAA,6BAAM,YAAN,gBAAAA,IAAe,eAAf,OAAAC,MAA6B;AAAA,QAC1C,kBAAiBE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,QAC5C,WAAW,QAAO,MAAAC,MAAA,MAAM,aAAN,gBAAAA,IAAgB,eAAhB,YAA8B,EAAE;AAAA,QAClD,eAAc,iBAAM,aAAN,mBAAgB,iBAAhB,YAAgC;AAAA,MAC/C;AACA,UAAI,SAAS,WAAW;AACvB,4BAAoB,UAAU,eAAe,OAAO;AAAA,MACrD,OAAO;AACN,qBAAa,UAAU,eAAe,OAAO;AAAA,MAC9C;AAAA,IACD,WAAW,SAAS,SAAS;AAC5B,YAAM,UAAU;AAAA;AAAA,QAEf,eAAe,SAAS,YAAY,aAAa;AAAA,QACjD,MAAM;AAAA,QACN,cAAa,kCAAM,kBAAN,YAAuB;AAAA,QACpC,QAAQ,MAAM;AAAA,QACd,kBAAiB,iBAAM,aAAN,mBAAgB,YAAhB,YAA2B;AAAA;AAAA,MAE7C;AACA,UAAI,SAAS,WAAW;AACvB,4BAAoB,UAAU,eAAe,OAAO;AAAA,MACrD,OAAO;AACN,qBAAa,UAAU,eAAe,OAAO;AAAA,MAC9C;AAAA,IACD;AAAA,EACD;AAEA,QAAM,sBAAsB,CAAC,GAAkC,MAAW,SAAiB;AAC1F,QAAI,oBAAoB;AACvB,yBAAmB,MAAM,MAAM,kBAAkB;AAAA,IAClD,OAAO;AACN,6BAAuB,EAAE,MAAM,KAAK,CAAC;AACrC,4BAAsB,EAAE,aAAa;AAAA,IACtC;AAAA,EACD;AAEA,gCAAU,MAAM;AACf,sBAAkB,UAAU,aAAa,EAAE,QAAQ,QAAQ,QAAQ,KAAK,CAAC;AACzE,4BAAwB,UAAU,qBAAqB,EAAE,QAAQ,UAAU,QAAQ,KAAK,CAAC;AACzF,6BAAyB,UAAU,kBAAkB;AAAA,EACtD,GAAG,CAAC,CAAC;AAEL,SACC,8EACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,mBAAgB;AAAA,QAChB,oBAAiB;AAAA,QACjB,UAAU;AAAA,QACV,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE;AAAA,QAE9C,wDAAC,0BAAM,IAAI,EAAE,cAAc,EAAE,GAC5B;AAAA;AAAA,YAAC;AAAA;AAAA,cACA,IAAI;AAAA,gBACH,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,SAAS;AAAA,gBACT,WAAW;AAAA,gBACX,UAAU;AAAA,cACX;AAAA,cAEA;AAAA,6DAAC,+BAAW,SAAQ,SAAQ,IAAI,EAAE,MAAM,EAAE,GAAG,4BAAc;AAAA,gBAC3D,8CAAC,wBAAI,IAAI,EAAE,UAAU,YAAY,MAAM,OAAO,WAAW,mBAAmB,GAC1E;AAAA,wBAAM,iBAAgB,WAAM,YAAY,WAAlB,mBAA0B,8CAChD,8CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,GAC1D;AAAA,iEAAC,+BAAW,SAAQ,SAAQ,IAAI,EAAE,YAAY,SAAS,GAAG,+BAE1D;AAAA,oBACA,6CAAC,wBAAI,WAAU,QAAO,IAAI,EAAE,SAAS,eAAe,KAAK,OAAO,YAAY,YAAY,QAAQ,OAAO,GACrG,WAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MACf,6CAAC,wBAAY,WAAU,QAAO,IAAI;AAAA,sBACjC,sBAAsB;AAAA,wBACrB,iBAAiB,EAAE,WAAW,gBAAgB;AAAA,wBAC9C,OAAO,EAAE,WAAW,mBAAmB;AAAA,sBACxC;AAAA,sBACA,WAAW;AAAA,sBACX,gBAAgB,GAAG,IAAI,IAAI;AAAA,sBAC3B,UAAU;AAAA,sBACV,YAAY;AAAA,sBACZ,YAAY;AAAA,sBACZ,SAAS;AAAA,oBACV,GAAG,iBAXO,CAWN,CACJ,GACF;AAAA,qBACD;AAAA,kBAEA,MAAM,iBAAgB,WAAM,YAAY,WAAlB,mBAA0B,4CAChD,8CAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAE,GACxD;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACA,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,WAAW,2BAA2B,6CAAC,qCAAiB,MAAM,IAAI,IAAK,6CAAC,8BAAAC,SAAA,EAAuB,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA,wBACrH,UAAU,4BAA4B;AAAA,wBACtC,SAAS,MAAM;AACd,8BAAI,MAAM,aAAa;AACtB,oDAAwB,UAAU,mBAAmB,CAAC,GAAG;AAAA,8BACxD,QAAQ,EAAE,WAAW,MAAM,YAAY,UAAU;AAAA,4BAClD,CAAC;AAAA,0BACF;AAAA,wBACD;AAAA,wBACA;AAAA;AAAA,oBAED;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACA,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,OAAM;AAAA,wBACN,WAAW,yBAAyB,6CAAC,qCAAiB,MAAM,IAAI,IAAK,6CAAC,qBAAAb,SAAA,EAAc,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA,wBAC1G,UAAU,0BAA0B;AAAA,wBACpC,SAAS,MAAM;AACd,8BAAI,MAAM,aAAa;AACtB,kDAAsB,UAAU,iBAAiB;AAAA,8BAChD,QAAQ,MAAM,YAAY;AAAA,8BAC1B,wBAAwB,MAAM,YAAY;AAAA,8BAC1C,YAAY,MAAM,YAAY;AAAA,8BAC9B,WAAW,MAAM,YAAY;AAAA,8BAC7B,WAAW,MAAM,YAAY;AAAA,4BAC9B,CAAC;AAAA,0BACF;AAAA,wBACD;AAAA,wBACA;AAAA;AAAA,oBAED;AAAA,qBACD;AAAA,mBAEF;AAAA,gBACA,6CAAC,wBAAI,IAAI,EAAE,MAAM,GAAG,SAAS,QAAQ,gBAAgB,WAAW,GAC/D,uDAAC,+BAAW,SAAS,aACpB,uDAAC,aAAAD,SAAA,EAAM,GACR,GACD;AAAA;AAAA;AAAA,UACD;AAAA,UAEA,8CAAC,wBAAI,IAAI,EAAE,QAAQ,QAAQ,cAAc,OAAO,GAC/C;AAAA,0DAAC,wBAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,GAAG,QAAQ,OAAO,GAOlD;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,SAAS,sBAAsB,WAAW,cAAc;AAAA,kBACxD,SAAS,MAAM,qBAAqB,QAAQ;AAAA,kBAC5C;AAAA;AAAA,cAED;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACA,SAAS,sBAAsB,WAAW,cAAc;AAAA,kBACxD,SAAS,MAAM;AACd,yCAAqB,QAAQ;AAC7B,sCAAkB,UAAU,aAAa,EAAE,QAAQ,QAAQ,QAAQ,KAAK,CAAC;AAAA,kBAC1E;AAAA,kBACA;AAAA;AAAA,cAED;AAAA,cAEA;AAAA,gBAAC;AAAA;AAAA,kBACA,SAAS,sBAAsB,WAAW,cAAc;AAAA,kBACxD,SAAS,MAAM,qBAAqB,QAAQ;AAAA,kBAC5C;AAAA;AAAA,cAED;AAAA,eAED;AAAA,aAEE,iCACD,2BACA,kCACA,sBACC;AAAA,cAAC;AAAA;AAAA,gBACA,IAAI;AAAA,kBACH,SAAS;AAAA,kBACT,gBAAgB;AAAA,kBAChB,YAAY;AAAA,kBACZ,QAAQ;AAAA,gBACT;AAAA,gBAEA,uDAAC,qCAAiB;AAAA;AAAA,YACnB;AAAA,YAGD,CAAC,iCACD,CAAC,2BACD,CAAC,kCACD,CAAC,qBACD,sBAAsB,aACrB;AAAA,cAAC;AAAA;AAAA,gBACA,IAAI;AAAA,kBACH,SAAS;AAAA,kBACT,uBACC,kEAAsB,SAAtB,mBAA4B,cAC3B,wEAAsB,SAAtB,mBAA4B,YAA5B,mBAAqC,UAAS,IAC5C,mBACA;AAAA,kBACJ,KAAK;AAAA,kBACL,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,WAAW;AAAA,kBACX,cAAc;AAAA,gBACf;AAAA,gBAEC,8EAAsB,SAAtB,mBAA4B,cAC5B,wEAAsB,SAAtB,mBAA4B,YAA5B,mBAAqC,UAAS,KAC9C,wEAAsB,SAAtB,mBAA4B,YAA5B,mBAAqC,IAAI,CAAC,SAAc,UACvD;AAAA,kBAAC;AAAA;AAAA,oBAEA,IAAI;AAAA,sBACH,GAAG;AAAA,sBACH,SAAS;AAAA,sBACT,YAAY;AAAA,sBACZ,WAAW;AAAA,sBACX,SAAS;AAAA,sBACT,cAAc;AAAA,sBACd,WAAW,EAAE,SAAS,kBAAkB;AAAA,oBACzC;AAAA,oBAEA;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACA,SAAQ;AAAA,0BACR,IAAI;AAAA,4BACH,IAAI;AAAA,4BACJ,OAAO;AAAA,4BACP,UAAU;AAAA,4BACV,SAAS;AAAA,4BACT,YAAY;AAAA,0BACb;AAAA,0BAEA;AAAA,yEAAC,sBAAAe,SAAA,EAAe,IAAI,EAAE,aAAa,MAAM,GAAG;AAAA,4BAC3C,QAAQ;AAAA;AAAA;AAAA,sBACV;AAAA,sBACA,6CAAC,4BAAQ,OAAO,MAAM,cAAc,8EAA8E,IACjH,uDAAC,UACA;AAAA,wBAAC;AAAA;AAAA,0BACA,OAAM;AAAA,0BACN,IAAI;AAAA,4BACH,SAAS;AAAA,4BACT,WAAW,EAAE,SAAS,kBAAkB;AAAA,0BACzC;AAAA,0BACA,UAAU,CAAC,CAAC,MAAM;AAAA,0BAClB,SAAS,MAAM,mBAAmB,SAAS,SAAS;AAAA,0BAEpD,uDAAC,YAAA1B,SAAA,EAAK;AAAA;AAAA,sBACP,GACD,GACD;AAAA;AAAA;AAAA,kBAtCK;AAAA,gBAuCN,KAGD;AAAA,kBAAC;AAAA;AAAA,oBACA,IAAI;AAAA,sBACH,SAAS;AAAA,sBACT,YAAY;AAAA,sBACZ,gBAAgB;AAAA,sBAChB,eAAe;AAAA,sBACf,GAAG;AAAA,oBACJ;AAAA,oBAEA;AAAA,mEAAC,gBAAA2B,SAAA,EAAS,OAAM,WAAU;AAAA,sBAC1B;AAAA,wBAAC;AAAA;AAAA,0BACA,SAAQ;AAAA,0BACR,IAAI;AAAA,4BACH,UAAU;AAAA,4BACV,eAAe;AAAA,4BACf,eAAe;AAAA,4BACf,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,OAAO;AAAA,4BACP,QAAQ;AAAA,4BACR,OAAO;AAAA,4BACP,QAAQ;AAAA,0BACT;AAAA,0BACA;AAAA;AAAA,sBAED;AAAA;AAAA;AAAA,gBACD;AAAA;AAAA,YAEF;AAAA,YAGD,CAAC,iCACD,CAAC,2BACD,CAAC,kCACD,CAAC,qBACD,sBAAsB,YACrB;AAAA,cAAC;AAAA;AAAA,gBACA,IAAI;AAAA,kBACH,SAAS;AAAA,kBACT,uBACC,kEAAsB,SAAtB,mBAA4B,YAC3B,wEAAsB,SAAtB,mBAA4B,UAA5B,mBAAmC,UAAS,IAC1C,mBACA;AAAA,kBACJ,KAAK;AAAA,kBACL,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,WAAW;AAAA,kBACX,cAAc;AAAA,gBACf;AAAA,gBAEC,8EAAsB,SAAtB,mBAA4B,YAC5B,wEAAsB,SAAtB,mBAA4B,UAA5B,mBAAmC,UAAS,KAC5C,wEAAsB,SAAtB,mBAA4B,UAA5B,mBAAmC,IAAI,CAAC,OAAY,UAAY;AAhsC1E,sBAAAlC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAM;AAisCW;AAAA,oBAAC;AAAA;AAAA,sBAEA,IAAI;AAAA,wBACH,GAAG;AAAA,wBACH,SAAS;AAAA,wBACT,YAAY;AAAA,wBACZ,WAAW;AAAA,wBACX,SAAS;AAAA,wBACT,cAAc;AAAA,wBACd,WAAW,EAAE,SAAS,kBAAkB;AAAA,sBACzC;AAAA,sBAEA;AAAA;AAAA,0BAAC;AAAA;AAAA,4BACA,SAAQ;AAAA,4BACR,IAAI;AAAA,8BACH,IAAI;AAAA,8BACJ,OAAO;AAAA,8BACP,UAAU;AAAA,8BACV,SAAS;AAAA,8BACT,YAAY;AAAA,4BACb;AAAA,4BAEA;AAAA,2EAAC,gBAAAyB,SAAA,EAAS,IAAI,EAAE,aAAa,MAAM,GAAG;AAAA,8BACrC,MAAM;AAAA,gCACNjC,OAAAD,OAAAD,MAAA,6DAAsB,SAAtB,gBAAAA,IAA4B,YAA5B,gBAAAC,IAAqC;AAAA,gCACrC,CAAC,YAAiB,QAAQ,eAAe,MAAM;AAAA,oCAD/C,gBAAAC,IAEE,gBACF;AAAA,gCAAC;AAAA;AAAA,kCACA,SAAQ;AAAA,kCACR,IAAI;AAAA,oCACH,UAAU;AAAA,oCACV,YAAY;AAAA,oCACZ,eAAe;AAAA,oCACf,eAAe;AAAA,oCACf,OAAO;AAAA,kCACR;AAAA,kCAEC,kBACAQ,OAAAN,OAAAD,MAAA,6DAAsB,SAAtB,gBAAAA,IAA4B,YAA5B,gBAAAC,IAAqC;AAAA,oCACpC,CAAC,YAAiB,QAAQ,eAAe,MAAM;AAAA,wCADhD,gBAAAM,IAEG,gBACH;AAAA;AAAA,8BACF,IAEA;AAAA;AAAA;AAAA,wBAEF;AAAA,wBACA,6CAAC,4BAAQ,OAAO,MAAM,cAAc,8EAA8E,IACjH,uDAAC,UACA;AAAA,0BAAC;AAAA;AAAA,4BACA,OAAM;AAAA,4BACN,IAAI;AAAA,8BACH,SAAS;AAAA,8BACT,WAAW,EAAE,SAAS,kBAAkB;AAAA,4BACzC;AAAA,4BACA,UAAU,CAAC,CAAC,MAAM;AAAA,4BAClB,SAAS,MAAM,mBAAmB,OAAO,OAAO;AAAA,4BAEhD,uDAAC,YAAAH,SAAA,EAAK;AAAA;AAAA,wBACP,GACD,GACD;AAAA;AAAA;AAAA,oBA5DK;AAAA,kBA6DN;AAAA,qBAGD;AAAA,kBAAC;AAAA;AAAA,oBACA,IAAI;AAAA,sBACH,SAAS;AAAA,sBACT,YAAY;AAAA,sBACZ,gBAAgB;AAAA,sBAChB,eAAe;AAAA,sBACf,GAAG;AAAA,oBACJ;AAAA,oBAEA;AAAA,mEAAC,gBAAA2B,SAAA,EAAS,OAAM,WAAU;AAAA,sBAC1B;AAAA,wBAAC;AAAA;AAAA,0BACA,SAAQ;AAAA,0BACR,IAAI;AAAA,4BACH,UAAU;AAAA,4BACV,eAAe;AAAA,4BACf,eAAe;AAAA,4BACf,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,OAAO;AAAA,4BACP,QAAQ;AAAA,4BACR,OAAO;AAAA,4BACP,QAAQ;AAAA,0BACT;AAAA,0BACA;AAAA;AAAA,sBAED;AAAA;AAAA;AAAA,gBACD;AAAA;AAAA,YAEF;AAAA,YAGD,CAAC,iCACD,CAAC,2BACD,CAAC,kCACD,CAAC,qBACD,sBAAsB,YACrB;AAAA,cAAC;AAAA;AAAA,gBACA,IAAI;AAAA,kBACH,SAAS;AAAA,kBACT,sBACC,iDAAgB,WAAQ,sDAAgB,SAAhB,mBAAsB,UAAS,IACpD,mBACA;AAAA,kBACJ,KAAK;AAAA,kBACL,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,WAAW;AAAA,kBACX,cAAc;AAAA,gBACf;AAAA,gBAEC,4DAAgB,WAAQ,sDAAgB,SAAhB,mBAAsB,UAAS,KACvD,sDAAgB,SAAhB,mBAAsB,IAAI,CAAC,OAAY,UACtC;AAAA,kBAAC;AAAA;AAAA,oBAEA,IAAI;AAAA,sBACH,GAAG;AAAA,sBACH,SAAS;AAAA,sBACT,YAAY;AAAA,sBACZ,WAAW;AAAA,sBACX,SAAS;AAAA,sBACT,cAAc;AAAA,sBACd,WAAW,EAAE,SAAS,kBAAkB;AAAA,oBACzC;AAAA,oBAEA;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACA,SAAQ;AAAA,0BACR,IAAI;AAAA,4BACH,IAAI;AAAA,4BACJ,OAAO;AAAA,4BACP,UAAU;AAAA,4BACV,SAAS;AAAA,4BACT,YAAY;AAAA,0BACb;AAAA,0BAEA;AAAA,yEAAC,oBAAAE,SAAA,EAAa,IAAI,EAAE,aAAa,MAAM,GAAG;AAAA,4BACzC,MAAM;AAAA;AAAA;AAAA,sBACR;AAAA,sBAEA,6CAAC,4BAAQ,OAAO,MAAM,cAAc,8EAA8E,IACjH,uDAAC,UACA;AAAA,wBAAC;AAAA;AAAA,0BACA,OAAM;AAAA,0BACN,IAAI;AAAA,4BACH,SAAS;AAAA,4BACT,WAAW,EAAE,SAAS,kBAAkB;AAAA,0BACzC;AAAA,0BACA,UAAU,CAAC,CAAC,MAAM;AAAA,0BAClB,SAAS,CAAC,MAAM,oBAAoB,GAAG,OAAO,OAAO;AAAA,0BAErD,uDAAC,YAAA7B,SAAA,EAAK;AAAA;AAAA,sBACP,GACD,GACD;AAAA;AAAA;AAAA,kBAvCK;AAAA,gBAwCN,KAGD;AAAA,kBAAC;AAAA;AAAA,oBACA,IAAI;AAAA,sBACH,SAAS;AAAA,sBACT,YAAY;AAAA,sBACZ,gBAAgB;AAAA,sBAChB,eAAe;AAAA,sBACf,GAAG;AAAA,oBACJ;AAAA,oBAEA;AAAA,mEAAC,gBAAA2B,SAAA,EAAS,OAAM,WAAU;AAAA,sBAE1B;AAAA,wBAAC;AAAA;AAAA,0BACA,SAAQ;AAAA,0BACR,IAAI;AAAA,4BACH,UAAU;AAAA,4BACV,eAAe;AAAA,4BACf,eAAe;AAAA,4BACf,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,OAAO;AAAA,4BACP,QAAQ;AAAA,4BACR,OAAO;AAAA,4BACP,QAAQ;AAAA,0BACT;AAAA,0BACA;AAAA;AAAA,sBAED;AAAA;AAAA;AAAA,gBACD;AAAA;AAAA,YAEF;AAAA,YAGD,CAAC,iCACD,CAAC,2BACD,CAAC,kCACD,CAAC,qBACD,sBAAsB,YACrB;AAAA,cAAC;AAAA;AAAA,gBACA,IAAI;AAAA,kBACH,SAAS;AAAA,kBACT,qBAAqB;AAAA,kBACrB,KAAK;AAAA,kBACL,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,WAAW;AAAA,kBACX,cAAc;AAAA,gBACf;AAAA,gBAEC;AAAA,kFAAuB,WACvB,oEAAuB,SAAvB,mBAA6B,UAAS,OACtC,oEAAuB,SAAvB,mBAA6B,IAAI,CAAC,SAAc,UAAY;AAt5CtE,wBAAAlC,KAAAC,KAAAC;AAu5CW;AAAA,sBAAC;AAAA;AAAA,wBAEA,IAAI;AAAA,0BACH,GAAG;AAAA,0BACH,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,WAAW;AAAA,0BACX,SAAS;AAAA,0BACT,cAAc;AAAA,0BACd,WAAW,EAAE,SAAS,kBAAkB;AAAA,wBACzC;AAAA,wBAEA;AAAA;AAAA,4BAAC;AAAA;AAAA,8BACA,SAAQ;AAAA,8BACR,IAAI;AAAA,gCACH,IAAI;AAAA,gCACJ,OAAO;AAAA,gCACP,UAAU;AAAA,gCACV,SAAS;AAAA,gCACT,YAAY;AAAA,8BACb;AAAA,8BAEA;AAAA,6EAAC,eAAAmC,SAAA,EAAQ,IAAI,EAAE,aAAa,MAAM,GAAG;AAAA,gCACrC,6CAAC,4BAAQ,OAAO,IAAGrC,MAAA,mCAAS,gBAAT,OAAAA,MAAwB,EAAE,IAC5C,wDAAC,wBAAI,IAAI,EAAE,OAAO,iBAAiB,GACjC;AAAA,0CAAQ;AAAA,kCAET;AAAA,oCAAC;AAAA;AAAA,sCACA,IAAI;AAAA,wCACH,UAAU;AAAA,wCACV,YAAY;AAAA,wCACZ,eAAe;AAAA,wCACf,eAAe;AAAA,wCACf,OAAO;AAAA,wCACP,cAAc;AAAA,wCACd,YAAY;AAAA,wCACZ,UAAU;AAAA,wCACV,UAAU;AAAA,sCACX;AAAA,sCAEC,WAAAC,MAAA,mCAAS,gBAAT,OAAAA,MAAwB;AAAA;AAAA,kCAC1B;AAAA,mCACD,GACD;AAAA;AAAA;AAAA,0BACD;AAAA,0BACA,6CAAC,4BAAQ,OAAO,MAAM,cAAc,+EAA+EC,MAAA,mCAAS,iBAAT,OAAAA,MAAyB,IAC3I,uDAAC,UACA;AAAA,4BAAC;AAAA;AAAA,8BACA,OAAM;AAAA,8BACN,UAAU,CAAC,CAAC,MAAM;AAAA,8BAClB,IAAI;AAAA,gCACH,SAAS;AAAA,gCACT,WAAW,EAAE,SAAS,kBAAkB;AAAA,8BACzC;AAAA,8BACA,SAAS,CAAC,MAAG;AA78C5B,oCAAAF;AA68C+B,2DAAoB,GAAG,EAAE,gBAAeA,MAAA,mCAAS,iBAAT,OAAAA,MAAyB,GAAG,GAAG,OAAO;AAAA;AAAA,8BAE9F,uDAAC,YAAAO,SAAA,EAAK;AAAA;AAAA,0BACP,GACD,GACD;AAAA;AAAA;AAAA,sBA1DK;AAAA,oBA2DN;AAAA;AAAA,kBAEF;AAAA,oBAAC;AAAA;AAAA,sBACA,IAAI;AAAA,wBACH,GAAG;AAAA,wBACH,SAAS;AAAA,wBACT,YAAY;AAAA,wBACZ,WAAW;AAAA,wBACX,SAAS;AAAA,wBACT,cAAc;AAAA,sBACf;AAAA,sBAEA;AAAA;AAAA,0BAAC;AAAA;AAAA,4BACA,SAAQ;AAAA,4BACR,IAAI;AAAA,8BACH,IAAI;AAAA,8BACJ,OAAO;AAAA,8BACP,UAAU;AAAA,8BACV,SAAS;AAAA,8BACT,YAAY;AAAA,4BACb;AAAA,4BAEA;AAAA,8BAAC;AAAA;AAAA,gCACA,MAAK;AAAA,gCACL,MAAK;AAAA,gCACL,OAAM;AAAA,gCACN,SAAQ;AAAA,gCACR,MAAK;AAAA,gCACL,OAAO;AAAA,gCACP,UAAU,CAAC,MAAM;AAChB,wCAAM,IAAI,EAAE,OAAO;AACnB,sCAAI,QAAQ,KAAK,CAAC,GAAG;AACpB,oDAAgB,CAAC;AAAA,kCAClB;AAAA,gCACD;AAAA,gCACA,WAAW;AAAA,kCACV,WAAW;AAAA,oCACV,WAAW;AAAA,oCACX,WAAW;AAAA,kCACZ;AAAA,gCACD;AAAA,gCACA,aAAY;AAAA,gCACZ,cAAa;AAAA;AAAA,4BACd;AAAA;AAAA,wBACD;AAAA,wBACA;AAAA,0BAAC;AAAA;AAAA,4BACA,OAAO,MAAM,cAAc,8EAA+E,eAAe,aAAa,YAAY,KAAK;AAAA,4BAEvJ,uDAAC,UACA;AAAA,8BAAC;AAAA;AAAA,gCACA,OAAM;AAAA,gCACN,UAAU,CAAC,CAAC,MAAM;AAAA,gCAClB,IAAI;AAAA,kCACH,SAAS;AAAA,kCACT,WAAW,EAAE,SAAS,kBAAkB;AAAA,gCACzC;AAAA,gCACA,SAAS,CAAC,MAAM,oBAAoB,GAAG,EAAE,eAAe,sCAAgB,GAAG,GAAG,OAAO;AAAA,gCAErF,uDAAC,YAAAA,SAAA,EAAK;AAAA;AAAA,4BACP,GACD;AAAA;AAAA,wBACD;AAAA;AAAA;AAAA,kBACD;AAAA;AAAA;AAAA,YACD;AAAA,aAEH;AAAA,WACD;AAAA;AAAA,IACD;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACA,UAAU;AAAA,QACV,MAAM,QAAQ,kBAAkB;AAAA,QAChC,SAAS,MAAM,sBAAsB,IAAI;AAAA,QACzC,cAAc,EAAE,UAAU,OAAO,YAAY,OAAO;AAAA,QACpD,iBAAiB,EAAE,UAAU,UAAU,YAAY,OAAO;AAAA,QAEzD;AAAA,0BACA;AAAA,YAAC;AAAA;AAAA,cACA,SAAS,MAAM;AACd,oBAAI,oBAAqB,oBAAmB,oBAAoB,MAAM,oBAAoB,MAAM,SAAS;AACzG,sCAAsB,IAAI;AAAA,cAC3B;AAAA,cACA,IAAI,EAAE,KAAK,EAAE;AAAA,cAEb;AAAA,6DAAC,8BAAAyB,SAAA,EAAuB,UAAS,SAAQ,OAAM,WAAU;AAAA,gBAAE;AAAA;AAAA;AAAA,UAE5D;AAAA,UAEA,mBACA;AAAA,YAAC;AAAA;AAAA,cACA,SAAS,MAAM;AACd,oBAAI,oBAAqB,oBAAmB,oBAAoB,MAAM,oBAAoB,MAAM,SAAS;AACzG,sCAAsB,IAAI;AAAA,cAC3B;AAAA,cACA,IAAI,EAAE,KAAK,EAAE;AAAA,cAEb;AAAA,6DAAC,uBAAAM,SAAA,EAAgB,UAAS,SAAQ,OAAM,WAAU;AAAA,gBAAE;AAAA;AAAA;AAAA,UAErD;AAAA;AAAA;AAAA,IAEF;AAAA,KACD;AAEF;AAEO,SAAS,yBAAyB,EAAE,MAAM,SAAS,oBAAoB,GAAQ;AA7jDtF,MAAAtC,KAAA;AA8jDC,QAAM,CAAC,iBAAiB,IAAI,IAAI,cAAc;AAE9C,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAS;AAAA,IACxC,aAAa,EAAE,OAAO,IAAI,OAAO,IAAI,IAAI,EAAE;AAAA,IAC3C,UAAU,EAAE,OAAO,MAAM,OAAO,IAAI;AAAA,IACpC,cAAc;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,OAAO;AAAA,EACR,CAAC;AACD,QAAM,kBAAkB;AAAA,IACvB,EAAE,OAAO,OAAO,OAAO,IAAI;AAAA,IAC3B,EAAE,OAAO,MAAM,OAAO,IAAI;AAAA,EAC3B;AAEA,QAAM,eAAe,CACpB,OACA,UACI;AACJ,gBAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,CAAC,KAAK,GAAG,MAAM,EAAE;AAAA,EACpD;AAEA,QAAM,cAAc,MAAM;AACzB,gBAAY;AAAA,MACX,aAAa,EAAE,OAAO,IAAI,OAAO,IAAI,IAAI,EAAE;AAAA,MAC3C,UAAU,EAAE,OAAO,MAAM,OAAO,IAAI;AAAA,MACpC,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,OAAO;AAAA,IACR,CAAC;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACzB,gBAAY;AACZ,YAAQ,KAAK;AAAA,EACd;AAEA,gCAAU,MAAM;AACf,oBAAgB,UAAU,YAAY;AAAA,EACvC,GAAG,CAAC,CAAC;AAEL,QAAM,0BAAsB,wBAAQ,MAAM;AA1mD3C,QAAAA,KAAAC,KAAAC,KAAAC;AA2mDE,aACCA,OAAAD,OAAAD,OAAAD,MAAA,6BAAM,SAAN,gBAAAA,IAAY,SAAZ,gBAAAC,IACG,OAAO,CAAC,SAAc,KAAK,SAAS,gBADvC,gBAAAC,IAEG,IAAI,CAAC,UAAe;AAAA,MACrB,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,IAAI,KAAK;AAAA,IACV,QAND,gBAAAC,IAOG,KAAK,CAAC,GAAQ,MAAW,EAAE,MAAM,cAAc,EAAE,KAAK,OAAM,CAAC;AAAA,EAElE,GAAG,EAACH,MAAA,6BAAM,SAAN,gBAAAA,IAAY,IAAI,CAAC;AAErB,SACC,6EACC;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,mBAAgB;AAAA,MAChB,oBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,WAAS;AAAA,MACT,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE;AAAA,MAC9C,IAAI;AAAA,QACH,UAAU;AAAA,MACX;AAAA,MAEA,wDAAC,0BAAM,IAAI,EAAE,cAAc,EAAE,GAC5B;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,SAAS;AAAA,cACT,WAAW;AAAA,YACZ;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACA,SAAQ;AAAA,gBACR,IAAI,EAAE,GAAG,EAAE;AAAA,gBAEV;AAAA;AAAA,kBAAI;AAAA;AAAA;AAAA,YAEN;AAAA;AAAA,QACD;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,WAAW;AAAA,cACX,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,cAAc;AAAA,YACf;AAAA,YAEA;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,IAAI,EAAE,SAAS,QAAQ,KAAK,EAAE;AAAA,kBAE9B;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACA,OAAO,SAAS;AAAA,wBAChB,SAAS;AAAA,wBACT,gBAAgB,CAAC,QAAQ,IAAI;AAAA,wBAC7B,UAAU,CAAC,GAAG,QAAQ,aAAa,eAAe,GAAG;AAAA,wBACrD,MAAK;AAAA,wBACL,aAAa,CAAC,WACb;AAAA,0BAAC;AAAA,2DACI,SADJ;AAAA,4BAEA,OAAM;AAAA,4BACN,WAAS;AAAA;AAAA,wBACV;AAAA,wBAED,IAAI,EAAE,MAAM,EAAE;AAAA;AAAA,oBACf;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACA,SAAS;AAAA,wBACT,gBAAgB,CAAC,QAAQ,IAAI;AAAA,wBAC7B,OAAO,SAAS;AAAA,wBAChB,UAAU,CAAC,GAAG,QAAQ,aAAa,YAAY,GAAG;AAAA,wBAClD,MAAK;AAAA,wBACL,aAAa,CAAC,WACb;AAAA,0BAAC;AAAA,2DACI,SADJ;AAAA,4BAEA,OAAM;AAAA,4BACN,WAAS;AAAA;AAAA,wBACV;AAAA,wBAED,IAAI,EAAE,MAAM,EAAE;AAAA;AAAA,oBACf;AAAA;AAAA;AAAA,cACD;AAAA,cAEA;AAAA,gBAAC;AAAA;AAAA,kBACA,IAAI,EAAE,SAAS,QAAQ,KAAK,GAAG,IAAI,EAAE;AAAA,kBAkBrC;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACA,IAAI;AAAA,0BACH,MAAM;AAAA,0BACN,QAAQ;AAAA,0BACR,cAAc;AAAA,wBACf;AAAA,wBAEA;AAAA;AAAA,4BAAC;AAAA;AAAA,8BACA,MAAK;AAAA,8BACL,IAAI;AAAA,gCACH,SAAS;AAAA,8BACV;AAAA,8BACA,SAAS,SAAS;AAAA,8BAClB,UAAU,CAAC,UAAU;AACpB,6CAAa,kBAAkB,MAAM,OAAO,OAAO;AAAA,8BACpD;AAAA,8BACA,WAAW;AAAA,gCACV,OAAO,EAAE,cAAc,aAAa;AAAA,8BACrC;AAAA;AAAA,0BACD;AAAA,0BAAG;AAAA,0BAAI;AAAA;AAAA;AAAA,oBAER;AAAA,sBAEC,gDAAU,aAAV,mBAAoB,UAApB,mBAA2B,mBAAkB,QAC7C;AAAA,sBAAC;AAAA;AAAA,wBACA,MAAK;AAAA,wBACL,OAAM;AAAA,wBACN,MAAK;AAAA,wBACL,WAAW;AAAA,0BACV,YAAY,EAAE,QAAQ,KAAK;AAAA,0BAC3B,WAAW;AAAA,4BACV,MAAK,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,0BAC3C;AAAA,wBACD;AAAA,wBACA,OAAO,SAAS;AAAA,wBAChB,UAAU,CAAC,MAAM;AAChB,uCAAa,gBAAgB,EAAE,OAAO,KAAK;AAC3C,gCAAM,UAAU,EAAE,OAAO,WAAU,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AACxE,8BAAI,SAAS;AACZ,kCAAM,MAAM,oBAAI,KAAK;AACrB,kCAAM,YAAY,IAAI,SAAS;AAC/B,gCAAI,SAAS,eAAe,OAAO,SAAS,WAAW,IAAI,WAAW;AACrE,2CAAa,eAAe,EAAE;AAC9B,2CAAa,gBAAgB,EAAE;AAAA,4BAChC,WAAW,SAAS,eAAe,OAAO,SAAS,WAAW,MAAM,aAAa,SAAS,gBAAgB,OAAO,SAAS,YAAY,IAAI,IAAI,WAAW,GAAG;AAC3J,2CAAa,gBAAgB,EAAE;AAAA,4BAChC;AAAA,0BACD;AAAA,wBACD;AAAA,wBACA,WAAS;AAAA,wBACT,IAAI,EAAE,MAAM,EAAE;AAAA;AAAA,oBACf,IAEA,6CAAC,wBAAI,IAAI,EAAE,MAAM,EAAE,GAAG;AAAA;AAAA;AAAA,cAExB;AAAA,gBACC,gDAAU,aAAV,mBAAoB,UAApB,mBAA2B,mBAAkB,SAC7C;AAAA,gBAAC;AAAA;AAAA,kBACA,IAAI,EAAE,SAAS,QAAQ,KAAK,GAAG,IAAI,EAAE;AAAA,kBAErC;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACA,MAAK;AAAA,wBACL,SAAS,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AAAA,wBACxE,mBAAmB,CAAC,WAAW;AAC9B,gCAAM,UAAU,SAAS,kBAAiB,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AAC/E,iCAAO,WAAW,OAAO,MAAM,KAAI,oBAAI,KAAK,GAAE,SAAS;AAAA,wBACxD;AAAA,wBACA,OAAO,SAAS,eAAe;AAAA,wBAC/B,UAAU,CAAC,GAAG,UAAU,aAAa,eAAe,SAAS,EAAE;AAAA,wBAC/D,aAAa,CAAC,WACb,6CAAC,6DAAc,SAAd,EAAsB,OAAM,iBAAe;AAAA,wBAE7C,WAAS;AAAA,wBACT,IAAI,EAAE,MAAM,EAAE;AAAA;AAAA,oBACf;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACA,MAAK;AAAA,wBACL,SAAS,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AAAA,wBACxE,mBAAmB,CAAC,WAAW;AAC9B,gCAAM,UAAU,SAAS,kBAAiB,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AAC/E,gCAAM,MAAM,oBAAI,KAAK;AACrB,gCAAM,cAAc,WAAW,SAAS,gBAAgB,OAAO,IAAI,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AAC9F,iCAAO,eAAe,OAAO,MAAM,IAAI,IAAI,WAAW;AAAA,wBACvD;AAAA,wBACA,OAAO,SAAS,gBAAgB;AAAA,wBAChC,UAAU,CAAC,GAAG,UAAU,aAAa,gBAAgB,SAAS,EAAE;AAAA,wBAChE,aAAa,CAAC,WACb,6CAAC,6DAAc,SAAd,EAAsB,OAAM,mBAAiB;AAAA,wBAE/C,WAAS;AAAA,wBACT,IAAI,EAAE,MAAM,EAAE;AAAA;AAAA,oBACf;AAAA;AAAA;AAAA,cACD;AAAA,cAGD,6CAAC,wBAAI,IAAI,EAAE,IAAI,EAAE,GAChB;AAAA,gBAAC;AAAA;AAAA,kBACA,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,WAAS;AAAA,kBACT,SAAS;AAAA,kBACT,SAAS;AAAA,kBACT,OAAO,SAAS;AAAA,kBAChB,UAAU,CAAC,MAAM,aAAa,SAAS,EAAE,OAAO,KAAK;AAAA,kBACrD,WAAS;AAAA;AAAA,cACV,GACD;AAAA;AAAA;AAAA,QACD;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI,EAAE,WAAW,SAAS,GAAG,EAAE;AAAA,YAE/B;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,SAAS;AAAA,kBACT,IAAI;AAAA,oBACH,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,cAAc;AAAA,oBACd,eAAe;AAAA,kBAChB;AAAA,kBACA;AAAA;AAAA,cAED;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACA,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,SAAS,MAAM,oBAAoB,QAAQ;AAAA,kBAC3C,IAAI,EAAE,IAAI,GAAG,cAAc,QAAQ,eAAe,aAAa;AAAA,kBAC/D;AAAA;AAAA,cAED;AAAA;AAAA;AAAA,QACD;AAAA,SACD;AAAA;AAAA,EACD,GACD;AAEF;AAEO,SAAS,oBAAoB;AAAA,EACnC;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AACD,GAAQ;AACP,QAAM,cAAc,MAAM;AACzB,YAAQ,KAAK;AAAA,EACd;AAEA,SACC,6EACC;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,mBAAgB;AAAA,MAChB,oBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE;AAAA,MAE9C,wDAAC,0BAAM,IAAI,EAAE,cAAc,EAAE,GAC5B;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,SAAS;AAAA,cACT,WAAW;AAAA,YACZ;AAAA,YAEA;AAAA,2DAAC,+BAAW,SAAQ,SAAQ,2BAAa;AAAA,cACzC,6CAAC,+BAAW,SAAS,aACpB,uDAAC,aAAAkB,SAAA,EAAM,GACR;AAAA;AAAA;AAAA,QACD;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,WAAW;AAAA,cACX,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,cAAc;AAAA,YACf;AAAA,YAEC,sBAAY,SAAS,IACrB,2CAAa,IAAI,CAAC,SAAc,UAC/B;AAAA,cAAC;AAAA;AAAA,gBAEA,IAAI;AAAA,kBACH,GAAG;AAAA,kBACH,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,WAAW;AAAA,kBACX,SAAS;AAAA,kBACT,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,QAAQ;AAAA,kBACR,WAAW,EAAE,SAAS,kBAAkB;AAAA,gBACzC;AAAA,gBACA,SAAS,MAAM;AACd,0CAAwB,OAAO;AAAA,gBAChC;AAAA,gBAEA;AAAA,kBAAC;AAAA;AAAA,oBACA,SAAQ;AAAA,oBACR,IAAI;AAAA,sBACH,IAAI;AAAA,sBACJ,OAAO;AAAA,sBACP,UAAU;AAAA,sBACV,SAAS;AAAA,sBACT,YAAY;AAAA,oBACb;AAAA,oBAEA;AAAA,mEAAC,oBAAAkB,SAAA,EAAa,IAAI,EAAE,aAAa,MAAM,GAAG;AAAA,sBACzC,QAAQ;AAAA;AAAA;AAAA,gBACV;AAAA;AAAA,cA5BK;AAAA,YA6BN,KAEC;AAAA;AAAA,QACJ;AAAA,SACD;AAAA;AAAA,EACD,GACD;AAEF;AAEO,SAAS,kBAAkB,EAAE,MAAM,QAAQ,GAAQ;AACzD,QAAM,cAAc,MAAM;AACzB,YAAQ,KAAK;AAAA,EACd;AAEA,SACC,6EACC;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,mBAAgB;AAAA,MAChB,oBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE;AAAA,MAE9C,wDAAC,0BAAM,IAAI,EAAE,cAAc,EAAE,GAC5B;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,SAAS;AAAA,cACT,WAAW;AAAA,YACZ;AAAA,YAEA;AAAA,2DAAC,+BAAW,SAAQ,SAAQ,2BAAa;AAAA,cACzC,6CAAC,+BAAW,SAAS,aACpB,uDAAC,aAAAlB,SAAA,EAAM,GACR;AAAA;AAAA;AAAA,QACD;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,WAAW;AAAA,cACX,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,WAAW;AAAA,cACX,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,GAAG;AAAA,YACJ;AAAA,YACA;AAAA;AAAA,QAED;AAAA,SACD;AAAA;AAAA,EAED,GACD;AAEF;;;AD57DA;;;AI3CA,IAAAqB,iBAAgF;AAezE,SAAS,aACf,iBACA,kBACqB;AACrB,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAmB,eAAe;AAElE,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,KAAK;AAElD,QAAM,cAAU,uBAAuB;AAEvC,QAAM,gBAAY,uBAAiB,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;AAEjD,QAAM,mBAAe,uBAAiB,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;AAEpD,QAAM,qBAAiB;AAAA,IACtB,CAAC,gBAA0B;AAC1B,YAAM,UAAU,QAAQ;AACxB,UAAI,CAAC,QAAS;AAEd,YAAM,OAAO,QAAQ,sBAAsB;AAC3C,YAAM,gBAAgB,OAAO;AAC7B,YAAM,iBAAiB,OAAO;AAE9B,YAAM,sBAAsB;AAAA,QAC3B,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,YAAY,GAAG,gBAAgB,KAAK,KAAK,CAAC;AAAA,QAClE,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,YAAY,GAAG,iBAAiB,KAAK,MAAM,CAAC;AAAA,MACrE;AAEA,kBAAY,mBAAmB;AAC/B,2DAAmB;AAAA,IACpB;AAAA,IACA,CAAC,gBAAgB;AAAA,EAClB;AAEA,QAAM,kBAAc;AAAA,IACnB,CAAC,SAAiB,YAAoB;AACrC,oBAAc,IAAI;AAClB,gBAAU,UAAU,EAAE,GAAG,SAAS,GAAG,QAAQ;AAC7C,mBAAa,UAAU;AAEvB,YAAM,aAAa,CAAC,aAAqB,gBAAwB;AAChE,cAAM,SAAS,cAAc,UAAU,QAAQ;AAC/C,cAAM,SAAS,cAAc,UAAU,QAAQ;AAE/C,uBAAe;AAAA,UACd,GAAG,aAAa,QAAQ,IAAI;AAAA,UAC5B,GAAG,aAAa,QAAQ,IAAI;AAAA,QAC7B,CAAC;AAAA,MACF;AAEA,YAAM,kBAAkB,CAAC,MAA6B;AACrD,UAAE,eAAe;AACjB,mBAAW,EAAE,SAAS,EAAE,OAAO;AAAA,MAChC;AAEA,YAAM,kBAAkB,CAAC,MAA6B;AACrD,UAAE,eAAe;AACjB,cAAM,QAAQ,EAAE,QAAQ,CAAC;AACzB,YAAI,OAAO;AACV,qBAAW,MAAM,SAAS,MAAM,OAAO;AAAA,QACxC;AAAA,MACD;AAEA,YAAM,YAAY,MAAM;AACvB,sBAAc,KAAK;AACnB,iBAAS,oBAAoB,aAAa,eAAe;AACzD,iBAAS,oBAAoB,WAAW,SAAS;AACjD,iBAAS,oBAAoB,aAAa,eAAe;AACzD,iBAAS,oBAAoB,YAAY,SAAS;AAAA,MACnD;AAEA,eAAS,iBAAiB,aAAa,eAAe;AACtD,eAAS,iBAAiB,WAAW,SAAS;AAC9C,eAAS,iBAAiB,aAAa,iBAAiB;AAAA,QACvD,SAAS;AAAA,MACV,CAAC;AACD,eAAS,iBAAiB,YAAY,SAAS;AAAA,IAChD;AAAA,IACA,CAAC,UAAU,cAAc;AAAA,EAC1B;AAEA,QAAM,sBAAkB;AAAA,IACvB,CAAC,MAAkC;AAClC,QAAE,eAAe;AACjB,kBAAY,EAAE,SAAS,EAAE,OAAO;AAAA,IACjC;AAAA,IACA,CAAC,WAAW;AAAA,EACb;AAEA,QAAM,uBAAmB;AAAA,IACxB,CAAC,MAAkC;AAClC,QAAE,eAAe;AACjB,YAAM,QAAQ,EAAE,QAAQ,CAAC;AACzB,UAAI,OAAO;AACV,oBAAY,MAAM,SAAS,MAAM,OAAO;AAAA,MACzC;AAAA,IACD;AAAA,IACA,CAAC,WAAW;AAAA,EACb;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AJ3EA;AAEA;AACA;;;AKvCO,SAAS,oBACf,cAAsC,EAAE,OAAO,KAAK,GACpC;AAChB,MAAI,SAA6B;AACjC,MAAI,QAAQ;AAEZ,iBAAe,QAAQ;AACtB,QAAI,OAAQ;AACZ,aAAS,MAAM,UAAU,aAAa,aAAa,WAAW;AAE9D,WAAO,eAAe,EAAE,QAAQ,CAAC,UAAW,MAAM,UAAU,IAAK;AACjE,YAAQ;AAAA,EACT;AAEA,WAAS,WAAW,SAAkB;AACrC,QAAI,CAAC,OAAQ;AACb,WAAO,eAAe,EAAE,QAAQ,CAAC,UAAW,MAAM,UAAU,OAAQ;AACpE,YAAQ,CAAC;AAAA,EACV;AAEA,WAAS,OAAO;AACf,eAAW,KAAK;AAAA,EACjB;AAEA,WAAS,SAAS;AACjB,eAAW,IAAI;AAAA,EAChB;AAEA,WAAS,aAAa;AACrB,QAAI,OAAO;AACV,aAAO;AAAA,IACR,OAAO;AACN,WAAK;AAAA,IACN;AAAA,EACD;AAEA,WAAS,OAAO;AACf,QAAI,CAAC,OAAQ;AACb,WAAO,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;AAC1C,aAAS;AACT,YAAQ;AAAA,EACT;AAEA,WAAS,UAAU;AAClB,WAAO;AAAA,EACR;AAEA,WAAS,YAAY;AACpB,WAAO;AAAA,EACR;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;ACjEA,sBAAgC;AAEhC,IAAI,eAA8B;AAClC,IAAI,cAAkC;AAMtC,eAAsB,kBAAmC;AACxD,MAAI,cAAc;AACjB,WAAO;AAAA,EACR;AAGA,MACC,gBAAAC,QAAoB,WAAW,OAAO,KACtC,gBAAAA,QAAoB,WAAW,SAAS,KACxC,gBAAAA,QAAoB,WAAW,UAAU,KACzC,gBAAAA,QAAoB,WAAW,OAAO,GACrC;AACD,WAAO,gBAAAA;AAAA,EACR;AAGA,MAAI;AACH,UAAM,WAAW,MAAM,MAAM,gBAAAA,OAAmB;AAChD,QAAI,CAAC,SAAS,IAAI;AACjB,YAAM,IAAI,MAAM,QAAQ,SAAS,MAAM,KAAK,SAAS,UAAU,EAAE;AAAA,IAClE;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AAGjC,QAAI,KAAK,SAAS,GAAG;AACpB,YAAM,IAAI,MAAM,YAAY;AAAA,IAC7B;AAEA,mBAAe,IAAI,gBAAgB,IAAI;AACvC,WAAO;AAAA,EACR,SAAS,OAAO;AAGf,YAAQ,MAAM,gDAAgD,KAAK;AACnE,WAAO,gBAAAA;AAAA,EACR;AACD;AA6BA,eAAsB,qBAAgD;AACrE,QAAM,QAAQ,IAAI,MAAM;AAGxB,QAAM,OAAO;AACb,QAAM,SAAS;AACf,QAAM,UAAU;AAGhB,MAAI,WAAmB;AAGvB,MAAI;AACH,eAAW,MAAM,gBAAgB;AAAA,EAClC,SAAS,OAAO;AACf,YAAQ,KAAK,oDAAoD,KAAK;AACtE,eAAW,gBAAAC;AAAA,EACZ;AAGA,QAAM,eAAe,OAAO,QAAkC;AAC7D,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC/B,YAAM,eAAe,MAAM;AAE1B,cAAM,UAAU,MAAM,cAAc,iBAAiB;AACrD,YAAI,SAAS;AACZ,kBAAQ,IAAI;AACZ;AAAA,QACD;AAGA,YAAI,MAAM,OAAO;AAChB,kBAAQ,KAAK;AACb;AAAA,QACD;AAGA,mBAAW,cAAc,GAAG;AAAA,MAC7B;AAEA,YAAM,iBAAiB,WAAW,MAAM,QAAQ,IAAI,GAAG,EAAE,MAAM,KAAK,CAAC;AACrE,YAAM,iBAAiB,SAAS,MAAM,QAAQ,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AACpE,YAAM,MAAM;AACZ,YAAM,KAAK;AAGX,iBAAW,MAAM,QAAQ,KAAK,GAAG,GAAI;AAAA,IACtC,CAAC;AAAA,EACF;AAGA,MAAI,SAAS,MAAM,aAAa,QAAQ;AAGxC,MAAI,CAAC,UAAU,aAAa,gBAAAA,SAAqB;AAChD,aAAS,MAAM,aAAa,gBAAAA,OAAmB;AAC/C,QAAI,QAAQ;AACX,iBAAW,gBAAAA;AAAA,IACZ;AAAA,EACD;AAEA,SAAO;AACR;AAKO,SAAS,wBAA8B;AAC7C,MAAI,cAAc;AACjB,QAAI,gBAAgB,YAAY;AAChC,mBAAe;AAAA,EAChB;AACA,gBAAc;AACf;;;ANjGA,IAAAC,gBAA2B;AAE3B;AAo6BK,IAAAC,sBAAA;AAl6BL,IAAM,0BAA0B,CAAC,YAAiB,YAAiB;AAClE,QAAM,qBAAqB,yCAAY;AACvC,QAAM,oBAAoB,mCAAS;AACnC,QAAM,wBAAwB,mBAAmB,IAAI,CAAC,SAAc;AAjErE,QAAAC,KAAA;AAkEE,SAAI,6BAAM,UAAS,GAAG;AACrB,YAAM,YAAY,QAAQ,KAAK,IAAI;AACnC,aAAO,iCACH,OADG;AAAA,QAEN,MAAM;AAAA,QACN,SAAQ,4DAAoB,eAApB,aAAkCA,MAAA,yCAAY,aAAZ,gBAAAA,IAAsB;AAAA,QAChE,QAAO,oDAAY,aAAZ,mBAAsB,iBAAtB,YAAsC;AAAA,MAC9C;AAAA,IACD,OAAO;AACN,YAAM,YAAY,QAAQ,KAAK,IAAI;AACnC,YAAM,WAAW,QAAQ,KAAK,IAAI;AAElC,YAAM,YAAY,qBAAqB,uBAAkB,SAAS,MAA3B,YAAgC,SAAU,KAAK;AACtF,UAAI,WAAW,uDAAoB;AAEnC,UAAI,aAAa,QAAQ,aAAa,OAAO,aAAa,QAAW;AACpE,mBAAW,cAAc,SAAS,KAAK,KAAK;AAAA,MAC7C;AAEA,aAAO,iCACH,OADG;AAAA,QAEN,QAAQ;AAAA,QACR,OAAO;AAAA,MACR;AAAA,IACD;AAAA,EACD,CAAC;AAED,SAAO;AACR;AAEA,IAAM,iBAAiB,CAAC,YAA4B;AACnD,QAAM,OAAO,KAAK,MAAM,UAAU,EAAE;AACpC,QAAM,OAAO,UAAU;AACvB,SAAO,GAAG,KAAK,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAC/E;AAEO,SAAS,aAAa,EAAE,aAAa,GAA0B;AAtGtE,MAAAA,KAAA;AAuGC,QAAM,YAAQ,2BAAS;AACvB,QAAM,QAAQ,YAAY;AAC1B,QAAM,EAAE,UAAU,IAAI,SAAS;AAE/B,QAAM,EAAE,UAAU,SAAS,SAAS,IAAI,eAAU;AAAA,IACjD,YAAUA,MAAA,MAAM,cAAN,gBAAAA,IAAiB,aAAY,CAAC;AAAA,IACxC,WAAS,WAAM,cAAN,mBAAiB,YAAW,CAAC;AAAA,IACtC,YAAU,WAAM,cAAN,mBAAiB,aAAY,CAAC;AAAA,EACzC,CAAC;AAED,QAAM,aAAS,uBAA6B,IAAI;AAChD,QAAM,mBAAe,uBAAyB,IAAI;AAClD,QAAM,eAAW,uBAAgC,IAAI;AACrD,QAAM,0BAAsB,uBAA6C,IAAI;AAC7E,QAAM,sBAAkB,uBAA8C,IAAI;AAC1E,QAAM,2BAAuB,uBAAe,CAAC;AAC7C,QAAM,oBAAgB,uBAAO,KAAK;AAClC,QAAM,uBAAmB,uBAAsB,IAAI;AACnD,QAAM,8BAA0B,uBAAgB,KAAK;AAErD,QAAM,uBAAmB,uBAAsB,IAAI;AAEnD,QAAM,uBAAmB,uBAAsB,IAAI;AAEnD,QAAM,uBAAuB;AAC7B,QAAM,qBAAqB;AAC3B,QAAM,oBAAoB;AAE1B,QAAM,CAAC,UAAU,WAAW,QAAI,yBAA6B,IAAI;AACjE,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAA6B,IAAI;AAC7E,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAA6B,IAAI;AAC7E,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,yBAA6B,IAAI;AACnF,QAAM,CAAC,qBAAqB,sBAAsB,QAAI,yBAA6B,IAAI;AAEvF,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAkB,IAAI;AAC1D,QAAM,CAAC,qBAAqB,sBAAsB,QAAI,yBAAkB,KAAK;AAC7E,QAAM,CAAC,qBAAqB,sBAAsB,QAAI,yBAAkB,KAAK;AAC7E,QAAM,CAAC,uBAAuB,wBAAwB,QAAI,yBAAkB,KAAK;AAEjF,QAAM,CAAC,aAAa,cAAc,QAAI,yBAMpC,IAAI;AAEN,QAAM,CAAC,YAAY,aAAa,QAAI,yBAQlC,IAAI;AAGN,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAiB,EAAE;AACzD,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAiB,CAAC;AAC1D,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAAwB,IAAI;AAExE,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAiB,CAAC;AAE1D,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAiB,CAAC;AAE1D,QAAM,EAAE,UAAU,YAAY,SAAS,iBAAiB,iBAAiB,IAAI;AAAA,IAC5E,MAAM;AAAA,IACN,CAAC,gBAAgB,gBAAgB,wBAAwB,WAAW;AAAA,EACrE;AAEA,QAAM;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACnB,IAAI;AAAA,IAAa,MAAM;AAAA,IAAgB,CAAC,gBACvC,gBAAgB,kBAAkB,WAAW;AAAA,EAC9C;AAEA,QAAM,CAACC,cAAa,EAAE,WAAW,mBAAmB,CAAC,IAAI,eAUtD;AAAA,IACF,WAAW,MAAM;AAChB,qBAAe,EAAE;AACjB,wBAAkB,IAAI;AAAA,IACvB;AAAA,EACD,CAAC;AAED,QAAM,CAAC,cAAc,EAAE,WAAW,oBAAoB,CAAC,IAAI,eAMxD;AAEH,QAAM,CAAC,cAAc,EAAE,WAAW,oBAAoB,CAAC,IAAI,eAOxD;AAEH,QAAM,CAAC,kBAAkB,EAAE,WAAW,kBAAkB,CAAC,IAAI,eAI1D;AAAA,IACF,WAAW,MAAM;AAChB,sBAAgB,eAAe,EAAE;AAAA,IAClC;AAAA,EACD,CAAC;AAED,QAAM,CAAC,mBAAmB,EAAE,UAAU,CAAC,IAAI,eAIxC;AAEH,QAAM,CAAC,gBAAgB,IAAI,eAGxB;AAEH,QAAM,CAACC,UAAS,EAAE,WAAW,eAAe,CAAC,IAAI,eAc9C;AAAA,IACF,WAAW,MAAM;AAChB,sBAAgB,QAAQ;AACxB,6BAAuB,KAAK;AAC5B,sBAAgB,qBAAqB;AAAA,IACtC;AAAA,EACD,CAAC;AAED,QAAM,yBAAyB,MAAM;AACpC,gBAAY,IAAI;AAAA,EACjB;AAEA,QAAM,mBAAmB,CAAC,UAAyC;AAClE,kBAAc,IAAI;AAClB,sBAAkB,MAAM,aAAa;AAAA,EACtC;AACA,QAAM,6BAA6B,CAAC,UAAyC;AAC5E,yBAAqB,MAAM,aAAa;AAAA,EACzC;AAEA,QAAM,wBAAwB,CAAC,UAAyC;AACvE,2BAAuB,MAAM,aAAa;AAAA,EAC3C;AAEA,QAAM,oBAAoB,MAAM;AAC/B,sBAAkB,IAAI;AAAA,EACvB;AACA,QAAM,uBAAuB,MAAM;AAClC,yBAAqB,IAAI;AAAA,EAC1B;AAEA,QAAM,yBAAyB,MAAM;AACpC,2BAAuB,IAAI;AAAA,EAC5B;AAEA,QAAM,wBAAwB,CAAC,UAAyC;AACvE,sBAAkB,MAAM,aAAa;AAAA,EACtC;AAEA,QAAM,yBAAyB,MAAM;AACpC,sBAAkB,IAAI;AAAA,EACvB;AAEA,QAAM,mBAAmB,MAAM;AAxShC,QAAAF;AAySE,UAAM,UAAU;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ,QAAOA,MAAA,MAAM,YAAN,OAAAA,MAAiB,EAAE;AAAA,IACnC;AAEA,qBAAiB,UAAU,aAAa,OAAO;AAAA,EAChD;AAEA,QAAM,0BAA0B,CAAC,WAAmB;AAjTrD,QAAAA,KAAAG,KAAAC;AAkTE,sBAAkB,IAAI;AACtB,UAAM,iBAAgBD,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAG,IAAwB;AAC9C,QAAI,+FAA6E,EAAE,SAAS,aAAa,GAAG;AAC3G,gBAAU,6CAA6C,OAAO;AAC9D;AAAA,IACD;AACA,UAAM,UAAU;AAAA,MACf,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,QAAQ,QAAOC,MAAA,MAAM,YAAN,OAAAA,MAAiB,EAAE;AAAA,IACnC;AACA,sBAAkB,UAAU,oBAAoB,OAAO,EAAE,KAAK,MAAM;AACnE,sBAAgB,eAAe,MAAM;AAAA,IACtC,CAAC;AAAA,EACF;AAEA,QAAM,kBAAkB,CAAC,WAAmB;AAlU7C,QAAAJ,KAAAG,KAAAC,KAAAC;AAmUE,QAAI,OAAO,WAAW,IAAI;AACzB,gBAAU,wBAAwB,OAAO;AAAA,IAC1C,WAAW,CAAC,QAAQ,KAAK,MAAM,GAAG;AACjC,gBAAU,wBAAwB,OAAO;AAAA,IAC1C,OAAO;AAIN,YAAM,kBAAiBF,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,OAAAG,MAA0B,IAAI,YAAY;AACjE,YAAM,eAAe;AAErB,UAAI,iBAAiB;AACrB,UAAI,GAACC,MAAA,MAAM,cAAN,gBAAAA,IAAiB,0BAAyB;AAC9C,YAAI,cAAc;AACjB,cAAI,MAAM,cAAc;AACvB,6BAAiB,MAAM;AAAA,UACxB,YAAWC,MAAA,MAAM,aAAN,gBAAAA,IAAgB,SAAS;AACnC,6BAAiB,MAAM,SAAS;AAChC,4BAAgB,gBAAgB,cAAc;AAAA,UAC/C;AAAA,QACD,WAAW,MAAM,cAAc;AAC9B,0BAAgB,gBAAgB,IAAI;AAAA,QACrC;AAAA,MACD,WAAW,MAAM,cAAc;AAC9B,wBAAgB,gBAAgB,IAAI;AAAA,MACrC;AAEA,YAAM,UAAU;AAAA,QACf,cAAc;AAAA,QACd,MAAM,MAAM;AAAA,QACZ,aAAa;AAAA,QACb,SAAS;AAAA,QACT,cAAc;AAAA,QACd,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,UAAU;AAAA,QACV;AAAA,MACD;AAEA,MAAAJ,aAAY,UAAU,eAAe,OAAO;AAAA,IAC7C;AAAA,EACD;AAEA,QAAM,mBAAmB,MAAM;AA9WhC,QAAAD,KAAAG,KAAAC,KAAAC;AA+WE,UAAM,UAAU;AAAA,MACf,UAAQL,MAAA,MAAM,aAAN,gBAAAA,IAAgB,UAAS;AAAA,MACjC,SAAS,QAAOG,MAAA,MAAM,YAAN,OAAAA,MAAiB,EAAE;AAAA,MACnC,YAAWE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,MACtC,aAAa;AAAA,IACd;AACA,iBAAa,UAAU,WAAW,OAAO;AAAA,EAC1C;AAEA,QAAM,mBAAmB,MAAM;AAxXhC,QAAAL,KAAAG,KAAAC,KAAAC;AAyXE,UAAM,UAAU;AAAA,MACf,UAAQL,MAAA,MAAM,aAAN,gBAAAA,IAAgB,UAAS;AAAA,MACjC,WAAW;AAAA,MACX,SAAS,QAAOG,MAAA,MAAM,YAAN,OAAAA,MAAiB,EAAE;AAAA,MACnC,YAAWE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,MACtC,aAAa;AAAA,IACd;AAEA,iBAAa,UAAU,WAAW,OAAO;AAAA,EAC1C;AAEA,QAAM,gBAAgB,CAAC,SAQjB;AA5YP,QAAAL,KAAAG,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC;AA6YE,UAAM,UAAU;AAAA,MACf,UAASZ,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAG,MAA2B;AAAA,MACpC,WAAUC,MAAA,MAAM,YAAN,OAAAA,MAAiB;AAAA,MAC3B,eAAcE,OAAAD,MAAA,6BAAM,aAAN,gBAAAA,IAAgB,UAAhB,OAAAC,MAAyB;AAAA,MACvC,gBAAeC,MAAA,6BAAM,iBAAN,OAAAA,MAAsB;AAAA,MACrC,cAAc,OAAO,6BAAM,WAAW,KAAK;AAAA,MAC3C,eAAe,OAAO,6BAAM,YAAY,KAAK;AAAA,MAC7C,gBAAeE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,iBAAhB,OAAAC,MAAgC;AAAA,MAC/C,gBAAeC,MAAA,6BAAM,UAAN,OAAAA,MAAe;AAAA,MAC9B,oBAAmBE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,YAAhB,OAAAC,MAA2B;AAAA,MAC9C,mBAAkBC,MAAA,6BAAM,mBAAN,OAAAA,MAAwB;AAAA,MAC1C,cAAaE,OAAAD,MAAA,6BAAM,gBAAN,gBAAAA,IAAmB,UAAnB,OAAAC,MAA4B;AAAA,MACzC,aAAa;AAAA,MACb,QAAQ;AAAA,IACT;AAEA,mBAAe,EAAE;AACjB,IAAAb,SAAQ,UAAU,UAAU,OAAO;AAAA,EACpC;AAEA,gCAAU,MAAM;AACf,UAAM,qBAAqB,CAAC,MAAyB;AACpD,QAAE,eAAe;AAAA,IAClB;AAEA,WAAO,iBAAiB,gBAAgB,kBAAkB;AAE1D,WAAO,MAAM;AACZ,aAAO,oBAAoB,gBAAgB,kBAAkB;AAAA,IAC9D;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,gCAAU,MAAM;AACf,UAAM,MAAM,oBAAoB;AAChC,WAAO,UAAU;AAEjB,QAAI,MAAM,EAAE,MAAM,CAAC,QAAQ;AAC1B,cAAQ,MAAM,wBAAwB,GAAG;AAAA,IAC1C,CAAC;AACD,UAAM,gBAAgB,CAAC,UAAyB;AApblD,UAAAF,KAAAG,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC;AAqbG,YAAM,gBAAY,0BAAW,WAAW;AACxC,YAAM,OAAMrB,MAAA,MAAM,QAAN,gBAAAA,IAAW;AAEvB,UAAI,CAAC,MAAM,YAAUG,MAAA,uCAAW,aAAX,gBAAAA,IAAqB,mCAA8B;AACvE;AAAA,MACD;AAEA,UAAI,QAAQ,OAAO,QAAOC,MAAA,uCAAW,aAAX,gBAAAA,IAAqB,IAAI,MAAM,KAAK;AAC7D,cAAM,eAAe;AACrB,SAAAC,MAAA,OAAO,YAAP,gBAAAA,IAAgB;AAChB,cAAM,UAAU;AAAA,UACf;AAAA,UACA,WAAW;AAAA,UACX,SAAS,QAAOC,MAAA,UAAU,YAAV,OAAAA,MAAqB,EAAE;AAAA,UACvC,YAAWE,OAAAD,MAAA,uCAAW,aAAX,gBAAAA,IAAqB,YAArB,OAAAC,MAAgC;AAAA,UAC3C,aAAa;AAAA,QACd;AAEA,qBAAa,UAAU,WAAW,OAAO;AAAA,MAC1C;AAEA,UAAI,QAAQ,OAAO,QAAOC,MAAA,uCAAW,aAAX,gBAAAA,IAAqB,IAAI,MAAM,KAAK;AAC7D,cAAM,eAAe;AACrB,cAAM,UAAU;AAAA,UACf;AAAA,UACA,WAAW;AAAA,UACX,SAAS,QAAOC,MAAA,UAAU,YAAV,OAAAA,MAAqB,EAAE;AAAA,UACvC,YAAWE,OAAAD,MAAA,uCAAW,aAAX,gBAAAA,IAAqB,YAArB,OAAAC,MAAgC;AAAA,UAC3C,aAAa;AAAA,QACd;AAEA,qBAAa,UAAU,WAAW,OAAO;AACzC,SAAAC,MAAA,OAAO,YAAP,gBAAAA,IAAgB;AAAA,MACjB;AAEA,UAAI,QAAQ,OAAO,QAAOC,MAAA,uCAAW,aAAX,gBAAAA,IAAqB,IAAI,MAAM,KAAK;AAC7D,cAAM,eAAe;AACrB,cAAM,UAAU;AAAA,UACf;AAAA,UACA,SAAS,QAAOC,MAAA,UAAU,YAAV,OAAAA,MAAqB,EAAE;AAAA,UACvC,YAAWE,OAAAD,MAAA,uCAAW,aAAX,gBAAAA,IAAqB,YAArB,OAAAC,MAAgC;AAAA,UAC3C,aAAa;AAAA,QACd;AAEA,qBAAa,UAAU,WAAW,OAAO;AAAA,MAC1C;AAEA,UAAI,QAAQ,OAAO,QAAOC,MAAA,uCAAW,aAAX,gBAAAA,IAAqB,IAAI,MAAM,KAAK;AAC7D,cAAM,eAAe;AACrB,cAAM,UAAU;AAAA,UACf;AAAA,UACA,SAAS,QAAOC,MAAA,UAAU,YAAV,OAAAA,MAAqB,EAAE;AAAA,UACvC,YAAWE,OAAAD,MAAA,uCAAW,aAAX,gBAAAA,IAAqB,YAArB,OAAAC,MAAgC;AAAA,UAC3C,aAAa;AAAA,QACd;AAEA,qBAAa,UAAU,WAAW,OAAO;AAAA,MAC1C;AAAA,IACD;AAEA,WAAO,iBAAiB,WAAW,aAAa;AAEhD,WAAO,MAAM;AACZ,aAAO,oBAAoB,WAAW,aAAa;AAAA,IACpD;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,gCAAU,MAAM;AACf,QAAI;AACJ,QAAI;AAEJ,QAAI,MAAM,SAAS,UAAU,MAAM,SAAS,kCAA8B;AACzE,iBAAW,YAAY,MAAM;AAC5B,cAAM,UAAU,MAAM,gBACnB,KAAK,OAAO,KAAK,IAAI,IAAI,OAAO,MAAM,aAAa,KAAK,GAAI,IAC5D;AAEH,wBAAgB,OAAO;AAAA,MACxB,GAAG,GAAI;AAAA,IACR,OAAO;AACN,sBAAgB,CAAC;AAAA,IAClB;AAEA,QACC,MAAM,SAAS,UACf,MAAM,SAAS,oCACf,mBAAmB,MAClB;AACD,uBAAiB,YAAY,MAAM;AAClC,0BAAkB,CAAC,aAAa;AAC/B,cAAI,aAAa,QAAQ,YAAY,GAAG;AACvC,0BAAc,cAAc;AAC5B,0BAAc;AAAA,cACb,aAAa,EAAE,OAAO,eAAe,OAAO,cAAc;AAAA,cAC1D,UAAU,EAAE,OAAO,MAAM,OAAO,IAAI;AAAA,cACpC,cAAc;AAAA,cACd,aAAa;AAAA,cACb,cAAc;AAAA,cACd,gBAAgB;AAAA,YACjB,CAAC;AACD,mBAAO;AAAA,UACR;AACA,iBAAO,WAAW;AAAA,QACnB,CAAC;AAAA,MACF,GAAG,GAAI;AAAA,IACR;AAEA,WAAO,MAAM;AACZ,UAAI,SAAU,eAAc,QAAQ;AACpC,UAAI,eAAgB,eAAc,cAAc;AAAA,IACjD;AAAA,EACD,GAAG,CAAC,MAAM,SAAS,MAAM,CAAC;AAG1B,gCAAU,MAAM;AAviBjB,QAAArB,KAAAG,KAAAC;AAwiBE,QAAI;AAEJ,UAAM,aACJD,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAG,IAAwB;AAC1B,UAAMmB,cAAWlB,MAAA,MAAM,aAAN,gBAAAA,IAAgB,UAAS;AAE1C,QAAIkB,aAAY,UAAU;AACzB,UAAI,CAAC,iBAAiB,SAAS;AAC9B,yBAAiB,UAAU,KAAK,IAAI;AAAA,MACrC;AACA,qBAAe,YAAY,MAAM;AAChC;AAAA,UACC,KAAK,OAAO,KAAK,IAAI,IAAI,iBAAiB,WAAY,GAAI;AAAA,QAC3D;AAAA,MACD,GAAG,GAAI;AAAA,IACR,OAAO;AACN,uBAAiB,UAAU;AAC3B,sBAAgB,CAAC;AAAA,IAClB;AAEA,WAAO,MAAM;AACZ,UAAI,aAAc,eAAc,YAAY;AAAA,IAC7C;AAAA,EACD,GAAG,EAAC,WAAM,aAAN,mBAAgB,OAAM,WAAM,aAAN,mBAAgB,MAAM,CAAC;AAGjD,gCAAU,MAAM;AAlkBjB,QAAAtB,KAAAG,KAAAC,KAAAC;AAmkBE,QAAI;AAEJ,UAAM,aACJF,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAG,IAAwB;AAC1B,UAAMoB,aAAUnB,MAAA,MAAM,aAAN,gBAAAA,IAAgB,UAAS;AACzC,UAAM,WAASC,MAAA,MAAM,aAAN,gBAAAA,IAAgB,UAAS;AAExC,QAAIkB,YAAW,YAAY,CAAC,QAAQ;AAEnC,UAAI,CAAC,iBAAiB,SAAS;AAC9B,yBAAiB,UAAU,KAAK,IAAI;AAAA,MACrC;AACA,qBAAe,YAAY,MAAM;AAChC;AAAA,UACC,KAAK,OAAO,KAAK,IAAI,IAAI,iBAAiB,WAAY,GAAI;AAAA,QAC3D;AAAA,MACD,GAAG,GAAI;AAAA,IACR,OAAO;AAEN,uBAAiB,UAAU;AAC3B,sBAAgB,CAAC;AAAA,IAClB;AAEA,WAAO,MAAM;AACZ,UAAI,aAAc,eAAc,YAAY;AAAA,IAC7C;AAAA,EACD,GAAG,EAAC,WAAM,aAAN,mBAAgB,OAAM,WAAM,aAAN,mBAAgB,MAAM,CAAC;AAGjD,gCAAU,MAAM;AACf,uBAAmB,EACjB,KAAK,CAAC,UAAU;AAChB,eAAS,UAAU;AAAA,IACpB,CAAC,EACA,MAAM,CAAC,UAAU;AACjB,cAAQ,MAAM,iCAAiC,KAAK;AAAA,IACrD,CAAC;AAEF,WAAO,MAAM;AACZ,UAAI,SAAS,SAAS;AACrB,iBAAS,QAAQ,MAAM;AACvB,iBAAS,QAAQ,cAAc;AAC/B,iBAAS,QAAQ,MAAM;AACvB,iBAAS,UAAU;AAAA,MACpB;AAEA,4BAAsB;AAAA,IACvB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,gCAAU,MAAM;AArnBjB,QAAAvB,KAAAG;AAsnBE,QAAI,gBAAgB,MAAM,UAAU;AACnC,YAAM,EAAE,YAAY,cAAc,QAAQ,cAAc,UAAU,SAAS,aAAa,IACvF,MAAM;AACP,YAAM,WAAW;AAAA,QAChB;AAAA,QACA;AAAA,QACA,iBAAiB;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,mBAAkBA,OAAAH,MAAA,MAAM,wBAAN,gBAAAA,IAA2B,qBAA3B,OAAAG,MAA+C;AAAA,QACjE,aAAa,MAAM;AAAA,MACpB;AACA,mBAAa,QAAQ;AAAA,IACtB;AAAA,EACD,GAAG,CAAC,MAAM,UAAU,YAAY,CAAC;AAEjC,gCAAU,MAAM;AACf,QAAI,MAAM,SAAS;AAiClB,oBACE,IAAI,UAAU,WAAW,EACzB,KAAK,CAAC,QAAQ;AA5qBnB,YAAAH,KAAAG,KAAAC,KAAAC;AA6qBK,YAAI,SAAOL,MAAA,IAAI,SAAJ,gBAAAA,IAAU,WAAQI,OAAAD,MAAA,2BAAK,SAAL,gBAAAA,IAAW,SAAX,gBAAAC,IAAiB,SAAQ;AACrD,wBAAc,IAAI,KAAK,IAAI;AAC3B,gBAAM,cAAaC,MAAA,gBAAgB,SAAS,EAAE,aAA3B,gBAAAA,IAAqC;AACxD,cAAI,CAAC,YAAY;AAChB,oCAAwB,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI;AAAA,UAC9C;AAAA,QACD;AAAA,MACD,CAAC,EACA,MAAM,CAAC,QAAQ;AACf,kBAAU,IAAI,SAAS,KAAK,SAAS,OAAO;AAAA,MAC7C,CAAC;AAAA,IACH;AAAA,EACD,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,QAAM,mBAAmB,MAAM;AA3rBhC,QAAAL,KAAAG;AA4rBE,QAAI,CAAC,MAAM,SAAS;AACnB;AAAA,IACD;AAEA,QAAI,oBAAoB,SAAS;AAChC,mBAAa,oBAAoB,OAAO;AACxC,0BAAoB,UAAU;AAAA,IAC/B;AAEA,QAAI;AACH,mBAAa,UAAU,IAAI,UAAU,IAAGH,MAAA,MAAM,cAAN,gBAAAA,IAAiB,YAAY,kCAAiCG,MAAA,MAAM,kBAAN,gBAAAA,IAAqB,WAAW,EAAE;AAExI,mBAAa,QAAQ,SAAS,MAAM;AACnC,gBAAQ,IAAI,4CAAqC;AACjD,6BAAqB,UAAU;AAE/B,YAAI,gBAAgB,SAAS;AAC5B,wBAAc,gBAAgB,OAAO;AAAA,QACtC;AACA,wBAAgB,UAAU,YAAY,MAAM;AAC3C,cAAI,aAAa,WAAW,aAAa,QAAQ,eAAe,UAAU,MAAM;AAC/E,gBAAI;AACH,2BAAa,QAAQ,KAAK,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC;AAAA,YAC3D,SAAS,OAAO;AACf,sBAAQ,MAAM,wBAAwB,KAAK;AAAA,YAC5C;AAAA,UACD;AAAA,QACD,GAAG,GAAK;AAAA,MACT;AAEA,mBAAa,QAAQ,YAAY,CAAC,UAAU;AA1tB/C,YAAAH,KAAAG,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC;AA2tBI,YAAI;AACH,gBAAM,OAAO,KAAK,MAAM,MAAM,IAAI;AAElC,cAAI,KAAK,SAAS,QAAQ;AACzB;AAAA,UACD;AAEA,gBAAM,eAAW,0BAAW,WAAW;AACvC,gBAAM,YAAY,wBAAwB,UAAU,IAAI;AAExD,gBAAM,WAAW;AAAA,YAChB,UAAU,6BAAM;AAAA,YAChB,QAAQ,6BAAM;AAAA,YACd,MAAM,6BAAM;AAAA,YACZ,YAAY,6BAAM;AAAA,YAClB,cAAc,6BAAM;AAAA,YACpB,SAAS,6BAAM;AAAA,YACf,YAAY,6BAAM;AAAA,YAClB,cAAc,6BAAM;AAAA,YACpB,MAAM,6BAAM;AAAA,YACZ,MAAM,6BAAM;AAAA,YACZ,MAAM,6BAAM;AAAA,YACZ,YAAY,6BAAM;AAAA,YAClB,mBAAkBR,MAAA,6BAAM,qBAAN,OAAAA,MAA0B;AAAA,cACxC,6BAAM,kBAAiB,UAAa,EAAE,cAAc,KAAK,aAAa;AAE3E,0BAAgB,eAAe,QAAQ;AACvC,0BAAgB,qBAAqB,CAAC,GAAG,SAAS,CAAC;AACnD,0BAAgB,gBAAeG,MAAA,KAAK,iBAAL,OAAAA,MAAqB,IAAI;AAExD,gBAAM,mBAAmB,6BAAM;AAC/B,cAAI,kBAAkB;AACrB,kBAAM,2BAA2B,OAAO,KAAK,gBAAgB,EAAE,KAAK,CAAC,QAAQ;AA3vBnF,kBAAAH;AA4vBO,oBAAM,QAAQ,IAAI,MAAM,qBAAqB;AAC7C,kBAAI,CAAC,MAAO,QAAO;AACnB,oBAAM,UAAU,OAAO,MAAM,CAAC,CAAC;AAC/B,kBAAI,WAAW,EAAG,QAAO;AACzB,oBAAM,SAAS,QAAOA,MAAA,iBAAiB,GAAG,MAApB,OAAAA,MAAyB,EAAE,EAAE,YAAY;AAC/D,qBAAO;AAAA,YACR,CAAC;AAED,gBAAI,0BAA0B;AAC7B,kBAAI,CAAC,wBAAwB,SAAS;AACrC,gCAAgB,wBAAwB,IAAI;AAC5C,wCAAwB,UAAU;AAAA,cACnC;AAAA,YACD,OAAO;AACN,sCAAwB,UAAU;AAAA,YACnC;AAAA,UACD,OAAO;AACN,oCAAwB,UAAU;AAAA,UACnC;AAEA,cAAI,6BAAM,uBAAuB;AAChC,4BAAgB,+BAA+B,KAAK,qBAAqB;AAAA,UAC1E,OAAO;AACN,4BAAgB,qBAAqB;AAAA,UACtC;AAEA,cAAI,iDAAuC,EAAE,SAAS,KAAK,MAAoB,GAAG;AACjF,0BAAc,IAAI;AAClB,+BAAkBK,OAAAD,MAAA,qCAAU,cAAV,gBAAAA,IAAqB,qBAArB,OAAAC,MAAyC,IAAI;AAC/D,4BAAgB,qBAAqB;AAAA,cACpC;AAAA,gBACC,MAAM;AAAA,gBACN,QAAQ;AAAA,gBACR,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,QAAQ;AAAA,gBACR,aAAa;AAAA,gBACb,aAAa;AAAA,cACd;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,QAAQ;AAAA,gBACR,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,QAAQ;AAAA,gBACR,aAAa;AAAA,gBACb,aAAa;AAAA,cACd;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,QAAQ;AAAA,gBACR,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,QAAQ;AAAA,gBACR,aAAa;AAAA,gBACb,aAAa;AAAA,cACd;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,QAAQ;AAAA,gBACR,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,QAAQ;AAAA,gBACR,aAAa;AAAA,gBACb,aAAa;AAAA,cACd;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,QAAQ;AAAA,gBACR,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,QAAQ;AAAA,gBACR,aAAa;AAAA,gBACb,aAAa;AAAA,cACd;AAAA,YACD,CAAC;AAED,iBAAI,6BAAM,UAAS,YAAY,SAAS,aAAWC,MAAA,+BAAO,cAAP,gBAAAA,IAAkB,iBAAgB;AACpF,uBAAS,QAAQ,KAAK,EAAE,MAAM,CAAC,UAAU;AACxC,wBAAQ,MAAM,4BAA4B,KAAK;AAAA,cAChD,CAAC;AAAA,YACF;AAAA,UACD,OAAO;AACN,gBAAI,SAAS,SAAS;AACrB,uBAAS,QAAQ,MAAM;AACvB,uBAAS,QAAQ,cAAc;AAAA,YAChC;AAAA,UACD;AAEA,cAAI,KAAK,8BAA4B;AAAA,UAErC,WAAW,KAAK,kCAA8B;AAG7C,gBAAI,KAAK,kCAA8B;AACtC,8BAAgB,UAAU;AAAA,YAC3B;AAEA,gBAAI,CAAC,YAAY;AAChB,4BAAc,IAAI;AAAA,YACnB;AAEA,iBAAI,6BAAM,UAAS,MAAK,6BAAM,UAAS,GAAG;AAAA,YAE1C,OAAO;AAAA,YAEP;AAAA,UACD,aACE,6BAAM,UAAS,MAAK,6BAAM,UAAS,MACpC,KAAK,kCACJ;AAAA,UAEF,WAAW,KAAK,gCAA6B;AAC5C,kBAAM,aAAYC,MAAA,qCAAU,cAAV,gBAAAA,IAAqB;AACvC,kBAAM,aAAYC,MAAA,6BAAM,eAAN,OAAAA,MAAoB;AAEtC,gBAAI,cAAc,iBAAiB,SAAS;AAC3C,4BAAc,UAAU;AACxB,+BAAiB,UAAU;AAAA,YAC5B;AAEA,gBAAI,cAAc;AAClB,gBAAI,aAAa,WAAW;AAC3B,oBAAM,wBACJ,oBAAI,KAAK,GAAE,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,QAAQ,KAAK;AAE1D,kBAAI,OAAO,oBAAoB,QAAQ,CAAC,CAAC,KAAK,OAAO,SAAS,GAAG;AAChE,8BAAc;AAAA,cACf;AAAA,YACD;AAEA,gBAAI,aAAa;AAChB,kBAAI,CAAC,cAAc,SAAS;AAE3B,8BAAc,UAAU;AAAA,cACzB;AAAA,YACD,OAAO;AAAA,YAEP;AAAA,UACD,WAAW,KAAK,kCAA8B;AAE7C,4BAAgB,QAAQ;AAAA,UACzB;AAAA,QACD,SAAQ;AACP,kBAAQ,MAAM,0BAAmB,MAAM,IAAI;AAAA,QAC5C;AAAA,MACD;AAEA,mBAAa,QAAQ,UAAU,CAAC,UAAU;AACzC,YAAI,gBAAgB,SAAS;AAC5B,wBAAc,gBAAgB,OAAO;AACrC,0BAAgB,UAAU;AAAA,QAC3B;AAEA,YAAI,MAAM,SAAS,OAAQ,qBAAqB,UAAU,sBAAsB;AAC/E,+BAAqB,WAAW;AAChC,gBAAM,QAAQ,KAAK;AAAA,YAClB,qBAAqB,KAAK,IAAI,GAAG,qBAAqB,UAAU,CAAC;AAAA,YACjE;AAAA,UACD;AAEA,kBAAQ;AAAA,YACP,wDAAiD,qBAAqB,OAAO,IAAI,oBAAoB,QAAQ,KAAK;AAAA,UACnH;AAEA,8BAAoB,UAAU,WAAW,MAAM;AAC9C,6BAAiB;AAAA,UAClB,GAAG,KAAK;AAAA,QACT,WAAW,qBAAqB,WAAW,sBAAsB;AAChE,oBAAU,yDAAyD,OAAO;AAAA,QAC3E;AAAA,MACD;AAEA,mBAAa,QAAQ,UAAU,CAAC,UAAU;AACzC,gBAAQ,MAAM,2BAAsB,KAAK;AAAA,MAC1C;AAAA,IACD,SAAS,OAAO;AACf,UAAI,qBAAqB,UAAU,sBAAsB;AACxD,6BAAqB,WAAW;AAChC,cAAM,QAAQ,KAAK;AAAA,UAClB,qBAAqB,KAAK,IAAI,GAAG,qBAAqB,UAAU,CAAC;AAAA,UACjE;AAAA,QACD;AACA,4BAAoB,UAAU,WAAW,MAAM;AAC9C,2BAAiB;AAAA,QAClB,GAAG,KAAK;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAEA,gCAAU,MAAM;AACf,QAAI,MAAM,SAAS;AAClB,uBAAiB;AAAA,IAClB;AAEA,WAAO,MAAM;AACZ,UAAI,oBAAoB,SAAS;AAChC,qBAAa,oBAAoB,OAAO;AACxC,4BAAoB,UAAU;AAAA,MAC/B;AACA,UAAI,gBAAgB,SAAS;AAC5B,sBAAc,gBAAgB,OAAO;AACrC,wBAAgB,UAAU;AAAA,MAC3B;AACA,UAAI,aAAa,SAAS;AACzB,qBAAa,QAAQ,MAAM,KAAM,sBAAsB;AACvD,qBAAa,UAAU;AAAA,MACxB;AACA,2BAAqB,UAAU;AAAA,IAChC;AAAA,EACD,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,QAAM,gBAAgB,CAAC,SAAc;AAr9BtC,QAAAR;AAs9BE,qBAAiB,UAAU,oBAAoB;AAAA,MAC9C,eAAcA,MAAA,6BAAM,iBAAN,OAAAA,MAAsB;AAAA,MACpC,MAAM;AAAA,IACP,CAAC;AAAA,EACF;AAEA,MAAI,CAAC,MAAM,eAAe;AACzB,WACC,6CAAC,wBACC,kBAAQ,mBAAmB,KAC3B;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,SAAS;AAAA,QACT,yBAAyB,CAAC,SAAuD;AAChF,0BAAgB,WAAW,IAAI;AAAA,QAChC;AAAA;AAAA,IACD,GAEF;AAAA,EAEF;AAGA,QAAM,aACL,WAAM,aAAN,mBAAgB,UAAS,OACxB,iBAAM,aAAN,mBAAgB,WAAhB,mBAAwB;AAG1B,QAAM,YACL,WAAM,aAAN,mBAAgB,UAAS,OACxB,iBAAM,aAAN,mBAAgB,WAAhB,mBAAwB;AAG1B,QAAM,eAAa,WAAM,cAAN,mBAAiB,iBAAgB;AAEpD,SACC,8EACC;AAAA,iDAAC,wBACA,uDAAC,yBAAK,IAAI,MAAM,SAAS,KACxB;AAAA,MAAC;AAAA;AAAA,QACA,OAAK,WAAM,cAAN,mBAAiB,eAAc,UAAU;AAAA,QAC9C,WACC,aAAa,MACV,WAAM,cAAN,mBAAiB,eAAc,IAC9B;AAAA,QAEL,IAAI;AAAA,UACH,YAAU,WAAM,cAAN,mBAAiB,eAAc,UAAU;AAAA,UACnD,QAAM,WAAM,cAAN,mBAAiB,eAAc,SAAS,IAAI;AAAA,UAClD,OAAK,WAAM,cAAN,mBAAiB,eAAc,SAAS,IAAI;AAAA,UACjD,SAAS;AAAA,UACT,OAAO,aAAa,UAAU;AAAA,UAC9B,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,GAAG;AAAA,UACH,cAAc;AAAA,UACd,SAAS;AAAA,UACT,UAAQ,WAAM,cAAN,mBAAiB,eAAc,OAAO,mBAAmB;AAAA,UACjE,YAAY,MAAM,YAAY,OAAO,CAAC,cAAc,WAAW,GAAG;AAAA,YACjE,UAAU,MAAM,YAAY,SAAS;AAAA,UACtC,CAAC;AAAA,UACD,YAAY;AAAA,QACb;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,SAAS;AAAA,cACT,eAAe,aAAa,WAAW;AAAA,cACvC,YAAY,aAAa,YAAY;AAAA,YACtC;AAAA,YAEA;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,IAAI;AAAA,oBACH,SAAS;AAAA,oBACT,eAAe,aAAa,WAAW;AAAA,oBACvC,YAAY,aAAa,YAAY;AAAA,oBACrC,KAAK;AAAA,oBACL,QAAQ,aAAa,qBAAqB;AAAA,kBAC3C;AAAA,kBAEC;AAAA,iCAAM,cAAN,mBAAiB,gBACjB;AAAA,sBAAC;AAAA;AAAA,wBACA,WAAU;AAAA,wBACV,MAAK;AAAA,wBACL,IAAI;AAAA,0BACH,QAAQ;AAAA,wBACT;AAAA,wBACA,aAAa;AAAA,wBACb,cAAc;AAAA,wBAEd,uDAAC,qBAAAwB,SAAA,EAAc;AAAA;AAAA,oBAChB;AAAA,sBAGA,WAAM,cAAN,mBAAiB,sBACjB,oCAAO,aAAP,mBAAiB,iBACjB,oCAAO,aAAP,mBAAiB,UAAS,YACzB,6CAAC,yBAAK,QAAO,oCAAO,aAAP,mBAAiB,YAAY;AAAA,oBAG5C,6CAAC,4BAAQ,SAAO,WAAM,cAAN,mBAAiB,sBAAqB,sCAAsC,QAC3F,uDAAC,wBAAI,WAAU,QAAO,IAAI,aAAa,EAAE,SAAS,QAAQ,IAAI,CAAC,GAC7D,uBACA;AAAA,sBAAC;AAAA;AAAA,wBACA,SAAQ;AAAA,wBACR,WAAW,6CAAC,oBAAAC,SAAA,EAAa;AAAA,wBACzB,SAAS,CAAC,MAAM;AAjkC5B,8BAAAzB,KAAAG,KAAAC,KAAAC,KAAAC,KAAAC;AAkkCa,8BACC,CAAC;AAAA;AAAA;AAAA;AAAA,0BAID,EAAE,UAASJ,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAG,IAAwB,aAA2B,KAC9D,GAACC,MAAA,MAAM,cAAN,gBAAAA,IAAiB,uBAClB,IAAGE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAC,IAAwB,8CAC1BC,MAAA,MAAM,cAAN,gBAAAA,IAAiB,2BACjB;AACD,6CAAiB,CAAC;AAAA,0BACnB;AAAA,wBACD;AAAA,wBACA,UACC;AAAA;AAAA;AAAA;AAAA,wBAIA,EAAE,UAAS,WAAM,SAAS,WAAf,mBAAuB,aAA2B,OAC7D,WAAM,cAAN,mBAAiB,yBACf,WAAM,SAAS,WAAf,mBAAuB,4CACxB,CAAC,GAAC,WAAM,cAAN,mBAAiB;AAAA,wBAErB,IAAI;AAAA,0BACH,gBAAgB;AAAA,0BAChB,OAAO;AAAA,0BACP,IAAI;AAAA,0BACJ,OACC;AAAA;AAAA;AAAA;AAAA,0BAIA,EAAE,UAAS,WAAM,SAAS,WAAf,mBAAuB,aAA2B,OAC7D,WAAM,cAAN,mBAAiB,yBACf,WAAM,SAAS,WAAf,mBAAuB,4CACxB,CAAC,GAAC,WAAM,cAAN,mBAAiB,2BACjB,oBAAoB;AAAA,0BACxB,aACC;AAAA;AAAA;AAAA;AAAA,0BAIA,EAAE,UAAS,WAAM,SAAS,WAAf,mBAAuB,aAA2B,OAC7D,WAAM,cAAN,mBAAiB,yBACf,WAAM,SAAS,WAAf,mBAAuB,4CACxB,CAAC,GAAC,WAAM,cAAN,mBAAiB,2BACjB,oBAAoB;AAAA,wBACzB;AAAA,wBACA;AAAA;AAAA,oBAED,IAEA;AAAA,sBAAC;AAAA;AAAA,wBACA,MAAK;AAAA,wBACL,SAAS,CAAC,MAAM;AAxnC5B,8BAAAP,KAAAG,KAAAC,KAAAC,KAAAC,KAAAC;AAynCa,8BACC,CAAC;AAAA;AAAA;AAAA;AAAA,0BAID,EAAE,UAASJ,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAG,IAAwB,aAA2B,KAC9D,GAACC,MAAA,MAAM,cAAN,gBAAAA,IAAiB,uBAClB,IAAGE,OAAAD,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAC,IAAwB,8CAC1BC,MAAA,MAAM,cAAN,gBAAAA,IAAiB,2BACjB;AACD,6CAAiB,CAAC;AAAA,0BACnB;AAAA,wBACD;AAAA,wBACA,UACC;AAAA;AAAA;AAAA;AAAA,wBAIA,EAAE,UAAS,WAAM,SAAS,WAAf,mBAAuB,aAA2B,OAC7D,WAAM,cAAN,mBAAiB,yBACf,WAAM,SAAS,WAAf,mBAAuB,4CACxB,CAAC,GAAC,WAAM,cAAN,mBAAiB;AAAA,wBAGrB;AAAA,0BAAC,oBAAAkB;AAAA,0BAAA;AAAA,4BACA,IAAI;AAAA,8BACH,OACE;AAAA;AAAA;AAAA;AAAA,8BAID,EAAE,UAAS,WAAM,SAAS,WAAf,mBAAuB,aAA2B,OAC5D,WAAM,cAAN,mBAAiB,yBACf,WAAM,SAAS,WAAf,mBAAuB,4CACxB,CAAC,GAAC,WAAM,cAAN,mBAAiB,2BAClB,oBACA;AAAA,4BACL;AAAA;AAAA,wBACD;AAAA;AAAA,oBACD,GAEF,GACD;AAAA,oBAGA;AAAA,sBAAC;AAAA;AAAA,wBACA,SAAS,MAAM,cAAc,IAAI;AAAA,wBACjC,IAAI;AAAA,0BACH,SAAS;AAAA,0BACT,eAAe;AAAA,0BACf,YAAY;AAAA,0BACZ,QAAQ;AAAA,0BACR,UAAU;AAAA,0BACV,aAAa;AAAA,wBACd;AAAA,wBAEA;AAAA;AAAA,4BAAC;AAAA;AAAA,8BACA,IAAI;AAAA,gCACH,OAAO,WACJ,iBACA,UACC,eACA;AAAA,gCACJ,UAAU;AAAA,gCACV,YAAY;AAAA,gCACZ,YAAY;AAAA,8BACb;AAAA,8BAEC,gBAAM,SAAS,oCACf,mBAAmB,OACjB,eAAe,cAAc,IAC7B,eAAe,YAAY;AAAA;AAAA,0BAC/B;AAAA,0BAGC,YACA;AAAA,4BAAC;AAAA;AAAA,8BACA,IAAI;AAAA,gCACH,SAAS;AAAA,gCACT,YAAY;AAAA,gCACZ,KAAK;AAAA,gCACL,iBAAiB;AAAA,gCACjB,OAAO;AAAA,gCACP,cAAc;AAAA,gCACd,IAAI;AAAA,gCACJ,IAAI;AAAA,gCACJ,IAAI;AAAA,8BACL;AAAA,8BAEA;AAAA,6EAAC,cAAAC,SAAA,EAAM,IAAI,EAAE,UAAU,OAAO,GAAG;AAAA,gCACjC;AAAA,kCAAC;AAAA;AAAA,oCACA,IAAI;AAAA,sCACH,UAAU;AAAA,sCACV,YAAY;AAAA,sCACZ,YAAY;AAAA,oCACb;AAAA,oCAEC,yBAAe,YAAY;AAAA;AAAA,gCAC7B;AAAA;AAAA;AAAA,0BACD;AAAA,0BAIA,WAAW,CAAC,YACZ;AAAA,4BAAC;AAAA;AAAA,8BACA,IAAI;AAAA,gCACH,SAAS;AAAA,gCACT,YAAY;AAAA,gCACZ,KAAK;AAAA,gCACL,iBAAiB;AAAA,gCACjB,OAAO;AAAA,gCACP,cAAc;AAAA,gCACd,IAAI;AAAA,gCACJ,IAAI;AAAA,gCACJ,IAAI;AAAA,8BACL;AAAA,8BAEA;AAAA,6EAAC,cAAAC,SAAA,EAAO,IAAI,EAAE,UAAU,OAAO,GAAG;AAAA,gCAClC;AAAA,kCAAC;AAAA;AAAA,oCACA,IAAI;AAAA,sCACH,UAAU;AAAA,sCACV,YAAY;AAAA,sCACZ,YAAY;AAAA,oCACb;AAAA,oCAEC,yBAAe,YAAY;AAAA;AAAA,gCAC7B;AAAA;AAAA;AAAA,0BACD;AAAA;AAAA;AAAA,oBAGF;AAAA,oBAGA;AAAA,sBAAC;AAAA;AAAA,wBACA,IAAI,EAAE,SAAS,WAAW;AAAA,wBAC1B,OACC,aAAa,oBACZ;AAAA,0BAAC;AAAA;AAAA,4BACA,IAAI;AAAA,8BACH,YAAY;AAAA,8BACZ,OAAO;AAAA,8BACP,SAAS;AAAA,8BACT,YAAY;AAAA,8BACZ,gBAAgB;AAAA,4BACjB;AAAA,4BAEA,uDAAC,qCAAiB,MAAK,QAAO;AAAA;AAAA,wBAC/B,IAEA;AAAA,0BAAC;AAAA;AAAA,4BACA,SAAQ;AAAA,4BACR,IAAI;AAAA,8BACH,YAAY;AAAA,8BACZ,OAAO;AAAA,8BACP,WAAW;AAAA,4BACZ;AAAA,4BAEC,kCAAM,aAAN,mBAAgB,WAAhB,mBAAwB,kBAAxB,YAAyC;AAAA;AAAA,wBAC3C;AAAA,wBAGF,SAAS;AAAA,wBACT,YAAY,6CAAC,yBAAAC,SAAA,EAAkB,OAAM,WAAU;AAAA,wBAC/C,UAAU;AAAA;AAAA,oBACX;AAAA;AAAA;AAAA,cACD;AAAA,cAEA;AAAA,gBAAC;AAAA;AAAA,kBACA,IAAI;AAAA,oBACH,SAAS;AAAA,oBACT,eAAe,aAAa,WAAW;AAAA,oBACvC,KAAK;AAAA,oBACL,gBAAgB;AAAA,oBAChB,YAAY,aAAa,YAAY;AAAA,oBACrC,QAAQ,aAAa,oBAAoB;AAAA,kBAC1C;AAAA,kBAEA;AAAA,iEAAC,4BAAQ,OAAO,eACf;AAAA,sBAAC;AAAA;AAAA,wBACA,SACC,2CAAoC,EAAE;AAAA,2BACrC,iBAAM,aAAN,mBAAgB,WAAhB,mBAAwB;AAAA,wBACzB,IACG,aACA;AAAA,wBAEJ,WAAW,aAAa,6CAAC,qBAAAC,SAAA,EAAa,IAAK;AAAA,wBAC3C,SAAS,CAAC,MAAM;AApzC1B,8BAAA7B,KAAAG;AAqzCW,8BACC,2CAAoC,EAAE;AAAA,6BACrCA,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAG,IAAwB;AAAA,0BACzB,GACC;AACD,8BAAE,gBAAgB;AAClB,6CAAiB;AAAA,0BAClB;AAAA,wBACD;AAAA,wBACA,SAAS;AAAA,0BACR,MACC,2CAAoC,EAAE;AAAA,6BACrC,iBAAM,aAAN,mBAAgB,WAAhB,mBAAwB;AAAA,0BACzB,IACG,aACA;AAAA,wBACL;AAAA,wBACA,IAAI,kCAEF,2CAAoC,EAAE;AAAA,2BACrC,kBAAM,aAAN,mBAAgB,WAAhB,oBAAwB;AAAA,wBACzB,IACG,WACA,UAEA,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE;AAAA,wBAExE,UAAU;AAAA,wBAET,uBAAa,gBAAgB,6CAAC,qBAAA0B,SAAA,EAAa;AAAA;AAAA,oBAC7C,GACD;AAAA,oBAEA,6CAAC,4BAAQ,SACR,YAAM,cAAN,oBAAiB,qBAAoB,+BACnC,YAAM,aAAN,oBAAgB,UAAS,IAAI,WAAW,QAE1C,uDAAC,wBAAI,WAAU,QAAO,IAAI,aAAa,EAAE,SAAS,QAAQ,IAAI,CAAC,GAC9D;AAAA,sBAAC;AAAA;AAAA,wBACA,WAEE,YAAM,aAAN,oBAAgB,UAAS,OACxB,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,2CAEzB,cACE;AAAA,wBAEJ,WAAW,aACV,sBAAsB,WACtB,YAAM,aAAN,oBAAgB,UAAS,IAAI,6CAAC,kBAAAC,SAAA,EAAU,IAAK,6CAAC,cAAAJ,SAAA,EAAM,IACjD;AAAA,wBACJ,SAAS,CAAC,MAAM;AAx2C3B,8BAAA1B;AAy2CY,4BAAE,gBAAgB;AAClB,8BAAI,GAACA,MAAA,MAAM,cAAN,gBAAAA,IAAiB,oBAAmB;AACxC,6CAAiB;AAAA,0BAClB;AAAA,wBACD;AAAA,wBACA,MAEE,YAAM,aAAN,oBAAgB,UAAS,OACxB,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,2CAEzB,kCAAK,UAAa,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,OAEnF,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,4CACzB,GAAC,YAAM,cAAN,oBAAiB,qBAElB,kCAAK,WAAc,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,KACpF,kCAAK,WAAc,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE;AAAA,wBAE3F,YACG,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,8CAEzB,YAAM,aAAN,oBAAgB,UAAS,KAC1B,yBACA,YAAM,cAAN,oBAAiB;AAAA,wBAGjB,gCACA;AAAA,0BAAC;AAAA;AAAA,4BACA,MAAK;AAAA,4BACL,IAAI,EAAE,OAAO,MAAM,QAAQ,QAAQ,KAAK;AAAA;AAAA,wBACzC,IACG,eACH,YAAM,aAAN,oBAAgB,UAAS,IAAI,WAAW,WACrC,YAAM,aAAN,oBAAgB,UAAS,IAC5B,6CAAC,kBAAA8B,SAAA,EAAU,IAEX,6CAAC,cAAAJ,SAAA,EAAM;AAAA;AAAA,oBAET,GACD,GACD;AAAA,oBAEA,6CAAC,4BAAQ,SACR,YAAM,cAAN,oBAAiB,qBAAoB,+BACnC,YAAM,aAAN,oBAAgB,UAAS,IAAI,WAAW,QAE1C,uDAAC,wBAAI,WAAU,QAAO,IAAI,aAAa,EAAE,SAAS,QAAQ,IAAI,CAAC,GAC9D;AAAA,sBAAC;AAAA;AAAA,wBACA,WAEE,YAAM,aAAN,oBAAgB,UAAS,OACxB,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,2CAEzB,cACE;AAAA,wBAEJ,WAAW,aACV,sBAAsB,WACtB,YAAM,aAAN,oBAAgB,UAAS,IAAI,6CAAC,cAAAC,SAAA,EAAO,IAAK,6CAAC,WAAAI,SAAA,EAAI,IAC5C;AAAA,wBACJ,SAAS,CAAC,MAAM;AAr6C3B,8BAAA/B;AAs6CY,4BAAE,gBAAgB;AAClB,8BAAI,GAACA,MAAA,MAAM,cAAN,gBAAAA,IAAiB,oBAAmB;AACxC,6CAAiB;AAAA,0BAClB;AAAA,wBACD;AAAA,wBACA,MACC,YAAM,cAAN,oBAAiB,wBAAqB,YAAM,aAAN,oBAAgB,UAAS,IAC5D,kCAAK,WAAc,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,OAEvF,YAAM,aAAN,oBAAgB,UAAS,OACxB,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,2CAGvB,kCAAK,UAAa,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,OACpF,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,2CAExB,kCAAK,WAAc,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,KACtF,kCAAK,WAAc,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE;AAAA,wBAE5F,YACG,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,8CAEzB,YAAM,aAAN,oBAAgB,UAAS,KAC1B,yBACA,YAAM,aAAN,oBAAgB,UAAS,OACzB,YAAM,cAAN,oBAAiB;AAAA,wBAGjB,gCACA;AAAA,0BAAC;AAAA;AAAA,4BACA,MAAK;AAAA,4BACL,IAAI,EAAE,OAAO,MAAM,QAAQ,QAAQ,KAAK;AAAA;AAAA,wBACzC,IACG,eACH,YAAM,aAAN,oBAAgB,UAAS,IAAI,WAAW,WACrC,YAAM,aAAN,oBAAgB,UAAS,IAC5B,6CAAC,cAAA2B,SAAA,EAAO,IAER,6CAAC,WAAAI,SAAA,EAAI;AAAA;AAAA,oBAEP,GACD,GACD;AAAA,oBAEA,6CAAC,4BAAQ,SAAO,YAAM,cAAN,oBAAiB,6BAA4B,sCAAsC,iBAClG,uDAAC,wBAAI,WAAU,QAAO,IAAI,aAAa,EAAE,SAAS,QAAQ,IAAI,CAAC,GAC9D;AAAA,sBAAC;AAAA;AAAA,wBACA,SAAS,MAAM,yBAAyB,cAAc;AAAA,wBACtD,WAAW,aAAa,6CAAC,+BAAAC,SAAA,EAAuB,IAAK;AAAA,wBACrD,SAAS,CAAC,MAAM;AAv9C3B,8BAAAhC,KAAAG,KAAAC;AAw9CY,gCACED,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAG,IAAwB,4CAEzB,GAACC,MAAA,MAAM,cAAN,gBAAAA,IAAiB,4BACjB;AACD,8BAAE,gBAAgB;AAClB,4CAAgB,0BAA0B,IAAI;AAAA,0BAC/C;AAAA,wBACD;AAAA,wBACA,IACC,MAAM,yBACH,kCAAK,UAAa,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,OACpF,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,4CACL,GAAC,YAAM,cAAN,oBAAiB,6BACrC,kCAAK,WAAc,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,KACtF,kCAAK,WAAc,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE;AAAA,wBAE3F,YACE,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,8CACzB,YAAM,cAAN,oBAAiB;AAAA,wBAGjB,uBAAa,aAAa,6CAAC,+BAAA4B,SAAA,EAAuB;AAAA;AAAA,oBACpD,GACD,GACD;AAAA,oBAEA,6CAAC,4BAAQ,SAAO,YAAM,cAAN,oBAAiB,2BAA0B,wCAAwC,mBAClG,uDAAC,wBAAI,WAAU,QAAO,IAAI,aAAa,EAAE,SAAS,QAAQ,IAAI,CAAC,GAC9D;AAAA,sBAAC;AAAA;AAAA,wBACA,SAAS,MAAM,uBAAuB,cAAc;AAAA,wBACpD,WAAW,aAAa,6CAAC,aAAAC,SAAA,EAAM,IAAK;AAAA,wBACpC,SAAS,CAAC,MAAM;AAx/C3B,8BAAAjC,KAAAG,KAAAC;AAy/CY,gCACED,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAG,IAAwB,4CAEzB,GAACC,MAAA,MAAM,cAAN,gBAAAA,IAAiB,0BACjB;AACD,8BAAE,gBAAgB;AAClB,4CAAgB,wBAAwB,IAAI;AAAA,0BAC7C;AAAA,wBACD;AAAA,wBACA,IACC,MAAM,uBACH,kCAAK,UAAa,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,OACpF,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,4CACL,GAAC,YAAM,cAAN,oBAAiB,2BACrC,kCAAK,WAAc,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,KACtF,kCAAK,WAAc,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE;AAAA,wBAE3F,YACE,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,8CACzB,YAAM,cAAN,oBAAiB;AAAA,wBAGjB,uBAAa,eAAe,6CAAC,aAAA6B,SAAA,EAAM;AAAA;AAAA,oBACrC,GACD,GACD;AAAA,sBAEC,YAAM,cAAN,oBAAiB,sBACjB,6CAAC,4BAAQ,OAAO,YACf;AAAA,sBAAC;AAAA;AAAA,wBACA,SAAS,QAAQ,iBAAiB,IAAI,cAAc;AAAA,wBACpD,WAAW,aAAa,6CAAC,gBAAAC,SAAA,EAAS,IAAK;AAAA,wBACvC,SAAS,CAAC,MAAM;AAzhD3B,8BAAAlC,KAAAG;AA0hDY,8BACC,6CAAqC,EAAE;AAAA,6BACtCA,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAG,IAAwB;AAAA,0BACzB,GACC;AACD,8BAAE,gBAAgB;AAClB,uDAA2B,CAAC;AAAA,0BAC7B;AAAA,wBACD;AAAA,wBACA,IACC,QAAQ,iBAAiB,IACtB,kCAAK,UAAa,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,KACrF,6CAAqC,EAAE;AAAA,2BACxC,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB;AAAA,wBACzB,IACG,kCAAK,WAAc,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,KACtF,kCAAK,WAAc,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE;AAAA,wBAE3F,UACC,CAAC,6CAAqC,EAAE;AAAA,2BACvC,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB;AAAA,wBACzB;AAAA,wBAGA,uBAAa,aAAa,6CAAC,gBAAA+B,SAAA,EAAS;AAAA;AAAA,oBACtC,GACD;AAAA,oBAGD,6CAAC,4BAAQ,SAAO,YAAM,cAAN,oBAAiB,wBAAuB,iCAAiC,YACxF,uDAAC,wBAAI,WAAU,QAAO,IAAI,aAAa,EAAE,SAAS,QAAQ,IAAI,CAAC,GAC9D;AAAA,sBAAC;AAAA;AAAA,wBACA,SACC;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKA,EAAE,UAAS,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,aAA2B,KAC7D,GAAC,YAAM,cAAN,oBAAiB,wBAChB,cACA;AAAA,wBAEJ,WAAW,cAAc,CAAC,iBAAiB,6CAAC,gBAAAC,SAAA,EAAQ,IAAK;AAAA,wBACzD,SAAS,CAAC,MAAM;AAtkD3B,8BAAAnC,KAAAG,KAAAC;AAukDY,8BACC;AAAA;AAAA;AAAA;AAAA;AAAA,0BAKA,EAAE,UAASD,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAG,IAAwB,aAA2B,KAC9D,GAACC,MAAA,MAAM,cAAN,gBAAAA,IAAiB,uBACjB;AACD,8BAAE,gBAAgB;AAClB,mDAAuB,IAAI;AAAA,0BAC5B;AAAA,wBACD;AAAA,wBACA,IACC;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKA,EAAE,UAAS,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,aAA2B,KAC7D,GAAC,YAAM,cAAN,oBAAiB,wBAChB,gDACE,UADF;AAAA,0BAED,aAAa;AAAA,0BACb,iBAAiB;AAAA,0BACjB,UAAU;AAAA,0BACV,WAAW;AAAA,0BACX,QAAQ,aAAa,MAAM,QAAQ,MAAM,KAAK;AAAA,0BAC9C,QAAQ;AAAA,0BACR,WAAW;AAAA,4BACV,SAAS;AAAA,4BACT,WAAW;AAAA,4BACX,QAAQ,aAAa,MAAM,QAAQ,MAAM,KAAK;AAAA,0BAC/C;AAAA,0BACA,YAAY;AAAA,4BACX,SAAS;AAAA,4BACT,WAAW,sBAAsB,MAAM,QAAQ,QAAQ,KAAK;AAAA,0BAC7D;AAAA,4BACI,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,KAEtE,gDACE,WADF;AAAA,0BAED,UAAU;AAAA,4BACN,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE;AAAA,wBAG1E,UACC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKD,EAAE,UAAS,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB,aAA2B,KAC9D,oBACA,YAAM,cAAN,oBAAiB;AAAA,wBAGjB,2BACA,6CAAC,qCAAiB,MAAK,QAAO,OAAM,SAAQ,IACzC,aACH,aAEA,6CAAC,gBAAA+B,SAAA,EAAQ;AAAA;AAAA,oBAEX,GACD,GACD;AAAA,oBAEC,GAAC,YAAM,cAAN,oBAAiB,8BAClB,gBACA,2CAAa,UAAS,KACrB,6CAAC,4BAAQ,OAAO,kBACf;AAAA,sBAAC;AAAA;AAAA,wBACA,SAAS,QAAQ,mBAAmB,IAAI,cAAc;AAAA,wBACtD,WAAW,aAAa,6CAAC,gBAAAC,SAAA,EAAS,IAAK;AAAA,wBACvC,SAAS,CAAC,MAAM;AAlpD5B,8BAAApC,KAAAG;AAmpDa,8BACC,uCAAkC,EAAE;AAAA,6BACnCA,OAAAH,MAAA,MAAM,aAAN,gBAAAA,IAAgB,WAAhB,gBAAAG,IAAwB;AAAA,0BACzB,GACC;AACD,8BAAE,gBAAgB;AAClB,kDAAsB,CAAC;AAAA,0BACxB;AAAA,wBACD;AAAA,wBACA,IAAI,QAAQ,mBAAmB,IAC5B,kCAAK,UAAa,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE,KACrF,kCAAK,WAAc,cAAc,EAAE,gBAAgB,cAAc,OAAO,QAAQ,IAAI,EAAE;AAAA,wBAEzF,UACC,CAAC,uCAAkC,EAAE;AAAA,2BACpC,mBAAM,aAAN,oBAAgB,WAAhB,oBAAwB;AAAA,wBACzB;AAAA,wBAGA,uBAAa,mBAAmB,6CAAC,gBAAAiC,SAAA,EAAS;AAAA;AAAA,oBAC5C,GACD;AAAA;AAAA;AAAA,cAEH;AAAA;AAAA;AAAA,QACD;AAAA;AAAA,IACD,GACD,GACD;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,IAAI;AAAA,QACJ,SAAS;AAAA,QAET;AAAA,UAAC;AAAA;AAAA,YACA,KAAK;AAAA,YACL,WAAW,mBAAmB,IAAI;AAAA,YAClC,IAAI;AAAA,cACH,UAAU;AAAA,cACV,MAAM,eAAe;AAAA,cACrB,KAAK,eAAe;AAAA,cACpB,cAAc;AAAA,cACd,SAAS;AAAA,cACT,QAAQ,OAAO;AAAA,cACf,YAAY,MAAM,YAAY,OAAO,CAAC,cAAc,WAAW,GAAG;AAAA,gBACjE,UAAU,MAAM,YAAY,SAAS;AAAA,cACtC,CAAC;AAAA,cACD,YAAY,cAAc,GAAC,YAAM,cAAN,oBAAiB,oBAAmB,YAAY;AAAA,cAC3E,YAAY;AAAA,YACb;AAAA,YAEA;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,IAAI;AAAA,oBACH,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,QAAQ;AAAA,oBACR,SAAS;AAAA,kBACV;AAAA,kBACA,aAAa;AAAA,kBACb,cAAc;AAAA,kBAEd;AAAA;AAAA,sBAAC,qBAAAZ;AAAA,sBAAA;AAAA,wBACA,IAAI;AAAA,0BACH,WAAW;AAAA,0BACX,OAAO;AAAA,wBACR;AAAA;AAAA,oBACD;AAAA,oBAAG;AAAA,oBACH,6CAAC,+BAAW,SAAQ,aAAY,YAAY,KAAK,IAAI,EAAE,WAAW,SAAS,GAAG,qBAE9E;AAAA,oBACA,6CAAC,+BAAW,SAAS,MAAM,cAAc,KAAK,GAC7C,uDAAC,cAAAa,SAAA,EAAM,GACR;AAAA;AAAA;AAAA,cACD;AAAA,cACA,6CAAC,wBACA;AAAA,gBAAC;AAAA;AAAA,kBAEA,KAAK,IAAG,YAAM,cAAN,oBAAiB,SAAS,qCAAoC,YAAM,cAAN,oBAAiB,EAAE,aAAY,YAAM,cAAN,oBAAiB,YAAY,WAAU,YAAM,kBAAN,oBAAqB,WAAW;AAAA,kBAE5K,QAAQ;AAAA,kBAER,OAAO;AAAA,kBACP,OAAM;AAAA,kBACN,OAAO;AAAA,oBACN,QAAQ;AAAA,kBACT;AAAA;AAAA,cACA,GACF;AAAA;AAAA;AAAA,QACD;AAAA;AAAA,IACD;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,UAAU;AAAA,QACV,MAAM,QAAQ,cAAc;AAAA,QAC5B,SAAS;AAAA,QACT,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,QAClC,IAAI;AAAA,UACH,QAAQ;AAAA,QACT;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,KAAK;AAAA,cACL,SAAS;AAAA,cACT,UAAU;AAAA,gBACT,iBAAiB;AAAA,cAClB;AAAA,YACD;AAAA,YAEA;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,MAAK;AAAA,kBACL,OAAO;AAAA,kBACP,aAAY;AAAA,kBACZ,UAAU,CAAC,MAAM;AAChB,0BAAM,QAAQ,EAAE,OAAO;AACvB,mCAAe,KAAK;AAAA,kBACrB;AAAA,kBACA,WAAW,CAAC,MAAM;AACjB,wBAAI,EAAE,QAAQ,SAAS;AACtB,sCAAgB,WAAW;AAAA,oBAC5B;AAAA,kBACD;AAAA;AAAA,cACD;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACA,OAAM;AAAA,kBACN,SAAS,MAAM;AACd,oCAAgB,WAAW;AAAA,kBAC5B;AAAA,kBAEC,+BACA;AAAA,oBAAC;AAAA;AAAA,sBACA,MAAK;AAAA,sBACL,IAAI;AAAA,wBACH,OAAO,MAAM,QAAQ,QAAQ;AAAA,sBAC9B;AAAA;AAAA,kBACD,IAEA,6CAAC,aAAAC,SAAA,EAAM,OAAM,WAAU;AAAA;AAAA,cAEzB;AAAA;AAAA;AAAA,QACD;AAAA;AAAA,IACD;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,UAAU;AAAA,QACV,MAAM,QAAQ,iBAAiB;AAAA,QAC/B,SAAS;AAAA,QACT,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,QAClC,IAAI;AAAA,UACH,QAAQ;AAAA,QACT;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,KAAK;AAAA,cACL,SAAS;AAAA,cACT,UAAU;AAAA,gBACT,iBAAiB;AAAA,cAClB;AAAA,cACA,SAAS;AAAA,cACT,YAAY;AAAA,YACb;AAAA,YAEA,uDAAC,4BAAQ,OAAM,qBACd;AAAA,cAAC;AAAA;AAAA,gBACA,OAAM;AAAA,gBACN,SAAQ;AAAA,gBACR,SAAS,MAAM;AACd,gCAAc,MAAM,QAAQ;AAAA,gBAC7B;AAAA,gBACA;AAAA;AAAA,kBAEA;AAAA,oBAAC;AAAA;AAAA,sBACA,IAAI;AAAA,wBACH,SAAS;AAAA,wBACT,YAAY;AAAA,wBACZ,iBAAiB;AAAA,wBACjB,OAAO;AAAA,wBACP,YAAY;AAAA,wBACZ,SAAS;AAAA,wBACT,cAAc;AAAA,sBACf;AAAA,sBACA;AAAA;AAAA,wBAEA;AAAA,0BAAC,mBAAAC;AAAA,0BAAA;AAAA,4BACA,IAAI;AAAA,8BACH,YAAY;AAAA,8BACZ,OAAO;AAAA,8BACP,WAAW;AAAA,4BACZ;AAAA;AAAA,wBACD;AAAA;AAAA;AAAA,kBACD;AAAA;AAAA;AAAA,YACD,GACD;AAAA;AAAA,QACD;AAAA;AAAA,IACD;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,UAAU;AAAA,QACV,MAAM,QAAQ,mBAAmB;AAAA,QACjC,SAAS;AAAA,QACT,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,QAClC,IAAI;AAAA,UACH,QAAQ;AAAA,QACT;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,KAAK;AAAA,cACL,SAAS;AAAA,cACT,UAAU;AAAA,gBACT,iBAAiB;AAAA,cAClB;AAAA,cACA,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,KAAK;AAAA,YACN;AAAA,YAEC,qDAAa,IAAI,CAAC,SAAS;AA92DjC,kBAAAvC,KAAAG,KAAAC;AA+2DM,qBACC;AAAA,gBAAC;AAAA;AAAA,kBAEA,IAAI;AAAA,oBACH,OAAO;AAAA,kBACR;AAAA,kBAEA,uDAAC,4BAAQ,QAAOJ,MAAA,6BAAM,iBAAN,OAAAA,MAAsB,IACrC;AAAA,oBAAC;AAAA;AAAA,sBACA,OAAM;AAAA,sBACN,WACCG,MAAA,+BAAO,YAAP,gBAAAA,IAAgB,iBAAe,6BAAM,cAAa,cAAc;AAAA,sBAEjE,SAAS,MAAM;AACd,wCAAgB,WAAW,IAAI;AAAA,sBAChC;AAAA,sBACA,IAAI;AAAA,wBACH,OAAO;AAAA,sBACR;AAAA,sBAEC,WAAAC,MAAA,6BAAM,iBAAN,OAAAA,MAAsB;AAAA;AAAA,kBACxB,GACD;AAAA;AAAA,gBApBK,6BAAM;AAAA,cAqBZ;AAAA,YAEF;AAAA;AAAA,QACD;AAAA;AAAA,IACD;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,UAAU;AAAA,QACV,MAAM,QAAQ,cAAc;AAAA,QAC5B,SAAS;AAAA,QACT,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,QAClC,IAAI;AAAA,UACH,QAAQ;AAAA,QACT;AAAA,QAEC,WAAC,eAAc,yCAAY,YAAW,IACtC,6CAAC,6BAAS,SAAS,MAAM,wBAAwB,OAAO,GAAG,qBAAO,IAElE,yCAAY,IAAI,CAAC,SAAS;AAx5D/B,cAAAJ,KAAAG,KAAAC;AAy5DM,iBACC;AAAA,YAAC;AAAA;AAAA,cAEA,IAAI;AAAA;AAAA,gBAEH,mBACCJ,MAAA,+BAAO,aAAP,gBAAAA,IAAiB,YAAW,YAAW,+BAAO,kBAAgB,6BAAM,QACnE,iBACE;AAAA,gBACJ,SACCG,MAAA,+BAAO,aAAP,gBAAAA,IAAiB,YAAW,YAAW,+BAAO,kBAAgB,6BAAM,QACnE,UACE;AAAA,gBACJ,UAAU;AAAA,kBACT,mBACCC,MAAA,+BAAO,aAAP,gBAAAA,IAAiB,YAAW,YAAW,+BAAO,kBAAgB,6BAAM,QACnE,iBACE;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKL;AAAA,cACD;AAAA,cACA,SAAS,MAAM,wBAAwB,6BAAM,IAAI;AAAA,cACjD;AAAA;AAAA,gBACG,6BAAM;AAAA;AAAA;AAAA,YAxBJ,6BAAM;AAAA,UAyBZ;AAAA,QAEF;AAAA;AAAA,IAEF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,MAAM,QAAQ,QAAQ;AAAA,QACtB,SAAS;AAAA,QACT,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,QAClC,IAAI;AAAA,UACH,QAAQ;AAAA,QACT;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACA,IAAI;AAAA,cACH,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,eAAe;AAAA,cACf,SAAS;AAAA,cACT,UAAU;AAAA,gBACT,iBAAiB;AAAA,cAClB;AAAA,YACD;AAAA,YAEA;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,MAAM,6CAAC,cAAAoC,SAAA,EAAO,OAAM,aAAY;AAAA,kBAChC,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACN,IAAI;AAAA,oBACH,QAAQ;AAAA,kBACT;AAAA;AAAA,cACD;AAAA,cAEA;AAAA,gBAAC;AAAA;AAAA,kBACA,MAAM,6CAAC,eAAAC,SAAA,EAAQ,OAAM,QAAO;AAAA,kBAC5B,OAAM;AAAA,kBACN,SAAQ;AAAA,kBACR,IAAI;AAAA,oBACH,QAAQ;AAAA,kBACT;AAAA;AAAA,cACD;AAAA,cAEA;AAAA,gBAAC;AAAA;AAAA,kBACA,MAAM,6CAAC,iBAAAC,SAAA,EAAS,OAAM,WAAU;AAAA,kBAChC,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACN,IAAI;AAAA,oBACH,QAAQ;AAAA,kBACT;AAAA;AAAA,cACD;AAAA;AAAA;AAAA,QACD;AAAA;AAAA,IACD;AAAA,IAEC,QAAQ,MAAM,oBAAoB,KAAK,6CAAC,oBAAiB;AAAA,IAEzD,QAAQ,MAAM,sBAAsB,KACpC,6CAAC,sBAAmB,MAAM,MAAM,wBAAwB;AAAA,IAGxD,QAAQ,mBAAmB,KAC3B;AAAA,MAAC;AAAA;AAAA,QACA,MAAM;AAAA,QACN,SAAS;AAAA,QACT,qBAAqB;AAAA;AAAA,IACtB;AAAA,IAGA,QAAQ,qBAAqB,KAC7B;AAAA,MAAC;AAAA;AAAA,QACA,MAAM;AAAA,QACN,SAAS;AAAA;AAAA,IACV;AAAA,KAEF;AAEF;;;AD9/DA;AAEA;AA+BG,IAAAC,sBAAA;AA7BI,IAAM,uBAAmB,qBAA4B,CAAC,EAAE,aAAa,MAAM;AAPlF,MAAAC;AAQC,QAAM,EAAE,IAAI,IAAI,YAAY;AAE5B,QAAM,uBAAmB;AAAA,IACxB,CAAC,SAAc;AACd,UAAI;AACH,YAAI,gBAAgB,OAAO,iBAAiB,YAAY;AACvD,uBAAa,IAAI;AAAA,QAClB;AAAA,MACD,SAAS,OAAO;AACf,gBAAQ,MAAM,kDAAkD,KAAK;AAAA,MACtE;AAAA,IACD;AAAA,IACA,CAAC,YAAY;AAAA,EACd;AAEA,QAAM,YAAY,2BAAK;AACvB,QAAM,mBACL,uCAAW,cACXA,MAAA,uCAAW,UAAX,gBAAAA,IAAkB;AAAA,IACjB,CAAC,SACA,KAAK,SAAS,gBAAgB,iBAC9B,KAAK,SAAS,gBAAgB;AAAA;AAGjC,MAAI,CAAC,gBAAiB,QAAO;AAE7B,SACC,6CAAC,eACA,uDAAC,gBAAa,cAAc,kBAAkB,GAC/C;AAEF,CAAC;AAED,iBAAiB,cAAc;;;AQzC/B,IAAAC,iBAAkB;AAClB;AACA;AAaI,IAAAC,uBAAA;AATJ,SAAS,UACR,WACA,QAC2C;AAC3C,SAAO,eAAAC,QAAM,KAAK,YAAY;AAC7B,UAAM,MAAM,MAAM,OAAO;AACzB,UAAM,OAAO,IAAI;AACjB,UAAM,UAAyB,CAAC,UAC/B,8CAAC,sBAAmB,aAAa,WAChC,wDAAC,yBAAS,MAAO,GAClB;AAED,WAAO,EAAE,SAAS,QAAQ;AAAA,EAC3B,CAAC;AACF;AAKO,IAAM,WAAW;AAAA,EACvB,aAAa,UAAU,eAAe,cAAc,MAAM,uEAAuB;AAAA,EACjF,WAAW,UAAU,eAAe,WAAW,MAAM,mEAAqB;AAAA,EAC1E,aAAa,UAAU,eAAe,cAAc,MAAM,uEAAuB;AAAA,EACjF,YAAY,UAAU,eAAe,YAAY,MAAM,mEAAqB;AAAA,EAC5E,wBAAwB,UAAU,eAAe,0BAA0B,MAAM,6FAAkC;AAAA,EACnH,mBAAmB,UAAU,eAAe,qBAAqB,MAAM,mFAA6B;AACrG;;;AhBXA;AACA;AACA;;;AiBvBA,IAAAC,iBAAyD;AAEzD;AACA;AAEA;AACA,IAAAC,gBAA2B;AAC3B;AAgBO,IAAM,uBAAuB,MAAkC;AACpE,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAc,IAAI;AAC5C,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAc,IAAI;AAG1C,QAAM,qBAAiB,uBAAsB,IAAI;AAEjD,QAAM,wBAAoB,uBAAc,CAAC,CAAC;AAE1C,gCAAU,MAAM;AACd,QAAI,eAAe,YAAY,KAAM;AAErC,UAAM,cAAc,gBAAgB,UAAU,MAAM;AAtCxD,UAAAC;AAuCM,YAAM,QAAQ,gBAAgB,SAAS;AACvC,YAAM,aAAa,eAAe;AAElC,UAAI,eAAe,KAAM;AAEzB,YAAM,QAAQA,MAAA,MAAM,mBAAN,gBAAAA,IAAgC;AAAA,QAC5C,CAAC,MAAM,EAAE,SAAS;AAAA;AAIpB,UAAI,QAAQ,KAAK,WAAW,QAAQ;AAClC,uBAAe,UAAU;AACzB,0BAAkB,UAAU,CAAC;AAC7B,wBAAgB,wBAAwB,IAAI;AAAA,MAC9C;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,gCAA4B;AAAA,IAChC,OAAO,YAAiD;AA5D5D,UAAAA,KAAA;AA6DM,YAAM,YAAQ,0BAAW,WAAW;AAEpC,YAAIA,MAAA,+BAAO,aAAP,gBAAAA,IAAiB,YAAW,UAAU;AACxC,cAAM,MAAM;AACZ,mBAAW,IAAI;AACf,iBAAS,IAAI,MAAM,GAAG,CAAC;AACvB,cAAM,IAAI,MAAM,GAAG;AAAA,MACrB;AAEA,YAAM,gBACJ,QAAQ,cAAc,QAClB,oCAAO,mBAAP,mBAAuB;AAAA,QACrB,CAAC,MAAW,EAAE,SAAS,QAAQ;AAAA,WAEjC,0CAAO,mBAAP,mBACI,OAAO,CAAC,MAAW,EAAE,SAAS,OADlC,mBAEI,KAAK,CAAC,MAAW,EAAE,WAAW,UAAU,EAAC,uBAAG;AAEtD,UAAI,CAAC,eAAe;AAClB,cAAM,MAAM;AACZ,mBAAW,IAAI;AACf,iBAAS,IAAI,MAAM,GAAG,CAAC;AACvB,cAAM,IAAI,MAAM,GAAG;AAAA,MACrB;AAEA,YAAM,iBAAiB;AAAA,QACrB,QAAQ;AAAA,QACR,WAAW,OAAO,cAAc,IAAI;AAAA,QACpC,QAAQ,QAAQ;AAAA,QAChB,aAAa,OAAO,cAAc,IAAI;AAAA,QACtC,QAAQ,MAAM;AAAA,QACd,UAAS,iBAAM,aAAN,mBAAgB,iBAAhB,YAAgC;AAAA,MAC3C;AAEA,iBAAW,IAAI;AACf,iBAAW,KAAK;AAChB,eAAS,IAAI;AACb,iBAAW,KAAK;AAGhB,qBAAe,UAAU,cAAc;AAEvC,aAAO,cACJ,KAAK,UAAU,iBAAiB,cAAc,EAC9C,KAAK,CAAC,QAAQ;AACb,gBAAQ,2BAAK,IAAI;AACjB,mBAAW,IAAI;AACf,eAAO,2BAAK;AAAA,MACd,CAAC,EACA,MAAM,CAAC,QAAQ;AA9GxB,YAAAA;AA+GU,uBAAe,UAAU;AACzB,mBAAW,IAAI;AACf,iBAAS,GAAG;AACZ,gBAAOA,MAAA,2BAAK,aAAL,gBAAAA,IAAe;AAAA,MACxB,CAAC,EACA,QAAQ,MAAM;AACb,mBAAW,KAAK;AAAA,MAClB,CAAC;AAAA,IACL;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AjBkBA;;;AkBrJA,IAAAC,gBAA8B;AAE9B;AACA;AACA;AACA;AA8CO,SAAS,YAAY,SAAyC;AAnDrE,MAAAC,KAAA;AAoDE,QAAM,QAAQ,gBAAgB,SAAS;AAMrC,QAAM,OAAO;AAAA,IACX,cAAc,QAAQ;AAAA,IACtB,OAAM,MAAAA,MAAA,QAAQ,SAAR,OAAAA,MAAgB,+BAAO,YAAvB,YAAkC;AAAA,IACxC,cAAa,aAAQ,gBAAR,YAAuB;AAAA,IACpC,UAAS,mBAAQ,YAAR,aAAmB,oCAAO,aAAP,mBAAiB,YAApC,YAA+C;AAAA,IACxD,eAAc,aAAQ,iBAAR,YAAwB;AAAA,IACtC,cAAa,aAAQ,gBAAR,YAAuB;AAAA,IACpC,SAAQ,aAAQ,WAAR,YAAkB;AAAA,IAC1B,WAAU,aAAQ,aAAR,YAAoB;AAAA,IAC9B,iBAAgB,aAAQ,mBAAR,YAA0B;AAAA,EAC5C;AAEA,SAAO,cACJ,KAAK,UAAU,eAAe,IAAI,EAClC,KAAK,CAAC,QAAQ;AACb,QAAI;AAAE,sBAAgB,qBAAqB;AAAA,IAAG,SAAS,GAAG;AAAA,IAAC;AAC3D,WAAO,IAAI;AAAA,EACb,CAAC,EACA,MAAM,CAAC,QAAQ;AA5EtB,QAAAA;AA6EQ,YAAOA,MAAA,2BAAK,aAAL,gBAAAA,IAAe;AAAA,EACxB,CAAC;AAEP;AAEO,SAAS,kBAAkB,SAA8C;AAlFhF,MAAAA,KAAA;AAmFE,QAAM,QAAQ,gBAAgB,SAAS;AAMvC,QAAM,gBACJ,QAAQ,cAAc,QAClBA,MAAA,+BAAO,mBAAP,gBAAAA,IAAuB,KAAK,CAAC,MAAW,EAAE,SAAS,QAAQ,eAC3D,0CAAO,mBAAP,mBACI,OAAO,CAAC,MAAW,EAAE,SAAS,OADlC,mBAEI,KAAK,CAAC,MAAW,EAAE,WAAW,UAAU,EAAC,uBAAG;AAEtD,MAAI,CAAC,eAAe;AAClB,WAAO,QAAQ,OAAO,IAAI,MAAM,oCAAoC,CAAC;AAAA,EACvE;AAEA,QAAM,OAAO;AAAA,IACX,QAAQ;AAAA,IACR,WAAW,OAAO,cAAc,IAAI;AAAA,IACpC,QAAQ,QAAQ;AAAA,IAChB,aAAa,OAAO,cAAc,IAAI;AAAA,IACtC,QAAQ,MAAM;AAAA,IACd,UAAS,iBAAM,aAAN,mBAAgB,iBAAhB,YAAgC;AAAA,EAC3C;AAEA,SAAO,cACJ,KAAK,UAAU,iBAAiB,IAAI,EACpC,KAAK,CAAC,QAAQ;AACb,QAAI;AAAE,sBAAgB,wBAAwB,IAAI;AAAA,IAAG,SAAS,GAAG;AAAA,IAAC;AAClE,WAAO,IAAI;AAAA,EACb,CAAC,EACA,MAAM,CAAC,QAAQ;AAnHpB,QAAAA;AAoHM,YAAOA,MAAA,2BAAK,aAAL,gBAAAA,IAAe;AAAA,EACxB,CAAC;AACL;AAEA,eAAsB,QAAQ,UAA0B,CAAC,GAAiB;AAxH1E,MAAAA,KAAA;AAyHE,QAAM,QAAQ,gBAAgB,SAAS;AAEvC,QAAM,OAAO;AAAA,IACX,UAAS,mBAAQ,YAAR,aAAmBA,MAAA,+BAAO,aAAP,gBAAAA,IAAiB,YAApC,YAA+C;AAAA,IACxD,WAAU,mBAAQ,aAAR,YAAoB,+BAAO,YAA3B,YAAsC;AAAA,IAChD,eAAc,aAAQ,iBAAR,YAAwB;AAAA,IACtC,gBAAe,aAAQ,kBAAR,YAAyB;AAAA,IACxC,eAAc,aAAQ,iBAAR,YAAwB;AAAA,IACtC,gBAAe,aAAQ,kBAAR,YAAyB;AAAA,IACxC,gBAAe,mBAAQ,kBAAR,aAAyB,oCAAO,aAAP,mBAAiB,iBAA1C,YAA0D;AAAA,IACzE,gBAAe,aAAQ,kBAAR,YAAyB;AAAA,IACxC,oBAAmB,mBAAQ,sBAAR,aAA6B,oCAAO,aAAP,mBAAiB,YAA9C,YAAyD;AAAA,IAC5E,mBAAkB,aAAQ,qBAAR,YAA4B;AAAA,IAC9C,cAAa,aAAQ,gBAAR,YAAuB;AAAA,IACpC,cAAa,aAAQ,gBAAR,YAAuB;AAAA,IACpC,SAAQ,aAAQ,WAAR,YAAkB;AAAA,EAC5B;AAEA,QAAM,MAAM,MAAM,cAAc,KAAK,UAAU,UAAU,IAAI;AAC7D,kBAAgB,qBAAqB;AACrC,kBAAgB,QAAQ;AACxB,SAAO,IAAI;AACb;AAEA,eAAsB,SAAwB;AAjJ9C,MAAAA,KAAA;AAkJE,MAAI;AAEJ,MAAI;AACF,UAAM,cAAc,KAAK,UAAU,WAAW;AAAA,EAChD,SAAS,KAAU;AACjB,kBAAc,IAAI,QAAM,MAAAA,MAAA,2BAAK,aAAL,gBAAAA,IAAe,SAAf,mBAAqB,YAAW,kCAAkC;AAAA,EAC5F,UAAE;AACA,oBAAgB,qBAAqB;AACrC,qCAAc,WAAW;AAAA,EAC3B;AAEA,MAAI,YAAa,OAAM;AACzB;AAEA,eAAsB,gBAAgB,SAA+C;AACnF,QAAM,MAAM,MAAM,cAAc,KAAK,UAAU,wBAAwB,OAAO;AAC9E,SAAO,IAAI;AACb;AAEA,eAAsB,eAAe,SAA8C;AACjF,QAAM,MAAM,MAAM,cAAc,KAAK,UAAU,uBAAuB,OAAO;AAC7E,SAAO,IAAI;AACb;AAEA,eAAsB,kBAAkB,SAA0C;AAChF,QAAM,MAAM,MAAM,cAAc,KAAK,UAAU,6BAA6B,OAAO;AACnF,SAAO,IAAI;AACb;;;AlBnIA,eAAsB,QAAQ;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiC;AAC/B,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,OAAO,KAAK,EAAE,WAAW,GAAG;AACvE,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAEA,MACE,CAAC,YACD,OAAO,aAAa,YACpB,SAAS,KAAK,EAAE,WAAW,GAC3B;AACA,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAEA,MAAI,CAAC,WAAW,OAAO,YAAY,YAAY,QAAQ,KAAK,EAAE,WAAW,GAAG;AAC1E,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAEA,MAAI;AACF,UAAM,aAAa,MAAM,aAAa,KAAK;AAAA,MACzC,QAAQ,OAAO,KAAK;AAAA,MACpB,UAAU,SAAS,KAAK;AAAA,MACxB,SAAS,QAAQ,KAAK;AAAA,MACtB,UAAU,uCAAW;AAAA,MACrB,aAAa,uCAAW;AAAA,MACxB,SAAS,uCAAW;AAAA,IACtB,CAAC;AAED,QAAI,CAAC,YAAY;AACf,sBAAgB,aAAa;AAC7B,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AAGA,QAAI,WAAW,UAAU;AACvB,sBAAgB,kBAAkB,WAAW,QAAQ;AAAA,IACvD;AAGA,UAAM,2BAA2B,gBAAgB,kBAAkB;AAGnE,UAAM,oBAAoB,iDACpB,WAAW,gBAAgB,CAAC,IAC7B,2BACC,aAAa,CAAC;AAIpB,UAAM,MAAM;AAAA,MACV,aAAa,WAAW;AAAA,MACxB,YAAY,WAAW;AAAA,MACvB,UAAU,WAAW;AAAA,MACrB,cAAc;AAAA,MACd,UAAU,WAAW;AAAA,IACvB;AAEA,YAAQ,KAAK,8BAA8B;AAE3C,oBAAgB;AAAA,MACd,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,MACd,QAAQ,KAAK;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,IACb;AAAA,EACF,SAAS,OAAO;AACd,oBAAgB,aAAa;AAE7B,QAAI,iBAAiB,OAAO;AAC1B,YAAM;AAAA,IACR;AAEA,UAAM,IAAI,MAAM,8BAA8B,OAAO,KAAK,CAAC,EAAE;AAAA,EAC/D;AACF;AAEO,SAAS,gBAAwB;AACtC,SAAO;AACT;AAEO,SAAS,mBAA4B;AAC1C,SAAO,gBAAgB,SAAS,EAAE;AACpC;","names":["_a","_a","_a","axios","import_react","_a","_b","process_id","process_name","status","phone_number","agent_id","call_id","call_details","import_react","import_jsx_runtime","_a","import_react","import_material","import_jsx_runtime","LockOutlinedIcon","import_jsx_runtime","ArrowBackIcon","import_material","import_jsx_runtime","_a","import_react","_a","PlayArrow","ExpandLess","KeyboardArrowDown","import_react","import_material","import_KeyboardArrowDown","import_PlayArrow","import_Phone","import_jsx_runtime","Search","Phone","import_material","import_styles","import_jsx_runtime","_a","import_react","_a","_a","_b","AddIcon","err","UploadFileIcon","DownloadIcon","SearchIcon","import_react","import_material","import_Pause","import_Phone","import_PlayArrow","import_Search","import_jsx_runtime","CampaignDialog","AddLeadDialog","CampaignsContent","_c","_d","_e","RefreshIcon","ChevronRightIcon","ChevronLeftIcon","SettingsIcon","EditIcon","PlayArrowIcon","PauseIcon","ArchiveIcon","PhoneIcon","DeleteIcon","_a","import_react","headCellSx","tableRowSx","init_styles","dayjs","import_react","import_material","import_Close","import_Download","import_Search","import_jsx_runtime","init_styles","isoWeek","LoginReportContent","SearchIcon","DownloadIcon","headCellSx","tableRowSx","CloseIcon","_a","import_react","init_types","FONT","COLORS","filterBarSx","tableSx","headCellSx","sortLabelSx","tableRowSx","queueChipSx","paginationSx","init_styles","import_react","import_material","import_Close","import_Download","import_PlayArrow","import_Search","import_dayjs","import_isoWeek","import_LocalizationProvider","import_AdapterDayjs","import_DateTimePicker","import_jsx_runtime","comparator","init_types","init_styles","dayjs","isoWeek","RecordingCell","COLORS","FileDownloadIcon","PlayArrowIcon","FilterBar","filterBarSx","SearchBarLocal","SearchIcon","CloseIcon","CdrReportContent","DownloadIcon","tableSx","headCellSx","sortLabelSx","FONT","tableRowSx","queueChipSx","paginationSx","_a","import_react","_a","import_react","filterBarSx","datePickerSx","contentSx","sectionTitleSx","paginationSx","init_styles","RecordingCell","PlayArrowIcon","FileDownloadIcon","import_react","import_material","import_Search","import_PlayArrow","import_FileDownload","import_dayjs","import_LocalizationProvider","import_AdapterDayjs","import_jsx_runtime","init_styles","_a","dayjs","filterBarSx","datePickerSx","contentSx","SearchIcon","sectionTitleSx","RTooltip","_b","_c","paginationSx","init_types","C","containerSx","filterBarSx","contentSx","loadingOverlaySx","tablePaperSx","headCellSx","bodyCellSx","tableRowSx","paginationSx","datePickerSx","init_styles","_a","dayjs","import_react","import_material","import_FileDownload","import_Search","import_dayjs","import_LocalizationProvider","import_AdapterDayjs","import_DatePicker","import_jsx_runtime","init_types","init_styles","containerSx","SearchIcon","FileDownloadIcon","filterBarSx","datePickerSx","C","contentSx","loadingOverlaySx","tablePaperSx","headCellSx","tableRowSx","bodyCellSx","VisibilityIcon","paginationSx","_a","import_react","import_vault","_a","import_react","import_vault","data","_a","import_react","import_vault","data","_a","import_react","import_react","import_react","startMonitoring","_a","stopMonitoring","import_react","import_CallEnd","import_Close","import_Pause","import_PlayArrow","import_SupportAgent","import_TransferWithinAStation","import_Upcoming","import_material","import_react","import_material","import_react","import_react","_a","import_material","import_jsx_runtime","_a","_b","_c","_d","_e","PlayArrow","Pause","Call","CallSplit","CallEnd","_f","_g","_h","_i","_j","_k","_l","_m","Close","PhoneDisabled","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","TransferWithinAStation","MemoryOutlined","Upcoming","Airlines","SupportAgent","Roofing","RecordVoiceOver","import_react","incomingRingtoneUrl","incomingRingtoneUrl","import_vault","import_jsx_runtime","_a","clickToCall","endCall","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","isOnHold","isMuted","DragIndicator","WifiCalling3","Pause","MicOff","KeyboardArrowDown","SupportAgent","PlayArrow","Mic","TransferWithinAStation","Group","SmsSharp","CallEnd","MoreVert","Close","Phone","SendRounded","Layers","Pending","Upcoming","import_jsx_runtime","_a","import_react","import_jsx_runtime","React","import_react","import_vault","_a","import_vault","_a"]}
|