{"version":3,"sources":["../call-control-sdk/lib/pages/campaigns/index.tsx","../node_modules/@mui/icons-material/Archive.mjs","../node_modules/@mui/icons-material/DeleteSweep.mjs","../node_modules/@mui/icons-material/ListAlt.mjs","../node_modules/@mui/icons-material/TaskAlt.mjs","../node_modules/@mui/icons-material/Star.mjs","../node_modules/@mui/icons-material/StarBorder.mjs","../node_modules/@mui/icons-material/UploadFile.mjs","../node_modules/@mui/icons-material/VisibilityOutlined.mjs","../node_modules/@mui/icons-material/PersonAddAlt1Outlined.mjs","../node_modules/@mui/icons-material/PersonOutlineOutlined.mjs","../node_modules/@mui/icons-material/LabelOutlined.mjs","../node_modules/@mui/icons-material/NotesOutlined.mjs","../call-control-sdk/lib/pages/campaigns/usePacingCapabilities.ts","../node_modules/@mui/icons-material/AddCircleOutlineOutlined.mjs","../node_modules/@mui/icons-material/DataObject.mjs","../node_modules/@mui/icons-material/DeleteOutlineOutlined.mjs","../call-control-sdk/lib/pages/campaigns/CustomDataEditor.tsx","../node_modules/@mui/icons-material/Clear.mjs","../call-control-sdk/lib/pages/campaigns/types.ts"],"sourcesContent":["import React, { memo, useCallback, useEffect, useRef, useState } from \"react\";\r\nimport {\r\n\tBox,\r\n\tButton,\r\n\tChip,\r\n\tCircularProgress,\r\n\tFormControl,\r\n\tFormControlLabel,\r\n\tCheckbox,\r\n\tSwitch,\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\tCollapse,\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 KeyboardArrowDownIcon from \"@mui/icons-material/KeyboardArrowDown\";\r\nimport KeyboardArrowRightIcon from \"@mui/icons-material/KeyboardArrowRight\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport DeleteSweepIcon from \"@mui/icons-material/DeleteSweep\";\r\nimport DownloadIcon from \"@mui/icons-material/Download\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport ListAltIcon from \"@mui/icons-material/ListAlt\";\r\nimport FormatListNumberedIcon from \"@mui/icons-material/FormatListNumbered\";\r\nimport InfoOutlinedIcon from \"@mui/icons-material/InfoOutlined\";\r\nimport PauseIcon from \"@mui/icons-material/Pause\";\r\nimport PhoneIcon from \"@mui/icons-material/Phone\";\r\nimport PhoneInTalkIcon from \"@mui/icons-material/PhoneInTalk\";\r\nimport TaskAltIcon from \"@mui/icons-material/TaskAlt\";\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 StarIcon from \"@mui/icons-material/Star\";\r\nimport StarBorderIcon from \"@mui/icons-material/StarBorder\";\r\nimport UploadFileIcon from \"@mui/icons-material/UploadFile\";\r\nimport VisibilityOutlinedIcon from \"@mui/icons-material/VisibilityOutlined\";\r\nimport PersonAddAlt1OutlinedIcon from \"@mui/icons-material/PersonAddAlt1Outlined\";\r\nimport PersonOutlineIcon from \"@mui/icons-material/PersonOutlineOutlined\";\r\nimport LabelOutlinedIcon from \"@mui/icons-material/LabelOutlined\";\r\nimport NotesOutlinedIcon from \"@mui/icons-material/NotesOutlined\";\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 { usePacingCapabilities } from \"./usePacingCapabilities\";\r\nimport { usePacingAlertToasts } from \"./usePacingAlertToasts\";\r\nimport { CustomDataEditor, buildCustomData, type CustomDataRow } from \"./CustomDataEditor\";\r\nimport { getRecordingByCall } from \"../cdrReport/useCdrReport\";\r\nimport DateRangePicker from \"../common/components/DateRangePicker\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport ClearIcon from \"@mui/icons-material/Clear\";\r\nimport dayjs, { type Dayjs } from \"dayjs\";\r\nimport type {\r\n\tCampaign,\r\n\tCampaignCreatePayload,\r\n\tCampaignSettings,\r\n\tCreateQueuePayload,\r\n\tLead,\r\n\tLeadCallData,\r\n\tLeadCreatePayload,\r\n\tQueue,\r\n\tQueueLinkPayload,\r\n} from \"./types\";\r\nimport {\r\n\tAGENT_TYPES,\r\n\tCAMPAIGN_SETTING_KEYS,\r\n\tCAMPAIGN_TYPES,\r\n\tDAYS_OF_WEEK,\r\n\tdefaultFormData,\r\n\tPACING_LIMITS,\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\tdialogSelectSx,\r\n\tdialogMenuProps,\r\n\tstatusChipSx,\r\n\tleadStatusChipSx,\r\n\tleadPriorityChipSx,\r\n\tdaychipSx,\r\n\tsetDefaultLinkSx,\r\n\tSTATUS_COLORS,\r\n} from \"./styles\";\r\nimport { useNumberMask } from \"../../utils/numberMask\";\r\nimport { sdkStateManager } from \"../../hooks/sdk-state\";\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\n/**\r\n * Paused (and archived) campaigns are read-only — the campaign has to be started\r\n * before anything can be changed.\r\n */\r\nfunction isEditLocked(c: Campaign | null | undefined): boolean {\r\n\tconst status = c?.status?.toLowerCase();\r\n\treturn status === \"paused\" || status === \"archived\";\r\n}\r\n\r\nfunction editLockReason(c: Campaign | null | undefined): string {\r\n\treturn c?.status?.toLowerCase() === \"archived\"\r\n\t\t? \"Campaign is archived\"\r\n\t\t: \"Campaign is paused — start it to make changes\";\r\n}\r\n\r\n/**\r\n * Excel upload result → toast. The API's `limit_reached` decides the tone: false\r\n * means a clean upload (green), true means the limit cut the upload short (warning).\r\n */\r\nfunction uploadResultToast(result: any): { message: string; severity: \"success\" | \"warning\" } {\r\n\tconst limitReached = result?.limit_reached === true;\r\n\treturn {\r\n\t\tmessage: result?.message || (limitReached ? \"Lead upload limit reached\" : \"Leads uploaded\"),\r\n\t\tseverity: limitReached ? \"warning\" : \"success\",\r\n\t};\r\n}\r\n\r\n/**\r\n * Add-lead result → toast. A refusal comes back as `limit_reached: true` /\r\n * `success: false` with no lead, so `added` is false and the caller leaves the\r\n * form as it is.\r\n */\r\nfunction leadResultToast(result: any): { message: string; severity: \"success\" | \"warning\"; added: boolean } {\r\n\tconst refused = result?.limit_reached === true || result?.success === false;\r\n\treturn {\r\n\t\tmessage: result?.message || (refused ? \"Lead was not added\" : \"Lead added\"),\r\n\t\tseverity: refused ? \"warning\" : \"success\",\r\n\t\tadded: !refused,\r\n\t};\r\n}\r\n\r\n/** Same check for the error path, when the refusal arrives as a failed request. */\r\nfunction isLimitReachedError(err: any): boolean {\r\n\treturn err?.response?.data?.limit_reached === true;\r\n}\r\n\r\n/** Only these campaigns carry pacing settings; everything else must not send them. */\r\nfunction supportsPacing(f: { dialingMode?: string; agentType?: string }): boolean {\r\n\treturn (f.dialingMode || \"\").toUpperCase() === \"PREDICTIVE\"\r\n\t\t&& (f.agentType || \"\").toUpperCase() === \"HUMAN\";\r\n}\r\n\r\n/**\r\n * Fraction → percent for display. Rounded because 0.03 × 100 is 3.0000000000000004\r\n * in floating point, which would make the dialog look dirty the moment it opens\r\n * (isDirty compares a JSON round-trip of the form against the campaign).\r\n */\r\nfunction abandonRateToPercent(rate: number | null | undefined): number {\r\n\tif (typeof rate !== \"number\" || Number.isNaN(rate)) return 3;\r\n\treturn Math.round(rate * 100 * 1000) / 1000;\r\n}\r\n\r\n/** The fields the switch reveals — only meaningful while adaptive is on. */\r\nconst TUNING_KEYS = [\r\n\t\"maxPacingRatio\", \"pacingWindowMinutes\", \"complianceWindowMinutes\", \"safeModeMinAnswered\",\r\n\t\"inboundReserveAgents\", \"learningPeriodMinutes\", \"targetHandleSeconds\",\r\n] as const;\r\n\r\n/** Tuning fields where null means something (\"automatic\", \"no adjustment\"). */\r\nconst NULLABLE_TUNING_KEYS: readonly string[] = [\"maxPacingRatio\", \"targetHandleSeconds\"];\r\n\r\n/** Those plus the switch itself: everything to drop when adaptive isn't available. */\r\nconst ADAPTIVE_KEYS = [\"adaptivePacingEnabled\", ...TUNING_KEYS] as const;\r\n\r\n/**\r\n * Turn the form's pacing fields into what the API expects, in place.\r\n *\r\n * The dialog posts the WHOLE form on update, so anything left behind is sent —\r\n * and the backend rejects pacing fields on campaigns that can't have them\r\n * (\"Adaptive pacing is only available for PREDICTIVE campaigns with HUMAN\r\n * agents\", and a tenant-level refusal). Hence the deletes rather than just\r\n * hiding the inputs.\r\n */\r\nfunction applyPacingFields(\r\n\tpayload: Record<string, any>,\r\n\tform: CampaignCreatePayload,\r\n\tadaptiveAvailable: boolean,\r\n) {\r\n\t// UI-only: the wire field is targetAbandonRate, as a fraction.\r\n\tdelete payload.targetAbandonRatePercent;\r\n\r\n\tif (!supportsPacing(form)) {\r\n\t\tdelete payload.targetAbandonRate;\r\n\t\tdelete payload.maxAgentWaitSeconds;\r\n\t\tADAPTIVE_KEYS.forEach((k) => delete payload[k]);\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst percent = form.targetAbandonRatePercent;\r\n\tif (typeof percent === \"number\" && !Number.isNaN(percent)) {\r\n\t\tpayload.targetAbandonRate = Number((percent / 100).toFixed(5));\r\n\t} else {\r\n\t\tdelete payload.targetAbandonRate;\r\n\t}\r\n\tif (typeof form.maxAgentWaitSeconds !== \"number\") delete payload.maxAgentWaitSeconds;\r\n\r\n\tif (!adaptiveAvailable) {\r\n\t\tADAPTIVE_KEYS.forEach((k) => delete payload[k]);\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Switch off: send the switch and nothing else. The four tuning fields are\r\n\t// hidden while it is off, so anything we sent would be a value the user never\r\n\t// saw — the form's defaults on a new campaign. Leaving them out also means an\r\n\t// update can't overwrite what is already stored.\r\n\tif (!form.adaptivePacingEnabled) {\r\n\t\tTUNING_KEYS.forEach((k) => delete payload[k]);\r\n\t\treturn;\r\n\t}\r\n\r\n\t// maxPacingRatio (\"automatic\") and targetHandleSeconds (\"no adjustment\")\r\n\t// are sent as null when empty; the rest are rejected as null, so drop them.\r\n\tTUNING_KEYS.forEach((k) => {\r\n\t\tif (NULLABLE_TUNING_KEYS.includes(k)) {\r\n\t\t\tif (payload[k] === undefined) payload[k] = null;\r\n\t\t} else if (payload[k] == null) {\r\n\t\t\tdelete payload[k];\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * \"Adaptive since\" for the switch. The API sends an IST wall-clock stamp with no\r\n * timezone suffix and microsecond precision (2026-09-29T15:19:02.390868), which\r\n * is unreadable raw — and dayjs parses it as local time, which is what it is.\r\n */\r\nfunction formatAdaptiveSince(value?: string | null): string {\r\n\tif (!value) return \"\";\r\n\tconst d = dayjs(value);\r\n\treturn d.isValid() ? d.format(\"D MMM YYYY, h:mm A\") : \"\";\r\n}\r\n\r\n/**\r\n * Readable text for a failed campaign save.\r\n *\r\n * Three shapes turn up: the business-rule errors carry `message`, already\r\n * prefixed with a status (\"422: Adaptive pacing is not enabled for this\r\n * tenant\") which is stripped; FastAPI's own validation errors carry `detail`,\r\n * either a string or a list of `{loc, msg}`; and a transport failure has\r\n * neither, where axios's own message is all there is.\r\n */\r\nfunction cleanSaveError(err: any): string {\r\n\tconst data = err?.response?.data;\r\n\tconst detail = data?.detail;\r\n\tconst fromDetail =\r\n\t\ttypeof detail === \"string\" ? detail\r\n\t\t: Array.isArray(detail) ? detail.map((d: any) => d?.msg).filter(Boolean).join(\"; \")\r\n\t\t: \"\";\r\n\tconst raw = data?.message || fromDetail || err?.message || \"Failed to save campaign\";\r\n\treturn String(raw).replace(/^\\d{3}:\\s*/, \"\");\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\tleadAutoCompleteEnabled: c.leadAutoCompleteEnabled ?? false,\r\n\t\tisDefault: c.isDefault ?? false,\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\tisAutoDialQueue: q.isAutoDialQueue ?? false,\r\n\t\t})),\r\n\t\ttargetAbandonRatePercent: abandonRateToPercent(c.targetAbandonRate),\r\n\t\tmaxAgentWaitSeconds: c.maxAgentWaitSeconds ?? 60,\r\n\t\tadaptivePacingEnabled: c.adaptivePacingEnabled ?? false,\r\n\t\tmaxPacingRatio: c.maxPacingRatio ?? null,\r\n\t\tpacingWindowMinutes: c.pacingWindowMinutes ?? 15,\r\n\t\tcomplianceWindowMinutes: c.complianceWindowMinutes ?? 30,\r\n\t\tsafeModeMinAnswered: c.safeModeMinAnswered ?? 20,\r\n\t\tinboundReserveAgents: c.inboundReserveAgents ?? 0,\r\n\t\tlearningPeriodMinutes: c.learningPeriodMinutes ?? 30,\r\n\t\ttargetHandleSeconds: c.targetHandleSeconds ?? null,\r\n\t};\r\n}\r\n\r\n// ──── Lead form (shared by the Add Lead dialog and the dialog's Leads tab) ────\r\n\r\nconst LEAD_PRIORITY_COLORS: Record<string, string> = {\r\n\tHIGH: \"#e15b4c\",\r\n\tMEDIUM: \"#e0a02f\",\r\n\tLOW: \"#6aa77f\",\r\n};\r\n\r\n/** Section card used for each block of the lead form. */\r\nconst leadCardSx = {\r\n\tborder: \"1px solid #e3ebee\",\r\n\tborderRadius: \"12px\",\r\n\toverflow: \"hidden\",\r\n\tbackgroundColor: \"#fff\",\r\n};\r\n\r\nconst leadCardHeaderSx = {\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tgap: 1,\r\n\tpx: 1.75,\r\n\tpy: 1.25,\r\n\tbackgroundColor: \"#f1f7f8\",\r\n\tborderBottom: \"1px solid #e3ebee\",\r\n};\r\n\r\nconst leadCardTitleSx = {\r\n\tfontWeight: 700,\r\n\tfontSize: \"0.85rem\",\r\n\tcolor: \"#1a1a1a\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n};\r\n\r\nconst leadFieldSx = {\r\n\t\"& .MuiOutlinedInput-root\": {\r\n\t\tborderRadius: \"8px\",\r\n\t\tbackgroundColor: \"#fff\",\r\n\t\tfontSize: \"0.85rem\",\r\n\t\t\"&:hover fieldset\": { borderColor: \"#1A5F6C\" },\r\n\t\t\"&.Mui-focused fieldset\": { borderColor: \"#1A5F6C\" },\r\n\t},\r\n\t\"& .MuiFormHelperText-root\": { mx: 0.25, fontSize: \"0.68rem\" },\r\n};\r\n\r\n/**\r\n * Lead details + notes + custom data. Rendered both in the standalone Add Lead\r\n * dialog and in the campaign dialog's Leads tab, so the two stay in step.\r\n */\r\nfunction LeadFormFields({\r\n\tdata,\r\n\tonChange,\r\n\tcustomRows,\r\n\tonCustomRowsChange,\r\n\tdisabled = false,\r\n}: {\r\n\tdata: LeadCreatePayload;\r\n\tonChange: (data: LeadCreatePayload) => void;\r\n\tcustomRows: CustomDataRow[];\r\n\tonCustomRowsChange: React.Dispatch<React.SetStateAction<CustomDataRow[]>>;\r\n\tdisabled?: boolean;\r\n}) {\r\n\tconst phoneError = data.phoneNumber ? validatePhone(data.phoneNumber) : null;\r\n\r\n\treturn (\r\n\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n\t\t\t{/* ── Lead details ── */}\r\n\t\t\t<Box sx={leadCardSx}>\r\n\t\t\t\t<Box sx={leadCardHeaderSx}>\r\n\t\t\t\t\t<PhoneIcon sx={{ fontSize: 17, color: \"#1A5F6C\" }} />\r\n\t\t\t\t\t<Typography sx={leadCardTitleSx}>Lead Details</Typography>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={{ p: 1.75, display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\" }, gap: 1.75 }}>\r\n\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t<Typography sx={labelSx}>Phone Number <span style={{ color: \"#d32f2f\" }}>*</span></Typography>\r\n\t\t\t\t\t\t<TextField fullWidth size=\"small\" placeholder=\"+91 9876543210\"\r\n\t\t\t\t\t\t\tvalue={data.phoneNumber}\r\n\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\tdisabled={disabled}\r\n\t\t\t\t\t\t\terror={!!phoneError}\r\n\t\t\t\t\t\t\thelperText={phoneError || \"10 digits, optionally prefixed with 91 or +91\"}\r\n\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\thtmlInput: { inputMode: \"tel\" },\r\n\t\t\t\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t\t\t\tstartAdornment: (\r\n\t\t\t\t\t\t\t\t\t\t<InputAdornment position=\"start\">\r\n\t\t\t\t\t\t\t\t\t\t\t<PhoneIcon sx={{ fontSize: 16, color: \"#9aa7ad\" }} />\r\n\t\t\t\t\t\t\t\t\t\t</InputAdornment>\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}}\r\n\t\t\t\t\t\t\tsx={leadFieldSx} />\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\" placeholder=\"e.g. John Doe\"\r\n\t\t\t\t\t\t\tvalue={data.callerName || \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => onChange({ ...data, callerName: e.target.value })}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t\t\t\tstartAdornment: (\r\n\t\t\t\t\t\t\t\t\t\t<InputAdornment position=\"start\">\r\n\t\t\t\t\t\t\t\t\t\t\t<PersonOutlineIcon sx={{ fontSize: 17, color: \"#9aa7ad\" }} />\r\n\t\t\t\t\t\t\t\t\t\t</InputAdornment>\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}}\r\n\t\t\t\t\t\t\tsx={leadFieldSx} />\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\" placeholder=\"e.g. web, csv, manual\"\r\n\t\t\t\t\t\t\tvalue={data.source || \"\"}\r\n\t\t\t\t\t\t\tonChange={(e) => onChange({ ...data, source: e.target.value })}\r\n\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\tinput: {\r\n\t\t\t\t\t\t\t\t\tstartAdornment: (\r\n\t\t\t\t\t\t\t\t\t\t<InputAdornment position=\"start\">\r\n\t\t\t\t\t\t\t\t\t\t\t<LabelOutlinedIcon sx={{ fontSize: 17, color: \"#9aa7ad\" }} />\r\n\t\t\t\t\t\t\t\t\t\t</InputAdornment>\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}}\r\n\t\t\t\t\t\t\tsx={leadFieldSx} />\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={data.priority ?? 5}\r\n\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\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\tMenuProps={dialogMenuProps}\r\n\t\t\t\t\t\t\t\tsx={dialogSelectSx}>\r\n\t\t\t\t\t\t\t\t{LEAD_PRIORITY_OPTIONS.map((o) => (\r\n\t\t\t\t\t\t\t\t\t<MenuItem key={o.label} value={o.value}>\r\n\t\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={{\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 8, height: 8, borderRadius: \"50%\", mr: 1,\r\n\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\tbackgroundColor: LEAD_PRIORITY_COLORS[o.label] || \"#9aa7ad\",\r\n\t\t\t\t\t\t\t\t\t\t}} />\r\n\t\t\t\t\t\t\t\t\t\t{o.label}\r\n\t\t\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t\t\t))}\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</Box>\r\n\t\t\t</Box>\r\n\r\n\t\t\t{/* ── Notes ── */}\r\n\t\t\t<Box sx={leadCardSx}>\r\n\t\t\t\t<Box sx={leadCardHeaderSx}>\r\n\t\t\t\t\t<NotesOutlinedIcon sx={{ fontSize: 17, color: \"#1A5F6C\" }} />\r\n\t\t\t\t\t<Typography sx={leadCardTitleSx}>Notes</Typography>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={{ p: 1.75 }}>\r\n\t\t\t\t\t<TextField fullWidth size=\"small\" multiline minRows={2} maxRows={8}\r\n\t\t\t\t\t\tplaceholder=\"Anything the agent should know before dialling this lead…\"\r\n\t\t\t\t\t\tvalue={data.notes || \"\"}\r\n\t\t\t\t\t\tonChange={(e) => onChange({ ...data, notes: e.target.value })}\r\n\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\tsx={leadFieldSx} />\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\r\n\t\t\t{/* ── Custom data (last: it grows as rows are added) ── */}\r\n\t\t\t<CustomDataEditor rows={customRows} onChange={onCustomRowsChange} disabled={disabled} />\r\n\t\t</Box>\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\nconst DEFAULT_LOCKED_MESSAGE =\r\n\t\"This is the default campaign. To change it, make another campaign the default — this one will be removed as default automatically.\";\r\n\r\nfunction BasicInfoTab({ formData, setFormData, isEditMode, isCurrentDefault = false }: TabFormProps & { isEditMode: boolean; isCurrentDefault?: 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\t{/* Default campaign — can be turned on, never off; the default only moves to another\r\n\t\t\t\t    campaign, so the checkbox is replaced by a badge once this campaign is the default. */}\r\n\t\t\t\t<Box>\r\n\t\t\t\t\t<Typography sx={labelSx}>&nbsp;</Typography>\r\n\t\t\t\t\t<Box sx={{ height: 40, display: \"flex\", alignItems: \"center\" }}>\r\n\t\t\t\t\t\t{isCurrentDefault ? (\r\n\t\t\t\t\t\t\t<Tooltip arrow placement=\"top\" title={DEFAULT_LOCKED_MESSAGE} slotProps={{ popper: { sx: { zIndex: 99999 } } }}>\r\n\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\ticon={<StarIcon sx={{ fontSize: 16, color: \"#F5B301 !important\" }} />}\r\n\t\t\t\t\t\t\t\t\tlabel=\"Default\"\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\tbackground: \"linear-gradient(135deg, #FFF8E1 0%, #FFECB3 100%)\",\r\n\t\t\t\t\t\t\t\t\t\tcolor: \"#B27B00\",\r\n\t\t\t\t\t\t\t\t\t\tborder: \"1px solid #FFE082\",\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.75rem\",\r\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\r\n\t\t\t\t\t\t\t\t\t\tcursor: \"help\",\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</Tooltip>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\t\tarrow\r\n\t\t\t\t\t\t\t\tplacement=\"top\"\r\n\t\t\t\t\t\t\t\ttitle=\"Use this campaign by default wherever a campaign is not explicitly chosen\"\r\n\t\t\t\t\t\t\t\tslotProps={{ popper: { sx: { zIndex: 99999 } } }}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<FormControlLabel\r\n\t\t\t\t\t\t\t\t\tcontrol={\r\n\t\t\t\t\t\t\t\t\t\t<Checkbox\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\tchecked={!!formData.isDefault}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"isDefault\", e.target.checked)}\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ color: \"#bbb\", \"&.Mui-checked\": { color: \"#F5B301\" } }}\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\tlabel={<Typography sx={{ fontSize: \"0.85rem\", fontWeight: 600, color: \"#333\" }}>Make Default</Typography>}\r\n\t\t\t\t\t\t\t\t\tsx={{ m: 0 }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</Tooltip>\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</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<TextField fullWidth size=\"small\" type=\"number\" value={formData.priority ?? \"\"}\r\n\t\t\t\t\t\tonChange={(e) => handleChange(\"priority\", e.target.value === \"\" ? null : Math.max(1, Number(e.target.value)))}\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</Box>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\nfunction DialingConfigTab({\r\n\tformData, setFormData, adaptiveAvailable = false, adaptiveStartedAt,\r\n}: TabFormProps & { adaptiveAvailable?: boolean; adaptiveStartedAt?: string | null }) {\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<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t<Typography sx={labelSx}>Max Concurrent Calls <span style={{ color: \"red\" }}>*</span></Typography>\r\n\t\t\t\t\t\t<Tooltip title=\"The maximum number of calls that the campaign is allowed to have active at the same time.\" arrow>\r\n\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t</Box>\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{/* Calls Per Agent - Not Used */}\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<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t<Typography sx={labelSx}>Ring Timeout (sec)</Typography>\r\n\t\t\t\t\t\t<Tooltip title=\"The maximum number of seconds a call is allowed to ring before the system stops trying and marks the call as unanswered/failed.\" arrow>\r\n\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t</Box>\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{/* Answer Timeout - Not Used */}\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<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t<Typography sx={labelSx}>Max Attempts <span style={{ color: \"red\" }}>*</span></Typography>\r\n\t\t\t\t\t\t<Tooltip title=\"The maximum number of times the system will try to call the same lead/phone number if the previous attempts were unsuccessful.\" arrow>\r\n\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t</Box>\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<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t<Typography sx={labelSx}>Retry Interval (min)</Typography>\r\n\t\t\t\t\t\t<Tooltip title=\"The amount of time the system waits before trying to call the same lead again after an unsuccessful call attempt.\" arrow>\r\n\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\r\n\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t</Box>\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\r\n\t\t\t{/* ── Predictive pacing ──────────────────────────────────────────────\r\n\t\t\t    Only PREDICTIVE campaigns run by human agents have pacing at all,\r\n\t\t\t    so the whole block hides for every other mode (and for AI agents).\r\n\t\t\t    The adaptive group hides again unless the tenant has the feature. */}\r\n\t\t\t{supportsPacing(formData) && (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<Box sx={{ mt: 3 }}><Typography sx={sectionTitleSx}>Compliance</Typography></Box>\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<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Target Abandon Rate (%)</Typography>\r\n\t\t\t\t\t\t\t\t<Tooltip title=\"The share of answered calls that may be dropped because no agent was free. Regulators cap this at 3%.\" arrow>\r\n\t\t\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\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\t<TextField fullWidth size=\"small\" type=\"number\"\r\n\t\t\t\t\t\t\t\tvalue={formData.targetAbandonRatePercent ?? \"\"}\r\n\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"targetAbandonRatePercent\",\r\n\t\t\t\t\t\t\t\t\te.target.value === \"\" ? undefined : parseFloat(e.target.value))}\r\n\t\t\t\t\t\t\t\tslotProps={{ htmlInput: {\r\n\t\t\t\t\t\t\t\t\tmin: PACING_LIMITS.targetAbandonRatePercent.min,\r\n\t\t\t\t\t\t\t\t\tmax: PACING_LIMITS.targetAbandonRatePercent.max,\r\n\t\t\t\t\t\t\t\t\tstep: 0.1,\r\n\t\t\t\t\t\t\t\t} }}\r\n\t\t\t\t\t\t\t\tsx={inputSx} />\r\n\t\t\t\t\t\t\t{(formData.targetAbandonRatePercent ?? 0) > PACING_LIMITS.targetAbandonRatePercent.warnAbove && (\r\n\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.72rem\", color: \"#b4530a\", mt: 0.4 }}>\r\n\t\t\t\t\t\t\t\t\tAbove the 3% regulatory ceiling.\r\n\t\t\t\t\t\t\t\t</Typography>\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>\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Max Wait For An Agent (sec)</Typography>\r\n\t\t\t\t\t\t\t\t<Tooltip title=\"How long a customer who answered hears hold music before the call is dropped. Applies to every predictive campaign.\" arrow>\r\n\t\t\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\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\t<TextField fullWidth size=\"small\" type=\"number\"\r\n\t\t\t\t\t\t\t\tvalue={formData.maxAgentWaitSeconds ?? \"\"}\r\n\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"maxAgentWaitSeconds\",\r\n\t\t\t\t\t\t\t\t\te.target.value === \"\" ? undefined : parseInt(e.target.value))}\r\n\t\t\t\t\t\t\t\tslotProps={{ htmlInput: {\r\n\t\t\t\t\t\t\t\t\tmin: PACING_LIMITS.maxAgentWaitSeconds.min,\r\n\t\t\t\t\t\t\t\t\tmax: PACING_LIMITS.maxAgentWaitSeconds.max,\r\n\t\t\t\t\t\t\t\t} }}\r\n\t\t\t\t\t\t\t\tsx={inputSx} />\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{adaptiveAvailable && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t<Box sx={{ mt: 3 }}><Typography sx={sectionTitleSx}>Adaptive Pacing</Typography></Box>\r\n\t\t\t\t\t\t\t<Box sx={{ mb: formData.adaptivePacingEnabled ? 2 : 0 }}>\r\n\t\t\t\t\t\t\t\t<FormControlLabel\r\n\t\t\t\t\t\t\t\t\tcontrol={\r\n\t\t\t\t\t\t\t\t\t\t<Switch\r\n\t\t\t\t\t\t\t\t\t\t\tchecked={!!formData.adaptivePacingEnabled}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"adaptivePacingEnabled\", e.target.checked)}\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\tlabel={<Typography sx={{ fontSize: \"0.85rem\" }}>Adjust the dial ratio automatically</Typography>}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.75rem\", color: \"#7a8599\", ml: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\tThe dial ratio adjusts every few seconds to the live answer and abandon rates.\r\n\t\t\t\t\t\t\t\t\tIf the abandon rate goes over the target, the system slows to one call per free agent\r\n\t\t\t\t\t\t\t\t\tuntil it recovers and alerts supervisors. The campaign keeps running.\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t{formData.adaptivePacingEnabled && formatAdaptiveSince(adaptiveStartedAt) && (\r\n\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.75rem\", color: \"#7a8599\", ml: 0.5, mt: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t\tAdaptive since {formatAdaptiveSince(adaptiveStartedAt)}\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</Box>\r\n\r\n\t\t\t\t\t\t\t{formData.adaptivePacingEnabled && (\r\n\t\t\t\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\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Maximum Dial Ratio</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Safety ceiling on calls placed per free agent. Leave empty and the system works the ceiling out from the pacing window (never above 3). Enter a number to fix it.\" arrow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\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<TextField fullWidth size=\"small\" type=\"number\"\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Automatic\"\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={formData.maxPacingRatio ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"maxPacingRatio\",\r\n\t\t\t\t\t\t\t\t\t\t\t\te.target.value === \"\" ? null : parseFloat(e.target.value))}\r\n\t\t\t\t\t\t\t\t\t\t\tslotProps={{ htmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\t\tmin: PACING_LIMITS.maxPacingRatio.min,\r\n\t\t\t\t\t\t\t\t\t\t\t\tmax: PACING_LIMITS.maxPacingRatio.max,\r\n\t\t\t\t\t\t\t\t\t\t\t\tstep: PACING_LIMITS.maxPacingRatio.step,\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={inputSx} />\r\n\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\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Pacing Window (min)</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"How many minutes of recent calls the answer rate and inbound prediction are based on. Shorter reacts faster but is noisier; keep 15 for campaigns with fewer than about 20 agents.\" arrow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\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<TextField fullWidth size=\"small\" type=\"number\"\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={formData.pacingWindowMinutes ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"pacingWindowMinutes\",\r\n\t\t\t\t\t\t\t\t\t\t\t\te.target.value === \"\" ? undefined : parseInt(e.target.value))}\r\n\t\t\t\t\t\t\t\t\t\t\tslotProps={{ htmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\t\tmin: PACING_LIMITS.pacingWindowMinutes.min,\r\n\t\t\t\t\t\t\t\t\t\t\t\tmax: PACING_LIMITS.pacingWindowMinutes.max,\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={inputSx} />\r\n\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\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Compliance Window (min)</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"How many minutes of recent answered calls the abandon rate is checked over, for throttling and safe mode. Safe mode ends once the rate over this window is back under target. Default 30.\" arrow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\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<TextField fullWidth size=\"small\" type=\"number\"\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={formData.complianceWindowMinutes ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"complianceWindowMinutes\",\r\n\t\t\t\t\t\t\t\t\t\t\t\te.target.value === \"\" ? undefined : parseInt(e.target.value))}\r\n\t\t\t\t\t\t\t\t\t\t\tslotProps={{ htmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\t\tmin: PACING_LIMITS.complianceWindowMinutes.min,\r\n\t\t\t\t\t\t\t\t\t\t\t\tmax: PACING_LIMITS.complianceWindowMinutes.max,\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={inputSx} />\r\n\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\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Min Answered Before Safe Mode</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Safe mode only starts once at least this many calls were answered in the compliance window, so one abandon among a handful of calls does not trigger it. Lower reacts sooner on small campaigns; default 20.\" arrow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\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<TextField fullWidth size=\"small\" type=\"number\"\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={formData.safeModeMinAnswered ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"safeModeMinAnswered\",\r\n\t\t\t\t\t\t\t\t\t\t\t\te.target.value === \"\" ? undefined : parseInt(e.target.value))}\r\n\t\t\t\t\t\t\t\t\t\t\tslotProps={{ htmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\t\tmin: PACING_LIMITS.safeModeMinAnswered.min,\r\n\t\t\t\t\t\t\t\t\t\t\t\tmax: PACING_LIMITS.safeModeMinAnswered.max,\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={inputSx} />\r\n\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\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Agents Kept For Inbound</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Agents always held back for inbound calls on shared queues, however busy the campaign is.\" arrow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\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<TextField fullWidth size=\"small\" type=\"number\"\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={formData.inboundReserveAgents ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"inboundReserveAgents\",\r\n\t\t\t\t\t\t\t\t\t\t\t\te.target.value === \"\" ? undefined : parseInt(e.target.value))}\r\n\t\t\t\t\t\t\t\t\t\t\tslotProps={{ htmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\t\tmin: PACING_LIMITS.inboundReserveAgents.min,\r\n\t\t\t\t\t\t\t\t\t\t\t\tmax: PACING_LIMITS.inboundReserveAgents.max,\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={inputSx} />\r\n\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\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Learning Period (min)</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"After adaptive is switched on the campaign dials one call per agent for this long, to gather enough data to pace on.\" arrow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\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<TextField fullWidth size=\"small\" type=\"number\"\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={formData.learningPeriodMinutes ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"learningPeriodMinutes\",\r\n\t\t\t\t\t\t\t\t\t\t\t\te.target.value === \"\" ? undefined : parseInt(e.target.value))}\r\n\t\t\t\t\t\t\t\t\t\t\tslotProps={{ htmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\t\tmin: PACING_LIMITS.learningPeriodMinutes.min,\r\n\t\t\t\t\t\t\t\t\t\t\t\tmax: PACING_LIMITS.learningPeriodMinutes.max,\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={inputSx} />\r\n\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\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: 0.3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Target Handle Time (sec)</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Optional. When calls finish faster than this the system dials a little harder, and vice versa. Leave empty for no adjustment.\" arrow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 16, color: \"#7a8599\", cursor: \"pointer\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\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<TextField fullWidth size=\"small\" type=\"number\"\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"No adjustment\"\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={formData.targetHandleSeconds ?? \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"targetHandleSeconds\",\r\n\t\t\t\t\t\t\t\t\t\t\t\te.target.value === \"\" ? null : parseInt(e.target.value))}\r\n\t\t\t\t\t\t\t\t\t\t\tslotProps={{ htmlInput: {\r\n\t\t\t\t\t\t\t\t\t\t\t\tmin: PACING_LIMITS.targetHandleSeconds.min,\r\n\t\t\t\t\t\t\t\t\t\t\t\tmax: PACING_LIMITS.targetHandleSeconds.max,\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={inputSx} />\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</>\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{/* Lead Auto Complete on Inbound Call Control */}\r\n\t\t\t<Box\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tmt: 2.5,\r\n\t\t\t\t\tp: 2,\r\n\t\t\t\t\tborderRadius: \"8px\",\r\n\t\t\t\t\tborder: \"1px solid\",\r\n\t\t\t\t\tborderColor: formData.leadAutoCompleteEnabled ? \"#1A5F6C\" : \"#e0e0e0\",\r\n\t\t\t\t\tbackgroundColor: formData.leadAutoCompleteEnabled ? \"rgba(26, 95, 108, 0.04)\" : \"#fafafa\",\r\n\t\t\t\t\ttransition: \"all 0.2s ease\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", flexWrap: \"wrap\", gap: 1 }}>\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.5 }}>\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\twidth: 38,\r\n\t\t\t\t\t\t\t\theight: 38,\r\n\t\t\t\t\t\t\t\tborderRadius: \"50%\",\r\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\t\t\t\t\talignItems: \"center\",\r\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\r\n\t\t\t\t\t\t\t\tbackgroundColor: formData.leadAutoCompleteEnabled ? \"#1A5F6C\" : \"#e0e0e0\",\r\n\t\t\t\t\t\t\t\tcolor: formData.leadAutoCompleteEnabled ? \"#fff\" : \"#777\",\r\n\t\t\t\t\t\t\t\ttransition: \"all 0.2s 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<TaskAltIcon sx={{ fontSize: 20 }} />\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<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t<Typography sx={{ fontWeight: 600, fontSize: \"0.92rem\", color: \"#333\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\tAuto-Complete Leads on Inbound Call\r\n\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t<Tooltip\r\n\t\t\t\t\t\t\t\t\tarrow\r\n\t\t\t\t\t\t\t\t\tplacement=\"top\"\r\n\t\t\t\t\t\t\t\t\tenterTouchDelay={50}\r\n\t\t\t\t\t\t\t\t\tslotProps={{\r\n\t\t\t\t\t\t\t\t\t\tpopper: {\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\tzIndex: 99999,\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\ttooltip: {\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\tbackground: \"linear-gradient(145deg, #1E293B 0%, #0F172A 100%)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#F8FAFC\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tp: 1.75,\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\tmaxWidth: 350,\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"0 12px 30px rgba(0, 0, 0, 0.35), 0 4px 10px rgba(0, 0, 0, 0.2)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: \"1px solid rgba(148, 163, 184, 0.25)\",\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\tarrow: {\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: \"#1E293B\",\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\ttitle={\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.75, mb: 0.75 }}>\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\twidth: 6,\r\n\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\tborderRadius: \"50%\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#38BDF8\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"0 0 8px #38BDF8\",\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<Typography sx={{ fontWeight: 700, fontSize: \"0.82rem\", color: \"#38BDF8\", letterSpacing: 0.3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tInbound Lead Resolution\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<Typography sx={{ fontSize: \"0.78rem\", lineHeight: 1.55, color: \"#E2E8F0\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\tWhen an abandoned lead calls back <b>inbound</b> and connects with an agent, the system automatically resolves and marks their pending and scheduled callback lead as <b>Completed</b>.\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<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\tmt: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tp: \"6px 10px\",\r\n\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\tbackgroundColor: \"rgba(56, 189, 248, 0.08)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: \"1px solid rgba(56, 189, 248, 0.2)\",\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\tgap: 0.75,\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 sx={{ fontSize: \"0.72rem\", color: \"#7DD3FC\", fontWeight: 500, lineHeight: 1.4 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t✓ Prevents agents from placing duplicate outbound callbacks to customers who already reached your team.\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</Box>\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\r\n\t\t\t\t\t\t\t\t\t\tcomponent=\"span\"\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: \"inline-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\twidth: 20,\r\n\t\t\t\t\t\t\t\t\t\t\theight: 20,\r\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\r\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"rgba(26, 95, 108, 0.1)\",\r\n\t\t\t\t\t\t\t\t\t\t\tborder: \"1px solid rgba(26, 95, 108, 0.25)\",\r\n\t\t\t\t\t\t\t\t\t\t\tcolor: \"#1A5F6C\",\r\n\t\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\r\n\t\t\t\t\t\t\t\t\t\t\ttransition: \"all 0.2s ease\",\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\tbackgroundColor: \"#1A5F6C\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderColor: \"#1A5F6C\",\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\ttransform: \"translateY(-1px)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"0 2px 6px rgba(26, 95, 108, 0.35)\",\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\t<InfoOutlinedIcon sx={{ fontSize: 13 }} />\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\t\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\tlabel={formData.leadAutoCompleteEnabled ? \"AUTO-RESOLVE ON INBOUND\" : \"MANUAL COMPLETION\"}\r\n\t\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\theight: 20,\r\n\t\t\t\t\t\t\t\t\t\tfontSize: \"0.68rem\",\r\n\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\r\n\t\t\t\t\t\t\t\t\t\tletterSpacing: 0.5,\r\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: formData.leadAutoCompleteEnabled ? \"#E8F5E9\" : \"#EEEEEE\",\r\n\t\t\t\t\t\t\t\t\t\tcolor: formData.leadAutoCompleteEnabled ? \"#2E7D32\" : \"#757575\",\r\n\t\t\t\t\t\t\t\t\t\tborder: `1px solid ${formData.leadAutoCompleteEnabled ? \"#C8E6C9\" : \"#E0E0E0\"}`,\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\t<Typography sx={{ fontSize: \"0.78rem\", color: \"#666\", mt: 0.3, fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t{formData.leadAutoCompleteEnabled\r\n\t\t\t\t\t\t\t\t\t? \"When abandoned lead calls back, their pending and scheduled leads automatically marked as Completed.\"\r\n\t\t\t\t\t\t\t\t\t: \"Inbound calls will not auto-complete leads; agents must still dial or manually close the callback lead.\"}\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</Box>\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\tchecked={!!formData.leadAutoCompleteEnabled}\r\n\t\t\t\t\t\t\t\tonChange={(e) => handleChange(\"leadAutoCompleteEnabled\", e.target.checked)}\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\t\"& .MuiSwitch-switchBase.Mui-checked\": { color: \"#1A5F6C\" },\r\n\t\t\t\t\t\t\t\t\t\"& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track\": { backgroundColor: \"#1A5F6C\" },\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\tlabel=\"\"\r\n\t\t\t\t\t\tsx={{ mr: 0 }}\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\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, isAutoDialQueue: false,\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\tconst handleAutoDialToggle = (queueId: number, value: boolean) => {\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, isAutoDialQueue: value } : 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) => e.stopPropagation()}\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}\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}>\r\n\t\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\tMin Wait Before Callback\r\n\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"The minimum time a lead should be allowed to wait in the queue before the system considers that waiting period completed and the lead can be added/processed for callback.\" arrow>\r\n\t\t\t\t\t\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 15, color: \"#7a8599\", cursor: \"pointer\" }} />\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</TableCell>\r\n\t\t\t\t\t\t\t\t<TableCell sx={{ ...(headCellSx as any), textAlign: \"center\" }}>Auto Dial</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: \"center\" }}>\r\n\t\t\t\t\t\t\t\t\t\t<Switch\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\tchecked={!!q.isAutoDialQueue}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleAutoDialToggle(q.queueId, e.target.checked)}\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\"& .MuiSwitch-switchBase.Mui-checked\": { color: \"#1A5F6C\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track\": { backgroundColor: \"#1A5F6C\" },\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</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\t// Lead numbers masked without `phone_number:view_unmasked`; the add-lead field keeps the\r\n\t// real value, since that is what gets posted.\r\n\tconst { maskNumber } = useNumberMask();\r\n\tconst showVoicemail = editingCampaign?.campaignType === \"AFTER_HOURS_CALLBACK\";\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 [leadCustomRows, setLeadCustomRows] = useState<CustomDataRow[]>([]);\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, { page: 1, pageSize: 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\tconst { customData, error: customDataError } = buildCustomData(leadCustomRows);\r\n\t\tif (customDataError) { showToast(customDataError, \"warning\"); return; }\r\n\t\tsetAdding(true);\r\n\t\ttry {\r\n\t\t\tconst result = await createLead(editingCampaign.id, {\r\n\t\t\t\t...leadForm,\r\n\t\t\t\tpriority: leadForm.priority ?? 5,\r\n\t\t\t\t...(customData ? { customData } : {}),\r\n\t\t\t});\r\n\t\t\tconst { message, severity, added } = leadResultToast(result);\r\n\t\t\tshowToast(message, severity);\r\n\t\t\t// Nothing was created on a refusal — leave the form filled in.\r\n\t\t\tif (!added) return;\r\n\t\t\tsetLeadForm({ phoneNumber: \"\", callerName: \"\", priority: 5 });\r\n\t\t\tsetLeadCustomRows([]);\r\n\t\t\tfetchLeads(editingCampaign.id, { page: 1, pageSize: 100 });\r\n\t\t\tonLeadsChange?.();\r\n\t\t} catch (err: any) {\r\n\t\t\tconst msg = err?.response?.data?.message || err?.message || \"Failed to add lead\";\r\n\t\t\tshowToast(msg, isLimitReachedError(err) ? \"warning\" : \"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\tconst result = await uploadLeadsExcel(editingCampaign.id, uploadFile);\r\n\t\t\tconst { message, severity } = uploadResultToast(result);\r\n\t\t\tshowToast(message, severity);\r\n\t\t\tsetUploadFile(null);\r\n\t\t\tif (uploadRef.current) uploadRef.current.value = \"\";\r\n\t\t\tfetchLeads(editingCampaign.id, { page: 1, pageSize: 100 });\r\n\t\t\tonLeadsChange?.();\r\n\t\t} catch (err: any) {\r\n\t\t\tconst msg = err?.response?.data?.message || err?.message || \"Failed to upload leads\";\r\n\t\t\tshowToast(msg, isLimitReachedError(err) ? \"warning\" : \"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<Box sx={{ mb: 2.5 }}>\r\n\t\t\t\t<LeadFormFields\r\n\t\t\t\t\tdata={leadForm}\r\n\t\t\t\t\tonChange={setLeadForm}\r\n\t\t\t\t\tcustomRows={leadCustomRows}\r\n\t\t\t\t\tonCustomRowsChange={setLeadCustomRows}\r\n\t\t\t\t\tdisabled={adding}\r\n\t\t\t\t/>\r\n\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"flex-end\", mt: 2 }}>\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</Box>\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\t<TableCell sx={headCellSx}>Outcome</TableCell>{showVoicemail && <TableCell sx={headCellSx}>Voice Mail</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}>{maskNumber(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\t<TableCell sx={bodyCellSx}>{lead.lastReason || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t{showVoicemail && <TableCell sx={{ ...bodyCellSx, minWidth: 180 }}>{lead.originalCallId ? <CallRecording callUuid={lead.originalCallId} recordingPath={lead.voicemail} iconOnly /> : \"\"}</TableCell>}\r\n\t\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\t/** Whether this tenant may configure adaptive pacing (see usePacingCapabilities). */\r\n\tadaptiveAvailable?: boolean;\r\n}\r\n\r\nconst CampaignDialog = memo(function CampaignDialog({\r\n\topen, editingCampaign, formData, setFormData, saving, onSave, onClose,\r\n\tparentQueueNameMap, onQueuesRefreshed, onLeadsChange, adaptiveAvailable = false,\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\t// In edit mode, keep the Update button disabled until the form actually changes.\r\n\tconst isDirty = !editingCampaign\r\n\t\t|| JSON.stringify(formData) !== JSON.stringify(campaignToFormData(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\t// Pacing ranges — the backend answers 422, so catch them before the round trip.\r\n\t\t\tif (supportsPacing(formData)) {\r\n\t\t\t\tconst L = PACING_LIMITS;\r\n\t\t\t\tconst outOfRange = (v: unknown, min: number, max: number) =>\r\n\t\t\t\t\ttypeof v === \"number\" && (v < min || v > max);\r\n\t\t\t\tif (outOfRange(formData.targetAbandonRatePercent, L.targetAbandonRatePercent.min, L.targetAbandonRatePercent.max)) {\r\n\t\t\t\t\tshowToast(`Target abandon rate must be between ${L.targetAbandonRatePercent.min}% and ${L.targetAbandonRatePercent.max}%`, \"warning\"); return false;\r\n\t\t\t\t}\r\n\t\t\t\tif (outOfRange(formData.maxAgentWaitSeconds, L.maxAgentWaitSeconds.min, L.maxAgentWaitSeconds.max)) {\r\n\t\t\t\t\tshowToast(`Max wait for an agent must be between ${L.maxAgentWaitSeconds.min} and ${L.maxAgentWaitSeconds.max} seconds`, \"warning\"); return false;\r\n\t\t\t\t}\r\n\t\t\t\tif (adaptiveAvailable && formData.adaptivePacingEnabled) {\r\n\t\t\t\t\tif (outOfRange(formData.maxPacingRatio, L.maxPacingRatio.min, L.maxPacingRatio.max)) {\r\n\t\t\t\t\t\tshowToast(`Maximum dial ratio must be between ${L.maxPacingRatio.min} and ${L.maxPacingRatio.max}`, \"warning\"); return false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (outOfRange(formData.pacingWindowMinutes, L.pacingWindowMinutes.min, L.pacingWindowMinutes.max)) {\r\n\t\t\t\t\t\tshowToast(`Pacing window must be between ${L.pacingWindowMinutes.min} and ${L.pacingWindowMinutes.max} minutes`, \"warning\"); return false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (outOfRange(formData.complianceWindowMinutes, L.complianceWindowMinutes.min, L.complianceWindowMinutes.max)) {\r\n\t\t\t\t\t\tshowToast(`Compliance window must be between ${L.complianceWindowMinutes.min} and ${L.complianceWindowMinutes.max} minutes`, \"warning\"); return false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (outOfRange(formData.safeModeMinAnswered, L.safeModeMinAnswered.min, L.safeModeMinAnswered.max)) {\r\n\t\t\t\t\t\tshowToast(`Min answered before safe mode must be between ${L.safeModeMinAnswered.min} and ${L.safeModeMinAnswered.max}`, \"warning\"); return false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (outOfRange(formData.inboundReserveAgents, L.inboundReserveAgents.min, L.inboundReserveAgents.max)) {\r\n\t\t\t\t\t\tshowToast(`Agents kept for inbound must be between ${L.inboundReserveAgents.min} and ${L.inboundReserveAgents.max}`, \"warning\"); return false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (outOfRange(formData.learningPeriodMinutes, L.learningPeriodMinutes.min, L.learningPeriodMinutes.max)) {\r\n\t\t\t\t\t\tshowToast(`Learning period must be between ${L.learningPeriodMinutes.min} and ${L.learningPeriodMinutes.max} minutes`, \"warning\"); return false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (outOfRange(formData.targetHandleSeconds, L.targetHandleSeconds.min, L.targetHandleSeconds.max)) {\r\n\t\t\t\t\t\tshowToast(`Target handle time must be between ${L.targetHandleSeconds.min} and ${L.targetHandleSeconds.max} seconds`, \"warning\"); return false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\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\t/**\r\n\t * Every editable tab, in order — `some` stops at the first failure so only one\r\n\t * toast is raised, and it names the earliest problem rather than the last.\r\n\t */\r\n\tconst validateAllTabs = (): boolean => ![0, 1, 2].some((t) => !validateTab(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) => e.stopPropagation()}\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\tflexShrink: 0,\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\tflexShrink: 0,\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 — the only part that scrolls. The minimum is capped against the\r\n\t\t\t    viewport so a short screen shrinks the body rather than the footer. */}\r\n\t\t\t\t<Box sx={{ flex: \"1 1 auto\", overflowY: \"auto\", minHeight: \"min(380px, 40vh)\" }}>\r\n\t\t\t\t\t{tab === 0 && <BasicInfoTab formData={formData} setFormData={setFormData} isEditMode={!!editingCampaign} isCurrentDefault={!!editingCampaign?.isDefault} />}\r\n\t\t\t\t\t{tab === 1 && (\r\n\t\t\t\t\t\t<DialingConfigTab\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\tadaptiveAvailable={adaptiveAvailable}\r\n\t\t\t\t\t\t\tadaptiveStartedAt={editingCampaign?.adaptivePacingStartedAt}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\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{/* Validate EVERY tab, not the one being saved from: Save only appears\r\n\t\t\t\t\t\t\t    on the last tab, whose validateTab has no checks, so validating the\r\n\t\t\t\t\t\t\t    current tab alone let an out-of-range pacing value through to the\r\n\t\t\t\t\t\t\t    server's 422. validateTab toasts the first failure itself. */}\r\n\t\t\t\t\t\t\t<SDKButton onClick={() => { if (validateAllTabs()) onSave(); }} disabled={saving || !isDirty}\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\tcustomRows: CustomDataRow[];\r\n\tonCustomRowsChange: React.Dispatch<React.SetStateAction<CustomDataRow[]>>;\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, customRows, onCustomRowsChange, saving, onSave, onClose,\r\n}: AddLeadDialogProps) {\r\n\tif (!open) return 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) => e.stopPropagation()}\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: 560, lg: 760 },\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<Box sx={{ ...dialogHeaderSx, backgroundColor: \"#1A5F6C\", color: \"#fff\", flexShrink: 0, alignItems: \"flex-start\" }}>\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.25 }}>\r\n\t\t\t\t\t\t<PersonAddAlt1OutlinedIcon sx={{ fontSize: 20 }} />\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\" lineHeight={1.3}>Add Lead</Typography>\r\n\t\t\t\t\t\t\t<Typography fontSize=\"0.72rem\" fontFamily=\"poppins, Arial, sans-serif\" sx={{ color: \"rgba(255,255,255,0.75)\" }}>\r\n\t\t\t\t\t\t\t\tAdd a single lead to this campaign\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</Box>\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose} sx={{ color: \"#fff\", \"&:hover\": { backgroundColor: \"rgba(255,255,255,0.14)\" } }}>✕</IconButton>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tp: 2.5,\r\n\t\t\t\t\t\tbackgroundColor: \"#f7fafb\",\r\n\t\t\t\t\t\t// Same as the settings dialog: without flex/minHeight the body is\r\n\t\t\t\t\t\t// clipped by the Paper instead of scrolling.\r\n\t\t\t\t\t\tflex: 1,\r\n\t\t\t\t\t\tminHeight: 0,\r\n\t\t\t\t\t\toverflowY: \"auto\",\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar\": { width: \"5px\" },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": { backgroundColor: \"#cdd8da\", borderRadius: \"10px\" },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { backgroundColor: \"transparent\" },\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t<LeadFormFields\r\n\t\t\t\t\t\tdata={data}\r\n\t\t\t\t\t\tonChange={onChange}\r\n\t\t\t\t\t\tcustomRows={customRows}\r\n\t\t\t\t\t\tonCustomRowsChange={onCustomRowsChange}\r\n\t\t\t\t\t\tdisabled={saving}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<Box sx={{ ...dialogFooterSx, flexShrink: 0, backgroundColor: \"#f4f8f9\" }}>\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, confirmLabel = \"Confirm\", confirmVariant = \"danger\", confirmIcon,\r\n}: {\r\n\topen: boolean; title: string; message: React.ReactNode; loading?: boolean; onConfirm: () => void; onClose: () => void;\r\n\tconfirmLabel?: string; confirmVariant?: \"danger\" | \"primary\"; confirmIcon?: React.ReactNode;\r\n}) {\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) => e.stopPropagation()}\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={confirmVariant} onClick={onConfirm} disabled={loading}\r\n\t\t\t\t\t\tstartIcon={loading ? <CircularProgress size={14} color=\"inherit\" /> : confirmIcon}>\r\n\t\t\t\t\t\t{confirmLabel}\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// ──── Call Recording player ───────────────────────────────────────────────────\r\n\r\nconst fmtRecordingDuration = (s: number): string => {\r\n\tif (!isFinite(s) || s < 0) return \"\";\r\n\tconst m = Math.floor(s / 60);\r\n\tconst sec = Math.floor(s % 60);\r\n\treturn `${m}:${sec.toString().padStart(2, \"0\")}`;\r\n};\r\n\r\n/* Coordinates playback so only one recording is open at a time. */\r\nconst activePlayers = new Set<(activeId: string) => void>();\r\nconst notifyPlay = (activeId: string) => {\r\n\tactivePlayers.forEach((fn) => fn(activeId));\r\n};\r\n\r\nfunction CallRecording({ callUuid, recordingPath, iconOnly = false }: { callUuid: string; recordingPath: string | null; iconOnly?: boolean }) {\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 [durationSec, setDurationSec] = useState<number | null>(null);\r\n\tconst [currentSec, setCurrentSec] = useState(0);\r\n\tconst unavailable = !recordingPath;\r\n\tconst totalLabel = durationSec != null ? fmtRecordingDuration(durationSec) : \"\";\r\n\r\n\tconst closePlayer = useCallback(() => {\r\n\t\tsetAudioUrl((prev) => {\r\n\t\t\tif (prev && prev.startsWith(\"blob:\")) URL.revokeObjectURL(prev);\r\n\t\t\treturn null;\r\n\t\t});\r\n\t\tsetCurrentSec(0);\r\n\t\tsetDurationSec(null);\r\n\t}, []);\r\n\r\n\t// Close this player whenever another recording starts playing.\r\n\tuseEffect(() => {\r\n\t\tconst onPlay = (activeId: string) => {\r\n\t\t\tif (activeId !== callUuid) closePlayer();\r\n\t\t};\r\n\t\tactivePlayers.add(onPlay);\r\n\t\treturn () => {\r\n\t\t\tactivePlayers.delete(onPlay);\r\n\t\t};\r\n\t}, [callUuid, closePlayer]);\r\n\r\n\tconst handlePlay = async () => {\r\n\t\tif (audioUrl) return;\r\n\t\tnotifyPlay(callUuid);\r\n\t\ttry {\r\n\t\t\tsetLoading(true);\r\n\t\t\tsetError(false);\r\n\t\t\tconst blob = await getRecordingByCall(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 ? await fetch(audioUrl).then((r) => r.blob()) : await getRecordingByCall(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 (iconOnly) {\r\n\t\tif (audioUrl) {\r\n\t\t\treturn (\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n\t\t\t\t\t<audio controls autoPlay src={audioUrl}\r\n\t\t\t\t\t\tonLoadedMetadata={(e) => setDurationSec(e.currentTarget.duration)}\r\n\t\t\t\t\t\tonTimeUpdate={(e) => setCurrentSec(e.currentTarget.currentTime)}\r\n\t\t\t\t\t\tonEnded={closePlayer}\r\n\t\t\t\t\t\tstyle={{ height: 32, maxWidth: 170 }} />\r\n\t\t\t\t\t{totalLabel && (\r\n\t\t\t\t\t\t<Typography sx={{ fontSize: 12, fontWeight: 600, color: \"#1A5F6C\", whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t{fmtRecordingDuration(currentSec)} / {totalLabel}\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<Tooltip title=\"Download\"><IconButton size=\"small\" onClick={handleDownload} sx={{ color: \"#1565c0\" }}><DownloadIcon sx={{ fontSize: 16 }} /></IconButton></Tooltip>\r\n\t\t\t\t</Box>\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t<Tooltip title={unavailable ? \"No recording available for this call.\" : error ? \"Recording unavailable\" : \"Play voicemail\"}>\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={handlePlay} disabled={unavailable || loading || error} sx={{ color: unavailable ? \"#bdbdbd\" : \"#1A5F6C\" }}>\r\n\t\t\t\t\t\t{loading ? <CircularProgress size={16} color=\"inherit\" /> : <PlayArrowIcon sx={{ fontSize: 18 }} />}\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);\r\n\t}\r\n\r\n\tif (unavailable) {\r\n\t\treturn <Typography sx={{ fontSize: \"0.82rem\", color: \"#999\" }} fontFamily=\"poppins, Arial, sans-serif\">No recording available for this call.</Typography>;\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: 1 }}>\r\n\t\t\t\t<audio controls autoPlay src={audioUrl} onEnded={closePlayer} style={{ height: 38, flex: 1 }} />\r\n\t\t\t\t<Tooltip title=\"Download\"><IconButton size=\"small\" onClick={handleDownload} sx={{ color: \"#1565c0\" }}><DownloadIcon sx={{ fontSize: 18 }} /></IconButton></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: 1 }}>\r\n\t\t\t<SDKButton variant=\"outlined\" onClick={handlePlay} disabled={loading || error} startIcon={loading ? <CircularProgress size={16} color=\"inherit\" /> : <PlayArrowIcon sx={{ fontSize: 16 }} />}>\r\n\t\t\t\t{error ? \"Recording unavailable\" : \"Play recording\"}\r\n\t\t\t</SDKButton>\r\n\t\t\t<Tooltip title=\"Download\"><span><IconButton size=\"small\" onClick={handleDownload} disabled={loading || error} sx={{ color: \"#1565c0\" }}><DownloadIcon sx={{ fontSize: 18 }} /></IconButton></span></Tooltip>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Call Data Dialog ───────────────────────────────────────────────────────\r\n\r\nfunction CallDataDialog({\r\n\topen, lead, data, loading, error, onClose,\r\n}: { open: boolean; lead: Lead | null; data: LeadCallData | null; loading: boolean; error: string | null; onClose: () => void; }) {\r\n\t// Before the early return below — a hook may not sit behind a conditional. Masks\r\n\t// the lead number in this dialog's header and overview without\r\n\t// `phone_number:view_unmasked`.\r\n\tconst { maskNumber } = useNumberMask();\r\n\tif (!open) return null;\r\n\tconst fmt = (v: string | null) => (v ? new Date(v).toLocaleString() : \"\");\r\n\r\n\t// Reusable field-card + section-title styles keep every value cell identical.\r\n\tconst fieldCardSx = {\r\n\t\tdisplay: \"flex\", flexDirection: \"column\", gap: 0.25,\r\n\t\tp: 1, borderRadius: \"8px\", backgroundColor: \"#fafafa\", border: \"1px solid #eee\",\r\n\t};\r\n\tconst fieldLabelSx = {\r\n\t\tfontSize: \"0.66rem\", fontWeight: 600, color: \"#888\",\r\n\t\ttextTransform: \"uppercase\" as const, letterSpacing: 0.3,\r\n\t};\r\n\tconst fieldValueSx = {\r\n\t\tfontSize: \"0.82rem\", fontWeight: 600, color: \"#1a1a1a\", wordBreak: \"break-word\" as const,\r\n\t};\r\n\tconst sectionTitle = {\r\n\t\tfontSize: \"0.7rem\", fontWeight: 700, color: \"#1A5F6C\",\r\n\t\ttextTransform: \"uppercase\" as const, letterSpacing: 0.5, mb: 0.75,\r\n\t};\r\n\r\n\tconst fieldCard = (label: string, value: React.ReactNode, full?: boolean) => (\r\n\t\t<Box key={label} sx={{ ...fieldCardSx, ...(full ? { gridColumn: \"1 / -1\" } : {}) }}>\r\n\t\t\t<Typography sx={fieldLabelSx} fontFamily=\"poppins, Arial, sans-serif\">{label}</Typography>\r\n\t\t\t<Typography sx={fieldValueSx} fontFamily=\"poppins, Arial, sans-serif\">{value}</Typography>\r\n\t\t</Box>\r\n\t);\r\n\r\n\tconst overview: Array<[string, React.ReactNode]> = data ? [\r\n\t\t[\"Phone Number\", maskNumber(data.phoneNumber) || \"\"],\r\n\t\t[\"Call Type\", data.callType || \"\"],\r\n\t\t[\"Call Status\", data.callStatus || \"\"],\r\n\t\t[\"Disposition\", data.disposition || \"\"],\r\n\t\t[\"Agent Disposition\", data.agentSelectedDisposition || \"\"],\r\n\t\t[\"Transferred\", data.wasTransferred ? \"Yes\" : \"No\"],\r\n\t\t[\"Hangup By\", data.hangupInitiator || \"\"],\r\n\t] : [];\r\n\tconst agentQueue: Array<[string, React.ReactNode]> = data ? [\r\n\t\t[\"Agent\", data.agentName || \"\"],\r\n\t\t[\"Agent ID\", data.agentUserId || \"\"],\r\n\t\t[\"Extension\", data.extension || \"\"],\r\n\t\t[\"Queue\", data.queueName || \"\"],\r\n\t] : [];\r\n\tconst timing: Array<[string, React.ReactNode]> = data ? [\r\n\t\t[\"Start Time\", fmt(data.callStartTime)],\r\n\t\t[\"Connect Time\", fmt(data.connectTime)],\r\n\t] : [];\r\n\tconst durations: Array<[string, React.ReactNode]> = data ? [\r\n\t\t[\"Talk\", data.talkDurationFmt || \"\"],\r\n\t\t[\"Ringing\", data.ringingDurationFmt || \"\"],\r\n\t\t[\"Hold\", data.holdDurationFmt || \"\"],\r\n\t\t[\"Mute\", data.muteDurationFmt || \"\"],\r\n\t\t[\"Wrap-up\", data.wrapupDurationFmt || \"\"],\r\n\t\t[\"Queue\", data.queueDurationFmt || \"\"],\r\n\t\t[\"IVR\", data.ivrDurationFmt || \"\"],\r\n\t] : [];\r\n\r\n\tconst twoColGrid = { display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\" }, gap: 1.25 };\r\n\tconst compactGrid = { display: \"grid\", gridTemplateColumns: \"repeat(auto-fill, minmax(96px, 1fr))\", gap: 1.25 };\r\n\r\n\treturn (\r\n\t\t<Box sx={{ position: \"fixed\", inset: 0, zIndex: 1500, backgroundColor: \"rgba(0,0,0,0.45)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }} onClick={(e) => e.stopPropagation()}>\r\n\t\t\t<Paper elevation={6} sx={{ width: { xs: \"92vw\", sm: 600 }, maxHeight: \"85vh\", display: \"flex\", flexDirection: \"column\", 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<Box>\r\n\t\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\">Call Details</Typography>\r\n\t\t\t\t\t\t{lead?.phoneNumber ? (\r\n\t\t\t\t\t\t\t<Typography fontSize=\"0.72rem\" sx={{ opacity: 0.85 }} fontFamily=\"poppins, Arial, sans-serif\">Latest call for {maskNumber(lead.phoneNumber)}</Typography>\r\n\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t</Box>\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={{ px: 2.5, py: 2, overflowY: \"auto\" }}>\r\n\t\t\t\t\t{loading ? (\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"center\", py: 4 }}><CircularProgress size={30} /></Box>\r\n\t\t\t\t\t) : error ? (\r\n\t\t\t\t\t\t<Typography fontSize=\"0.85rem\" color=\"#d32f2f\" textAlign=\"center\" sx={{ py: 3 }} fontFamily=\"poppins, Arial, sans-serif\">{error}</Typography>\r\n\t\t\t\t\t) : data ? (\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t<Typography sx={sectionTitle} fontFamily=\"poppins, Arial, sans-serif\">Call Overview</Typography>\r\n\t\t\t\t\t\t\t\t<Box sx={twoColGrid}>{overview.map(([l, v]) => fieldCard(l, v))}</Box>\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={sectionTitle} fontFamily=\"poppins, Arial, sans-serif\">Agent &amp; Queue</Typography>\r\n\t\t\t\t\t\t\t\t<Box sx={twoColGrid}>{agentQueue.map(([l, v]) => fieldCard(l, v))}</Box>\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={sectionTitle} fontFamily=\"poppins, Arial, sans-serif\">Timing</Typography>\r\n\t\t\t\t\t\t\t\t<Box sx={twoColGrid}>{timing.map(([l, v]) => fieldCard(l, v))}</Box>\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={sectionTitle} fontFamily=\"poppins, Arial, sans-serif\">Durations</Typography>\r\n\t\t\t\t\t\t\t\t<Box sx={compactGrid}>{durations.map(([l, v]) => fieldCard(l, v))}</Box>\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={sectionTitle} fontFamily=\"poppins, Arial, sans-serif\">Remarks</Typography>\r\n\t\t\t\t\t\t\t\t<Box sx={{ ...fieldCardSx, minHeight: 44 }}>\r\n\t\t\t\t\t\t\t\t\t<Typography sx={fieldValueSx} fontFamily=\"poppins, Arial, sans-serif\">{data.remarks || \"\"}</Typography>\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\t<Box>\r\n\t\t\t\t\t\t\t\t<Typography sx={sectionTitle} fontFamily=\"poppins, Arial, sans-serif\">Recording</Typography>\r\n\t\t\t\t\t\t\t\t<Box sx={fieldCardSx}>\r\n\t\t\t\t\t\t\t\t\t<CallRecording callUuid={data.callUuid} recordingPath={data.recordingPath} />\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</Box>\r\n\t\t\t\t\t) : null}\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}>Close</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) => e.stopPropagation()}\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// ──── Campaign Settings Dialog ────────────────────────────────────────────────\r\n\r\ntype RetryRow = { attempt: string; minutes: string };\r\n\r\n/** settings.retry_intervals → sorted editable rows. */\r\nfunction retryIntervalsToRows(intervals: Record<string, number> | undefined): RetryRow[] {\r\n\treturn Object.entries(intervals || {})\r\n\t\t.sort((a, b) => Number(a[0]) - Number(b[0]))\r\n\t\t.map(([attempt, minutes]) => ({ attempt, minutes: String(minutes) }));\r\n}\r\n\r\n// ──── Campaign detail formatters (values come straight from the API response) ──\r\n\r\n/** Print a response value as-is; only genuinely missing values become a dash. */\r\nfunction dash(v: string | number | null | undefined): string {\r\n\tif (v == null) return \"\";\r\n\tconst s = String(v);\r\n\treturn s.trim() === \"\" ? \"\" : s;\r\n}\r\n\r\n/** \"HH:MM:SS\" → \"HH:MM\" */\r\nfunction timeLabel(t: string | null | undefined): string {\r\n\treturn t ? t.slice(0, 5) : \"\";\r\n}\r\n\r\n/** Day numbers → \"Mon, Tue, …\"; the whole week collapses to \"All days\". */\r\nfunction daysSummary(days: number[] | null | undefined): string {\r\n\tif (!days?.length) return \"\";\r\n\tconst labels = DAYS_OF_WEEK.filter((d) => days.includes(d.value)).map((d) => d.label);\r\n\tif (!labels.length) return \"\";\r\n\treturn labels.length === DAYS_OF_WEEK.length ? \"All days\" : labels.join(\", \");\r\n}\r\n\r\n/** The campaign's own flag; the leads response is only a fallback. */\r\nfunction dialerLabel(c: Campaign, metaEnabled: boolean | undefined): string {\r\n\tconst enabled = c.isDialerEnabled ?? metaEnabled;\r\n\treturn enabled == null ? \"\" : enabled ? \"Enabled\" : \"Disabled\";\r\n}\r\n\r\n/**\r\n * Retry line for the campaign detail card: the per-attempt intervals from\r\n * `settings.retry_intervals` when the API sends them, else the campaign's own\r\n * retryIntervalMinutes / maxAttempts fields.\r\n */\r\nfunction retrySummary(c: Campaign): string {\r\n\tconst rows = retryIntervalsToRows(c.settings?.retry_intervals);\r\n\tif (rows.length) {\r\n\t\treturn `${rows.map((r) => r.minutes).join(\" / \")} min · ${dash(c.maxAttempts)} attempts`;\r\n\t}\r\n\treturn `${dash(c.retryIntervalMinutes)} min / ${dash(c.maxAttempts)} attempts`;\r\n}\r\n\r\n// ──── Unknown (\"extra\") settings keys ────────────────────────────────────────\r\n\r\n/**\r\n * A settings key this form has no dedicated field for. Scalars get a generic\r\n * input whose type follows the value the API sent, so a new backend key is\r\n * editable without a UI change. `null` carries no type, so it's edited as text\r\n * and stays null while left blank.\r\n */\r\ntype ExtraRow = {\r\n\tkey: string;\r\n\tkind: \"number\" | \"string\" | \"boolean\" | \"null\";\r\n\t/** Text form, for every kind except boolean. */\r\n\tvalue: string;\r\n\t/** Used only when kind is \"boolean\". */\r\n\tbool: boolean;\r\n};\r\n\r\nfunction isScalarSetting(v: any): boolean {\r\n\treturn v === null || typeof v === \"number\" || typeof v === \"string\" || typeof v === \"boolean\";\r\n}\r\n\r\n/** Scalar extras → editable rows, sorted so the order doesn't jump between opens. */\r\nfunction toExtraRows(settings: CampaignSettings): ExtraRow[] {\r\n\treturn Object.entries(settings)\r\n\t\t.filter(([k]) => !(CAMPAIGN_SETTING_KEYS as readonly string[]).includes(k))\r\n\t\t.filter(([, v]) => isScalarSetting(v))\r\n\t\t.sort((a, b) => a[0].localeCompare(b[0]))\r\n\t\t.map(([key, v]) => ({\r\n\t\t\tkey,\r\n\t\t\tkind: v === null ? \"null\" : (typeof v as \"number\" | \"string\" | \"boolean\"),\r\n\t\t\tvalue: v === null || typeof v === \"boolean\" ? \"\" : String(v),\r\n\t\t\tbool: v === true,\r\n\t\t}));\r\n}\r\n\r\n/** Keys whose values are objects/arrays — shown as JSON, never edited here. */\r\nfunction complexExtraKeys(settings: CampaignSettings): string[] {\r\n\treturn Object.keys(settings)\r\n\t\t.filter((k) => !(CAMPAIGN_SETTING_KEYS as readonly string[]).includes(k))\r\n\t\t.filter((k) => !isScalarSetting(settings[k]))\r\n\t\t.sort((a, b) => a.localeCompare(b));\r\n}\r\n\r\n/**\r\n * Compact editor for the campaign's `settings` blob (upload/processing limits and\r\n * per-attempt retry intervals). Keys the UI has no field for are still editable\r\n * when they hold a scalar, and nested values are carried over untouched — so a\r\n * save never drops server-side settings.\r\n */\r\nfunction CampaignSettingsDialog({\r\n\topen, campaign, saving, onSave, onClose,\r\n}: {\r\n\topen: boolean;\r\n\tcampaign: Campaign | null;\r\n\tsaving: boolean;\r\n\tonSave: (settings: CampaignSettings) => void;\r\n\tonClose: () => void;\r\n}) {\r\n\tconst { showToast } = useToast();\r\n\tconst [uploadLimit, setUploadLimit] = useState(\"\");\r\n\tconst [processingLimit, setProcessingLimit] = useState(\"\");\r\n\tconst [retryRows, setRetryRows] = useState<RetryRow[]>([]);\r\n\tconst [extraRows, setExtraRows] = useState<ExtraRow[]>([]);\r\n\r\n\tconst campaignId = campaign?.id;\r\n\r\n\t// Reload the form whenever the dialog opens for a (different) campaign.\r\n\tuseEffect(() => {\r\n\t\tif (!open) return;\r\n\t\tconst s = campaign?.settings || {};\r\n\t\tsetUploadLimit(s.lead_upload_limit != null ? String(s.lead_upload_limit) : \"\");\r\n\t\tsetProcessingLimit(s.lead_processing_limit != null ? String(s.lead_processing_limit) : \"\");\r\n\t\tsetRetryRows(retryIntervalsToRows(s.retry_intervals));\r\n\t\tsetExtraRows(toExtraRows(s));\r\n\t\t// Keyed on the campaign id, not the object, so a list refresh mid-edit\r\n\t\t// doesn't wipe what's being typed.\r\n\t}, [open, campaignId]);\r\n\r\n\tif (!open || !campaign) return null;\r\n\r\n\tconst current = campaign.settings || {};\r\n\tconst complexKeys = complexExtraKeys(current);\r\n\r\n\t// maxAttempts comes from the campaign response and caps how many attempts can\r\n\t// carry an interval: attempt numbers run 1..maxAttempts.\r\n\tconst maxAttempts = campaign.maxAttempts;\r\n\tconst attemptLimit = typeof maxAttempts === \"number\" && maxAttempts > 0 ? maxAttempts : null;\r\n\tconst atRetryLimit = attemptLimit != null && retryRows.length >= attemptLimit;\r\n\r\n\tconst buildSettings = (): CampaignSettings | null => {\r\n\t\tconst next: CampaignSettings = {};\r\n\r\n\t\t// Nested extras ride along verbatim; scalar extras go back in the type the\r\n\t\t// API sent them as, so an edited number doesn't turn into a string.\r\n\t\tcomplexKeys.forEach((k) => { next[k] = current[k]; });\r\n\t\tfor (const row of extraRows) {\r\n\t\t\tif (row.kind === \"boolean\") { next[row.key] = row.bool; continue; }\r\n\t\t\tif (row.kind === \"number\") {\r\n\t\t\t\tconst n = Number(row.value);\r\n\t\t\t\tif (!row.value.trim() || !Number.isFinite(n)) {\r\n\t\t\t\t\tshowToast(`\"${row.key}\" must be a number`, \"warning\");\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t\tnext[row.key] = n;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif (row.kind === \"null\") {\r\n\t\t\t\t// Untouched stays null; anything typed is sent as text.\r\n\t\t\t\tnext[row.key] = row.value.trim() ? row.value : null;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tnext[row.key] = row.value;\r\n\t\t}\r\n\r\n\t\tif (uploadLimit.trim()) {\r\n\t\t\tconst n = Number(uploadLimit);\r\n\t\t\tif (!Number.isInteger(n) || n < 1) { showToast(\"Lead upload limit must be a positive number\", \"warning\"); return null; }\r\n\t\t\tnext.lead_upload_limit = n;\r\n\t\t}\r\n\t\tif (processingLimit.trim()) {\r\n\t\t\tconst n = Number(processingLimit);\r\n\t\t\tif (!Number.isInteger(n) || n < 1) { showToast(\"Lead processing limit must be a positive number\", \"warning\"); return null; }\r\n\t\t\tnext.lead_processing_limit = n;\r\n\t\t}\r\n\r\n\t\tconst intervals: Record<string, number> = {};\r\n\t\tfor (const row of retryRows) {\r\n\t\t\tif (!row.attempt.trim() && !row.minutes.trim()) continue; // ignore blank rows\r\n\t\t\tconst attempt = Number(row.attempt);\r\n\t\t\tconst minutes = Number(row.minutes);\r\n\t\t\tif (!Number.isInteger(attempt) || attempt < 1) { showToast(\"Retry attempt must be a positive number\", \"warning\"); return null; }\r\n\t\t\tif (attemptLimit != null && attempt > attemptLimit) {\r\n\t\t\t\tshowToast(`Attempt ${attempt} is beyond Max Attempts (${attemptLimit})`, \"warning\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tif (!Number.isInteger(minutes) || minutes < 1) { showToast(`Interval for attempt ${row.attempt} must be a positive number of minutes`, \"warning\"); return null; }\r\n\t\t\tif (intervals[String(attempt)] != null) { showToast(`Attempt ${attempt} is listed more than once`, \"warning\"); return null; }\r\n\t\t\tintervals[String(attempt)] = minutes;\r\n\t\t}\r\n\t\tif (Object.keys(intervals).length) next.retry_intervals = intervals;\r\n\r\n\t\treturn next;\r\n\t};\r\n\r\n\tconst handleSave = () => {\r\n\t\tconst next = buildSettings();\r\n\t\tif (next) onSave(next);\r\n\t};\r\n\r\n\tconst addRow = () => {\r\n\t\tif (atRetryLimit) {\r\n\t\t\tshowToast(`Max Attempts is ${attemptLimit} — no more intervals can be added`, \"warning\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst used = retryRows.map((r) => Number(r.attempt)).filter((n) => Number.isInteger(n) && n > 0);\r\n\t\tconst nextAttempt = used.length ? Math.max(...used) + 1 : 1;\r\n\t\tsetRetryRows((prev) => [\r\n\t\t\t...prev,\r\n\t\t\t{ attempt: String(attemptLimit != null ? Math.min(nextAttempt, attemptLimit) : nextAttempt), minutes: \"\" },\r\n\t\t]);\r\n\t};\r\n\r\n\tconst updateRow = (idx: number, field: keyof RetryRow, value: string) =>\r\n\t\tsetRetryRows((prev) => prev.map((r, i) => (i === idx ? { ...r, [field]: value } : r)));\r\n\r\n\tconst removeRow = (idx: number) => setRetryRows((prev) => prev.filter((_, i) => i !== idx));\r\n\r\n\tconst updateExtraRow = (idx: number, patch: Partial<ExtraRow>) =>\r\n\t\tsetExtraRows((prev) => prev.map((r, i) => (i === idx ? { ...r, ...patch } : r)));\r\n\r\n\tconst numField = (\r\n\t\tvalue: string,\r\n\t\tonChange: (v: string) => void,\r\n\t\tplaceholder: string,\r\n\t\topts?: { min?: number; max?: number; error?: boolean },\r\n\t) => (\r\n\t\t<TextField fullWidth size=\"small\" type=\"number\" value={value} placeholder={placeholder}\r\n\t\t\tonChange={(e) => onChange(e.target.value)}\r\n\t\t\tdisabled={saving}\r\n\t\t\terror={opts?.error}\r\n\t\t\tslotProps={{ htmlInput: { min: opts?.min ?? 1, ...(opts?.max != null ? { max: opts.max } : {}) } }}\r\n\t\t\tsx={inputSx} />\r\n\t);\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) => e.stopPropagation()}\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: \"92vw\", sm: 520 },\r\n\t\t\t\t\tmaxHeight: \"90vh\",\r\n\t\t\t\t\tdisplay: \"flex\", flexDirection: \"column\",\r\n\t\t\t\t\tborderRadius: \"16px\", overflow: \"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<Box sx={{ ...dialogHeaderSx, backgroundColor: \"#1A5F6C\", color: \"#fff\", flexShrink: 0, alignItems: \"flex-start\" }}>\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.25 }}>\r\n\t\t\t\t\t\t<SettingsIcon sx={{ fontSize: 20 }} />\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<Typography fontWeight={700} fontSize=\"1rem\" fontFamily=\"poppins, Arial, sans-serif\" lineHeight={1.3}>\r\n\t\t\t\t\t\t\t\tCampaign Settings\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t<Typography fontSize=\"0.72rem\" fontFamily=\"poppins, Arial, sans-serif\" sx={{ color: \"rgba(255,255,255,0.75)\" }}>\r\n\t\t\t\t\t\t\t\t{campaign.name}\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</Box>\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose} sx={{ color: \"#fff\", \"&:hover\": { backgroundColor: \"rgba(255,255,255,0.14)\" } }}>✕</IconButton>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\tp: 2.5, backgroundColor: \"#f7fafb\",\r\n\t\t\t\t\t\t// flex + minHeight:0 is what lets this actually scroll inside the\r\n\t\t\t\t\t\t// fixed-height Paper instead of being clipped by its overflow:hidden.\r\n\t\t\t\t\t\tflex: 1, minHeight: 0, overflowY: \"auto\",\r\n\t\t\t\t\t\tdisplay: \"flex\", flexDirection: \"column\", gap: 2,\r\n\t\t\t\t\t\t// Cards keep their natural height instead of being squeezed (and clipped).\r\n\t\t\t\t\t\t\"& > *\": { flexShrink: 0 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar\": { width: \"8px\" },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { backgroundColor: \"#eef4f5\", borderRadius: \"10px\" },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": {\r\n\t\t\t\t\t\t\tbackgroundColor: \"#9fbcc2\", borderRadius: \"10px\",\r\n\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: \"#1A5F6C\" },\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tscrollbarWidth: \"thin\",\r\n\t\t\t\t\t\tscrollbarColor: \"#9fbcc2 #eef4f5\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t{/* ── Lead limits ── */}\r\n\t\t\t\t\t<Box sx={leadCardSx}>\r\n\t\t\t\t\t\t<Box sx={leadCardHeaderSx}>\r\n\t\t\t\t\t\t\t<UploadFileIcon sx={{ fontSize: 17, color: \"#1A5F6C\" }} />\r\n\t\t\t\t\t\t\t<Typography sx={leadCardTitleSx}>Lead Limits</Typography>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={{ p: 1.75, display: \"grid\", gridTemplateColumns: { xs: \"1fr\", sm: \"1fr 1fr\" }, gap: 1.75 }}>\r\n\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Lead Upload Limit</Typography>\r\n\t\t\t\t\t\t\t\t{numField(uploadLimit, setUploadLimit, \"e.g. 50\")}\r\n\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.68rem\", color: \"#888\", mt: 0.5, fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\tMax leads accepted per upload\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>\r\n\t\t\t\t\t\t\t\t<Typography sx={labelSx}>Lead Processing Limit</Typography>\r\n\t\t\t\t\t\t\t\t{numField(processingLimit, setProcessingLimit, \"e.g. 50\")}\r\n\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.68rem\", color: \"#888\", mt: 0.5, fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\tMax leads picked up per dial cycle\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</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t{/* ── Retry intervals ── */}\r\n\t\t\t\t\t<Box sx={leadCardSx}>\r\n\t\t\t\t\t\t<Box sx={leadCardHeaderSx}>\r\n\t\t\t\t\t\t\t<RefreshIcon sx={{ fontSize: 17, color: \"#1A5F6C\" }} />\r\n\t\t\t\t\t\t\t<Typography sx={leadCardTitleSx}>Retry Intervals</Typography>\r\n\t\t\t\t\t\t\t<Box sx={{ flex: 1 }} />\r\n\t\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\t\tlabel={attemptLimit != null ? `${retryRows.length}/${attemptLimit}` : String(retryRows.length)}\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\t\theight: 20, fontSize: \"0.68rem\", fontWeight: 700,\r\n\t\t\t\t\t\t\t\t\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\t\t\t\t\t\t\t\t\tbackgroundColor: atRetryLimit ? \"#fdecea\" : \"#e7f1f3\",\r\n\t\t\t\t\t\t\t\t\tcolor: atRetryLimit ? \"#c62828\" : \"#1A5F6C\",\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<Tooltip\r\n\t\t\t\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t\t\t\tatRetryLimit\r\n\t\t\t\t\t\t\t\t\t\t? `Max Attempts is ${attemptLimit} — no more intervals can be added`\r\n\t\t\t\t\t\t\t\t\t\t: \"Add a retry interval\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tarrow\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span>\r\n\t\t\t\t\t\t\t\t\t<SDKButton variant=\"outlined\" size=\"small\" startIcon={<AddIcon />} onClick={addRow}\r\n\t\t\t\t\t\t\t\t\t\tdisabled={saving || atRetryLimit}>\r\n\t\t\t\t\t\t\t\t\t\tAdd\r\n\t\t\t\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={{ p: 1.75, display: \"flex\", flexDirection: \"column\", gap: 1.25 }}>\r\n\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.72rem\", color: \"#888\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\tWait time before each retry attempt.\r\n\t\t\t\t\t\t\t\t{attemptLimit != null && ` Max Attempts is ${attemptLimit}, so up to ${attemptLimit} interval${attemptLimit === 1 ? \"\" : \"s\"} can be set.`}\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t{retryRows.length === 0 ? (\r\n\t\t\t\t\t\t\t\t/* No per-attempt intervals in settings — fall back to the campaign's own fields. */\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 0.75 }}>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: 1.5, flexWrap: \"wrap\" }}>\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{ label: \"Max Attempts\", value: dash(campaign.maxAttempts) },\r\n\t\t\t\t\t\t\t\t\t\t\t{ label: \"Retry Interval\", value: `${dash(campaign.retryIntervalMinutes)} min` },\r\n\t\t\t\t\t\t\t\t\t\t].map((f) => (\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={f.label}\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\", alignItems: \"center\", gap: 0.75,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpx: 1.25, py: 0.75, borderRadius: \"8px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#f4f8f9\", border: \"1px solid #e3ebee\",\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 sx={{ fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{f.label}:\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<Typography sx={{ fontSize: \"0.8rem\", fontWeight: 700, color: \"#333\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{f.value}\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))}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.7rem\", color: \"#999\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\t\tCampaign defaults — used until per-attempt intervals are added.\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\t/* No nested scroller here — rows flow into the dialog body, which is\r\n\t\t\t\t\t\t\t\t   the single scroll region. */\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.25 }}>\r\n\t\t\t\t\t\t\t\t\t{retryRows.map((row, idx) => {\r\n\t\t\t\t\t\t\t\t\t\tconst attemptNum = Number(row.attempt);\r\n\t\t\t\t\t\t\t\t\t\tconst attemptInvalid = !!row.attempt.trim()\r\n\t\t\t\t\t\t\t\t\t\t\t&& (!Number.isInteger(attemptNum) || attemptNum < 1\r\n\t\t\t\t\t\t\t\t\t\t\t\t|| (attemptLimit != null && attemptNum > attemptLimit));\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<Box key={idx} sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ width: 110 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ ...labelSx, fontSize: \"0.72rem\", mb: 0.25 }}>Attempt</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{numField(row.attempt, (v) => updateRow(idx, \"attempt\", v), \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ min: 1, max: attemptLimit ?? undefined, error: attemptInvalid })}\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<Box sx={{ flex: 1 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ ...labelSx, fontSize: \"0.72rem\", mb: 0.25 }}>Interval (min)</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{numField(row.minutes, (v) => updateRow(idx, \"minutes\", v), \"30\")}\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<Tooltip title=\"Remove\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton size=\"small\" onClick={() => removeRow(idx)} disabled={saving}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ mt: 1.75, color: \"#d32f2f\" }}>\r\n\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</IconButton>\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</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</Box>\r\n\r\n\t\t\t\t\t{/* ── Keys the API sends that this form has no dedicated field for ── */}\r\n\t\t\t\t\t{(extraRows.length > 0 || complexKeys.length > 0) && (\r\n\t\t\t\t\t\t<Box sx={leadCardSx}>\r\n\t\t\t\t\t\t\t<Box sx={{ p: 1.75, display: \"flex\", flexDirection: \"column\", gap: 1.25 }}>\r\n\t\t\t\t\t\t\t\t{/* Scalars: editable, input type follows the value the API sent. */}\r\n\t\t\t\t\t\t\t\t{extraRows.map((row, idx) => (\r\n\t\t\t\t\t\t\t\t\t<Box key={row.key} sx={{ display: \"flex\", alignItems: \"center\", gap: 1.25 }}>\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\ttitle={row.key}\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: 150, flexShrink: 0,\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.78rem\", fontWeight: 600, color: \"#555\",\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\toverflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\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{row.key\r\n\t\t\t\t\t\t\t\t\t\t\t.replace(/_/g, ' ')\r\n\t\t\t\t\t\t\t\t\t\t\t.replace(/\\b\\w/g, char => char.toUpperCase())}\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{row.kind === \"boolean\" ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<Switch\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\tchecked={row.bool}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={saving}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => updateExtraRow(idx, { bool: e.target.checked })}\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\tfullWidth size=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttype={row.kind === \"number\" ? \"number\" : \"text\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={row.value}\r\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={row.kind === \"null\" ? \"Not set\" : \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={saving}\r\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => updateExtraRow(idx, { value: e.target.value })}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={inputSx}\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))}\r\n\r\n\t\t\t\t\t\t\t\t{/* Nested values have no sensible generic editor. */}\r\n\t\t\t\t\t\t\t\t{complexKeys.map((k) => (\r\n\t\t\t\t\t\t\t\t\t<Box key={k} sx={{ display: \"flex\", alignItems: \"flex-start\", gap: 1.25 }}>\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\ttitle={k}\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: 150, flexShrink: 0, pt: 0.25,\r\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"0.78rem\", fontWeight: 600, color: \"#555\",\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\toverflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\",\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{k}\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<Typography sx={{ fontSize: \"0.78rem\", fontWeight: 600, color: \"#333\", fontFamily: \"poppins, Arial, sans-serif\", wordBreak: \"break-all\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{JSON.stringify(current[k])}\r\n\t\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))}\r\n\r\n\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)}\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t<Box sx={{ ...dialogFooterSx, flexShrink: 0, backgroundColor: \"#f4f8f9\" }}>\r\n\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>Cancel</SDKButton>\r\n\t\t\t\t\t<SDKButton onClick={handleSave} disabled={saving}\r\n\t\t\t\t\t\tstartIcon={saving ? <CircularProgress size={14} color=\"inherit\" /> : undefined}>\r\n\t\t\t\t\t\tSave\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 { isBitEnabled, hasPermission } = useSDKPermissions();\r\n\t// Lead numbers in the list, its tooltips and the delete confirmation are masked\r\n\tconst { maskNumber } = useNumberMask();\r\n\tconst callerData = useGetCallerData();\r\n\tconst savedStatus = typeof sessionStorage !== \"undefined\" ? (sessionStorage.getItem(\"PREVIOUS_AGENT_STATUS\") || \"\").trim() : \"\";\r\n\tconst isSavedBreak = Boolean(savedStatus && savedStatus.toUpperCase() !== \"IDLE\" && savedStatus.toUpperCase() !== \"READY\");\r\n\tconst sdkAgentStatus = String(sdkStateManager.getState().agentStatus || \"\").trim();\r\n\tconst isSdkBreak = Boolean(sdkAgentStatus && sdkAgentStatus.toUpperCase() !== \"IDLE\" && sdkAgentStatus.toUpperCase() !== \"READY\");\r\n\tconst callerBreakDetails = callerData?.break_details || callerData?.socket_info?.break_details;\r\n\tconst isCallerDataBreak = String(callerData?.status ?? \"\").trim().toUpperCase() === \"BREAK\"\r\n\t\t|| String((callerData as any)?.agent_status ?? \"\").trim().toUpperCase() === \"BREAK\"\r\n\t\t|| Boolean(callerBreakDetails?.type || callerBreakDetails?.value || callerBreakDetails?.name);\r\n\r\n\tconst isAgentOnBreak = isSavedBreak || isSdkBreak || isCallerDataBreak;\r\n\tconst isAgentIdle = !isAgentOnBreak && String(callerData?.status ?? (callerData as any)?.agent_status ?? \"\").trim().toUpperCase() === \"IDLE\";\r\n\tconst hasOutboundPermission = isBitEnabled(\"calls\", SDK_PERMISSIONS.CALL_OUTBOUND);\r\n\r\n\t// Safe-mode alerts across every campaign in the tenant, not just the selected\r\n\t// one — a supervisor needs to hear about a campaign they aren't looking at.\r\n\t// Gated on the pacing read code: the feed is refused to anyone else.\r\n\tusePacingAlertToasts(hasPermission(SDK_PERMISSIONS.PREDICTIVE_PACING_READ));\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, deleteAllLeads, dialPreview, getLeadCallData,\r\n\t\tuploadLeadsExcel, downloadLeadTemplate, exportLeads,\r\n\t} = useLeads();\r\n\tconst [expandedLeadIds, setExpandedLeadIds] = useState<Set<number>>(new Set());\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// Settings dialog\r\n\tconst [settingsOpen, setSettingsOpen] = useState(false);\r\n\tconst [settingsTarget, setSettingsTarget] = useState<Campaign | null>(null);\r\n\tconst [settingsSaving, setSettingsSaving] = 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// Default campaign confirm\r\n\tconst [defaultTarget, setDefaultTarget] = useState<Campaign | null>(null);\r\n\tconst [togglingDefault, setTogglingDefault] = 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 [leadStartDate, setLeadStartDate] = useState<Dayjs | null>(null);\r\n\tconst [leadEndDate, setLeadEndDate] = useState<Dayjs | null>(null);\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 [addLeadCustomRows, setAddLeadCustomRows] = useState<CustomDataRow[]>([]);\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\tconst [exportingLeads, setExportingLeads] = 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// Delete all leads confirm\r\n\tconst [deleteAllLeadsOpen, setDeleteAllLeadsOpen] = useState(false);\r\n\tconst [deletingAllLeads, setDeletingAllLeads] = useState(false);\r\n\r\n\t// View call data\r\n\tconst [callDataOpen, setCallDataOpen] = useState(false);\r\n\tconst [callDataLead, setCallDataLead] = useState<Lead | null>(null);\r\n\tconst [callDataLoading, setCallDataLoading] = useState(false);\r\n\tconst [callData, setCallData] = useState<LeadCallData | null>(null);\r\n\tconst [callDataError, setCallDataError] = useState<string | null>(null);\r\n\r\n\tconst handleViewCallData = useCallback(async (lead: Lead) => {\r\n\t\tconst callId = lead.latestCallId;\r\n\t\tif (!callId) return;\r\n\t\tsetCallDataLead(lead);\r\n\t\tsetCallDataOpen(true);\r\n\t\tsetCallData(null);\r\n\t\tsetCallDataError(null);\r\n\t\tsetCallDataLoading(true);\r\n\t\ttry {\r\n\t\t\tconst data = await getLeadCallData(callId);\r\n\t\t\tsetCallData(data);\r\n\t\t} catch (e: any) {\r\n\t\t\tsetCallDataError(e?.response?.data?.message || \"Failed to load call data\");\r\n\t\t} finally {\r\n\t\t\tsetCallDataLoading(false);\r\n\t\t}\r\n\t}, [getLeadCallData]);\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 showVoicemail = selected?.campaignType === \"AFTER_HOURS_CALLBACK\";\r\n\tconst visibleCampaigns = campaigns\r\n\t\t.filter((c) => (showArchived ? true : c.status?.toLowerCase() !== \"archived\"))\r\n\t\t// Pin the default campaign to the top; stable sort keeps the rest in API order.\r\n\t\t.sort((a, b) => Number(!!b.isDefault) - Number(!!a.isDefault));\r\n\tconst currentDefaultCampaign = campaigns.find((c) => c.isDefault) ?? null;\r\n\r\n\t// Switch campaigns: reset leads filters/search/page so they don't carry over\r\n\tconst handleSelectCampaign = useCallback((id: number) => {\r\n\t\tif (id === selectedId) return;\r\n\t\tsetLeadStatusFilter(\"All states\");\r\n\t\tsetLeadSearch(\"\");\r\n\t\tsetDebouncedSearch(\"\");\r\n\t\tsetLeadStartDate(null);\r\n\t\tsetLeadEndDate(null);\r\n\t\tsetLeadPage(0);\r\n\t\tsetSelectedId(id);\r\n\t}, [selectedId]);\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\tpage: 1, pageSize: leadRowsPerPage,\r\n\t\t\tlead_status: leadStatusFilter !== \"All states\" ? leadStatusFilter : undefined,\r\n\t\t\tsearch: debouncedSearch || undefined,\r\n\t\t\tstart_date: leadStartDate ? dayjs(leadStartDate).format(\"YYYY-MM-DDTHH:mm:ss\") : undefined,\r\n\t\t\tend_date: leadEndDate ? dayjs(leadEndDate).format(\"YYYY-MM-DDTHH:mm:ss\") : undefined,\r\n\t\t});\r\n\t}, [selectedId, leadRowsPerPage, leadStatusFilter, debouncedSearch, leadStartDate, leadEndDate, fetchLeads]);\r\n\r\n\tconst refetchLeads = useCallback((page = leadPage, silent = false) => {\r\n\t\tif (!selectedId) return;\r\n\t\tfetchLeads(selectedId, {\r\n\t\t\tpage: page + 1, pageSize: leadRowsPerPage,\r\n\t\t\tlead_status: leadStatusFilter !== \"All states\" ? leadStatusFilter : undefined,\r\n\t\t\tsearch: debouncedSearch || undefined,\r\n\t\t\tstart_date: leadStartDate ? dayjs(leadStartDate).format(\"YYYY-MM-DDTHH:mm:ss\") : undefined,\r\n\t\t\tend_date: leadEndDate ? dayjs(leadEndDate).format(\"YYYY-MM-DDTHH:mm:ss\") : undefined,\r\n\t\t}, { silent });\r\n\t}, [selectedId, leadPage, leadRowsPerPage, leadStatusFilter, debouncedSearch, leadStartDate, leadEndDate, fetchLeads]);\r\n\r\n\tconst clearLeadDates = () => {\r\n\t\tsetLeadStartDate(null);\r\n\t\tsetLeadEndDate(null);\r\n\t\tsetLeadPage(0);\r\n\t};\r\n\r\n\t// Auto-refresh the leads table every 3 seconds (silent — no loading spinner)\r\n\tuseEffect(() => {\r\n\t\tif (!selectedId) return;\r\n\t\tconst intervalId = setInterval(() => { refetchLeads(leadPage, true); }, 3000);\r\n\t\treturn () => clearInterval(intervalId);\r\n\t}, [selectedId, leadPage, refetchLeads]);\r\n\r\n\t// ── Campaign CRUD ──\r\n\r\n\t// Asked for once the dialog is first opened — the campaigns list itself doesn't\r\n\t// need it, and the answer doesn't change within a session.\r\n\tconst { adaptivePacingAvailable } = usePacingCapabilities(dialogOpen);\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\t// Guard as well as disable: the status can change under a background refresh.\r\n\t\tif (isEditLocked(c)) { showToast(editLockReason(c), \"warning\"); return; }\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\t// Date pickers give YYYY-MM-DD; the API expects an ISO datetime.\r\n\t\tconst toIso = (d?: string) => (d ? new Date(d).toISOString() : undefined);\r\n\t\tconst scheduledStart = toIso(formData.scheduledStart);\r\n\t\tconst scheduledEnd = toIso(formData.scheduledEnd);\r\n\t\ttry {\r\n\t\t\tif (editingCampaign) {\r\n\t\t\t\tconst updatePayload: Record<string, any> = { ...formData, startTime, endTime, priority: formData.priority ?? 5 };\r\n\t\t\t\tif (scheduledStart) updatePayload.scheduledStart = scheduledStart; else delete updatePayload.scheduledStart;\r\n\t\t\t\tif (scheduledEnd) updatePayload.scheduledEnd = scheduledEnd; else delete updatePayload.scheduledEnd;\r\n\t\t\t\tapplyPacingFields(updatePayload, formData, adaptivePacingAvailable);\r\n\t\t\t\tawait updateCampaign(editingCampaign.id, updatePayload);\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, priority: formData.priority ?? 5 };\r\n\t\t\t\tif (scheduledStart) payload.scheduledStart = scheduledStart; else delete payload.scheduledStart;\r\n\t\t\t\tif (scheduledEnd) payload.scheduledEnd = scheduledEnd; else 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\tapplyPacingFields(payload, formData, adaptivePacingAvailable);\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(cleanSaveError(err), \"error\");\r\n\t\t} finally { setSaving(false); }\r\n\t};\r\n\r\n\tconst handleOpenSettings = (c: Campaign) => {\r\n\t\tif (isEditLocked(c)) { showToast(editLockReason(c), \"warning\"); return; }\r\n\t\tsetSettingsTarget(c);\r\n\t\tsetSettingsOpen(true);\r\n\t};\r\n\r\n\tconst handleSaveSettings = async (settings: CampaignSettings) => {\r\n\t\tif (!settingsTarget) return;\r\n\t\tsetSettingsSaving(true);\r\n\t\ttry {\r\n\t\t\tawait updateCampaign(settingsTarget.id, { settings });\r\n\t\t\tshowToast(\"Campaign settings updated\", \"success\");\r\n\t\t\tsetSettingsOpen(false);\r\n\t\t\tsetSettingsTarget(null);\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 settings\", \"error\");\r\n\t\t} finally { setSettingsSaving(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\t// There is no un-set: the default only moves when another campaign is made default.\r\n\tconst confirmSetDefault = async () => {\r\n\t\tif (!defaultTarget) return;\r\n\t\tsetTogglingDefault(true);\r\n\t\ttry {\r\n\t\t\tawait updateCampaign(defaultTarget.id, { isDefault: true });\r\n\t\t\tshowToast(`\"${defaultTarget.name}\" is now the default campaign`, \"success\");\r\n\t\t\tsetDefaultTarget(null);\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 update default campaign\", \"error\");\r\n\t\t} finally { setTogglingDefault(false); }\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\tconst { customData, error: customDataError } = buildCustomData(addLeadCustomRows);\r\n\t\tif (customDataError) { showToast(customDataError, \"warning\"); return; }\r\n\t\tsetAddLeadSaving(true);\r\n\t\ttry {\r\n\t\t\tconst result = await createLead(selectedId, { ...addLeadData, ...(customData ? { customData } : {}) });\r\n\t\t\tconst { message, severity, added } = leadResultToast(result);\r\n\t\t\tshowToast(message, severity);\r\n\t\t\t// Close either way — the toast carries the outcome.\r\n\t\t\tsetAddLeadOpen(false);\r\n\t\t\tsetAddLeadData({ phoneNumber: \"\", callerName: \"\", priority: 5 });\r\n\t\t\tsetAddLeadCustomRows([]);\r\n\t\t\t// Nothing was created on a refusal, so there is nothing to refresh.\r\n\t\t\tif (!added) return;\r\n\t\t\trefetchLeads(0); setLeadPage(0);\r\n\t\t\t// Keeps the campaign's lead counts on the detail card current.\r\n\t\t\tfetchCampaigns();\r\n\t\t} catch (err: any) {\r\n\t\t\tconst msg = err?.response?.data?.message || err?.message || \"Failed to add lead\";\r\n\t\t\tshowToast(msg, isLimitReachedError(err) ? \"warning\" : \"error\");\r\n\t\t\t// A limit refusal is final, so close instead of leaving the dialog hanging.\r\n\t\t\tif (isLimitReachedError(err)) {\r\n\t\t\t\tsetAddLeadOpen(false);\r\n\t\t\t\tsetAddLeadData({ phoneNumber: \"\", callerName: \"\", priority: 5 });\r\n\t\t\t\tsetAddLeadCustomRows([]);\r\n\t\t\t}\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\tconst { message, severity } = uploadResultToast(result);\r\n\t\t\tshowToast(message, severity);\r\n\t\t\tsetImportFile(null); setImportOpen(false);\r\n\t\t\trefetchLeads(0); setLeadPage(0);\r\n\t\t\t// Keeps the campaign's lead counts on the detail card current.\r\n\t\t\tfetchCampaigns();\r\n\t\t} catch (err: any) {\r\n\t\t\tconst msg = err?.response?.data?.message || err?.message || \"Upload failed\";\r\n\t\t\tshowToast(msg, isLimitReachedError(err) ? \"warning\" : \"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 {\r\n\t\t\tsetExportingLeads(true);\r\n\t\t\tconst startDateStr = leadStartDate ? dayjs(leadStartDate).format(\"YYYY-MM-DDTHH:mm:ss\") : undefined;\r\n\t\t\tconst endDateStr = leadEndDate ? dayjs(leadEndDate).format(\"YYYY-MM-DDTHH:mm:ss\") : undefined;\r\n\t\t\tawait exportLeads(selectedId, startDateStr, endDateStr);\r\n\t\t\tshowToast(\"Leads exported\", \"success\");\r\n\t\t}\r\n\t\tcatch (err: any) { showToast(err?.response?.data?.message || err?.message || \"Export failed\", \"error\"); }\r\n\t\tfinally { setExportingLeads(false); }\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\t// Keeps the \"Leads\" summary counters in sync with the table.\r\n\t\t\tfetchCampaigns();\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 confirmDeleteAllLeads = async () => {\r\n\t\tif (!selectedId) return;\r\n\t\tsetDeletingAllLeads(true);\r\n\t\ttry {\r\n\t\t\tconst res = await deleteAllLeads(selectedId);\r\n\t\t\tshowToast(res?.message || \"All leads deleted\", \"success\");\r\n\t\t\tsetDeleteAllLeadsOpen(false);\r\n\t\t\tsetLeadPage(0);\r\n\t\t\trefetchLeads(0);\r\n\t\t\t// Keeps the \"Leads\" summary counters in sync with the table.\r\n\t\t\tfetchCampaigns();\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 { setDeletingAllLeads(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\t// A paused campaign is read-only — start it before making changes.\r\n\tconst editLocked = isEditLocked(sc);\r\n\tconst editLockedReason = editLockReason(sc);\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 || \"\").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} • ${dash(c.status)}${c.isDefault ? \" • Default\" : \"\"}`}\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={() => handleSelectCampaign(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\tposition: \"relative\",\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\t{c.isDefault && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<StarIcon\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\tposition: \"absolute\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttop: -6,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tright: -6,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 14,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#F5B301\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilter: \"drop-shadow(0 0 1px #fff) drop-shadow(0 0 1px #fff)\",\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</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 = `${timeLabel(c.startTime)}–${timeLabel(c.endTime)}`;\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={() => handleSelectCampaign(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\", gap: 0.75, mb: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{c.isDefault && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Default campaign\" arrow>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<StarIcon sx={{ fontSize: 16, color: \"#F5B301\", flexShrink: 0, mr: -0.25 }} />\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)}\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\tnoWrap\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle={c.name}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ fontWeight: 600, fontSize: \"0.88rem\", color: \"#1a1a1a\", fontFamily: \"poppins, Arial, sans-serif\", minWidth: 0, flex: 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\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={dash(c.status)} size=\"small\" sx={{ ...statusChipSx(c.status), flexShrink: 0 }} />\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 noWrap sx={{ fontSize: \"0.73rem\", color: \"#999\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{dash(c.dialingMode)} · TZ: {dash(c.timezone)} · {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={dash(sc.status)} size=\"small\" sx={statusChipSx(sc.status)} />\r\n\t\t\t\t\t\t\t\t\t\t{sc.isDefault && (\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\ticon={<StarIcon sx={{ fontSize: 16, color: \"#F5B301 !important\" }} />}\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel=\"Default\"\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\tbackground: \"linear-gradient(135deg, #FFF8E1 0%, #FFECB3 100%)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#B27B00\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: \"1px solid #FFE082\",\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\tfontSize: \"0.75rem\",\r\n\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}}\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{!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<Tooltip title={editLocked ? editLockedReason : \"Campaign settings\"} arrow>\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<SDKButton variant=\"outlined\" size=\"small\" startIcon={<SettingsIcon />}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleOpenSettings(sc)} disabled={editLocked}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSettings\r\n\t\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\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</SDKPermissionGuard>\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<Tooltip title={editLocked ? editLockedReason : \"Edit campaign\"} arrow>\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<SDKButton variant=\"outlined\" startIcon={<EditIcon />}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleOpenEdit(sc)} disabled={editLocked}>\r\n\t\t\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\t\t</SDKButton>\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</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: dash(sc.campaignType) },\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Mode\", value: dash(sc.dialingMode) },\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\tlabel: \"Default\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: sc.isDefault ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={{ display: \"inline-flex\", alignItems: \"center\", gap: 0.3, color: \"#B27B00\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<StarIcon sx={{ fontSize: 14, color: \"#F5B301\" }} /> Yes\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) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box component=\"span\" sx={{ display: \"inline-flex\", alignItems: \"center\", gap: 0.75 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tNo\r\n\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\tpermissions={[\r\n\t\t\t\t\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\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]}\r\n\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>\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\tarrow\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={editLocked ? editLockedReason : \"Use this campaign by default wherever a campaign is not explicitly chosen\"}\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<span>\r\n\t\t\t\t\t\t\t\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\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={() => setDefaultTarget(sc)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={editLocked || togglingDefault}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstartIcon={<StarBorderIcon />}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={setDefaultLinkSx}\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\tSet as Default\r\n\t\t\t\t\t\t\t\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\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</SDKPermissionGuard>\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),\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{\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: dash(sc.agentType) },\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Dialer\",        value: dialerLabel(sc, leadsMeta?.isDialerEnabled) },\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Auto-Complete\", value: sc.leadAutoCompleteEnabled ? \"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: String(sc.priority ?? 5) },\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Max Concurrent\", value: dash(sc.maxConcurrentCalls) },\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\tleadOutcome: true,\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: retrySummary(sc) },\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: \"#00838f\",\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: \"Hours\", value: `${timeLabel(sc.startTime)} – ${timeLabel(sc.endTime)}` },\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ label: \"Days\",  value: daysSummary(sc.daysOfWeek) },\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\tminWidth: card.leadOutcome ? 335 : 180,\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\t{card.leadOutcome ? (\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<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.75 }}>\r\n\t\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\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRetry:\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 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\t{retrySummary(sc)}\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\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.75 }}>\r\n\t\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\tLeads:\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<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, flexWrap: \"wrap\" }}>\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{ key: \"total\", label: \"Total\", value: dash(sc.totalLeads), color: \"#455a64\", background: \"#eceff1\", icon: <ListAltIcon />, tooltip: \"All leads added to this campaign.\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ key: \"completed\", label: \"Completed\", value: dash(sc.completedLeads), color: \"#5c6bc0\", background: \"#e8eaf6\", icon: <TaskAltIcon />, tooltip: \"Leads that ran out of retry attempts without ever being answered.\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ key: \"successful-calls\", label: \"Successful\", value: dash(sc.successfulCalls), color: \"#2e7d32\", background: \"#e8f5e9\", icon: <PhoneIcon />, tooltip: \"Leads who picked up the call.\" },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t].map((outcome) => (\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\tkey={outcome.key}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ p: 1.25, maxWidth: 240, fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.75, mb: 0.6 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ width: 8, height: 8, borderRadius: \"50%\", backgroundColor: outcome.color }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.78rem\", fontWeight: 700, color: \"#1f2937\" }}>{outcome.label}</Typography>\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<Typography sx={{ fontSize: \"0.72rem\", lineHeight: 1.5, color: \"#52606d\" }}>{outcome.tooltip}</Typography>\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}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tarrow\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tplacement=\"top\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tslotProps={{ tooltip: { sx: { p: 0, bgcolor: \"#fff\", color: \"#1f2937\", border: \"1px solid #e2e8f0\", borderRadius: 2, boxShadow: \"0 8px 24px rgba(15, 23, 42, 0.16)\" } }, arrow: { sx: { color: \"#fff\", \"&:before\": { border: \"1px solid #e2e8f0\" } } } }}\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<Chip icon={outcome.icon} label={<Box component=\"span\" sx={{ display: \"inline-flex\", alignItems: \"center\", gap: 0.35 }}>{`${outcome.label} ${outcome.value}`}<InfoOutlinedIcon sx={{ fontSize: 12, opacity: 0.8 }} /></Box>} size=\"small\" sx={{ height: 24, bgcolor: outcome.background, color: outcome.color, fontWeight: 700, cursor: \"help\", \"& .MuiChip-icon\": { color: outcome.color, fontSize: 15 }, \"& .MuiChip-label\": { display: \"flex\", alignItems: \"center\" } }} />\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))}\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) : 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 component=\"div\" 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{/* Live pacing, its event history and the charts have moved to the\r\n\t\t\t\t\t\t\t    Predictive Pacing & Compliance page. This page stays what it was:\r\n\t\t\t\t\t\t\t    where campaigns are set up. */}\r\n\r\n\t\t\t\t\t\t\t{/* Leads section */}\r\n\t\t\t\t\t\t\t<SDKPermissionGuard permission={SDK_PERMISSIONS.CAMPAIGNS_LEADS_READ} showFallback={false}>\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\tflexDirection: \"column\",\r\n\t\t\t\t\t\t\t\t\tgap: 1.25,\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{/* Row 1: actions + search + status */}\r\n\t\t\t\t\t\t\t\t\t<Box sx={{\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: { xs: \"flex-start\", sm: \"center\" },\r\n\t\t\t\t\t\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\t\t\t\t\t\tflexDirection: { xs: \"column\", sm: \"row\" },\r\n\t\t\t\t\t\t\t\t\t\tgap: 1,\r\n\t\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_LEADS_IMPORT,\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<Tooltip title={editLocked ? editLockedReason : \"Import leads from a file\"} arrow>\r\n\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<SDKButton variant=\"outlined\" onClick={() => setImportOpen(true)} disabled={editLocked} startIcon={<UploadFileIcon sx={{ fontSize: 15 }} />} size=\"small\" sx={{ height: 36 }}>\r\n\t\t\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\t\t</SDKButton>\r\n\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</Tooltip>\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_LEADS_CREATE,\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<Tooltip title={editLocked ? editLockedReason : \"Add a single lead\"} arrow>\r\n\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<SDKButton variant=\"primary\" onClick={() => setAddLeadOpen(true)} disabled={editLocked} startIcon={<AddIcon sx={{ fontSize: 15 }} />} size=\"small\" sx={{ height: 36 }}>\r\n\t\t\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\t\t</SDKButton>\r\n\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</Tooltip>\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_LEADS_DELETE,\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<Tooltip title={editLocked ? editLockedReason : leadTotal === 0 ? \"No leads to delete\" : \"This will delete all leads other than in-progress\"} arrow>\r\n\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<SDKButton variant=\"danger\" onClick={() => setDeleteAllLeadsOpen(true)} disabled={editLocked || leadTotal === 0} startIcon={<DeleteSweepIcon sx={{ fontSize: 15 }} />} size=\"small\" sx={{ height: 36 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tDelete All\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</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\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, flexWrap: \"wrap\", 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: 36, 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: 36, 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\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t\t{/* Row 2: date filters + export */}\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 1, flexWrap: \"wrap\" }}>\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: 0.75,\r\n\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\tpx: 1,\r\n\t\t\t\t\t\t\t\t\t\t\t\tpy: 0.5,\r\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"30px\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tborder: \"1px solid #e0e4ea\",\r\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#f7f9fb\",\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<LocalizationProvider dateAdapter={AdapterDayjs}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<DateRangePicker\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartDate={leadStartDate}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tendDate={leadEndDate}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonStartChange={(v) => { setLeadStartDate(v); setLeadPage(0); }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonEndChange={(v) => { setLeadEndDate(v); setLeadPage(0); }}\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</LocalizationProvider>\r\n\t\t\t\t\t\t\t\t\t\t\t{(leadStartDate || leadEndDate) && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Clear dates\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton size=\"small\" onClick={clearLeadDates} sx={{ p: 0.5, color: \"#7a8599\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ClearIcon sx={{ fontSize: 16 }} />\r\n\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</Tooltip>\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<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={exportingLeads || leadsLoading || leadTotal === 0} startIcon={exportingLeads ? <CircularProgress size={14} color=\"inherit\" /> : <DownloadIcon sx={{ fontSize: 15 }} />} size=\"small\" sx={{ height: 36 }}>\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</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={{\r\n\t\t\t\t\t\t\t\t\t\tminWidth: 980,\r\n\t\t\t\t\t\t\t\t\t\t// keep header and value columns aligned and visibly apart\r\n\t\t\t\t\t\t\t\t\t\t\"& .MuiTableCell-root\": { paddingLeft: \"20px\", paddingRight: \"20px\" },\r\n\t\t\t\t\t\t\t\t\t}}>\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\"Scheduled At\", \"Expires At\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"Last Outcome\", \"Completed At\", \"Notes\", \"Outcome\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t...(showVoicemail ? [\"Voice Mail\"] : []),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"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={showVoicemail ? 18 : 17} 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={showVoicemail ? 18 : 17} 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\"];\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 = editLocked || nonDeletable.includes(leadStatus);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Same resolution as the Dialer stat above, so the card and\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t// the dial button never disagree.\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst isDialerEnabled = sc.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\t!editLocked\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t&& isDialerEnabled\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\teditLocked ? editLockedReason\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: isAgentOnBreak ? \"Agent is on break\"\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 ${maskNumber(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\tconst visibleDisplayData = (lead.displayData || []).filter((f) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (f.value === null || f.value === undefined || f.value === \"\") return false;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (Array.isArray(f.value) && f.value.length === 0) return false;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn true;\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\tconst hasDisplayData = visibleDisplayData.length > 0;\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<React.Fragment key={lead.id}>\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\t\tsx={{ ...tableRowSx, cursor: hasDisplayData ? \"pointer\" : \"default\" }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!hasDisplayData) return;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetExpandedLeadIds((prev) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst next = new Set(prev);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (next.has(lead.id)) next.delete(lead.id); else next.add(lead.id);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn next;\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<TableCell sx={bodyCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{hasDisplayData ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texpandedLeadIds.has(lead.id)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? <KeyboardArrowDownIcon fontSize=\"small\" sx={{ verticalAlign: \"middle\", mr: 0.5, color: \"text.secondary\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: <KeyboardArrowRightIcon fontSize=\"small\" sx={{ verticalAlign: \"middle\", mr: 0.5, color: \"text.secondary\" }} />\r\n\t\t\t\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\t\t\t\t{maskNumber(lead.phoneNumber)}\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={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{prioLabel && <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.queueName || \"\"}\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, whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.scheduledAt ? new Date(lead.scheduledAt).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.expiresAt ? new Date(lead.expiresAt).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}>{lead.lastReason || \"\"}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{showVoicemail && <TableCell sx={{ ...bodyCellSx, minWidth: 180 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lead.originalCallId\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? <CallRecording callUuid={lead.originalCallId} recordingPath={lead.voicemail} iconOnly />\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</TableCell>\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<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{/* View call data */}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title={lead.latestCallId ? \"View call details\" : \"No call data available\"}>\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={() => handleViewCallData(lead)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!lead.latestCallId}\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\tml: 0.5,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: lead.latestCallId ? \"#1A5F6C\" : \"#bdbdbd\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { backgroundColor: \"transparent\" },\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<VisibilityOutlinedIcon 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_LEADS_DELETE,\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\teditLocked\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? editLockedReason\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: deleteDisabled\r\n\t\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\t: `Delete lead ${maskNumber(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\t{hasDisplayData && (\r\n\t\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\t\t\t<TableCell sx={{ py: 0, border: 0 }} colSpan={showVoicemail ? 18 : 17}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Collapse in={expandedLeadIds.has(lead.id)} timeout=\"auto\" unmountOnExit>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", flexWrap: \"wrap\", gap: 3, px: 3, py: 1.5, backgroundColor: \"#fafafa\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{visibleDisplayData.map((field, idx) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box key={idx} sx={{ minWidth: 140 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\" sx={{ display: \"block\" }}>\r\n\t\t\t\t\t\t\t\t\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\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\t\t\t\t\t<Typography variant=\"body2\" sx={{ fontWeight: 600 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Array.isArray(field.value)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? field.value.join(\", \")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: typeof field.value === \"object\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? JSON.stringify(field.value)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: String(field.value)}\r\n\t\t\t\t\t\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\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))}\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</Collapse>\r\n\t\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</TableRow>\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</React.Fragment>\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={[10, 15, 25, 50, 100]}\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\t</SDKPermissionGuard>\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\tadaptiveAvailable={adaptivePacingAvailable}\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<CampaignSettingsDialog\r\n\t\t\t\topen={settingsOpen}\r\n\t\t\t\tcampaign={settingsTarget}\r\n\t\t\t\tsaving={settingsSaving}\r\n\t\t\t\tonSave={handleSaveSettings}\r\n\t\t\t\tonClose={() => { setSettingsOpen(false); setSettingsTarget(null); }}\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\tcustomRows={addLeadCustomRows}\r\n\t\t\t\tonCustomRowsChange={setAddLeadCustomRows}\r\n\t\t\t\tsaving={addLeadSaving}\r\n\t\t\t\tonSave={handleAddLead}\r\n\t\t\t\tonClose={() => { setAddLeadOpen(false); setAddLeadData({ phoneNumber: \"\", callerName: \"\", priority: 5 }); setAddLeadCustomRows([]); }}\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={!!defaultTarget}\r\n\t\t\t\ttitle=\"Set Default Campaign\"\r\n\t\t\t\tmessage={\r\n\t\t\t\t\tcurrentDefaultCampaign && currentDefaultCampaign.id !== defaultTarget?.id\r\n\t\t\t\t\t\t? <>Make \"{defaultTarget?.name}\" the default campaign? This will replace <b>{currentDefaultCampaign.name}</b> as the current default.</>\r\n\t\t\t\t\t\t: `Make \"${defaultTarget?.name}\" the default campaign? It will be used wherever a campaign is not explicitly chosen.`\r\n\t\t\t\t}\r\n\t\t\t\tloading={togglingDefault}\r\n\t\t\t\tconfirmLabel=\"Make Default\"\r\n\t\t\t\tconfirmVariant=\"primary\"\r\n\t\t\t\tconfirmIcon={<StarIcon />}\r\n\t\t\t\tonConfirm={confirmSetDefault}\r\n\t\t\t\tonClose={() => { if (!togglingDefault) setDefaultTarget(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 ${maskNumber(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\t<ConfirmDialog\r\n\t\t\t\topen={deleteAllLeadsOpen}\r\n\t\t\t\ttitle=\"Delete All Leads\"\r\n\t\t\t\tmessage={`Delete all leads of \"${sc?.name ?? \"this campaign\"}\"? Leads that are currently in progress are kept. This cannot be undone.`}\r\n\t\t\t\tloading={deletingAllLeads}\r\n\t\t\t\tonConfirm={confirmDeleteAllLeads}\r\n\t\t\t\tonClose={() => setDeleteAllLeadsOpen(false)}\r\n\t\t\t/>\r\n\t\t\t<CallDataDialog\r\n\t\t\t\topen={callDataOpen}\r\n\t\t\t\tlead={callDataLead}\r\n\t\t\t\tdata={callData}\r\n\t\t\t\tloading={callDataLoading}\r\n\t\t\t\terror={callDataError}\r\n\t\t\t\tonClose={() => { setCallDataOpen(false); setCallData(null); setCallDataError(null); setCallDataLead(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","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"m20.54 5.23-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27M12 17.5 6.5 12H10v-2h4v2h3.5zM5.12 5l.81-1h12l.94 1z\"\n}), 'Archive');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M15 16h4v2h-4zm0-8h7v2h-7zm0 4h6v2h-6zM3 18c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V8H3zM14 5h-3l-1-1H6L5 5H2v2h12z\"\n}), 'DeleteSweep');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 5v14H5V5zm1.1-2H3.9c-.5 0-.9.4-.9.9v16.2c0 .4.4.9.9.9h16.2c.4 0 .9-.5.9-.9V3.9c0-.5-.5-.9-.9-.9M11 7h6v2h-6zm0 4h6v2h-6zm0 4h6v2h-6zM7 7h2v2H7zm0 4h2v2H7zm0 4h2v2H7z\"\n}), 'ListAlt');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M22 5.18 10.59 16.6l-4.24-4.24 1.41-1.41 2.83 2.83 10-10zm-2.21 5.04c.13.57.21 1.17.21 1.78 0 4.42-3.58 8-8 8s-8-3.58-8-8 3.58-8 8-8c1.58 0 3.04.46 4.28 1.25l1.44-1.44C16.1 2.67 14.13 2 12 2 6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10c0-1.19-.22-2.33-.6-3.39z\"\n}), 'TaskAlt');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\"\n}), 'Star');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"m22 9.24-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28z\"\n}), 'StarBorder');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8zm4 18H6V4h7v5h5zM8 15.01l1.41 1.41L11 14.84V19h2v-4.16l1.59 1.59L16 15.01 12.01 11z\"\n}), 'UploadFile');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 6c3.79 0 7.17 2.13 8.82 5.5C19.17 14.87 15.79 17 12 17s-7.17-2.13-8.82-5.5C4.83 8.13 8.21 6 12 6m0-2C7 4 2.73 7.11 1 11.5 2.73 15.89 7 19 12 19s9.27-3.11 11-7.5C21.27 7.11 17 4 12 4m0 5c1.38 0 2.5 1.12 2.5 2.5S13.38 14 12 14s-2.5-1.12-2.5-2.5S10.62 9 12 9m0-2c-2.48 0-4.5 2.02-4.5 4.5S9.52 16 12 16s4.5-2.02 4.5-4.5S14.48 7 12 7\"\n}), 'VisibilityOutlined');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M13 8c0-2.21-1.79-4-4-4S5 5.79 5 8s1.79 4 4 4 4-1.79 4-4m-2 0c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2M1 18v2h16v-2c0-2.66-5.33-4-8-4s-8 1.34-8 4m2 0c.2-.71 3.3-2 6-2 2.69 0 5.78 1.28 6 2zm17-3v-3h3v-2h-3V7h-2v3h-3v2h3v3z\"\n}), 'PersonAddAlt1Outlined');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 5.9c1.16 0 2.1.94 2.1 2.1s-.94 2.1-2.1 2.1S9.9 9.16 9.9 8s.94-2.1 2.1-2.1m0 9c2.97 0 6.1 1.46 6.1 2.1v1.1H5.9V17c0-.64 3.13-2.1 6.1-2.1M12 4C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4m0 9c-2.67 0-8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4\"\n}), 'PersonOutlineOutlined');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5.01 3 5.9 3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12zM16 17H5V7h11l3.55 5z\"\n}), 'LabelOutlined');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M21 11.01 3 11v2h18zM3 16h12v2H3zM21 6H3v2.01L21 8z\"\n}), 'NotesOutlined');","import { useCallback, useEffect, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type { PacingCapabilities } from \"./types\";\r\n\r\n/**\r\n * LOCAL PREVIEW ONLY — set to true to render the adaptive pacing fields on a\r\n * tenant that doesn't have the feature switched on yet. Must be false in any\r\n * commit: with it on, the form offers settings the backend will reject.\r\n */\r\nconst FORCE_ADAPTIVE_AVAILABLE = false;\r\n\r\n/** Assumed when the call fails or the endpoint isn't deployed: predictive works,\r\n *  adaptive is off. Hiding the adaptive group is the safe direction to be wrong in. */\r\nconst FALLBACK: PacingCapabilities = {\r\n  predictiveAvailable: true,\r\n  adaptivePacingAvailable: false,\r\n};\r\n\r\n/**\r\n * What predictive pacing this tenant may configure.\r\n *\r\n * Adaptive pacing is enabled per tenant in the backend and is deliberately absent\r\n * from the login entitlements, so it has to be asked for separately. Fetched once\r\n * when `enabled` first becomes true — i.e. when the campaign dialog opens — rather\r\n * than on every render of the campaigns page.\r\n */\r\nexport function usePacingCapabilities(enabled: boolean) {\r\n  const [capabilities, setCapabilities] =\r\n    useState<PacingCapabilities>(FALLBACK);\r\n  const [loaded, setLoaded] = useState(false);\r\n\r\n  const load = useCallback(async () => {\r\n    try {\r\n      const res = await axiosInstance.get(END_POINT.PACING_CAPABILITIES);\r\n      const data = res.data || {};\r\n      setCapabilities({\r\n        predictiveAvailable: data.predictiveAvailable !== false,\r\n        adaptivePacingAvailable: data.adaptivePacingAvailable === true,\r\n      });\r\n      // Only a real answer counts as loaded. Marking a failure as loaded — a\r\n      // restarting backend, a dropped connection — hid the adaptive switch for\r\n      // the rest of the session, with a page refresh the only way back.\r\n      setLoaded(true);\r\n    } catch {\r\n      setCapabilities(FALLBACK);\r\n    }\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    if (!enabled || loaded) return;\r\n    load();\r\n  }, [enabled, loaded, load]);\r\n\r\n  return {\r\n    ...capabilities,\r\n    adaptivePacingAvailable:\r\n      FORCE_ADAPTIVE_AVAILABLE || capabilities.adaptivePacingAvailable,\r\n    loaded,\r\n  };\r\n}\r\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8\"\n}), 'AddCircleOutlineOutlined');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M4 7v2c0 .55-.45 1-1 1H2v4h1c.55 0 1 .45 1 1v2c0 1.65 1.35 3 3 3h3v-2H7c-.55 0-1-.45-1-1v-2c0-1.3-.84-2.42-2-2.83v-.34C5.16 11.42 6 10.3 6 9V7c0-.55.45-1 1-1h3V4H7C5.35 4 4 5.35 4 7m17 3c-.55 0-1-.45-1-1V7c0-1.65-1.35-3-3-3h-3v2h3c.55 0 1 .45 1 1v2c0 1.3.84 2.42 2 2.83v.34c-1.16.41-2 1.52-2 2.83v2c0 .55-.45 1-1 1h-3v2h3c1.65 0 3-1.35 3-3v-2c0-.55.45-1 1-1h1v-4z\"\n}), 'DataObject');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM8 9h8v10H8zm7.5-5-1-1h-5l-1 1H5v2h14V4z\"\n}), 'DeleteOutlineOutlined');","import React from \"react\";\r\nimport {\r\n\tBox,\r\n\tChip,\r\n\tFormControl,\r\n\tIconButton,\r\n\tMenuItem,\r\n\tSelect,\r\n\tTextField,\r\n\tTooltip,\r\n\tTypography,\r\n} from \"@mui/material\";\r\nimport AddCircleOutlineIcon from \"@mui/icons-material/AddCircleOutlineOutlined\";\r\nimport DataObjectIcon from \"@mui/icons-material/DataObject\";\r\nimport DeleteOutlineIcon from \"@mui/icons-material/DeleteOutlineOutlined\";\r\nimport InfoOutlinedIcon from \"@mui/icons-material/InfoOutlined\";\r\n\r\nimport { SDKButton } from \"../../components/SDKButton\";\r\nimport { dialogMenuProps, dialogSelectSx as selectSx } from \"./styles\";\r\n\r\n/* ─────────────────────────────────────────────────────────────────────────────\r\n   Custom Data — free-form key / type / value pairs that map onto the lead's\r\n   `customData` object (Record<string, any>) on the backend.\r\n───────────────────────────────────────────────────────────────────────────── */\r\n\r\nexport type CustomDataType = \"text\" | \"number\" | \"boolean\" | \"date\" | \"json\";\r\n\r\nexport const CUSTOM_DATA_TYPES: { label: string; value: CustomDataType }[] = [\r\n\t{ label: \"Text\", value: \"text\" },\r\n\t{ label: \"Number\", value: \"number\" },\r\n\t{ label: \"Boolean\", value: \"boolean\" },\r\n\t{ label: \"Date\", value: \"date\" },\r\n\t{ label: \"JSON\", value: \"json\" },\r\n];\r\n\r\nexport interface CustomDataRow {\r\n\tid: string;\r\n\tkey: string;\r\n\ttype: CustomDataType;\r\n\tvalue: string;\r\n}\r\n\r\nlet customDataRowSeq = 0;\r\nexport const makeCustomDataRow = (): CustomDataRow => ({\r\n\tid: `cd-${++customDataRowSeq}`,\r\n\tkey: \"\",\r\n\ttype: \"text\",\r\n\tvalue: \"\",\r\n});\r\n\r\nexport const isCustomDataRowEmpty = (row: CustomDataRow) => !row.key.trim() && !row.value.trim();\r\n\r\n/**\r\n * Normalise whatever the user typed into a camelCase key:\r\n *   \"doctor name\" / \"Doctor Name\" / \"doctor_name\" / \"DOCTOR NAME\" → \"doctorName\"\r\n * Already-camelCase input is left alone (\"doctorName\" stays \"doctorName\").\r\n */\r\nexport const toCamelCase = (raw: string): string => {\r\n\t// Any run of non-alphanumerics is a word boundary.\r\n\tconst words = (raw || \"\").replace(/[^A-Za-z0-9]+/g, \" \").trim().split(/\\s+/).filter(Boolean);\r\n\tif (!words.length) return \"\";\r\n\treturn words\r\n\t\t.map((word, i) => {\r\n\t\t\t// ALL-CAPS words carry no internal casing to preserve, so flatten them;\r\n\t\t\t// anything else keeps its tail so \"doctorName\" survives a round trip.\r\n\t\t\tconst isAllCaps = word === word.toUpperCase();\r\n\t\t\tconst body = isAllCaps ? word.toLowerCase() : word;\r\n\t\t\treturn i === 0\r\n\t\t\t\t? body.charAt(0).toLowerCase() + body.slice(1)\r\n\t\t\t\t: body.charAt(0).toUpperCase() + body.slice(1);\r\n\t\t})\r\n\t\t.join(\"\");\r\n};\r\n\r\n/** Per-row validation. Returns { key?, value? } messages — empty when the row is fine. */\r\nexport const validateCustomDataRow = (\r\n\trow: CustomDataRow,\r\n\tallRows: CustomDataRow[],\r\n): { key?: string; value?: string } => {\r\n\tconst errors: { key?: string; value?: string } = {};\r\n\tif (isCustomDataRowEmpty(row)) return errors;\r\n\r\n\t// Keys are compared and stored in their camelCase form, so \"doctor name\" and\r\n\t// \"Doctor Name\" collide even though the raw text differs.\r\n\tconst key = toCamelCase(row.key);\r\n\tif (!row.key.trim()) {\r\n\t\terrors.key = \"Key is required\";\r\n\t} else if (!key) {\r\n\t\terrors.key = \"Key needs at least one letter or number\";\r\n\t} else if (allRows.some((r) => r.id !== row.id && toCamelCase(r.key) === key)) {\r\n\t\terrors.key = \"Duplicate key\";\r\n\t}\r\n\r\n\tconst value = row.value.trim();\r\n\tif (row.type === \"number\") {\r\n\t\tif (!value) errors.value = \"Value is required\";\r\n\t\telse if (!Number.isFinite(Number(value))) errors.value = \"Must be a valid number\";\r\n\t} else if (row.type === \"json\") {\r\n\t\tif (!value) errors.value = \"Value is required\";\r\n\t\telse {\r\n\t\t\ttry {\r\n\t\t\t\tJSON.parse(value);\r\n\t\t\t} catch {\r\n\t\t\t\terrors.value = \"Invalid JSON\";\r\n\t\t\t}\r\n\t\t}\r\n\t} else if (row.type === \"boolean\") {\r\n\t\tif (value !== \"true\" && value !== \"false\") errors.value = \"Select true or false\";\r\n\t} else if (!value) {\r\n\t\terrors.value = \"Value is required\";\r\n\t}\r\n\r\n\treturn errors;\r\n};\r\n\r\n/** Coerce a row's raw string value into the type the backend should receive. */\r\nconst coerceCustomDataValue = (row: CustomDataRow): any => {\r\n\tconst value = row.value.trim();\r\n\tswitch (row.type) {\r\n\t\tcase \"number\":\r\n\t\t\treturn Number(value);\r\n\t\tcase \"boolean\":\r\n\t\t\treturn value === \"true\";\r\n\t\tcase \"json\":\r\n\t\t\treturn JSON.parse(value);\r\n\t\tcase \"date\":\r\n\t\tcase \"text\":\r\n\t\tdefault:\r\n\t\t\treturn value;\r\n\t}\r\n};\r\n\r\n/**\r\n * Turn editor rows into the backend `customData` object.\r\n * Returns an error message instead when any non-empty row is invalid.\r\n */\r\nexport const buildCustomData = (\r\n\trows: CustomDataRow[],\r\n): { customData?: Record<string, any>; error?: string } => {\r\n\tconst filled = rows.filter((r) => !isCustomDataRowEmpty(r));\r\n\tfor (const row of filled) {\r\n\t\tconst errors = validateCustomDataRow(row, rows);\r\n\t\tconst message = errors.key || errors.value;\r\n\t\tif (message) {\r\n\t\t\treturn { error: `Custom data${row.key.trim() ? ` \"${row.key.trim()}\"` : \"\"}: ${message}` };\r\n\t\t}\r\n\t}\r\n\tif (!filled.length) return {};\r\n\tconst customData: Record<string, any> = {};\r\n\tfilled.forEach((row) => {\r\n\t\tcustomData[toCamelCase(row.key)] = coerceCustomDataValue(row);\r\n\t});\r\n\treturn { customData };\r\n};\r\n\r\nconst fieldSx = {\r\n\t\"& .MuiOutlinedInput-root\": {\r\n\t\tborderRadius: \"8px\",\r\n\t\tbackgroundColor: \"#fff\",\r\n\t\tfontSize: \"0.85rem\",\r\n\t\t\"&:hover fieldset\": { borderColor: \"#1A5F6C\" },\r\n\t\t\"&.Mui-focused fieldset\": { borderColor: \"#1A5F6C\" },\r\n\t},\r\n\t\"& .MuiFormHelperText-root\": { mx: 0.25, fontSize: \"0.68rem\" },\r\n};\r\n\r\nconst columnHeadSx = {\r\n\tfontSize: \"0.7rem\",\r\n\tfontWeight: 700,\r\n\tletterSpacing: \"0.04em\",\r\n\ttextTransform: \"uppercase\" as const,\r\n\tcolor: \"#8a969c\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n};\r\n\r\nexport function CustomDataEditor({\r\n\trows,\r\n\tonChange,\r\n\tdisabled = false,\r\n}: {\r\n\trows: CustomDataRow[];\r\n\tonChange: React.Dispatch<React.SetStateAction<CustomDataRow[]>>;\r\n\tdisabled?: boolean;\r\n}) {\r\n\tconst updateRow = (id: string, patch: Partial<CustomDataRow>) => {\r\n\t\tonChange((prev) => prev.map((r) => (r.id === id ? { ...r, ...patch } : r)));\r\n\t};\r\n\tconst addRow = () => onChange((prev) => [...prev, makeCustomDataRow()]);\r\n\tconst removeRow = (id: string) => onChange((prev) => prev.filter((r) => r.id !== id));\r\n\r\n\tconst filledCount = rows.filter((r) => !isCustomDataRowEmpty(r)).length;\r\n\tconst { customData: previewData } = buildCustomData(rows);\r\n\r\n\treturn (\r\n\t\t<Box\r\n\t\t\tsx={{\r\n\t\t\t\tborder: \"1px solid #e3ebee\",\r\n\t\t\t\tborderRadius: \"12px\",\r\n\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\tbackgroundColor: \"#fbfdfe\",\r\n\t\t\t\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\t\t\t}}\r\n\t\t>\r\n\t\t\t{/* Header */}\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: \"center\",\r\n\t\t\t\t\tjustifyContent: \"space-between\",\r\n\t\t\t\t\tgap: 1,\r\n\t\t\t\t\tflexWrap: \"wrap\",\r\n\t\t\t\t\tpx: 1.75,\r\n\t\t\t\t\tpy: 1.25,\r\n\t\t\t\t\tbackgroundColor: \"#f1f7f8\",\r\n\t\t\t\t\tborderBottom: \"1px solid #e3ebee\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t<DataObjectIcon sx={{ fontSize: 18, color: \"#1A5F6C\" }} />\r\n\t\t\t\t\t<Typography sx={{ fontWeight: 700, fontSize: \"0.85rem\", color: \"#1a1a1a\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\tCustom Data\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t{filledCount > 0 && (\r\n\t\t\t\t\t\t<Chip\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\tlabel={`${filledCount} field${filledCount !== 1 ? \"s\" : \"\"}`}\r\n\t\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\t\theight: 20,\r\n\t\t\t\t\t\t\t\tfontSize: \"0.68rem\",\r\n\t\t\t\t\t\t\t\tfontWeight: 600,\r\n\t\t\t\t\t\t\t\tcolor: \"#1A5F6C\",\r\n\t\t\t\t\t\t\t\tbackgroundColor: \"rgba(26,95,108,0.10)\",\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<Tooltip title=\"Extra key / value attributes stored with the lead and sent to the dialer as customData. Keys are saved in camelCase — “doctor name” becomes “doctorName”.\">\r\n\t\t\t\t\t\t<InfoOutlinedIcon sx={{ fontSize: 15, color: \"#9aa7ad\" }} />\r\n\t\t\t\t\t</Tooltip>\r\n\t\t\t\t</Box>\r\n\t\t\t\t<SDKButton\r\n\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\tonClick={addRow}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\tstartIcon={<AddCircleOutlineIcon sx={{ fontSize: 16 }} />}\r\n\t\t\t\t\tsx={{ py: 0.35, fontSize: \"0.75rem\" }}\r\n\t\t\t\t>\r\n\t\t\t\t\tAdd Field\r\n\t\t\t\t</SDKButton>\r\n\t\t\t</Box>\r\n\r\n\t\t\t{/* Rows */}\r\n\t\t\t<Box sx={{ px: 1.75, py: rows.length ? 1.5 : 2 }}>\r\n\t\t\t\t{rows.length === 0 ? (\r\n\t\t\t\t\t<Box\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tborder: \"1px dashed #d6e2e6\",\r\n\t\t\t\t\t\t\tborderRadius: \"10px\",\r\n\t\t\t\t\t\t\tpy: 2.25,\r\n\t\t\t\t\t\t\tpx: 2,\r\n\t\t\t\t\t\t\ttextAlign: \"center\",\r\n\t\t\t\t\t\t\tbackgroundColor: \"#fff\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Typography sx={{ fontSize: \"0.8rem\", color: \"#8a969c\", fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n\t\t\t\t\t\t\tNo custom fields yet. Add key / value pairs to attach extra details to this lead —\r\n\t\t\t\t\t\t\tkeys are saved in camelCase, so “doctor name” becomes “doctorName”.\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t</Box>\r\n\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: { xs: \"none\", sm: \"grid\" },\r\n\t\t\t\t\t\t\t\tgridTemplateColumns: \"1.1fr 0.85fr 1.5fr 36px\",\r\n\t\t\t\t\t\t\t\tgap: 1.25,\r\n\t\t\t\t\t\t\t\tmb: 0.75,\r\n\t\t\t\t\t\t\t\tpx: 0.25,\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<Typography sx={columnHeadSx}>Key</Typography>\r\n\t\t\t\t\t\t\t<Typography sx={columnHeadSx}>Type</Typography>\r\n\t\t\t\t\t\t\t<Typography sx={columnHeadSx}>Value</Typography>\r\n\t\t\t\t\t\t\t<span />\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1.25 }}>\r\n\t\t\t\t\t\t\t{rows.map((row) => {\r\n\t\t\t\t\t\t\t\tconst errors = validateCustomDataRow(row, rows);\r\n\t\t\t\t\t\t\t\tconst camelKey = toCamelCase(row.key);\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\t\t\t\tkey={row.id}\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\", sm: \"1.1fr 0.85fr 1.5fr 36px\" },\r\n\t\t\t\t\t\t\t\t\t\t\tgap: 1.25,\r\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"flex-start\",\r\n\t\t\t\t\t\t\t\t\t\t\tp: { xs: 1.25, sm: 0 },\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\tborder: { xs: \"1px solid #eef3f5\", sm: \"none\" },\r\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: { xs: \"#fff\", sm: \"transparent\" },\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<TextField\r\n\t\t\t\t\t\t\t\t\t\t\tfullWidth\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\tplaceholder=\"e.g. doctor name\"\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={row.key}\r\n\t\t\t\t\t\t\t\t\t\t\t// Typed text is kept verbatim (so spaces are typable) and\r\n\t\t\t\t\t\t\t\t\t\t\t// normalised once the field loses focus.\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => updateRow(row.id, { key: e.target.value })}\r\n\t\t\t\t\t\t\t\t\t\t\tonBlur={() => updateRow(row.id, { key: toCamelCase(row.key) })}\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\t\t\t\terror={!!errors.key}\r\n\t\t\t\t\t\t\t\t\t\t\thelperText={\r\n\t\t\t\t\t\t\t\t\t\t\t\terrors.key\r\n\t\t\t\t\t\t\t\t\t\t\t\t|| (camelKey && camelKey !== row.key.trim() ? `Saved as ${camelKey}` : \"\")\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={fieldSx}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<FormControl fullWidth size=\"small\">\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={row.type}\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 nextType = e.target.value as CustomDataType;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tupdateRow(row.id, {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// raw strings rarely survive a type switch — start clean\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: nextType,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: nextType === \"boolean\" ? \"false\" : \"\",\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={disabled}\r\n\t\t\t\t\t\t\t\t\t\t\t\tMenuProps={dialogMenuProps}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={selectSx}\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{CUSTOM_DATA_TYPES.map((opt) => (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem key={opt.value} value={opt.value} sx={{ fontSize: \"0.85rem\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{opt.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</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\r\n\t\t\t\t\t\t\t\t\t\t{row.type === \"boolean\" ? (\r\n\t\t\t\t\t\t\t\t\t\t\t<FormControl fullWidth size=\"small\">\r\n\t\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\t\tvalue={row.value === \"true\" ? \"true\" : \"false\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => updateRow(row.id, { value: String(e.target.value) })}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tMenuProps={dialogMenuProps}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={selectSx}\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<MenuItem value=\"true\" sx={{ fontSize: \"0.85rem\" }}>true</MenuItem>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem value=\"false\" sx={{ fontSize: \"0.85rem\" }}>false</MenuItem>\r\n\t\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</FormControl>\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\tfullWidth\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\ttype={row.type === \"date\" ? \"date\" : \"text\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tmultiline={row.type === \"json\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tminRows={row.type === \"json\" ? 2 : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\t\tmaxRows={row.type === \"json\" ? 6 : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trow.type === \"number\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"e.g. 4200\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: row.type === \"json\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '{ \"plan\": \"gold\" }'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: row.type === \"date\"\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: \"e.g. Dr. Smith\"\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\tvalue={row.value}\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 raw = e.target.value;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tupdateRow(row.id, {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: row.type === \"number\" ? raw.replace(/[^0-9.\\-eE+]/g, \"\") : raw,\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={disabled}\r\n\t\t\t\t\t\t\t\t\t\t\t\terror={!!errors.value}\r\n\t\t\t\t\t\t\t\t\t\t\t\thelperText={errors.value || \"\"}\r\n\t\t\t\t\t\t\t\t\t\t\t\tinputProps={row.type === \"number\" ? { inputMode: \"decimal\" } : undefined}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsx={fieldSx}\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\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: { xs: \"flex-end\", sm: \"center\" } }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Remove field\">\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={() => removeRow(row.id)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\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\tmt: { xs: 0, sm: 0.25 },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#9aa7ad\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"&:hover\": { color: \"#d32f2f\", backgroundColor: \"rgba(211,47,47,0.08)\" },\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<DeleteOutlineIcon sx={{ fontSize: 19 }} />\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</Tooltip>\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);\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)}\r\n\t\t\t</Box>\r\n\r\n\t\t\t{/* Preview of the exact object that will be sent */}\r\n\t\t\t{previewData && Object.keys(previewData).length > 0 && (\r\n\t\t\t\t<Box sx={{ px: 1.75, py: 1.25, borderTop: \"1px dashed #e3ebee\", backgroundColor: \"#f8fbfc\" }}>\r\n\t\t\t\t\t<Typography sx={{ ...columnHeadSx, mb: 0.5 }}>Will be sent as customData</Typography>\r\n\t\t\t\t\t<Typography\r\n\t\t\t\t\t\tcomponent=\"pre\"\r\n\t\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t\tm: 0,\r\n\t\t\t\t\t\t\tfontFamily: \"ui-monospace, SFMono-Regular, Menlo, monospace\",\r\n\t\t\t\t\t\t\tfontSize: \"0.72rem\",\r\n\t\t\t\t\t\t\tcolor: \"#4a585f\",\r\n\t\t\t\t\t\t\twhiteSpace: \"pre-wrap\",\r\n\t\t\t\t\t\t\twordBreak: \"break-word\",\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{JSON.stringify(previewData, null, 2)}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t</Box>\r\n\t);\r\n}\r\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Clear');","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\tisAutoDialQueue: boolean;\r\n\tcreatedAt: string;\r\n}\r\n\r\n/**\r\n * Free-form `settings` blob on a campaign. The keys below are the ones the\r\n * Settings dialog edits; anything else the API sends is preserved untouched.\r\n */\r\nexport interface CampaignSettings {\r\n\tlead_upload_limit?: number;\r\n\tlead_processing_limit?: number;\r\n\t/** attempt number → wait (minutes) before that retry, e.g. { \"1\": 30, \"2\": 60 } */\r\n\tretry_intervals?: Record<string, number>;\r\n\t[key: string]: any;\r\n}\r\n\r\n/** Keys the Settings dialog owns; the rest of `settings` is passed through as-is. */\r\nexport const CAMPAIGN_SETTING_KEYS = [\r\n\t\"lead_upload_limit\",\r\n\t\"lead_processing_limit\",\r\n\t\"retry_intervals\",\r\n] as const;\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 | null;\r\n\ttotalLeads: number;\r\n\tcompletedLeads: number;\r\n\tsuccessfulCalls: number;\r\n\tsettings: CampaignSettings;\r\n\tcreatedAt: string;\r\n\tupdatedAt: string;\r\n\tcompletionRate: number;\r\n\tisDialerEnabled: boolean;\r\n\tleadAutoCompleteEnabled?: boolean;\r\n\tisDefault?: boolean;\r\n\tcampaignQueues: CampaignQueue[];\r\n\r\n\t// ── Predictive pacing (PREDICTIVE + HUMAN campaigns only) ──\r\n\t/** Regulatory abandon ceiling, as a FRACTION on the wire: 0.03 is 3%. */\r\n\ttargetAbandonRate?: number | null;\r\n\t/** How long an answered customer waits for an agent before the call is dropped. */\r\n\tmaxAgentWaitSeconds?: number | null;\r\n\tadaptivePacingEnabled?: boolean | null;\r\n\t/**\r\n\t * Ceiling the adaptive ratio may never exceed; it can always go lower.\r\n\t * Null means automatic: the backend works the ceiling out from the pacing window.\r\n\t */\r\n\tmaxPacingRatio?: number | null;\r\n\t/** Minutes of history the answer rate and inbound prediction are based on. */\r\n\tpacingWindowMinutes?: number | null;\r\n\t/** Rolling window (minutes) for the abandon-rate check behind throttle / safe mode. */\r\n\tcomplianceWindowMinutes?: number | null;\r\n\t/** Answered calls needed in the compliance window before safe mode can start. */\r\n\tsafeModeMinAnswered?: number | null;\r\n\tinboundReserveAgents?: number | null;\r\n\tlearningPeriodMinutes?: number | null;\r\n\t/** Optional. Null means no handle-time adjustment. */\r\n\ttargetHandleSeconds?: number | null;\r\n\t/** Read-only: when adaptive was last switched on. */\r\n\tadaptivePacingStartedAt?: string | null;\r\n}\r\n\r\n/** GET /dialer/pacing/capabilities — what this tenant is allowed to configure. */\r\nexport interface PacingCapabilities {\r\n\tpredictiveAvailable: boolean;\r\n\tadaptivePacingAvailable: boolean;\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\tleadAutoCompleteEnabled?: boolean;\r\n\tisDefault?: boolean;\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 | null;\r\n\tsettings: CampaignSettings;\r\n\tqueueLinks?: QueueLinkPayload[];\r\n\r\n\t// ── Predictive pacing ──\r\n\t// Sent only for PREDICTIVE + HUMAN campaigns; the adaptive group is sent only\r\n\t// when the tenant has adaptive pacing (see PacingCapabilities). handleSave\r\n\t// strips whatever doesn't apply, because the backend rejects these fields on\r\n\t// campaigns they don't belong to.\r\n\t/**\r\n\t * UI-ONLY, and in PERCENT — 3 means 3%. The wire field is `targetAbandonRate`\r\n\t * as a fraction; handleSave converts and deletes this key. Kept separate so a\r\n\t * percent can never be posted where a fraction is expected.\r\n\t */\r\n\ttargetAbandonRatePercent?: number;\r\n\tmaxAgentWaitSeconds?: number;\r\n\tadaptivePacingEnabled?: boolean;\r\n\t/** Empty in the form means \"automatic\" and is sent as null. */\r\n\tmaxPacingRatio?: number | null;\r\n\tpacingWindowMinutes?: number;\r\n\tcomplianceWindowMinutes?: number;\r\n\tsafeModeMinAnswered?: number;\r\n\tinboundReserveAgents?: number;\r\n\tlearningPeriodMinutes?: number;\r\n\t/** Empty in the form means \"no adjustment\" and is sent as null. */\r\n\ttargetHandleSeconds?: number | null;\r\n}\r\n\r\n/** Field ranges the backend enforces; mirrored here so the form fails fast. */\r\nexport const PACING_LIMITS = {\r\n\ttargetAbandonRatePercent: { min: 0.1, max: 20, warnAbove: 3 },\r\n\tmaxAgentWaitSeconds: { min: 5, max: 120 },\r\n\tmaxPacingRatio: { min: 1, max: 3, step: 0.1 },\r\n\tpacingWindowMinutes: { min: 5, max: 60 },\r\n\tcomplianceWindowMinutes: { min: 15, max: 60 },\r\n\tsafeModeMinAnswered: { min: 5, max: 200 },\r\n\tinboundReserveAgents: { min: 0, max: 50 },\r\n\tlearningPeriodMinutes: { min: 0, max: 240 },\r\n\ttargetHandleSeconds: { min: 10, max: 3600 },\r\n} as const;\r\n\r\nexport interface QueueLinkPayload {\r\n\tqueueId: number;\r\n\tpriorityOverride: number;\r\n\tminWaitBeforeCallback: number;\r\n\tisAutoDialQueue: boolean;\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\tqueueName: string | null;\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\tlastReason: string;\r\n\tcompletedAt: string;\r\n\tcustomData: Record<string, any>;\r\n\tdisplayData: { label: string; value: any }[] | null;\r\n\tnotes: string;\r\n\tcreatedAt: string;\r\n\tupdatedAt: string;\r\n\tlatestCallId: string | null;\r\n\tvoicemail: string | null;\r\n}\r\n\r\nexport interface LeadCallData {\r\n\tcallUuid: string;\r\n\tphoneNumber: string;\r\n\tcallStartTime: string | null;\r\n\tconnectTime: string | null;\r\n\tcallType: string;\r\n\tcallStatus: string;\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\tagentSelectedDisposition: 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 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\tcustomData?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Create-lead response. A refusal comes back as an envelope\r\n * (`{ success: false, limit_reached: true, message, lead: null }`) rather than a\r\n * created lead, so both shapes are optional here.\r\n */\r\nexport interface LeadCreateResult {\r\n\tsuccess?: boolean;\r\n\tlimit_reached?: boolean;\r\n\tdaily_limit?: number | null;\r\n\tmessage?: string;\r\n\tlead?: Lead | null;\r\n\t[key: string]: any;\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\tpage?: number;\r\n\tpageSize?: number;\r\n\tlead_status?: string;\r\n\tsearch?: string;\r\n\tstart_date?: string;\r\n\tend_date?: 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\", \"AI_CALLBACK\",\"PROGRESSIVE\", \"PREDICTIVE\"],\r\n\tABANDONED_CALLBACK: [\"PREVIEW\", \"AI_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\tleadAutoCompleteEnabled: false, isDefault: false,\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: 1, retryIntervalMinutes: 15, callerId: \"\", ringTimeoutSeconds: 30,\r\n\tanswerTimeoutSeconds: 30, agentType: \"HUMAN\", aiBotId: null, priority: 5, settings: {},\r\n\tqueueLinks: [],\r\n\ttargetAbandonRatePercent: 3, maxAgentWaitSeconds: 60,\r\n\tadaptivePacingEnabled: false, maxPacingRatio: null, pacingWindowMinutes: 15,\r\n\tcomplianceWindowMinutes: 30, safeModeMinAnswered: 20, inboundReserveAgents: 0,\r\n\tlearningPeriodMinutes: 30, targetHandleSeconds: null,\r\n};\r\n"],"mappings":"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","names":["useCallback","useEffect","useState","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","Fragment","jsx","jsxs","dayjs","_a","_b","_c","useState","useCallback","useEffect","err","CampaignDialog","AddLeadDialog","CampaignsContent","_d","_e"]}