{"version":3,"sources":["../call-control-sdk/lib/pages/campaigns/useCampaigns.ts","../call-control-sdk/lib/pages/campaigns/styles.ts"],"sourcesContent":["import { useState, useCallback } from \"react\";\r\nimport axiosInstance, { deepFindArray, deepFindTotal } from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tCampaign,\r\n\tCampaignCreatePayload,\r\n\tCreateQueuePayload,\r\n\tLead,\r\n\tLeadCallData,\r\n\tLeadCreatePayload,\r\n\tLeadCreateResult,\r\n\tLeadsMeta,\r\n\tLeadsParams,\r\n\tLeadsResponse,\r\n\tQueue,\r\n} from \"./types\";\r\n\r\nexport function useCampaigns() {\r\n\tconst [campaigns, setCampaigns] = useState<Campaign[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchCampaigns = useCallback(async () => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get(END_POINT.CAMPAIGNS_GET_ALL);\r\n\t\t\tsetCampaigns(Array.isArray(res.data) ? res.data : []);\r\n\t\t} catch {\r\n\t\t\tsetCampaigns([]);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst getCampaignById = useCallback(async (id: number): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.CAMPAIGNS_GET_BY_ID(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst createCampaign = useCallback(async (data: CampaignCreatePayload): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_CREATE, data);\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst updateCampaign = useCallback(async (id: number, data: Partial<CampaignCreatePayload>): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.put(END_POINT.CAMPAIGNS_UPDATE(id), data);\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst activateCampaign = useCallback(async (id: number): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_ACTIVATE(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst pauseCampaign = useCallback(async (id: number): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_PAUSE(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst archiveCampaign = useCallback(async (id: number): Promise<Campaign> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_ARCHIVE(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tcampaigns,\r\n\t\tloading,\r\n\t\tfetchCampaigns,\r\n\t\tgetCampaignById,\r\n\t\tcreateCampaign,\r\n\t\tupdateCampaign,\r\n\t\tactivateCampaign,\r\n\t\tpauseCampaign,\r\n\t\tarchiveCampaign,\r\n\t};\r\n}\r\n\r\nexport function useLeads() {\r\n\tconst [leads, setLeads] = useState<Lead[]>([]);\r\n\tconst [leadTotal, setLeadTotal] = useState(0);\r\n\tconst [leadsMeta, setLeadsMeta] = useState<LeadsMeta>(null);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchLeads = useCallback(async (campaignId: number, params?: LeadsParams, opts?: { silent?: boolean }): Promise<void> => {\r\n\t\tif (!opts?.silent) setLoading(true);\r\n\t\ttry {\r\n\t\t\tconst qs = new URLSearchParams();\r\n\t\t\tif (params?.page != null) qs.append(\"page\", String(params.page));\r\n\t\t\tif (params?.pageSize != null) qs.append(\"pageSize\", String(params.pageSize));\r\n\t\t\tif (params?.lead_status) qs.append(\"lead_status\", params.lead_status);\r\n\t\t\tif (params?.search) qs.append(\"search\", params.search);\r\n\t\t\tif (params?.start_date) qs.append(\"start_date\", params.start_date);\r\n\t\t\tif (params?.end_date) qs.append(\"end_date\", params.end_date);\r\n\t\t\tconst qsStr = qs.toString();\r\n\t\t\tconst url = `${END_POINT.CAMPAIGNS_LEADS(campaignId)}${qsStr ? `?${qsStr}` : \"\"}`;\r\n\t\t\tconst res = await axiosInstance.get<LeadsResponse>(url);\r\n\t\t\tconst body = res.data as any;\r\n\t\t\t// Find the leads array wherever it sits (flat array, { leads }, { data: { leads } },\r\n\t\t\t// { leads: { data: [...] } }, ...).\r\n\t\t\tconst fetchedLeads = deepFindArray<Lead>(body, [\"leads\"]);\r\n\t\t\tsetLeads(fetchedLeads);\r\n\t\t\t// The real total may sit at body.total, body.data.total, or body.leads.total.\r\n\t\t\tconst foundTotal = deepFindTotal(body);\r\n\t\t\tsetLeadTotal(foundTotal >= 0 ? foundTotal : fetchedLeads.length);\r\n\t\t\tsetLeadsMeta({\r\n\t\t\t\tisDialerEnabled: body?.isDialerEnabled ?? body?.data?.isDialerEnabled,\r\n\t\t\t\tdialingMode: body?.dialingMode ?? body?.data?.dialingMode,\r\n\t\t\t\tcampaignStatus: body?.campaignStatus ?? body?.data?.campaignStatus,\r\n\t\t\t});\r\n\t\t} catch {\r\n\t\t\tsetLeads([]);\r\n\t\t\tsetLeadTotal(0);\r\n\t\t\tsetLeadsMeta(null);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst createLead = useCallback(async (campaignId: number, data: LeadCreatePayload): Promise<LeadCreateResult> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_LEADS(campaignId), data);\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst deleteLead = useCallback(async (campaignId: number, leadId: number): Promise<void> => {\r\n\t\tawait axiosInstance.delete(END_POINT.CAMPAIGNS_DELETE_LEAD(campaignId, leadId));\r\n\t}, []);\r\n\r\n\t// Deletes every lead of the campaign except the ones currently in progress.\r\n\tconst deleteAllLeads = useCallback(async (campaignId: number): Promise<any> => {\r\n\t\tconst res = await axiosInstance.delete(END_POINT.CAMPAIGNS_DELETE_ALL_LEADS(campaignId));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst dialPreview = useCallback(async (campaignId: number, leadId: number): Promise<{ message: string }> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_DIAL_PREVIEW(campaignId, leadId));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst getLeadCallData = useCallback(async (callUuid: string): Promise<LeadCallData> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.CALL_DATA_BY_CALL(callUuid));\r\n\t\t// API wraps the payload as { message, data }\r\n\t\treturn res.data?.data ?? res.data;\r\n\t}, []);\r\n\r\n\tconst uploadLeadsExcel = useCallback(async (campaignId: number, file: File): Promise<any> => {\r\n\t\tconst formData = new FormData();\r\n\t\tformData.append(\"file\", file);\r\n\t\tconst res = await axiosInstance.post(END_POINT.CAMPAIGNS_LEADS_UPLOAD_EXCEL(campaignId), formData, {\r\n\t\t\theaders: { \"Content-Type\": \"multipart/form-data\" },\r\n\t\t});\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst downloadLeadTemplate = useCallback(async (campaignId: number): Promise<void> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.CAMPAIGNS_LEADS_TEMPLATE_EXCEL(campaignId), {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\tconst blob = res.data as Blob;\r\n\t\tconst url = window.URL.createObjectURL(blob);\r\n\t\tconst a = document.createElement(\"a\");\r\n\t\ta.href = url;\r\n\t\ta.download = \"lead_template.xlsx\";\r\n\t\tdocument.body.appendChild(a);\r\n\t\ta.click();\r\n\t\ta.remove();\r\n\t\twindow.URL.revokeObjectURL(url);\r\n\t}, []);\r\n\r\n\tconst exportLeads = useCallback(async (campaignId: number, startDate?: string, endDate?: string): Promise<void> => {\r\n\t\tconst params = new URLSearchParams();\r\n\t\tif (startDate) params.append(\"start_date\", startDate);\r\n\t\tif (endDate) params.append(\"end_date\", endDate);\r\n\t\tconst qs = params.toString();\r\n\t\tconst endpoint = `${END_POINT.CAMPAIGNS_LEADS_EXPORT_EXCEL(campaignId)}${qs ? `?${qs}` : \"\"}`;\r\n\t\tconst res = await axiosInstance.get(endpoint, {\r\n\t\t\tresponseType: \"blob\",\r\n\t\t});\r\n\t\tconst blob = res.data as Blob;\r\n\t\tconst url = window.URL.createObjectURL(blob);\r\n\t\tconst a = document.createElement(\"a\");\r\n\t\ta.href = url;\r\n\t\ta.download = \"leads_export.xlsx\";\r\n\t\tdocument.body.appendChild(a);\r\n\t\ta.click();\r\n\t\ta.remove();\r\n\t\twindow.URL.revokeObjectURL(url);\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tleads,\r\n\t\tleadTotal,\r\n\t\tleadsMeta,\r\n\t\tloading,\r\n\t\tfetchLeads,\r\n\t\tcreateLead,\r\n\t\tdeleteLead,\r\n\t\tdeleteAllLeads,\r\n\t\tdialPreview,\r\n\t\tgetLeadCallData,\r\n\t\tuploadLeadsExcel,\r\n\t\tdownloadLeadTemplate,\r\n\t\texportLeads,\r\n\t};\r\n}\r\n\r\nexport function useQueues() {\r\n\tconst [queues, setQueues] = useState<Queue[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchQueues = useCallback(async (): Promise<Queue[]> => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get(END_POINT.QUEUES_GET_ALL);\r\n\t\t\tconst list: Queue[] = Array.isArray(res.data)\r\n\t\t\t\t? res.data\r\n\t\t\t\t: Array.isArray(res.data?.data) ? res.data.data : [];\r\n\t\t\tsetQueues(list);\r\n\t\t\treturn list;\r\n\t\t} catch {\r\n\t\t\tsetQueues([]);\r\n\t\t\treturn [];\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst createQueue = useCallback(async (payload: CreateQueuePayload): Promise<Queue> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.QUEUES_CREATE, payload);\r\n\t\treturn res.data?.data ?? res.data;\r\n\t}, []);\r\n\r\n\treturn { queues, loading, fetchQueues, createQueue };\r\n}\r\n","import type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\n// ─── Typography ───────────────────────────────────────────────────────────────\r\n\r\nexport const labelSx: SxProps<Theme> = {\r\n\tfontWeight: 600,\r\n\tfontSize: \"0.85rem\",\r\n\tcolor: \"#333\",\r\n\tmb: 0.5,\r\n};\r\n\r\n/** Compact inline \"Set as Default\" link used inside the campaign detail tiles. */\r\nexport const setDefaultLinkSx: SxProps<Theme> = {\r\n\tminWidth: 0,\r\n\theight: 20,\r\n\tpx: 0.75,\r\n\tpy: 0,\r\n\tborderRadius: \"4px\",\r\n\ttextTransform: \"none\",\r\n\tfontWeight: 600,\r\n\tfontSize: \"0.7rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\twhiteSpace: \"nowrap\",\r\n\tcolor: \"#B27B00\",\r\n\tborder: \"1px dashed #FFD54F\",\r\n\tbackgroundColor: \"#FFFDF5\",\r\n\t\"& .MuiButton-startIcon\": { mr: 0.3, ml: 0, \"& svg\": { fontSize: 13, color: \"#F5B301\" } },\r\n\t\"&:hover\": { borderStyle: \"solid\", backgroundColor: \"#FFF8E1\" },\r\n};\r\n\r\nexport const sectionTitleSx: SxProps<Theme> = {\r\n\tfontWeight: 700,\r\n\tfontSize: \"1rem\",\r\n\tcolor: \"#1a1a1a\",\r\n\tmb: 1.5,\r\n\tmt: 0.5,\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n};\r\n\r\n// ─── Table ────────────────────────────────────────────────────────────────────\r\n\r\nexport const headCellSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tbgcolor: \"#f1f1f1\",\r\n\tcolor: \"#333\",\r\n\tfontWeight: 600,\r\n\twhiteSpace: \"nowrap\",\r\n\tfontSize: \"0.8rem\",\r\n\tpy: \"6px\",\r\n\tpx: \"12px\",\r\n};\r\n\r\nexport const bodyCellSx: SxProps<Theme> = {\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontSize: \"0.82rem\",\r\n\tpy: \"4px\",\r\n\tpx: \"12px\",\r\n};\r\n\r\nexport const tableRowSx: SxProps<Theme> = {\r\n\t\"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n\t\"&:last-child td, &:last-child th\": { border: 0 },\r\n};\r\n\r\n// ─── Campaign list card ───────────────────────────────────────────────────────\r\n\r\nexport const campaignCardBaseSx: SxProps<Theme> = {\r\n\tp: 1.5,\r\n\tmb: 0.75,\r\n\tborderRadius: \"12px\",\r\n\tcursor: \"pointer\",\r\n\tborder: \"1px solid #e8e8e8\",\r\n\tbackgroundColor: \"#fff\",\r\n\tboxShadow: \"0 1px 2px rgba(0,0,0,0.04)\",\r\n\ttransition: \"all 0.2s ease\",\r\n\toverflow: \"hidden\",\r\n};\r\n\r\nexport const campaignCardSelectedSx: SxProps<Theme> = {\r\n\t...campaignCardBaseSx,\r\n\tborder: \"2px solid #1A5F6C\",\r\n\tbackgroundColor: \"#f0f7f8\",\r\n\tboxShadow: \"0 2px 8px rgba(26,95,108,0.12)\",\r\n};\r\n\r\n// ─── Input ────────────────────────────────────────────────────────────────────\r\n\r\nexport const inputSx: SxProps<Theme> = {\r\n\t\"& .MuiOutlinedInput-root\": {\r\n\t\tborderRadius: \"8px\",\r\n\t\tbackgroundColor: \"#fff\",\r\n\t\t\"&:hover fieldset\": { borderColor: \"#1A5F6C\" },\r\n\t\t\"&.Mui-focused fieldset\": { borderColor: \"#1A5F6C\" },\r\n\t},\r\n};\r\n\r\n/** Select styled to match inputSx (Select has no fieldset slot of its own). */\r\nexport const dialogSelectSx: SxProps<Theme> = {\r\n\tborderRadius: \"8px\",\r\n\tbackgroundColor: \"#fff\",\r\n\tfontSize: \"0.85rem\",\r\n\t\"&:hover .MuiOutlinedInput-notchedOutline\": { borderColor: \"#1A5F6C\" },\r\n\t\"&.Mui-focused .MuiOutlinedInput-notchedOutline\": { borderColor: \"#1A5F6C\" },\r\n};\r\n\r\n/**\r\n * MenuProps for any Select rendered inside one of this page's hand-rolled\r\n * dialogs. Those dialogs are plain fixed Boxes at zIndex 1300–1600, while a\r\n * MUI Menu portals to <body> at the theme's modal zIndex (1300) — so without\r\n * this the dropdown opens *behind* the dialog and its scrim. Anchoring below\r\n * the field also stops the list overflowing the dialog's edges.\r\n */\r\nexport const dialogMenuProps = {\r\n\tsx: { zIndex: 1800 },\r\n\tanchorOrigin: { vertical: \"bottom\" as const, horizontal: \"left\" as const },\r\n\ttransformOrigin: { vertical: \"top\" as const, horizontal: \"left\" as const },\r\n\tslotProps: {\r\n\t\tpaper: {\r\n\t\t\tsx: {\r\n\t\t\t\tmaxHeight: 260,\r\n\t\t\t\tborderRadius: \"8px\",\r\n\t\t\t\tmt: 0.5,\r\n\t\t\t\tborder: \"1px solid #e3ebee\",\r\n\t\t\t\tboxShadow: \"0 6px 24px rgba(26,95,108,0.16)\",\r\n\t\t\t\t\"& .MuiMenuItem-root\": {\r\n\t\t\t\t\tfontSize: \"0.85rem\",\r\n\t\t\t\t\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\t\t\t\t\tpy: 0.75,\r\n\t\t\t\t\t\"&.Mui-selected\": {\r\n\t\t\t\t\t\tbackgroundColor: \"rgba(26,95,108,0.10)\",\r\n\t\t\t\t\t\t\"&:hover\": { backgroundColor: \"rgba(26,95,108,0.16)\" },\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},\r\n};\r\n\r\n// ─── Dialog ───────────────────────────────────────────────────────────────────\r\n\r\nexport const dialogHeaderSx: SxProps<Theme> = {\r\n\tpx: 2.5,\r\n\tpy: 1.5,\r\n\tborderBottom: \"1px solid #eee\",\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tjustifyContent: \"space-between\",\r\n};\r\n\r\nexport const dialogFooterSx: SxProps<Theme> = {\r\n\tpx: 2.5,\r\n\tpy: 1.5,\r\n\tborderTop: \"1px solid #eee\",\r\n\tdisplay: \"flex\",\r\n\tjustifyContent: \"flex-end\",\r\n\tgap: 1,\r\n\t// Never shrink: the dialog body is the part that scrolls. Without this, a short\r\n\t// viewport squeezes the footer instead of the body and the buttons clip away.\r\n\tflexShrink: 0,\r\n\tbackgroundColor: \"#fff\",\r\n\t// Wrap rather than overflow when the buttons run out of width on a narrow screen.\r\n\tflexWrap: \"wrap\",\r\n};\r\n\r\n// ─── Buttons ──────────────────────────────────────────────────────────────────\r\n\r\nexport const primaryBtnSx: SxProps<Theme> = {\r\n\tdisplay: \"inline-flex\",\r\n\talignItems: \"center\",\r\n\tgap: 0.5,\r\n\tpx: 2.5,\r\n\tpy: 0.75,\r\n\tborderRadius: 1,\r\n\tborder: \"none\",\r\n\tbackgroundColor: \"#1A5F6C\",\r\n\tcolor: \"#fff\",\r\n\tcursor: \"pointer\",\r\n\tfontSize: \"0.85rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontWeight: 600,\r\n\t\"&:hover\": { backgroundColor: \"#164e57\" },\r\n\t\"&:disabled\": { opacity: 0.65, cursor: \"not-allowed\" },\r\n};\r\n\r\nexport const cancelBtnSx: SxProps<Theme> = {\r\n\tdisplay: \"inline-flex\",\r\n\talignItems: \"center\",\r\n\tpx: 2.5,\r\n\tpy: 0.75,\r\n\tborderRadius: 1,\r\n\tborder: \"1px solid #ccc\",\r\n\tbackgroundColor: \"#fff\",\r\n\tcursor: \"pointer\",\r\n\tfontSize: \"0.85rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\t\"&:hover\": { backgroundColor: \"#f5f5f5\" },\r\n};\r\n\r\nexport const dangerBtnSx: SxProps<Theme> = {\r\n\tdisplay: \"inline-flex\",\r\n\talignItems: \"center\",\r\n\tgap: 0.5,\r\n\tpx: 2.5,\r\n\tpy: 0.75,\r\n\tborderRadius: 1,\r\n\tborder: \"none\",\r\n\tbackgroundColor: \"#c0392b\",\r\n\tcolor: \"#fff\",\r\n\tcursor: \"pointer\",\r\n\tfontSize: \"0.85rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontWeight: 600,\r\n\t\"&:hover\": { backgroundColor: \"#a93226\" },\r\n\t\"&:disabled\": { opacity: 0.65, cursor: \"not-allowed\" },\r\n};\r\n\r\nexport const outlinedBtnSx: SxProps<Theme> = {\r\n\tdisplay: \"inline-flex\",\r\n\talignItems: \"center\",\r\n\tgap: 0.5,\r\n\tpx: 2,\r\n\tpy: 0.75,\r\n\tborderRadius: 1,\r\n\tborder: \"1px solid #1A5F6C\",\r\n\tbackgroundColor: \"#fff\",\r\n\tcolor: \"#1A5F6C\",\r\n\tcursor: \"pointer\",\r\n\tfontSize: \"0.82rem\",\r\n\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\tfontWeight: 600,\r\n\t\"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n};\r\n\r\n// ─── Icon action buttons ──────────────────────────────────────────────────────\r\n\r\nexport const iconBtnBaseSx: SxProps<Theme> = {\r\n\tborder: \"1px solid #e0e0e0\",\r\n\tborderRadius: 1,\r\n};\r\n\r\nexport const iconBtnPrimarySx: SxProps<Theme> = {\r\n\tborder: \"1px solid #1A5F6C\",\r\n\tcolor: \"#1A5F6C\",\r\n\tborderRadius: 1,\r\n};\r\n\r\nexport const iconBtnSuccessSx: SxProps<Theme> = {\r\n\tborder: \"1px solid #4caf50\",\r\n\tcolor: \"#4caf50\",\r\n\tborderRadius: 1,\r\n};\r\n\r\nexport const iconBtnWarningSx: SxProps<Theme> = {\r\n\tborder: \"1px solid #ff9800\",\r\n\tcolor: \"#ff9800\",\r\n\tborderRadius: 1,\r\n};\r\n\r\nexport const iconBtnDangerSx: SxProps<Theme> = {\r\n\tborder: \"1px solid #c0392b\",\r\n\tcolor: \"#c0392b\",\r\n\tborderRadius: 1,\r\n};\r\n\r\n// ─── Chip helpers (returned as plain objects, not SxProps) ────────────────────\r\n\r\nexport const STATUS_COLORS: Record<string, string> = {\r\n\tdraft:     \"#9e9e9e\",\r\n\tactive:    \"#4caf50\",\r\n\tpaused:    \"#ff9800\",\r\n\tcompleted: \"#2196f3\",\r\n\tarchived:  \"#795548\",\r\n};\r\n\r\nexport function statusChipSx(status: string) {\r\n\tconst color = STATUS_COLORS[status?.toLowerCase()] ?? \"#9e9e9e\";\r\n\treturn {\r\n\t\theight: 22,\r\n\t\tfontSize: \"0.68rem\",\r\n\t\tfontWeight: 700,\r\n\t\ttextTransform: \"capitalize\" as const,\r\n\t\tborderRadius: \"6px\",\r\n\t\tbackgroundColor: color + \"18\",\r\n\t\tcolor,\r\n\t\tborder: `1px solid ${color}40`,\r\n\t};\r\n}\r\n\r\nexport function leadStatusChipSx(status: string) {\r\n\tconst s = status?.toUpperCase();\r\n\treturn {\r\n\t\theight: 22,\r\n\t\tfontSize: \"0.72rem\",\r\n\t\tfontWeight: 700,\r\n\t\ttextTransform: \"capitalize\" as const,\r\n\t\tborderRadius: \"6px\",\r\n\t\tbackgroundColor: s === \"COMPLETED\" ? \"#e8f5e9\"\r\n\t\t\t: s === \"FAILED\"    ? \"#ffebee\"\r\n\t\t\t: s === \"DIALING\"   ? \"#e3f2fd\"\r\n\t\t\t: s === \"CANCELLED\" ? \"#f3e5f5\"\r\n\t\t\t: \"#f5f5f5\",\r\n\t\tcolor: s === \"COMPLETED\" ? \"#2e7d32\"\r\n\t\t\t: s === \"FAILED\"    ? \"#c62828\"\r\n\t\t\t: s === \"DIALING\"   ? \"#1565c0\"\r\n\t\t\t: s === \"CANCELLED\" ? \"#ef7838\"\r\n\t\t\t: \"#666\",\r\n\t};\r\n}\r\n\r\nexport function leadPriorityChipSx(priority: number | null | undefined) {\r\n\tconst label = priority == null ? \"\"\r\n\t\t: priority >= 8 ? \"HIGH\"\r\n\t\t: priority >= 4 ? \"MEDIUM\"\r\n\t\t: \"LOW\";\r\n\treturn {\r\n\t\tchip: {\r\n\t\t\theight: 22,\r\n\t\t\tfontSize: \"0.72rem\",\r\n\t\t\tfontWeight: 700,\r\n\t\t\tborderRadius: \"6px\",\r\n\t\t\tbackgroundColor: label === \"HIGH\" ? \"#ffebee\" : label === \"MEDIUM\" ? \"#e3f2fd\" : label === \"LOW\" ? \"#e8f5e9\" : \"#f5f5f5\",\r\n\t\t\tcolor:           label === \"HIGH\" ? \"#c62828\" : label === \"MEDIUM\" ? \"#1565c0\" : label === \"LOW\" ? \"#2e7d32\" : \"#666\",\r\n\t\t},\r\n\t\tlabel,\r\n\t};\r\n}\r\n\r\nexport function daychipSx(selected: boolean) {\r\n\treturn {\r\n\t\tcursor: \"pointer\",\r\n\t\tbackgroundColor: selected ? \"#1A5F6C\" : \"transparent\",\r\n\t\tcolor: selected ? \"#fff\" : \"#333\",\r\n\t\tborderColor: \"#1A5F6C\",\r\n\t\tfontWeight: 500,\r\n\t\t\"&:hover\": {\r\n\t\t\tbackgroundColor: selected ? \"#164e57\" : \"#E3F2F5\",\r\n\t\t},\r\n\t};\r\n}\r\n"],"mappings":"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","names":[]}