{"version":3,"sources":["../call-control-sdk/lib/pages/leadIntegrations/index.tsx","../call-control-sdk/lib/pages/leadIntegrations/useLeadIntegrations.ts","../call-control-sdk/lib/pages/leadIntegrations/types.ts"],"sourcesContent":["import React, { memo, useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport {\r\n\tAlert,\r\n\tBox,\r\n\tChip,\r\n\tCircularProgress,\r\n\tFormControl,\r\n\tIconButton,\r\n\tMenuItem,\r\n\tPaper,\r\n\tSelect,\r\n\tStack,\r\n\tSwitch,\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} from \"@mui/material\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport ArrowDownwardIcon from \"@mui/icons-material/ArrowDownward\";\r\nimport ArrowUpwardIcon from \"@mui/icons-material/ArrowUpward\";\r\nimport ContentCopyIcon from \"@mui/icons-material/ContentCopy\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport HistoryIcon from \"@mui/icons-material/History\";\r\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\r\nimport WarningAmberIcon from \"@mui/icons-material/WarningAmber\";\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 SearchBar from \"../common/components/SearchBar\";\r\nimport { useCampaigns } from \"../campaigns/useCampaigns\";\r\nimport type { Campaign } from \"../campaigns/types\";\r\nimport {\r\n\tbodyCellSx,\r\n\tdialogFooterSx,\r\n\tdialogHeaderSx,\r\n\theadCellSx,\r\n\ticonBtnDangerSx,\r\n\ticonBtnPrimarySx,\r\n\tinputSx,\r\n\tlabelSx,\r\n\tsectionTitleSx,\r\n\ttableRowSx,\r\n} from \"../campaigns/styles\";\r\nimport { statusChipSx, statusChipLabel } from \"../common/utils/tableStyles\";\r\nimport { useLeadIntegrations } from \"./useLeadIntegrations\";\r\nimport {\r\n\tSOURCE_TYPE_OPTIONS,\r\n\tTOKEN_STATUS_META,\r\n\tgetEffectiveExpiry,\r\n\tgetRenewalInstructions,\r\n\tgetSourceTypeIcon,\r\n\tgetSourceTypeLabel,\r\n} from \"./types\";\r\nimport type {\r\n\tAvailableForm,\r\n\tFieldMappingItem,\r\n\tFormMapping,\r\n\tFormMappingCreatePayload,\r\n\tIntegrationCreatePayload,\r\n\tIntegrationUpdatePayload,\r\n\tLeadIntegration,\r\n\tLeadSourceType,\r\n\tWebhookLog,\r\n} from \"./types\";\r\n\r\n// ──── Constants ──────────────────────────────────────────────────────────────\r\n\r\nconst INTEGRATION_COLS = [\r\n\t\"Name\",\r\n\t\"Source\",\r\n\t\"Status\",\r\n\t\"Token Status\",\r\n\t\"Webhook URL\",\r\n\t\"Leads Received\",\r\n\t\"Form Mappings\",\r\n\t\"Actions\",\r\n] as const;\r\nconst CENTER_COLS = new Set([\"Actions\"]);\r\n\r\nconst MANAGE_PERMISSIONS = [\r\n\tSDK_PERMISSIONS.LEAD_INTEGRATIONS_UPDATE,\r\n\tSDK_PERMISSIONS.LEAD_INTEGRATIONS_MANAGE,\r\n];\r\n\r\nconst defaultIntegrationForm: IntegrationCreatePayload = {\r\n\tname: \"\",\r\n\tsourceType: \"facebook\",\r\n\tisActive: true,\r\n\tappId: \"\",\r\n\tappSecret: \"\",\r\n\taccessToken: \"\",\r\n\tpageAccessToken: \"\",\r\n\tverifyToken: \"\",\r\n\tapiVersion: \"v18.0\",\r\n\tdefaultCampaignId: null,\r\n\tpageId: \"\",\r\n\tfieldMappings: {},\r\n\tsettings: {},\r\n};\r\n\r\nconst defaultMappingForm: FormMappingCreatePayload = {\r\n\tsourceFormId: \"\",\r\n\tsourceFormName: \"\",\r\n\tsourcePageId: \"\",\r\n\tcampaignId: 0,\r\n\tpriorityOverride: undefined,\r\n\tisActive: true,\r\n};\r\n\r\nconst errMsg = (error: any, fallback: string): string =>\r\n\terror?.response?.data?.message || error?.response?.data?.detail || error?.message || fallback;\r\n\r\nconst Required = () => <span style={{ color: \"#c0392b\" }}>*</span>;\r\n\r\n// ──── Token expiry chip ──────────────────────────────────────────────────────\r\n\r\nfunction TokenStatusChip({ integration }: { integration: LeadIntegration }) {\r\n\tconst meta = TOKEN_STATUS_META[integration.tokenExpiryStatus];\r\n\tif (!meta) return <Typography sx={{ fontSize: \"0.82rem\", color: \"text.secondary\" }}></Typography>;\r\n\tconst effective = getEffectiveExpiry(integration);\r\n\treturn (\r\n\t\t<Tooltip title={effective ? `${effective.label} expires: ${effective.date.toLocaleString()}` : \"\"}>\r\n\t\t\t<Chip\r\n\t\t\t\ticon={integration.tokenExpiryStatus !== \"ok\" ? <WarningAmberIcon fontSize=\"small\" /> : undefined}\r\n\t\t\t\tlabel={effective ? `${meta.label} · ${effective.date.toLocaleDateString()}` : meta.label}\r\n\t\t\t\tsize=\"small\"\r\n\t\t\t\tcolor={meta.color}\r\n\t\t\t/>\r\n\t\t</Tooltip>\r\n\t);\r\n}\r\n\r\n// ──── Token expiry alert (Credentials tab) ───────────────────────────────────\r\n\r\nfunction TokenExpiryAlert({ integration }: { integration: LeadIntegration }) {\r\n\tconst meta = TOKEN_STATUS_META[integration.tokenExpiryStatus];\r\n\tif (!meta || integration.tokenExpiryStatus === \"ok\") return null;\r\n\tconst effective = getEffectiveExpiry(integration);\r\n\tconst isExpired = integration.tokenExpiryStatus === \"expired\";\r\n\treturn (\r\n\t\t<Alert severity={isExpired ? \"error\" : \"warning\"} icon={<WarningAmberIcon fontSize=\"inherit\" />} sx={{ mb: 2 }}>\r\n\t\t\t<Typography variant=\"body2\" sx={{ fontWeight: 600, mb: 0.5 }}>\r\n\t\t\t\t{effective\r\n\t\t\t\t\t? `${effective.label} ${isExpired ? \"expired\" : \"expires\"} ${effective.date.toLocaleDateString()} (${effective.date.toLocaleTimeString()})`\r\n\t\t\t\t\t: isExpired\r\n\t\t\t\t\t\t? \"This integration is no longer valid.\"\r\n\t\t\t\t\t\t: \"This integration is expiring soon.\"}\r\n\t\t\t\t{isExpired ? \" — lead ingestion has stopped.\" : \" — lead ingestion will stop once this passes.\"}\r\n\t\t\t</Typography>\r\n\t\t\t<Typography variant=\"body2\">\r\n\t\t\t\t{getRenewalInstructions(effective?.label || \"Access token\")}\r\n\t\t\t</Typography>\r\n\t\t</Alert>\r\n\t);\r\n}\r\n\r\n// ──── Modal shell (matches the Campaigns page dialog chrome) ──────────────────\r\n\r\n// The shells below are plain fixed overlays, not MUI `Dialog`s, so they sit at\r\n// 1300–1500 while a Select's portaled menu defaults to the theme's\r\n// `zIndex.modal` (1300) — putting the dropdown behind its own dialog. Every\r\n// Select inside a shell passes this on `MenuProps` to clear the tallest shell.\r\nconst SELECT_MENU_Z_INDEX = 1600;\r\n\r\n\r\nfunction ModalShell({\r\n\ttitle,\r\n\twidth,\r\n\tzIndex = 1300,\r\n\tonClose,\r\n\tfooter,\r\n\tchildren,\r\n}: {\r\n\ttitle: string;\r\n\twidth?: Record<string, number | string> | number | string;\r\n\tzIndex?: number;\r\n\tonClose: () => void;\r\n\tfooter: React.ReactNode;\r\n\tchildren: React.ReactNode;\r\n}) {\r\n\treturn (\r\n\t\t<Box\r\n\t\t\tsx={{\r\n\t\t\t\tposition: \"fixed\",\r\n\t\t\t\tinset: 0,\r\n\t\t\t\tzIndex,\r\n\t\t\t\tbackgroundColor: \"rgba(0,0,0,0.45)\",\r\n\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\talignItems: \"center\",\r\n\t\t\t\tjustifyContent: \"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: width ?? { 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<Box\r\n\t\t\t\t\tsx={{\r\n\t\t\t\t\t\t...dialogHeaderSx,\r\n\t\t\t\t\t\tbackgroundColor: \"#1A5F6C\",\r\n\t\t\t\t\t\tcolor: \"#fff\",\r\n\t\t\t\t\t\t\"& .MuiIconButton-root\": { color: \"#fff\" },\r\n\t\t\t\t\t}}\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{title}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose} sx={{ color: \"#fff\" }}>\r\n\t\t\t\t\t\t✕\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t<Box sx={{ flex: 1, overflowY: \"auto\" }}>{children}</Box>\r\n\r\n\t\t\t\t<Box sx={dialogFooterSx}>{footer}</Box>\r\n\t\t\t</Paper>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Integration Create / Edit Dialog ───────────────────────────────────────\r\n\r\ninterface IntegrationDialogProps {\r\n\topen: boolean;\r\n\tmode: \"add\" | \"edit\";\r\n\teditingIntegration: LeadIntegration | null;\r\n\tformData: IntegrationCreatePayload;\r\n\tsetFormData: React.Dispatch<React.SetStateAction<IntegrationCreatePayload>>;\r\n\tcampaigns: Campaign[];\r\n\tsaving: boolean;\r\n\tonSave: () => void;\r\n\tonClose: () => void;\r\n\tonAddMapping: (integration: LeadIntegration) => void;\r\n\tonEditMapping: (integration: LeadIntegration, mapping: FormMapping) => void;\r\n\tonDeleteMapping: (integration: LeadIntegration, mapping: FormMapping) => void;\r\n}\r\n\r\nconst IntegrationDialog = memo(function IntegrationDialog({\r\n\topen,\r\n\tmode,\r\n\teditingIntegration,\r\n\tformData,\r\n\tsetFormData,\r\n\tcampaigns,\r\n\tsaving,\r\n\tonSave,\r\n\tonClose,\r\n\tonAddMapping,\r\n\tonEditMapping,\r\n\tonDeleteMapping,\r\n}: IntegrationDialogProps) {\r\n\tconst [tab, setTab] = useState(0);\r\n\tuseEffect(() => {\r\n\t\tif (open) setTab(0);\r\n\t}, [open]);\r\n\tif (!open) return null;\r\n\r\n\tconst TAB_LABELS = [\"Basic Info\", \"Credentials\", \"Form Mappings\"];\r\n\tconst mappings = editingIntegration?.formMappings ?? [];\r\n\r\n\treturn (\r\n\t\t<ModalShell\r\n\t\t\ttitle={mode === \"add\" ? \"Add Integration\" : \"Edit Integration\"}\r\n\t\t\tonClose={onClose}\r\n\t\t\tfooter={\r\n\t\t\t\t<>\r\n\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>\r\n\t\t\t\t\t\tCancel\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t<SDKPermissionGuard\r\n\t\t\t\t\t\tpermissions={[\r\n\t\t\t\t\t\t\tmode === \"add\"\r\n\t\t\t\t\t\t\t\t? SDK_PERMISSIONS.LEAD_INTEGRATIONS_CREATE\r\n\t\t\t\t\t\t\t\t: SDK_PERMISSIONS.LEAD_INTEGRATIONS_UPDATE,\r\n\t\t\t\t\t\t\tSDK_PERMISSIONS.LEAD_INTEGRATIONS_MANAGE,\r\n\t\t\t\t\t\t]}\r\n\t\t\t\t\t\tshowFallback={false}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\t\tonClick={onSave}\r\n\t\t\t\t\t\t\tdisabled={saving}\r\n\t\t\t\t\t\t\tstartIcon={saving ? <CircularProgress size={14} color=\"inherit\" /> : undefined}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{mode === \"add\" ? \"Create\" : \"Save\"}\r\n\t\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t</>\r\n\t\t\t}\r\n\t\t>\r\n\t\t\t<Tabs\r\n\t\t\t\tvalue={tab}\r\n\t\t\t\tonChange={(_, v) => setTab(v)}\r\n\t\t\t\tvariant=\"scrollable\"\r\n\t\t\t\tscrollButtons=\"auto\"\r\n\t\t\t\tsx={{\r\n\t\t\t\t\tborderBottom: \"1px solid #eee\",\r\n\t\t\t\t\tminHeight: 44,\r\n\t\t\t\t\t\"& .MuiTab-root\": {\r\n\t\t\t\t\t\tfontSize: \"0.85rem\",\r\n\t\t\t\t\t\tminHeight: 44,\r\n\t\t\t\t\t\ttextTransform: \"none\",\r\n\t\t\t\t\t\tfontWeight: 600,\r\n\t\t\t\t\t\tfontFamily: \"poppins, Arial, sans-serif\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"& .Mui-selected\": { color: \"#1A5F6C\" },\r\n\t\t\t\t}}\r\n\t\t\t\tTabIndicatorProps={{ style: { height: 3, backgroundColor: \"#1A5F6C\", borderRadius: \"3px 3px 0 0\" } }}\r\n\t\t\t>\r\n\t\t\t\t{TAB_LABELS.map((label, i) => (\r\n\t\t\t\t\t<Tab key={label} label={label} value={i} disabled={i === 2 && mode === \"add\"} />\r\n\t\t\t\t))}\r\n\t\t\t</Tabs>\r\n\r\n\t\t\t{/* ── Basic Info ── */}\r\n\t\t\t{tab === 0 && (\r\n\t\t\t\t<Box sx={{ p: 2.5 }}>\r\n\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 2, mb: 2 }}>\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<Typography sx={labelSx}>\r\n\t\t\t\t\t\t\t\tName <Required />\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\t\tvalue={formData.name}\r\n\t\t\t\t\t\t\t\tonChange={(e) => setFormData((prev) => ({ ...prev, name: e.target.value }))}\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<Typography sx={labelSx}>\r\n\t\t\t\t\t\t\t\tSource Type <Required />\r\n\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t<FormControl fullWidth size=\"small\">\r\n\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\tvalue={formData.sourceType}\r\n\t\t\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\t\t\tMenuProps={{ sx: { zIndex: SELECT_MENU_Z_INDEX } }}\r\n\t\t\t\t\t\t\t\t\tdisabled={mode === \"edit\"}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) =>\r\n\t\t\t\t\t\t\t\t\t\tsetFormData((prev) => ({ ...prev, sourceType: e.target.value as LeadSourceType }))\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{SOURCE_TYPE_OPTIONS.map((opt) => (\r\n\t\t\t\t\t\t\t\t\t\t<MenuItem key={opt.value} value={opt.value}>\r\n\t\t\t\t\t\t\t\t\t\t\t{opt.icon} {opt.label}\r\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t</FormControl>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 2, mb: 2 }}>\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<Typography sx={labelSx}>Default Campaign</Typography>\r\n\t\t\t\t\t\t\t<FormControl fullWidth size=\"small\">\r\n\t\t\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\t\t\tvalue={formData.defaultCampaignId ?? \"\"}\r\n\t\t\t\t\t\t\t\t\tdisplayEmpty\r\n\t\t\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\t\t\tMenuProps={{ sx: { zIndex: SELECT_MENU_Z_INDEX } }}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) =>\r\n\t\t\t\t\t\t\t\t\t\tsetFormData((prev) => ({\r\n\t\t\t\t\t\t\t\t\t\t\t...prev,\r\n\t\t\t\t\t\t\t\t\t\t\tdefaultCampaignId: e.target.value ? Number(e.target.value) : null,\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\t<MenuItem value=\"\">None</MenuItem>\r\n\t\t\t\t\t\t\t\t\t{campaigns.map((c) => (\r\n\t\t\t\t\t\t\t\t\t\t<MenuItem key={c.id} value={c.id}>\r\n\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</MenuItem>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</Select>\r\n\t\t\t\t\t\t\t</FormControl>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<Typography sx={labelSx}>API Version</Typography>\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\t\tvalue={formData.apiVersion ?? \"\"}\r\n\t\t\t\t\t\t\t\tonChange={(e) => setFormData((prev) => ({ ...prev, apiVersion: e.target.value }))}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t<Typography sx={{ ...labelSx, mb: 0 }}>Active</Typography>\r\n\t\t\t\t\t\t<Switch\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\tchecked={!!formData.isActive}\r\n\t\t\t\t\t\t\tonChange={(e) => setFormData((prev) => ({ ...prev, isActive: e.target.checked }))}\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)}\r\n\r\n\t\t\t{/* ── Credentials ── */}\r\n\t\t\t{tab === 1 && (\r\n\t\t\t\t<Box sx={{ p: 2.5 }}>\r\n\t\t\t\t\t<Typography sx={sectionTitleSx}>API Credentials</Typography>\r\n\t\t\t\t\t<Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 2, fontSize: \"0.82rem\" }}>\r\n\t\t\t\t\t\tEnter your platform credentials. These are encrypted and stored securely.\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t{mode === \"edit\" && editingIntegration && (\r\n\t\t\t\t\t\t<TokenExpiryAlert integration={editingIntegration} />\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 2 }}>\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<Typography sx={labelSx}>App ID</Typography>\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\t\tvalue={formData.appId ?? \"\"}\r\n\t\t\t\t\t\t\t\tonChange={(e) => setFormData((prev) => ({ ...prev, appId: e.target.value }))}\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<Typography sx={labelSx}>Page ID</Typography>\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\t\tplaceholder=\"e.g. Facebook page ID for auto form-discovery\"\r\n\t\t\t\t\t\t\t\tvalue={formData.pageId ?? \"\"}\r\n\t\t\t\t\t\t\t\tonChange={(e) => setFormData((prev) => ({ ...prev, pageId: e.target.value }))}\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<Typography sx={labelSx}>App Secret</Typography>\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\ttype=\"password\"\r\n\t\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\t\tplaceholder=\"••••••••\"\r\n\t\t\t\t\t\t\t\tvalue={formData.appSecret ?? \"\"}\r\n\t\t\t\t\t\t\t\tonChange={(e) => setFormData((prev) => ({ ...prev, appSecret: e.target.value }))}\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<Typography sx={labelSx}>Access Token</Typography>\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\ttype=\"password\"\r\n\t\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\t\tplaceholder=\"••••••••\"\r\n\t\t\t\t\t\t\t\tvalue={formData.accessToken ?? \"\"}\r\n\t\t\t\t\t\t\t\tonChange={(e) => setFormData((prev) => ({ ...prev, accessToken: e.target.value }))}\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<Typography sx={labelSx}>Page Access Token</Typography>\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\ttype=\"password\"\r\n\t\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\t\tplaceholder=\"••••••••\"\r\n\t\t\t\t\t\t\t\tvalue={formData.pageAccessToken ?? \"\"}\r\n\t\t\t\t\t\t\t\tonChange={(e) => setFormData((prev) => ({ ...prev, pageAccessToken: e.target.value }))}\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<Typography sx={labelSx}>Verify Token (for webhook verification)</Typography>\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\t\tvalue={formData.verifyToken ?? \"\"}\r\n\t\t\t\t\t\t\t\tonChange={(e) => setFormData((prev) => ({ ...prev, verifyToken: e.target.value }))}\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\t\t\t\t</Box>\r\n\t\t\t)}\r\n\r\n\t\t\t{/* ── Form Mappings ── */}\r\n\t\t\t{tab === 2 && editingIntegration && (\r\n\t\t\t\t<Box sx={{ p: 2.5 }}>\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", mb: 1.5 }}>\r\n\t\t\t\t\t\t<Typography sx={{ ...sectionTitleSx, mb: 0 }}>Form → Campaign Mappings</Typography>\r\n\t\t\t\t\t\t<SDKPermissionGuard permissions={MANAGE_PERMISSIONS} showFallback={false}>\r\n\t\t\t\t\t\t\t<SDKButton size=\"small\" startIcon={<AddIcon sx={{ fontSize: \"1rem !important\" }} />}\r\n\t\t\t\t\t\t\t\tonClick={() => onAddMapping(editingIntegration)}>\r\n\t\t\t\t\t\t\t\tAdd Mapping\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\t<TableContainer component={Paper} variant=\"outlined\">\r\n\t\t\t\t\t\t<Table size=\"small\">\r\n\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t{[\"Form ID\", \"Form Name\", \"Campaign\", \"Priority\", \"Status\", \"Actions\"].map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t<TableCell key={col} align={col === \"Actions\" ? \"center\" : \"left\"} sx={headCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t{col}\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t{mappings.map((mapping) => (\r\n\t\t\t\t\t\t\t\t\t<TableRow key={mapping.id} sx={tableRowSx}>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{mapping.sourceFormId}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{mapping.sourceFormName || \"\"}</TableCell>\r\n\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{campaigns.find((c) => c.id === mapping.campaignId)?.name || mapping.campaignId}\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{mapping.priorityOverride || \"Default\"}</TableCell>\r\n\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<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={statusChipLabel(mapping.isActive)}\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={statusChipSx(mapping.isActive)}\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</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx} align=\"center\">\r\n\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permissions={MANAGE_PERMISSIONS} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"row\" spacing={0.5} justifyContent=\"center\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Edit\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={iconBtnPrimarySx}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => onEditMapping(editingIntegration, mapping)}\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<EditIcon fontSize=\"small\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Delete\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={iconBtnDangerSx}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => onDeleteMapping(editingIntegration, mapping)}\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<DeleteIcon fontSize=\"small\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\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</TableCell>\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t{mappings.length === 0 && (\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={6} align=\"center\" sx={{ py: 3, color: \"#999\", fontSize: \"0.82rem\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\tNo form mappings configured\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t</TableContainer>\r\n\t\t\t\t</Box>\r\n\t\t\t)}\r\n\t\t</ModalShell>\r\n\t);\r\n});\r\n\r\n// ──── Form Mapping Dialog ────────────────────────────────────────────────────\r\n\r\ninterface MappingDialogProps {\r\n\topen: boolean;\r\n\tmode: \"add\" | \"edit\";\r\n\tformData: FormMappingCreatePayload;\r\n\tsetFormData: React.Dispatch<React.SetStateAction<FormMappingCreatePayload>>;\r\n\tfieldRows: FieldMappingItem[];\r\n\tsetFieldRows: React.Dispatch<React.SetStateAction<FieldMappingItem[]>>;\r\n\tavailableForms: AvailableForm[];\r\n\tcampaigns: Campaign[];\r\n\tsaving: boolean;\r\n\tonSave: () => void;\r\n\tonClose: () => void;\r\n}\r\n\r\nconst MappingDialog = memo(function MappingDialog({\r\n\topen,\r\n\tmode,\r\n\tformData,\r\n\tsetFormData,\r\n\tfieldRows,\r\n\tsetFieldRows,\r\n\tavailableForms,\r\n\tcampaigns,\r\n\tsaving,\r\n\tonSave,\r\n\tonClose,\r\n}: MappingDialogProps) {\r\n\tif (!open) return null;\r\n\r\n\tconst move = (idx: number, delta: number) =>\r\n\t\tsetFieldRows((prev) => {\r\n\t\t\tconst next = [...prev];\r\n\t\t\t[next[idx], next[idx + delta]] = [next[idx + delta], next[idx]];\r\n\t\t\treturn next;\r\n\t\t});\r\n\r\n\treturn (\r\n\t\t<ModalShell\r\n\t\t\ttitle={mode === \"add\" ? \"Add Form Mapping\" : \"Edit Form Mapping\"}\r\n\t\t\twidth={{ xs: \"95vw\", sm: 560 }}\r\n\t\t\tzIndex={1400}\r\n\t\t\tonClose={onClose}\r\n\t\t\tfooter={\r\n\t\t\t\t<>\r\n\t\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>\r\n\t\t\t\t\t\tCancel\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\tonClick={onSave}\r\n\t\t\t\t\t\tdisabled={saving}\r\n\t\t\t\t\t\tstartIcon={saving ? <CircularProgress size={14} color=\"inherit\" /> : undefined}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{mode === \"add\" ? \"Create\" : \"Save\"}\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t</>\r\n\t\t\t}\r\n\t\t>\r\n\t\t\t<Box sx={{ p: 2.5 }}>\r\n\t\t\t\t{/* Source Form Name — picked from the platform's discovered forms */}\r\n\t\t\t\t<Box sx={{ mb: 2 }}>\r\n\t\t\t\t\t<Typography sx={labelSx}>\r\n\t\t\t\t\t\tSource Form Name <Required />\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t<FormControl fullWidth size=\"small\">\r\n\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\tvalue={formData.sourceFormId || \"\"}\r\n\t\t\t\t\t\t\tdisplayEmpty\r\n\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\tMenuProps={{ sx: { zIndex: SELECT_MENU_Z_INDEX } }}\r\n\t\t\t\t\t\t\tdisabled={mode === \"edit\"}\r\n\t\t\t\t\t\t\trenderValue={(selected) =>\r\n\t\t\t\t\t\t\t\t!selected ? (\r\n\t\t\t\t\t\t\t\t\t<span style={{ color: \"#9e9e9e\" }}>Select Form</span>\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\tavailableForms.find((form) => form.id === selected)?.name || formData.sourceFormName || \"\"\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\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tconst selectedForm = availableForms.find((form) => form.id === e.target.value);\r\n\t\t\t\t\t\t\t\tif (!selectedForm) return;\r\n\t\t\t\t\t\t\t\tsetFormData((prev) => ({\r\n\t\t\t\t\t\t\t\t\t...prev,\r\n\t\t\t\t\t\t\t\t\tsourceFormId: selectedForm.id,\r\n\t\t\t\t\t\t\t\t\tsourceFormName: selectedForm.name,\r\n\t\t\t\t\t\t\t\t}));\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<MenuItem value=\"\" disabled>\r\n\t\t\t\t\t\t\t\tSelect Form\r\n\t\t\t\t\t\t\t</MenuItem>\r\n\t\t\t\t\t\t\t{availableForms.map((form) => (\r\n\t\t\t\t\t\t\t\t<MenuItem key={form.id} value={form.id}>\r\n\t\t\t\t\t\t\t\t\t{form.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\t</Select>\r\n\t\t\t\t\t</FormControl>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t<Box sx={{ mb: 2 }}>\r\n\t\t\t\t\t<Typography sx={labelSx}>\r\n\t\t\t\t\t\tSource Form ID <Required />\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\tplaceholder=\"e.g. a Facebook form ID, or a booking type like DIAGNOSTIC_TEST\"\r\n\t\t\t\t\t\tvalue={formData.sourceFormId || \"\"}\r\n\t\t\t\t\t\tonChange={(e) => setFormData((prev) => ({ ...prev, sourceFormId: e.target.value }))}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t<Box sx={{ mb: 2 }}>\r\n\t\t\t\t\t<Typography sx={labelSx}>\r\n\t\t\t\t\t\tTarget Campaign <Required />\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t<FormControl fullWidth size=\"small\">\r\n\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\tvalue={formData.campaignId || \"\"}\r\n\t\t\t\t\t\t\tdisplayEmpty\r\n\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\tMenuProps={{ sx: { zIndex: SELECT_MENU_Z_INDEX } }}\r\n\t\t\t\t\t\t\trenderValue={(selected) =>\r\n\t\t\t\t\t\t\t\t!selected ? (\r\n\t\t\t\t\t\t\t\t\t<span style={{ color: \"#9e9e9e\" }}>Select Campaign</span>\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\tcampaigns.find((c) => c.id === selected)?.name || String(selected)\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\tonChange={(e) => setFormData((prev) => ({ ...prev, campaignId: Number(e.target.value) }))}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{campaigns.map((c) => (\r\n\t\t\t\t\t\t\t\t<MenuItem key={c.id} value={c.id}>\r\n\t\t\t\t\t\t\t\t\t{c.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\t</Select>\r\n\t\t\t\t\t</FormControl>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t<Box sx={{ mb: 2 }}>\r\n\t\t\t\t\t<Typography sx={labelSx}>Priority Override (1-10)</Typography>\r\n\t\t\t\t\t<TextField\r\n\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\tvalue={formData.priorityOverride ?? \"\"}\r\n\t\t\t\t\t\tonChange={(e) =>\r\n\t\t\t\t\t\t\tsetFormData((prev) => ({\r\n\t\t\t\t\t\t\t\t...prev,\r\n\t\t\t\t\t\t\t\tpriorityOverride: e.target.value ? Number(e.target.value) : undefined,\r\n\t\t\t\t\t\t\t}))\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tinputProps={{ min: 1, max: 10 }}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t<Box sx={{ mb: 2 }}>\r\n\t\t\t\t\t<Typography sx={labelSx}>Display Fields (which custom_data fields show in the leads UI)</Typography>\r\n\t\t\t\t\t{fieldRows.length === 0 && (\r\n\t\t\t\t\t\t<Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 1, fontSize: \"0.8rem\" }}>\r\n\t\t\t\t\t\t\tNo display fields configured — leads for this form won't show extra details in the UI.\r\n\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{fieldRows.map((row, idx) => (\r\n\t\t\t\t\t\t<Box key={idx} sx={{ display: \"flex\", gap: 1, mb: 1, alignItems: \"center\" }}>\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", flexDirection: \"column\" }}>\r\n\t\t\t\t\t\t\t\t<IconButton size=\"small\" disabled={idx === 0} onClick={() => move(idx, -1)} sx={{ p: 0.25 }}>\r\n\t\t\t\t\t\t\t\t\t<ArrowUpwardIcon fontSize=\"inherit\" />\r\n\t\t\t\t\t\t\t\t</IconButton>\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\tdisabled={idx === fieldRows.length - 1}\r\n\t\t\t\t\t\t\t\t\tonClick={() => move(idx, 1)}\r\n\t\t\t\t\t\t\t\t\tsx={{ p: 0.25 }}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<ArrowDownwardIcon fontSize=\"inherit\" />\r\n\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t<TextField\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\t\tplaceholder=\"Field path, e.g. hospital.hospitalName\"\r\n\t\t\t\t\t\t\t\tvalue={row.key}\r\n\t\t\t\t\t\t\t\tonChange={(e) =>\r\n\t\t\t\t\t\t\t\t\tsetFieldRows((prev) => prev.map((r, i) => (i === idx ? { ...r, key: e.target.value } : r)))\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<TextField\r\n\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tsx={inputSx}\r\n\t\t\t\t\t\t\t\tplaceholder=\"Display label, e.g. Hospital\"\r\n\t\t\t\t\t\t\t\tvalue={row.label}\r\n\t\t\t\t\t\t\t\tonChange={(e) =>\r\n\t\t\t\t\t\t\t\t\tsetFieldRows((prev) => prev.map((r, i) => (i === idx ? { ...r, label: e.target.value } : r)))\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<IconButton size=\"small\" sx={iconBtnDangerSx} onClick={() => setFieldRows((prev) => prev.filter((_, i) => i !== idx))}>\r\n\t\t\t\t\t\t\t\t<DeleteIcon fontSize=\"small\" />\r\n\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t))}\r\n\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tstartIcon={<AddIcon sx={{ fontSize: \"1rem !important\" }} />}\r\n\t\t\t\t\t\tonClick={() => setFieldRows((prev) => [...prev, { key: \"\", label: \"\" }])}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\tAdd Field\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t</Box>\r\n\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t<Typography sx={{ ...labelSx, mb: 0 }}>Active</Typography>\r\n\t\t\t\t\t<Switch\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tchecked={!!formData.isActive}\r\n\t\t\t\t\t\tonChange={(e) => setFormData((prev) => ({ ...prev, isActive: e.target.checked }))}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t</ModalShell>\r\n\t);\r\n});\r\n\r\n// ──── Webhook Logs Dialog ────────────────────────────────────────────────────\r\n\r\nfunction LogsDialog({\r\n\topen,\r\n\tintegrationName,\r\n\tlogs,\r\n\tloading,\r\n\tonClose,\r\n}: {\r\n\topen: boolean;\r\n\tintegrationName: string;\r\n\tlogs: WebhookLog[];\r\n\tloading: boolean;\r\n\tonClose: () => void;\r\n}) {\r\n\tif (!open) return null;\r\n\treturn (\r\n\t\t<ModalShell\r\n\t\t\ttitle={`Webhook Logs — ${integrationName}`}\r\n\t\t\twidth={{ xs: \"95vw\", md: 960 }}\r\n\t\t\tzIndex={1400}\r\n\t\t\tonClose={onClose}\r\n\t\t\tfooter={\r\n\t\t\t\t<SDKButton variant=\"cancel\" onClick={onClose}>\r\n\t\t\t\t\tClose\r\n\t\t\t\t</SDKButton>\r\n\t\t\t}\r\n\t\t>\r\n\t\t\t<Box sx={{ p: 2.5 }}>\r\n\t\t\t\t{loading ? (\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", justifyContent: \"center\", py: 4 }}>\r\n\t\t\t\t\t\t<CircularProgress size={24} />\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<TableContainer component={Paper} variant=\"outlined\">\r\n\t\t\t\t\t\t<Table size=\"small\">\r\n\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t{[\"Time\", \"Method\", \"Status\", \"Leads Created\", \"Error\"].map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t<TableCell key={col} sx={headCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t{col}\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t{logs.map((log) => (\r\n\t\t\t\t\t\t\t\t\t<TableRow key={log.id} sx={tableRowSx}>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{new Date(log.createdAt).toLocaleString()}</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{log.requestMethod}</TableCell>\r\n\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<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={log.isSuccess ? \"Success\" : \"Failed\"}\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\tcolor={log.isSuccess ? \"success\" : \"error\"}\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>{log.leadsCreated}</TableCell>\r\n\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<Tooltip title={log.errorMessage || \"\"}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"body2\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"error\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ maxWidth: 300, overflow: \"hidden\", textOverflow: \"ellipsis\", fontSize: \"0.8rem\" }}\r\n\t\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\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{log.errorMessage || \"\"}\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</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t{logs.length === 0 && (\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={5} align=\"center\" sx={{ py: 3, color: \"#999\", fontSize: \"0.82rem\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\tNo webhook logs found\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t</TableContainer>\r\n\t\t\t\t)}\r\n\t\t\t</Box>\r\n\t\t</ModalShell>\r\n\t);\r\n}\r\n\r\n// ──── Confirm Dialog ─────────────────────────────────────────────────────────\r\n\r\nfunction ConfirmDialog({\r\n\topen,\r\n\ttitle,\r\n\tmessage,\r\n\tloading,\r\n\tonConfirm,\r\n\tonClose,\r\n}: {\r\n\topen: boolean;\r\n\ttitle: string;\r\n\tmessage: React.ReactNode;\r\n\tloading?: boolean;\r\n\tonConfirm: () => void;\r\n\tonClose: () => void;\r\n}) {\r\n\tif (!open) return null;\r\n\treturn (\r\n\t\t<Box\r\n\t\t\tsx={{\r\n\t\t\t\tposition: \"fixed\",\r\n\t\t\t\tinset: 0,\r\n\t\t\t\tzIndex: 1500,\r\n\t\t\t\tbackgroundColor: \"rgba(0,0,0,0.45)\",\r\n\t\t\t\tdisplay: \"flex\",\r\n\t\t\t\talignItems: \"center\",\r\n\t\t\t\tjustifyContent: \"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={{ width: { xs: \"90vw\", sm: 420 }, borderRadius: \"16px\", overflow: \"hidden\", boxShadow: \"0 8px 32px rgba(0,0,0,0.18)\" }}\r\n\t\t\t>\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\">\r\n\t\t\t\t\t\t{title}\r\n\t\t\t\t\t</Typography>\r\n\t\t\t\t\t<IconButton size=\"small\" onClick={onClose}>\r\n\t\t\t\t\t\t✕\r\n\t\t\t\t\t</IconButton>\r\n\t\t\t\t</Box>\r\n\t\t\t\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\">\r\n\t\t\t\t\t\t{message}\r\n\t\t\t\t\t</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}>\r\n\t\t\t\t\t\tCancel\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\tvariant=\"danger\"\r\n\t\t\t\t\t\tonClick={onConfirm}\r\n\t\t\t\t\t\tdisabled={loading}\r\n\t\t\t\t\t\tstartIcon={loading ? <CircularProgress size={14} color=\"inherit\" /> : undefined}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\tConfirm\r\n\t\t\t\t\t</SDKButton>\r\n\t\t\t\t</Box>\r\n\t\t\t</Paper>\r\n\t\t</Box>\r\n\t);\r\n}\r\n\r\n// ──── Main content (needs SDKProvider above it for useToast) ──────────────────\r\n\r\nconst LeadIntegrationsContent = memo(() => {\r\n\tconst { showToast } = useToast();\r\n\tconst {\r\n\t\tintegrations,\r\n\t\tloading,\r\n\t\tfetchIntegrations,\r\n\t\tcreateIntegration,\r\n\t\tupdateIntegration,\r\n\t\tdeleteIntegration,\r\n\t\tregenerateWebhookToken,\r\n\t\tgetAvailableForms,\r\n\t\tcreateFormMapping,\r\n\t\tupdateFormMapping,\r\n\t\tdeleteFormMapping,\r\n\t\tgetWebhookLogs,\r\n\t} = useLeadIntegrations();\r\n\tconst { campaigns, fetchCampaigns } = useCampaigns();\r\n\r\n\t// Filters + pagination (client-side — the list endpoint returns everything).\r\n\tconst [search, setSearch] = useState(\"\");\r\n\tconst [sourceFilter, setSourceFilter] = useState<string>(\"all\");\r\n\tconst [page, setPage] = useState(0);\r\n\tconst [rowsPerPage, setRowsPerPage] = useState(10);\r\n\r\n\t// Integration dialog\r\n\tconst [dialogOpen, setDialogOpen] = useState(false);\r\n\tconst [dialogMode, setDialogMode] = useState<\"add\" | \"edit\">(\"add\");\r\n\tconst [editingId, setEditingId] = useState<number | null>(null);\r\n\tconst [formData, setFormData] = useState<IntegrationCreatePayload>(defaultIntegrationForm);\r\n\tconst [saving, setSaving] = useState(false);\r\n\r\n\t// Form-mapping dialog\r\n\tconst [mappingDialogOpen, setMappingDialogOpen] = useState(false);\r\n\tconst [mappingMode, setMappingMode] = useState<\"add\" | \"edit\">(\"add\");\r\n\tconst [editingMappingId, setEditingMappingId] = useState<number | null>(null);\r\n\tconst [mappingFormData, setMappingFormData] = useState<FormMappingCreatePayload>(defaultMappingForm);\r\n\tconst [fieldRows, setFieldRows] = useState<FieldMappingItem[]>([]);\r\n\tconst [availableForms, setAvailableForms] = useState<AvailableForm[]>([]);\r\n\tconst [selectedIntegration, setSelectedIntegration] = useState<LeadIntegration | null>(null);\r\n\tconst [savingMapping, setSavingMapping] = useState(false);\r\n\r\n\t// Logs dialog\r\n\tconst [logsDialogOpen, setLogsDialogOpen] = useState(false);\r\n\tconst [webhookLogs, setWebhookLogs] = useState<WebhookLog[]>([]);\r\n\tconst [logsLoading, setLogsLoading] = useState(false);\r\n\r\n\t// Confirmations\r\n\tconst [deleteTarget, setDeleteTarget] = useState<LeadIntegration | null>(null);\r\n\tconst [mappingDeleteTarget, setMappingDeleteTarget] = useState<{ integration: LeadIntegration; mapping: FormMapping } | null>(null);\r\n\tconst [regenerateTarget, setRegenerateTarget] = useState<LeadIntegration | null>(null);\r\n\tconst [confirmBusy, setConfirmBusy] = useState(false);\r\n\r\n\tconst refresh = useCallback(async () => {\r\n\t\ttry {\r\n\t\t\tawait fetchIntegrations();\r\n\t\t} catch (error: any) {\r\n\t\t\tshowToast(errMsg(error, \"Failed to fetch integrations\"), \"error\");\r\n\t\t}\r\n\t}, [fetchIntegrations, showToast]);\r\n\r\n\tuseEffect(() => {\r\n\t\trefresh();\r\n\t}, [refresh]);\r\n\r\n\tconst filtered = useMemo(() => {\r\n\t\tconst q = search.trim().toLowerCase();\r\n\t\treturn integrations.filter(\r\n\t\t\t(i) =>\r\n\t\t\t\t(!q || i.name?.toLowerCase().includes(q)) &&\r\n\t\t\t\t(sourceFilter === \"all\" || i.sourceType === sourceFilter),\r\n\t\t);\r\n\t}, [integrations, search, sourceFilter]);\r\n\r\n\tconst paginated = useMemo(\r\n\t\t() => filtered.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage),\r\n\t\t[filtered, page, rowsPerPage],\r\n\t);\r\n\r\n\t// The dialog reads mappings off the live list so a mapping save reflects immediately.\r\n\tconst editingIntegration = editingId != null ? integrations.find((i) => i.id === editingId) ?? null : null;\r\n\r\n\t// ── Integration CRUD ───────────────────────────────────────────────────────\r\n\r\n\tconst openDialog = (mode: \"add\" | \"edit\", integration?: LeadIntegration) => {\r\n\t\tsetDialogMode(mode);\r\n\t\tif (mode === \"edit\" && integration) {\r\n\t\t\tsetEditingId(integration.id);\r\n\t\t\tsetFormData({\r\n\t\t\t\tname: integration.name,\r\n\t\t\t\tsourceType: integration.sourceType,\r\n\t\t\t\tisActive: integration.isActive,\r\n\t\t\t\tappId: integration.appId || \"\",\r\n\t\t\t\tapiVersion: integration.apiVersion,\r\n\t\t\t\tdefaultCampaignId: integration.defaultCampaignId,\r\n\t\t\t\tpageId: integration.pageId || \"\",\r\n\t\t\t\tfieldMappings: integration.fieldMappings,\r\n\t\t\t\tsettings: integration.settings,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tsetEditingId(null);\r\n\t\t\tsetFormData(defaultIntegrationForm);\r\n\t\t}\r\n\t\tsetDialogOpen(true);\r\n\t\tfetchCampaigns();\r\n\t};\r\n\r\n\tconst handleSaveIntegration = async () => {\r\n\t\tif (!formData.name.trim()) {\r\n\t\t\tshowToast(\"Integration name is required\", \"warning\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetSaving(true);\r\n\t\ttry {\r\n\t\t\tif (dialogMode === \"add\") {\r\n\t\t\t\tawait createIntegration(formData);\r\n\t\t\t\tshowToast(\"Integration created successfully\", \"success\");\r\n\t\t\t} else if (editingId) {\r\n\t\t\t\tawait updateIntegration(editingId, formData as IntegrationUpdatePayload);\r\n\t\t\t\tshowToast(\"Integration updated successfully\", \"success\");\r\n\t\t\t}\r\n\t\t\tsetDialogOpen(false);\r\n\t\t\tawait refresh();\r\n\t\t} catch (error: any) {\r\n\t\t\tshowToast(errMsg(error, \"Failed to save integration\"), \"error\");\r\n\t\t} finally {\r\n\t\t\tsetSaving(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleDeleteIntegration = async () => {\r\n\t\tif (!deleteTarget) return;\r\n\t\tsetConfirmBusy(true);\r\n\t\ttry {\r\n\t\t\tawait deleteIntegration(deleteTarget.id);\r\n\t\t\tshowToast(\"Integration deleted successfully\", \"success\");\r\n\t\t\tsetDeleteTarget(null);\r\n\t\t\tawait refresh();\r\n\t\t} catch (error: any) {\r\n\t\t\tshowToast(errMsg(error, \"Failed to delete integration\"), \"error\");\r\n\t\t} finally {\r\n\t\t\tsetConfirmBusy(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleRegenerateToken = async () => {\r\n\t\tif (!regenerateTarget) return;\r\n\t\tsetConfirmBusy(true);\r\n\t\ttry {\r\n\t\t\tawait regenerateWebhookToken(regenerateTarget.id);\r\n\t\t\tshowToast(\"Webhook token regenerated\", \"success\");\r\n\t\t\tsetRegenerateTarget(null);\r\n\t\t\tawait refresh();\r\n\t\t} catch (error: any) {\r\n\t\t\tshowToast(errMsg(error, \"Failed to regenerate token\"), \"error\");\r\n\t\t} finally {\r\n\t\t\tsetConfirmBusy(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleCopyWebhookUrl = (url: string) => {\r\n\t\tnavigator.clipboard?.writeText(url);\r\n\t\tshowToast(\"Webhook URL copied to clipboard\", \"info\");\r\n\t};\r\n\r\n\t// ── Form mappings ──────────────────────────────────────────────────────────\r\n\r\n\tconst openMappingDialog = async (integration: LeadIntegration, mode: \"add\" | \"edit\", mapping?: FormMapping) => {\r\n\t\tsetSelectedIntegration(integration);\r\n\t\tsetMappingMode(mode);\r\n\t\tif (mode === \"edit\" && mapping) {\r\n\t\t\tsetEditingMappingId(mapping.id);\r\n\t\t\tsetMappingFormData({\r\n\t\t\t\tsourceFormId: mapping.sourceFormId,\r\n\t\t\t\tsourceFormName: mapping.sourceFormName || \"\",\r\n\t\t\t\tsourcePageId: mapping.sourcePageId || \"\",\r\n\t\t\t\tcampaignId: mapping.campaignId,\r\n\t\t\t\tpriorityOverride: mapping.priorityOverride || undefined,\r\n\t\t\t\tisActive: mapping.isActive,\r\n\t\t\t});\r\n\t\t\tsetFieldRows(mapping.fieldMappings || []);\r\n\t\t} else {\r\n\t\t\tsetEditingMappingId(null);\r\n\t\t\tsetMappingFormData(defaultMappingForm);\r\n\t\t\tsetFieldRows([]);\r\n\t\t}\r\n\t\tfetchCampaigns();\r\n\t\tsetAvailableForms([]);\r\n\t\tsetMappingDialogOpen(true);\r\n\t\ttry {\r\n\t\t\tsetAvailableForms(await getAvailableForms(integration.id));\r\n\t\t} catch (error: any) {\r\n\t\t\tshowToast(errMsg(error, \"Failed to fetch available forms\"), \"error\");\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleSaveMapping = async () => {\r\n\t\tif (!selectedIntegration || !mappingFormData.sourceFormId || !mappingFormData.campaignId) {\r\n\t\t\tshowToast(\"Form ID and Campaign are required\", \"warning\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst payload = {\r\n\t\t\t...mappingFormData,\r\n\t\t\tfieldMappings: fieldRows\r\n\t\t\t\t.filter((row) => row.key.trim())\r\n\t\t\t\t.map((row) => ({ key: row.key.trim(), label: row.label.trim() })),\r\n\t\t};\r\n\t\tsetSavingMapping(true);\r\n\t\ttry {\r\n\t\t\tif (mappingMode === \"add\") {\r\n\t\t\t\tawait createFormMapping(selectedIntegration.id, payload);\r\n\t\t\t\tshowToast(\"Form mapping created\", \"success\");\r\n\t\t\t} else if (editingMappingId) {\r\n\t\t\t\tawait updateFormMapping(selectedIntegration.id, editingMappingId, payload);\r\n\t\t\t\tshowToast(\"Form mapping updated\", \"success\");\r\n\t\t\t}\r\n\t\t\tsetMappingDialogOpen(false);\r\n\t\t\tawait refresh();\r\n\t\t} catch (error: any) {\r\n\t\t\tshowToast(errMsg(error, \"Failed to save mapping\"), \"error\");\r\n\t\t} finally {\r\n\t\t\tsetSavingMapping(false);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleDeleteMapping = async () => {\r\n\t\tif (!mappingDeleteTarget) return;\r\n\t\tsetConfirmBusy(true);\r\n\t\ttry {\r\n\t\t\tawait deleteFormMapping(mappingDeleteTarget.integration.id, mappingDeleteTarget.mapping.id);\r\n\t\t\tshowToast(\"Form mapping deleted\", \"success\");\r\n\t\t\tsetMappingDeleteTarget(null);\r\n\t\t\tawait refresh();\r\n\t\t} catch (error: any) {\r\n\t\t\tshowToast(errMsg(error, \"Failed to delete mapping\"), \"error\");\r\n\t\t} finally {\r\n\t\t\tsetConfirmBusy(false);\r\n\t\t}\r\n\t};\r\n\r\n\t// ── Logs ───────────────────────────────────────────────────────────────────\r\n\r\n\tconst openLogs = async (integration: LeadIntegration) => {\r\n\t\tsetSelectedIntegration(integration);\r\n\t\tsetWebhookLogs([]);\r\n\t\tsetLogsLoading(true);\r\n\t\tsetLogsDialogOpen(true);\r\n\t\ttry {\r\n\t\t\tsetWebhookLogs(await getWebhookLogs(integration.id));\r\n\t\t} catch (error: any) {\r\n\t\t\tshowToast(errMsg(error, \"Failed to fetch logs\"), \"error\");\r\n\t\t} finally {\r\n\t\t\tsetLogsLoading(false);\r\n\t\t}\r\n\t};\r\n\r\n\t// ── Render ─────────────────────────────────────────────────────────────────\r\n\r\n\treturn (\r\n\t\t<Box>\r\n\t\t\t<SDKPageHeader\r\n\t\t\t\ttitle=\"Lead Integrations\"\r\n\t\t\t\tcount={filtered.length}\r\n\t\t\t\tcountLabel=\"integrations\"\r\n\t\t\t\tactions={\r\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" spacing={1}>\r\n\t\t\t\t\t\t<SDKButton\r\n\t\t\t\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\tstartIcon={\r\n\t\t\t\t\t\t\t\tloading ? <CircularProgress size={14} color=\"inherit\" /> : <RefreshIcon sx={{ fontSize: \"0.95rem !important\" }} />\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tonClick={refresh}\r\n\t\t\t\t\t\t\tdisabled={loading}\r\n\t\t\t\t\t\t\tsx={{ height: 36 }}\r\n\t\t\t\t\t\t>\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={[SDK_PERMISSIONS.LEAD_INTEGRATIONS_CREATE, SDK_PERMISSIONS.LEAD_INTEGRATIONS_MANAGE]}\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\r\n\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\tstartIcon={<AddIcon sx={{ fontSize: \"1rem !important\" }} />}\r\n\t\t\t\t\t\t\t\tonClick={() => openDialog(\"add\")}\r\n\t\t\t\t\t\t\t\tsx={{ height: 36 }}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tAdd Integration\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</Stack>\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\r\n\t\t\t<Box py={1.5} px={2}>\r\n\t\t\t\t{/* FILTER BAR */}\r\n\t\t\t\t<Stack direction=\"row\" spacing={2} alignItems=\"center\" mb={2} flexWrap=\"wrap\" useFlexGap>\r\n\t\t\t\t\t<SearchBar\r\n\t\t\t\t\t\tvalue={search}\r\n\t\t\t\t\t\tonChange={(v) => {\r\n\t\t\t\t\t\t\tsetSearch(v);\r\n\t\t\t\t\t\t\tsetPage(0);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tplaceholder=\"Search integrations...\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<FormControl size=\"small\" sx={{ minWidth: 190 }}>\r\n\t\t\t\t\t\t<Select\r\n\t\t\t\t\t\t\tvalue={sourceFilter}\r\n\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\tsetSourceFilter(e.target.value);\r\n\t\t\t\t\t\t\t\tsetPage(0);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tsx={{ height: 36, fontSize: \"0.85rem\", borderRadius: \"8px\" }}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<MenuItem value=\"all\">All Sources</MenuItem>\r\n\t\t\t\t\t\t\t{SOURCE_TYPE_OPTIONS.map((opt) => (\r\n\t\t\t\t\t\t\t\t<MenuItem key={opt.value} value={opt.value}>\r\n\t\t\t\t\t\t\t\t\t{opt.icon} {opt.label}\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\t</Select>\r\n\t\t\t\t\t</FormControl>\r\n\t\t\t\t</Stack>\r\n\r\n\t\t\t\t{/* TABLE */}\r\n\t\t\t\t<TableContainer component={Paper} variant=\"outlined\" sx={{ display: \"flex\", flexDirection: \"column\" }}>\r\n\t\t\t\t\t<Box sx={{ overflowY: \"auto\", maxHeight: 600 }}>\r\n\t\t\t\t\t\t<Table stickyHeader size=\"small\">\r\n\t\t\t\t\t\t\t<TableHead>\r\n\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t{INTEGRATION_COLS.map((col) => (\r\n\t\t\t\t\t\t\t\t\t\t<TableCell key={col} align={CENTER_COLS.has(col) ? \"center\" : \"left\"} sx={headCellSx}>\r\n\t\t\t\t\t\t\t\t\t\t\t{col}\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t</TableHead>\r\n\t\t\t\t\t\t\t<TableBody>\r\n\t\t\t\t\t\t\t\t{loading ? (\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={INTEGRATION_COLS.length} align=\"center\" sx={{ py: 4 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<CircularProgress size={24} />\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t) : paginated.length === 0 ? (\r\n\t\t\t\t\t\t\t\t\t<TableRow>\r\n\t\t\t\t\t\t\t\t\t\t<TableCell\r\n\t\t\t\t\t\t\t\t\t\t\tcolSpan={INTEGRATION_COLS.length}\r\n\t\t\t\t\t\t\t\t\t\t\talign=\"center\"\r\n\t\t\t\t\t\t\t\t\t\t\tsx={{ py: 4, color: \"#999\", 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\t\tNo integrations found\r\n\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\tpaginated.map((integration) => (\r\n\t\t\t\t\t\t\t\t\t\t<TableRow key={integration.id} sx={tableRowSx}>\r\n\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<Typography fontWeight={600} fontSize=\"0.82rem\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{integration.name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\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<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={`${getSourceTypeIcon(integration.sourceType)} ${getSourceTypeLabel(integration.sourceType)}`}\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\tvariant=\"outlined\"\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</TableCell>\r\n\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<Chip\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={statusChipLabel(integration.isActive)}\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\tsx={statusChipSx(integration.isActive)}\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</TableCell>\r\n\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<TokenStatusChip integration={integration} />\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\r\n\t\t\t\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\t\t\t\t<Tooltip title={integration.webhookUrl || \"\"}>\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\tnoWrap\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={{ fontSize: \"0.8rem\", maxWidth: 200, overflow: \"hidden\", textOverflow: \"ellipsis\" }}\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{integration.webhookUrl}\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</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Copy URL\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton size=\"small\" onClick={() => handleCopyWebhookUrl(integration.webhookUrl)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ContentCopyIcon fontSize=\"small\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\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</TableCell>\r\n\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<Typography fontSize=\"0.82rem\">{integration.totalLeadsReceived}</Typography>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{integration.lastLeadAt && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tLast: {new Date(integration.lastLeadAt).toLocaleDateString()}\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)}\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx}>\r\n\t\t\t\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\t\t\t\t<Chip label={`${integration.formMappings?.length || 0} mappings`} size=\"small\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permissions={MANAGE_PERMISSIONS} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Add Mapping\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton size=\"small\" onClick={() => openMappingDialog(integration, \"add\")}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<AddIcon fontSize=\"small\" />\r\n\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</Tooltip>\r\n\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</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t\t<TableCell sx={bodyCellSx} align=\"center\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"row\" spacing={0.5} justifyContent=\"center\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permissions={MANAGE_PERMISSIONS} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Edit\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton size=\"small\" sx={iconBtnPrimarySx} onClick={() => openDialog(\"edit\", integration)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<EditIcon fontSize=\"small\" />\r\n\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</Tooltip>\r\n\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<Tooltip title=\"View Logs\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton size=\"small\" onClick={() => openLogs(integration)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<HistoryIcon fontSize=\"small\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permissions={MANAGE_PERMISSIONS} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Regenerate Token\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton size=\"small\" onClick={() => setRegenerateTarget(integration)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<RefreshIcon fontSize=\"small\" />\r\n\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</Tooltip>\r\n\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<SDKPermissionGuard\r\n\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\tSDK_PERMISSIONS.LEAD_INTEGRATIONS_DELETE,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSDK_PERMISSIONS.LEAD_INTEGRATIONS_MANAGE,\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\tshowFallback={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\t\t<Tooltip title=\"Delete\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconButton size=\"small\" sx={iconBtnDangerSx} onClick={() => setDeleteTarget(integration)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<DeleteIcon fontSize=\"small\" />\r\n\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</Tooltip>\r\n\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</Stack>\r\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\r\n\t\t\t\t\t\t\t\t\t\t</TableRow>\r\n\t\t\t\t\t\t\t\t\t))\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</TableBody>\r\n\t\t\t\t\t\t</Table>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<TablePagination\r\n\t\t\t\t\t\tcomponent=\"div\"\r\n\t\t\t\t\t\tcount={filtered.length}\r\n\t\t\t\t\t\tpage={page}\r\n\t\t\t\t\t\trowsPerPage={rowsPerPage}\r\n\t\t\t\t\t\tonPageChange={(_, p) => setPage(p)}\r\n\t\t\t\t\t\tonRowsPerPageChange={(e) => {\r\n\t\t\t\t\t\t\tsetRowsPerPage(parseInt(e.target.value, 10));\r\n\t\t\t\t\t\t\tsetPage(0);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\trowsPerPageOptions={[10, 15, 25, 50, 100]}\r\n\t\t\t\t\t\tsx={{ borderTop: \"1px solid #e0e0e0\" }}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</TableContainer>\r\n\t\t\t</Box>\r\n\r\n\t\t\t{/* ── Dialogs ── */}\r\n\t\t\t<IntegrationDialog\r\n\t\t\t\topen={dialogOpen}\r\n\t\t\t\tmode={dialogMode}\r\n\t\t\t\teditingIntegration={editingIntegration}\r\n\t\t\t\tformData={formData}\r\n\t\t\t\tsetFormData={setFormData}\r\n\t\t\t\tcampaigns={campaigns}\r\n\t\t\t\tsaving={saving}\r\n\t\t\t\tonSave={handleSaveIntegration}\r\n\t\t\t\tonClose={() => setDialogOpen(false)}\r\n\t\t\t\tonAddMapping={(integration) => openMappingDialog(integration, \"add\")}\r\n\t\t\t\tonEditMapping={(integration, mapping) => openMappingDialog(integration, \"edit\", mapping)}\r\n\t\t\t\tonDeleteMapping={(integration, mapping) => setMappingDeleteTarget({ integration, mapping })}\r\n\t\t\t/>\r\n\r\n\t\t\t<MappingDialog\r\n\t\t\t\topen={mappingDialogOpen}\r\n\t\t\t\tmode={mappingMode}\r\n\t\t\t\tformData={mappingFormData}\r\n\t\t\t\tsetFormData={setMappingFormData}\r\n\t\t\t\tfieldRows={fieldRows}\r\n\t\t\t\tsetFieldRows={setFieldRows}\r\n\t\t\t\tavailableForms={availableForms}\r\n\t\t\t\tcampaigns={campaigns}\r\n\t\t\t\tsaving={savingMapping}\r\n\t\t\t\tonSave={handleSaveMapping}\r\n\t\t\t\tonClose={() => setMappingDialogOpen(false)}\r\n\t\t\t/>\r\n\r\n\t\t\t<LogsDialog\r\n\t\t\t\topen={logsDialogOpen}\r\n\t\t\t\tintegrationName={selectedIntegration?.name || \"\"}\r\n\t\t\t\tlogs={webhookLogs}\r\n\t\t\t\tloading={logsLoading}\r\n\t\t\t\tonClose={() => setLogsDialogOpen(false)}\r\n\t\t\t/>\r\n\r\n\t\t\t<ConfirmDialog\r\n\t\t\t\topen={!!deleteTarget}\r\n\t\t\t\ttitle=\"Delete Integration\"\r\n\t\t\t\tmessage={`Delete \"${deleteTarget?.name}\"? This will also delete all its form mappings and webhook logs.`}\r\n\t\t\t\tloading={confirmBusy}\r\n\t\t\t\tonConfirm={handleDeleteIntegration}\r\n\t\t\t\tonClose={() => setDeleteTarget(null)}\r\n\t\t\t/>\r\n\r\n\t\t\t<ConfirmDialog\r\n\t\t\t\topen={!!mappingDeleteTarget}\r\n\t\t\t\ttitle=\"Delete Form Mapping\"\r\n\t\t\t\tmessage={`Delete the mapping for form \"${mappingDeleteTarget?.mapping.sourceFormName || mappingDeleteTarget?.mapping.sourceFormId}\"?`}\r\n\t\t\t\tloading={confirmBusy}\r\n\t\t\t\tonConfirm={handleDeleteMapping}\r\n\t\t\t\tonClose={() => setMappingDeleteTarget(null)}\r\n\t\t\t/>\r\n\r\n\t\t\t<ConfirmDialog\r\n\t\t\t\topen={!!regenerateTarget}\r\n\t\t\t\ttitle=\"Regenerate Webhook Token\"\r\n\t\t\t\tmessage={`Regenerate the webhook token for \"${regenerateTarget?.name}\"? The current webhook URL stops working immediately and must be updated at the source platform.`}\r\n\t\t\t\tloading={confirmBusy}\r\n\t\t\t\tonConfirm={handleRegenerateToken}\r\n\t\t\t\tonClose={() => setRegenerateTarget(null)}\r\n\t\t\t/>\r\n\t\t</Box>\r\n\t);\r\n});\r\n\r\nLeadIntegrationsContent.displayName = \"LeadIntegrationsContent\";\r\n\r\n// ──── Default Export — wraps with SDKProvider for toast context ───────────────\r\n\r\nconst LeadIntegrations: React.FC = () => (\r\n\t<SDKProvider>\r\n\t\t<LeadIntegrationsContent />\r\n\t</SDKProvider>\r\n);\r\n\r\nexport default LeadIntegrations;\r\n","import { useCallback, useState } from \"react\";\r\nimport axiosInstance, { deepFindArray } from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tAvailableForm,\r\n\tFormMapping,\r\n\tFormMappingCreatePayload,\r\n\tFormMappingUpdatePayload,\r\n\tIntegrationCreatePayload,\r\n\tIntegrationUpdatePayload,\r\n\tLeadIntegration,\r\n\tWebhookLog,\r\n} from \"./types\";\r\n\r\nexport function useLeadIntegrations() {\r\n\tconst [integrations, setIntegrations] = useState<LeadIntegration[]>([]);\r\n\tconst [loading, setLoading] = useState(false);\r\n\r\n\tconst fetchIntegrations = useCallback(async (sourceType?: string): Promise<void> => {\r\n\t\tsetLoading(true);\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get(END_POINT.LEAD_INTEGRATIONS, {\r\n\t\t\t\tparams: sourceType ? { sourceType } : undefined,\r\n\t\t\t});\r\n\t\t\t// Flat array in practice, but tolerate { data: [...] } / { records: [...] }.\r\n\t\t\tsetIntegrations(deepFindArray<LeadIntegration>(res.data, [\"integrations\", \"records\"]));\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst createIntegration = useCallback(async (data: IntegrationCreatePayload): Promise<LeadIntegration> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.LEAD_INTEGRATIONS, data);\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst updateIntegration = useCallback(async (id: number, data: IntegrationUpdatePayload): Promise<LeadIntegration> => {\r\n\t\tconst res = await axiosInstance.put(END_POINT.LEAD_INTEGRATION_BY_ID(id), data);\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\tconst deleteIntegration = useCallback(async (id: number): Promise<void> => {\r\n\t\tawait axiosInstance.delete(END_POINT.LEAD_INTEGRATION_BY_ID(id));\r\n\t}, []);\r\n\r\n\tconst regenerateWebhookToken = useCallback(async (id: number): Promise<{ webhookToken: string }> => {\r\n\t\tconst res = await axiosInstance.post(END_POINT.LEAD_INTEGRATION_REGENERATE_TOKEN(id));\r\n\t\treturn res.data;\r\n\t}, []);\r\n\r\n\t// ── Form mappings ───────────────────────────────────────────────────────────\r\n\r\n\tconst getAvailableForms = useCallback(async (integrationId: number): Promise<AvailableForm[]> => {\r\n\t\tconst res = await axiosInstance.get(END_POINT.LEAD_INTEGRATION_AVAILABLE_FORMS(integrationId));\r\n\t\treturn deepFindArray<AvailableForm>(res.data, [\"forms\"]);\r\n\t}, []);\r\n\r\n\tconst createFormMapping = useCallback(\r\n\t\tasync (integrationId: number, data: FormMappingCreatePayload): Promise<FormMapping> => {\r\n\t\t\tconst res = await axiosInstance.post(END_POINT.LEAD_INTEGRATION_FORM_MAPPINGS(integrationId), data);\r\n\t\t\treturn res.data;\r\n\t\t},\r\n\t\t[],\r\n\t);\r\n\r\n\tconst updateFormMapping = useCallback(\r\n\t\tasync (integrationId: number, mappingId: number, data: FormMappingUpdatePayload): Promise<FormMapping> => {\r\n\t\t\tconst res = await axiosInstance.put(\r\n\t\t\t\tEND_POINT.LEAD_INTEGRATION_FORM_MAPPING_BY_ID(integrationId, mappingId),\r\n\t\t\t\tdata,\r\n\t\t\t);\r\n\t\t\treturn res.data;\r\n\t\t},\r\n\t\t[],\r\n\t);\r\n\r\n\tconst deleteFormMapping = useCallback(async (integrationId: number, mappingId: number): Promise<void> => {\r\n\t\tawait axiosInstance.delete(END_POINT.LEAD_INTEGRATION_FORM_MAPPING_BY_ID(integrationId, mappingId));\r\n\t}, []);\r\n\r\n\t// ── Webhook logs ────────────────────────────────────────────────────────────\r\n\r\n\tconst getWebhookLogs = useCallback(\r\n\t\tasync (integrationId: number, skip = 0, limit = 50): Promise<WebhookLog[]> => {\r\n\t\t\tconst res = await axiosInstance.get(END_POINT.LEAD_INTEGRATION_LOGS(integrationId), {\r\n\t\t\t\tparams: { skip, limit },\r\n\t\t\t});\r\n\t\t\treturn deepFindArray<WebhookLog>(res.data, [\"logs\", \"records\"]);\r\n\t\t},\r\n\t\t[],\r\n\t);\r\n\r\n\treturn {\r\n\t\tintegrations,\r\n\t\tloading,\r\n\t\tfetchIntegrations,\r\n\t\tcreateIntegration,\r\n\t\tupdateIntegration,\r\n\t\tdeleteIntegration,\r\n\t\tregenerateWebhookToken,\r\n\t\tgetAvailableForms,\r\n\t\tcreateFormMapping,\r\n\t\tupdateFormMapping,\r\n\t\tdeleteFormMapping,\r\n\t\tgetWebhookLogs,\r\n\t};\r\n}\r\n","export type LeadSourceType =\r\n\t| \"facebook\"\r\n\t| \"instagram\"\r\n\t| \"google_ads\"\r\n\t| \"linkedin\"\r\n\t| \"indiamart\"\r\n\t| \"justdial\"\r\n\t| \"housing\"\r\n\t| \"webhook\"\r\n\t| \"website\";\r\n\r\n// Ordered list, not a dict -- Postgres JSONB doesn't preserve object key\r\n// order, and display order in the leads UI matters here.\r\nexport interface FieldMappingItem {\r\n\tkey: string;\r\n\tlabel: string;\r\n}\r\n\r\nexport interface FormMapping {\r\n\tid: number;\r\n\tintegrationId: number;\r\n\tsourceFormId: string;\r\n\tsourceFormName: string | null;\r\n\tsourcePageId: string | null;\r\n\tcampaignId: number;\r\n\tpriorityOverride: number | null;\r\n\tfieldMappings: FieldMappingItem[] | null;\r\n\tisActive: boolean;\r\n\tcreatedAt: string;\r\n\tupdatedAt: string;\r\n}\r\n\r\nexport interface LeadIntegration {\r\n\tid: number;\r\n\ttenantId: number;\r\n\tname: string;\r\n\tsourceType: LeadSourceType;\r\n\tisActive: boolean;\r\n\twebhookToken: string;\r\n\twebhookUrl: string;\r\n\tappId: string | null;\r\n\tapiVersion: string;\r\n\tdefaultCampaignId: number | null;\r\n\tpageId: string | null;\r\n\tfieldMappings: Record<string, string>;\r\n\tsettings: Record<string, any>;\r\n\ttotalLeadsReceived: number;\r\n\tlastLeadAt: string | null;\r\n\ttokenExpiresAt: string | null;\r\n\tdataAccessExpiresAt: string | null;\r\n\ttokenExpiryStatus: \"ok\" | \"expiring_soon\" | \"expired\" | \"unknown\";\r\n\tcreatedAt: string;\r\n\tupdatedAt: string;\r\n\tformMappings: FormMapping[];\r\n}\r\n\r\nexport interface WebhookLog {\r\n\tid: number;\r\n\tintegrationId: number | null;\r\n\tsourceType: string;\r\n\twebhookToken: string;\r\n\trequestMethod: string;\r\n\tisSuccess: boolean;\r\n\tleadsCreated: number;\r\n\terrorMessage: string | null;\r\n\tsourceLeadIds: string[];\r\n\tcreatedAt: string;\r\n}\r\n\r\nexport interface IntegrationCreatePayload {\r\n\tname: string;\r\n\tsourceType: LeadSourceType;\r\n\tisActive?: boolean;\r\n\tappId?: string;\r\n\tappSecret?: string;\r\n\taccessToken?: string;\r\n\tpageAccessToken?: string;\r\n\tverifyToken?: string;\r\n\tapiVersion?: string;\r\n\tdefaultCampaignId?: number | null;\r\n\tpageId?: string;\r\n\tfieldMappings?: Record<string, string>;\r\n\tsettings?: Record<string, any>;\r\n}\r\n\r\nexport interface IntegrationUpdatePayload {\r\n\tname?: string;\r\n\tisActive?: boolean;\r\n\tappId?: string;\r\n\tappSecret?: string;\r\n\taccessToken?: string;\r\n\tpageAccessToken?: string;\r\n\tverifyToken?: string;\r\n\tapiVersion?: string;\r\n\tdefaultCampaignId?: number | null;\r\n\tpageId?: string;\r\n\tfieldMappings?: Record<string, string>;\r\n\tsettings?: Record<string, any>;\r\n}\r\n\r\nexport interface FormMappingCreatePayload {\r\n\tsourceFormId: string;\r\n\tsourceFormName?: string;\r\n\tsourcePageId?: string;\r\n\tcampaignId: number;\r\n\tpriorityOverride?: number;\r\n\tfieldMappings?: FieldMappingItem[];\r\n\tisActive?: boolean;\r\n}\r\n\r\nexport interface FormMappingUpdatePayload {\r\n\tsourceFormName?: string;\r\n\tcampaignId?: number;\r\n\tpriorityOverride?: number;\r\n\tfieldMappings?: FieldMappingItem[];\r\n\tisActive?: boolean;\r\n}\r\n\r\nexport interface AvailableForm {\r\n\tid: string;\r\n\tname: string;\r\n\tstatus: string;\r\n\tleadsCount: number;\r\n}\r\n\r\n// ──── Source type metadata ───────────────────────────────────────────────────\r\n\r\nexport const SOURCE_TYPE_OPTIONS: { value: LeadSourceType; label: string; icon: string }[] = [\r\n\t{ value: \"facebook\", label: \"Facebook Lead Ads\", icon: \"📘\" },\r\n\t{ value: \"instagram\", label: \"Instagram Lead Ads\", icon: \"📸\" },\r\n\t{ value: \"google_ads\", label: \"Google Ads\", icon: \"🔍\" },\r\n\t{ value: \"linkedin\", label: \"LinkedIn\", icon: \"💼\" },\r\n\t{ value: \"indiamart\", label: \"IndiaMart\", icon: \"🏭\" },\r\n\t{ value: \"justdial\", label: \"JustDial\", icon: \"📞\" },\r\n\t{ value: \"housing\", label: \"Housing.com\", icon: \"🏠\" },\r\n\t{ value: \"webhook\", label: \"Custom Webhook\", icon: \"🔗\" },\r\n\t{ value: \"website\", label: \"Website\", icon: \"🏥\" },\r\n];\r\n\r\nexport const getSourceTypeLabel = (sourceType: LeadSourceType): string =>\r\n\tSOURCE_TYPE_OPTIONS.find((opt) => opt.value === sourceType)?.label || sourceType;\r\n\r\nexport const getSourceTypeIcon = (sourceType: LeadSourceType): string =>\r\n\tSOURCE_TYPE_OPTIONS.find((opt) => opt.value === sourceType)?.icon || \"📊\";\r\n\r\n// ──── Token expiry metadata ──────────────────────────────────────────────────\r\n\r\nexport const TOKEN_STATUS_META: Record<\r\n\tLeadIntegration[\"tokenExpiryStatus\"],\r\n\t{ label: string; color: \"success\" | \"warning\" | \"error\" | \"default\" } | null\r\n> = {\r\n\tok: { label: \"Token OK\", color: \"success\" },\r\n\texpiring_soon: { label: \"Expiring Soon\", color: \"warning\" },\r\n\texpired: { label: \"Expired\", color: \"error\" },\r\n\tunknown: null,\r\n};\r\n\r\n/** Whichever of tokenExpiresAt / dataAccessExpiresAt falls sooner — that's the deadline that actually matters. */\r\nexport function getEffectiveExpiry(\r\n\tintegration: Pick<LeadIntegration, \"tokenExpiresAt\" | \"dataAccessExpiresAt\">,\r\n): { date: Date; label: string } | null {\r\n\tconst candidates: { date: Date; label: string }[] = [];\r\n\tif (integration.tokenExpiresAt) {\r\n\t\tcandidates.push({ date: new Date(integration.tokenExpiresAt), label: \"Access token\" });\r\n\t}\r\n\tif (integration.dataAccessExpiresAt) {\r\n\t\tcandidates.push({ date: new Date(integration.dataAccessExpiresAt), label: \"Data access authorization\" });\r\n\t}\r\n\tif (!candidates.length) return null;\r\n\treturn candidates.reduce((soonest, c) => (c.date < soonest.date ? c : soonest));\r\n}\r\n\r\n/** What an admin needs to do, given which deadline is driving the alert. */\r\nexport function getRenewalInstructions(reasonLabel: string): string {\r\n\tif (reasonLabel === \"Data access authorization\") {\r\n\t\treturn \"Meta requires the Page admin to re-authorize this app before that date (Meta Business Suite → Settings → Integrations, or Graph API Explorer) to keep the leads_retrieval permission active. After re-authorizing, generate a fresh long-lived Page Access Token and paste it into the Page Access Token field below.\";\r\n\t}\r\n\treturn \"Generate a new long-lived Page Access Token from the Facebook App Dashboard (or via the Graph API token exchange) and paste it into the Page Access Token field below before the current one stops working.\";\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAgB,MAAM,eAAAA,cAAa,WAAW,SAAS,YAAAC,iBAAgB;AACvE;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,OAAO,aAAa;AACpB,OAAO,uBAAuB;AAC9B,OAAO,qBAAqB;AAC5B,OAAO,qBAAqB;AAC5B,OAAO,gBAAgB;AACvB,OAAO,cAAc;AACrB,OAAO,iBAAiB;AACxB,OAAO,iBAAiB;AACxB,OAAO,sBAAsB;;;AClC7B,SAAS,aAAa,gBAAgB;AAc/B,SAAS,sBAAsB;AACrC,QAAM,CAAC,cAAc,eAAe,IAAI,SAA4B,CAAC,CAAC;AACtE,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,QAAM,oBAAoB,YAAY,OAAO,eAAuC;AACnF,eAAW,IAAI;AACf,QAAI;AACH,YAAM,MAAM,MAAM,cAAc,IAAI,UAAU,mBAAmB;AAAA,QAChE,QAAQ,aAAa,EAAE,WAAW,IAAI;AAAA,MACvC,CAAC;AAED,sBAAgB,cAA+B,IAAI,MAAM,CAAC,gBAAgB,SAAS,CAAC,CAAC;AAAA,IACtF,UAAE;AACD,iBAAW,KAAK;AAAA,IACjB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAoB,YAAY,OAAO,SAA6D;AACzG,UAAM,MAAM,MAAM,cAAc,KAAK,UAAU,mBAAmB,IAAI;AACtE,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAoB,YAAY,OAAO,IAAY,SAA6D;AACrH,UAAM,MAAM,MAAM,cAAc,IAAI,UAAU,uBAAuB,EAAE,GAAG,IAAI;AAC9E,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAoB,YAAY,OAAO,OAA8B;AAC1E,UAAM,cAAc,OAAO,UAAU,uBAAuB,EAAE,CAAC;AAAA,EAChE,GAAG,CAAC,CAAC;AAEL,QAAM,yBAAyB,YAAY,OAAO,OAAkD;AACnG,UAAM,MAAM,MAAM,cAAc,KAAK,UAAU,kCAAkC,EAAE,CAAC;AACpF,WAAO,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AAIL,QAAM,oBAAoB,YAAY,OAAO,kBAAoD;AAChG,UAAM,MAAM,MAAM,cAAc,IAAI,UAAU,iCAAiC,aAAa,CAAC;AAC7F,WAAO,cAA6B,IAAI,MAAM,CAAC,OAAO,CAAC;AAAA,EACxD,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAoB;AAAA,IACzB,OAAO,eAAuB,SAAyD;AACtF,YAAM,MAAM,MAAM,cAAc,KAAK,UAAU,+BAA+B,aAAa,GAAG,IAAI;AAClG,aAAO,IAAI;AAAA,IACZ;AAAA,IACA,CAAC;AAAA,EACF;AAEA,QAAM,oBAAoB;AAAA,IACzB,OAAO,eAAuB,WAAmB,SAAyD;AACzG,YAAM,MAAM,MAAM,cAAc;AAAA,QAC/B,UAAU,oCAAoC,eAAe,SAAS;AAAA,QACtE;AAAA,MACD;AACA,aAAO,IAAI;AAAA,IACZ;AAAA,IACA,CAAC;AAAA,EACF;AAEA,QAAM,oBAAoB,YAAY,OAAO,eAAuB,cAAqC;AACxG,UAAM,cAAc,OAAO,UAAU,oCAAoC,eAAe,SAAS,CAAC;AAAA,EACnG,GAAG,CAAC,CAAC;AAIL,QAAM,iBAAiB;AAAA,IACtB,OAAO,eAAuB,OAAO,GAAG,QAAQ,OAA8B;AAC7E,YAAM,MAAM,MAAM,cAAc,IAAI,UAAU,sBAAsB,aAAa,GAAG;AAAA,QACnF,QAAQ,EAAE,MAAM,MAAM;AAAA,MACvB,CAAC;AACD,aAAO,cAA0B,IAAI,MAAM,CAAC,QAAQ,SAAS,CAAC;AAAA,IAC/D;AAAA,IACA,CAAC;AAAA,EACF;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;ACqBO,IAAM,sBAAgF;AAAA,EAC5F,EAAE,OAAO,YAAY,OAAO,qBAAqB,MAAM,YAAK;AAAA,EAC5D,EAAE,OAAO,aAAa,OAAO,sBAAsB,MAAM,YAAK;AAAA,EAC9D,EAAE,OAAO,cAAc,OAAO,cAAc,MAAM,YAAK;AAAA,EACvD,EAAE,OAAO,YAAY,OAAO,YAAY,MAAM,YAAK;AAAA,EACnD,EAAE,OAAO,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,EACrD,EAAE,OAAO,YAAY,OAAO,YAAY,MAAM,YAAK;AAAA,EACnD,EAAE,OAAO,WAAW,OAAO,eAAe,MAAM,YAAK;AAAA,EACrD,EAAE,OAAO,WAAW,OAAO,kBAAkB,MAAM,YAAK;AAAA,EACxD,EAAE,OAAO,WAAW,OAAO,WAAW,MAAM,YAAK;AAClD;AAEO,IAAM,qBAAqB,CAAC,eAAoC;AA3IvE;AA4IC,oCAAoB,KAAK,CAAC,QAAQ,IAAI,UAAU,UAAU,MAA1D,mBAA6D,UAAS;AAAA;AAEhE,IAAM,oBAAoB,CAAC,eAAoC;AA9ItE;AA+IC,oCAAoB,KAAK,CAAC,QAAQ,IAAI,UAAU,UAAU,MAA1D,mBAA6D,SAAQ;AAAA;AAI/D,IAAM,oBAGT;AAAA,EACH,IAAI,EAAE,OAAO,YAAY,OAAO,UAAU;AAAA,EAC1C,eAAe,EAAE,OAAO,iBAAiB,OAAO,UAAU;AAAA,EAC1D,SAAS,EAAE,OAAO,WAAW,OAAO,QAAQ;AAAA,EAC5C,SAAS;AACV;AAGO,SAAS,mBACf,aACuC;AACvC,QAAM,aAA8C,CAAC;AACrD,MAAI,YAAY,gBAAgB;AAC/B,eAAW,KAAK,EAAE,MAAM,IAAI,KAAK,YAAY,cAAc,GAAG,OAAO,eAAe,CAAC;AAAA,EACtF;AACA,MAAI,YAAY,qBAAqB;AACpC,eAAW,KAAK,EAAE,MAAM,IAAI,KAAK,YAAY,mBAAmB,GAAG,OAAO,4BAA4B,CAAC;AAAA,EACxG;AACA,MAAI,CAAC,WAAW,OAAQ,QAAO;AAC/B,SAAO,WAAW,OAAO,CAAC,SAAS,MAAO,EAAE,OAAO,QAAQ,OAAO,IAAI,OAAQ;AAC/E;AAGO,SAAS,uBAAuB,aAA6B;AACnE,MAAI,gBAAgB,6BAA6B;AAChD,WAAO;AAAA,EACR;AACA,SAAO;AACR;;;AFpDuB,SAkKnB,UAlKmB,KA6BpB,YA7BoB;AA7CvB,IAAM,mBAAmB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AACA,IAAM,cAAc,oBAAI,IAAI,CAAC,SAAS,CAAC;AAEvC,IAAM,qBAAqB;AAAA,EAC1B,gBAAgB;AAAA,EAChB,gBAAgB;AACjB;AAEA,IAAM,yBAAmD;AAAA,EACxD,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,OAAO;AAAA,EACP,WAAW;AAAA,EACX,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,QAAQ;AAAA,EACR,eAAe,CAAC;AAAA,EAChB,UAAU,CAAC;AACZ;AAEA,IAAM,qBAA+C;AAAA,EACpD,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,UAAU;AACX;AAEA,IAAM,SAAS,CAAC,OAAY,aAA0B;AA3HtD;AA4HC,qDAAO,aAAP,mBAAiB,SAAjB,mBAAuB,cAAW,0CAAO,aAAP,mBAAiB,SAAjB,mBAAuB,YAAU,+BAAO,YAAW;AAAA;AAEtF,IAAM,WAAW,MAAM,oBAAC,UAAK,OAAO,EAAE,OAAO,UAAU,GAAG,eAAC;AAI3D,SAAS,gBAAgB,EAAE,YAAY,GAAqC;AAC3E,QAAM,OAAO,kBAAkB,YAAY,iBAAiB;AAC5D,MAAI,CAAC,KAAM,QAAO,oBAAC,cAAW,IAAI,EAAE,UAAU,WAAW,OAAO,iBAAiB,GAAG;AACpF,QAAM,YAAY,mBAAmB,WAAW;AAChD,SACC,oBAAC,WAAQ,OAAO,YAAY,GAAG,UAAU,KAAK,aAAa,UAAU,KAAK,eAAe,CAAC,KAAK,IAC9F;AAAA,IAAC;AAAA;AAAA,MACA,MAAM,YAAY,sBAAsB,OAAO,oBAAC,oBAAiB,UAAS,SAAQ,IAAK;AAAA,MACvF,OAAO,YAAY,GAAG,KAAK,KAAK,SAAM,UAAU,KAAK,mBAAmB,CAAC,KAAK,KAAK;AAAA,MACnF,MAAK;AAAA,MACL,OAAO,KAAK;AAAA;AAAA,EACb,GACD;AAEF;AAIA,SAAS,iBAAiB,EAAE,YAAY,GAAqC;AAC5E,QAAM,OAAO,kBAAkB,YAAY,iBAAiB;AAC5D,MAAI,CAAC,QAAQ,YAAY,sBAAsB,KAAM,QAAO;AAC5D,QAAM,YAAY,mBAAmB,WAAW;AAChD,QAAM,YAAY,YAAY,sBAAsB;AACpD,SACC,qBAAC,SAAM,UAAU,YAAY,UAAU,WAAW,MAAM,oBAAC,oBAAiB,UAAS,WAAU,GAAI,IAAI,EAAE,IAAI,EAAE,GAC5G;AAAA,yBAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,YAAY,KAAK,IAAI,IAAI,GACzD;AAAA,kBACE,GAAG,UAAU,KAAK,IAAI,YAAY,YAAY,SAAS,IAAI,UAAU,KAAK,mBAAmB,CAAC,KAAK,UAAU,KAAK,mBAAmB,CAAC,MACtI,YACC,yCACA;AAAA,MACH,YAAY,wCAAmC;AAAA,OACjD;AAAA,IACA,oBAAC,cAAW,SAAQ,SAClB,kCAAuB,uCAAW,UAAS,cAAc,GAC3D;AAAA,KACD;AAEF;AAQA,IAAM,sBAAsB;AAG5B,SAAS,WAAW;AAAA,EACnB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AACD,GAOG;AACF,SACC;AAAA,IAAC;AAAA;AAAA,MACA,IAAI;AAAA,QACH,UAAU;AAAA,QACV,OAAO;AAAA,QACP;AAAA,QACA,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,MACjB;AAAA,MACA,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,MAElC;AAAA,QAAC;AAAA;AAAA,UACA,WAAW;AAAA,UACX,IAAI;AAAA,YACH,OAAO,wBAAS,EAAE,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI;AAAA,YAC/C,WAAW;AAAA,YACX,SAAS;AAAA,YACT,eAAe;AAAA,YACf,cAAc;AAAA,YACd,UAAU;AAAA,YACV,WAAW;AAAA,UACZ;AAAA,UAEA;AAAA;AAAA,cAAC;AAAA;AAAA,gBACA,IAAI,iCACA,iBADA;AAAA,kBAEH,iBAAiB;AAAA,kBACjB,OAAO;AAAA,kBACP,yBAAyB,EAAE,OAAO,OAAO;AAAA,gBAC1C;AAAA,gBAEA;AAAA,sCAAC,cAAW,YAAY,KAAK,UAAS,QAAO,YAAW,8BACtD,iBACF;AAAA,kBACA,oBAAC,cAAW,MAAK,SAAQ,SAAS,SAAS,IAAI,EAAE,OAAO,OAAO,GAAG,oBAElE;AAAA;AAAA;AAAA,YACD;AAAA,YAEA,oBAAC,OAAI,IAAI,EAAE,MAAM,GAAG,WAAW,OAAO,GAAI,UAAS;AAAA,YAEnD,oBAAC,OAAI,IAAI,gBAAiB,kBAAO;AAAA;AAAA;AAAA,MAClC;AAAA;AAAA,EACD;AAEF;AAmBA,IAAM,oBAAoB,KAAK,SAASC,mBAAkB;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAA2B;AAjR3B;AAkRC,QAAM,CAAC,KAAK,MAAM,IAAIC,UAAS,CAAC;AAChC,YAAU,MAAM;AACf,QAAI,KAAM,QAAO,CAAC;AAAA,EACnB,GAAG,CAAC,IAAI,CAAC;AACT,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,aAAa,CAAC,cAAc,eAAe,eAAe;AAChE,QAAM,YAAW,8DAAoB,iBAApB,YAAoC,CAAC;AAEtD,SACC;AAAA,IAAC;AAAA;AAAA,MACA,OAAO,SAAS,QAAQ,oBAAoB;AAAA,MAC5C;AAAA,MACA,QACC,iCACC;AAAA,4BAAC,aAAU,SAAQ,UAAS,SAAS,SAAS,oBAE9C;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,aAAa;AAAA,cACZ,SAAS,QACN,gBAAgB,2BAChB,gBAAgB;AAAA,cACnB,gBAAgB;AAAA,YACjB;AAAA,YACA,cAAc;AAAA,YAEd;AAAA,cAAC;AAAA;AAAA,gBACA,SAAS;AAAA,gBACT,UAAU;AAAA,gBACV,WAAW,SAAS,oBAAC,oBAAiB,MAAM,IAAI,OAAM,WAAU,IAAK;AAAA,gBAEpE,mBAAS,QAAQ,WAAW;AAAA;AAAA,YAC9B;AAAA;AAAA,QACD;AAAA,SACD;AAAA,MAGD;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAO;AAAA,YACP,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC;AAAA,YAC5B,SAAQ;AAAA,YACR,eAAc;AAAA,YACd,IAAI;AAAA,cACH,cAAc;AAAA,cACd,WAAW;AAAA,cACX,kBAAkB;AAAA,gBACjB,UAAU;AAAA,gBACV,WAAW;AAAA,gBACX,eAAe;AAAA,gBACf,YAAY;AAAA,gBACZ,YAAY;AAAA,cACb;AAAA,cACA,mBAAmB,EAAE,OAAO,UAAU;AAAA,YACvC;AAAA,YACA,mBAAmB,EAAE,OAAO,EAAE,QAAQ,GAAG,iBAAiB,WAAW,cAAc,cAAc,EAAE;AAAA,YAElG,qBAAW,IAAI,CAAC,OAAO,MACvB,oBAAC,OAAgB,OAAc,OAAO,GAAG,UAAU,MAAM,KAAK,SAAS,SAA7D,KAAoE,CAC9E;AAAA;AAAA,QACF;AAAA,QAGC,QAAQ,KACR,qBAAC,OAAI,IAAI,EAAE,GAAG,IAAI,GACjB;AAAA,+BAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,qBAAqB,EAAE,IAAI,OAAO,IAAI,UAAU,GAAG,KAAK,GAAG,IAAI,EAAE,GAC5F;AAAA,iCAAC,OACA;AAAA,mCAAC,cAAW,IAAI,SAAS;AAAA;AAAA,gBACnB,oBAAC,YAAS;AAAA,iBAChB;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAS;AAAA,kBACT,MAAK;AAAA,kBACL,IAAI;AAAA,kBACJ,OAAO,SAAS;AAAA,kBAChB,UAAU,CAAC,MAAM,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,MAAM,EAAE,OAAO,MAAM,EAAE;AAAA;AAAA,cAC3E;AAAA,eACD;AAAA,YACA,qBAAC,OACA;AAAA,mCAAC,cAAW,IAAI,SAAS;AAAA;AAAA,gBACZ,oBAAC,YAAS;AAAA,iBACvB;AAAA,cACA,oBAAC,eAAY,WAAS,MAAC,MAAK,SAC3B;AAAA,gBAAC;AAAA;AAAA,kBACA,OAAO,SAAS;AAAA,kBAChB,IAAI;AAAA,kBACJ,WAAW,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAAE;AAAA,kBACjD,UAAU,SAAS;AAAA,kBACnB,UAAU,CAAC,MACV,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,YAAY,EAAE,OAAO,MAAwB,EAAE;AAAA,kBAGjF,8BAAoB,IAAI,CAAC,QACzB,qBAAC,YAAyB,OAAO,IAAI,OACnC;AAAA,wBAAI;AAAA,oBAAK;AAAA,oBAAE,IAAI;AAAA,uBADF,IAAI,KAEnB,CACA;AAAA;AAAA,cACF,GACD;AAAA,eACD;AAAA,aACD;AAAA,UAEA,qBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,qBAAqB,EAAE,IAAI,OAAO,IAAI,UAAU,GAAG,KAAK,GAAG,IAAI,EAAE,GAC5F;AAAA,iCAAC,OACA;AAAA,kCAAC,cAAW,IAAI,SAAS,8BAAgB;AAAA,cACzC,oBAAC,eAAY,WAAS,MAAC,MAAK,SAC3B;AAAA,gBAAC;AAAA;AAAA,kBACA,QAAO,cAAS,sBAAT,YAA8B;AAAA,kBACrC,cAAY;AAAA,kBACZ,IAAI;AAAA,kBACJ,WAAW,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAAE;AAAA,kBACjD,UAAU,CAAC,MACV,YAAY,CAAC,SAAU,iCACnB,OADmB;AAAA,oBAEtB,mBAAmB,EAAE,OAAO,QAAQ,OAAO,EAAE,OAAO,KAAK,IAAI;AAAA,kBAC9D,EAAE;AAAA,kBAGH;AAAA,wCAAC,YAAS,OAAM,IAAG,kBAAI;AAAA,oBACtB,UAAU,IAAI,CAAC,MACf,oBAAC,YAAoB,OAAO,EAAE,IAC5B,YAAE,QADW,EAAE,EAEjB,CACA;AAAA;AAAA;AAAA,cACF,GACD;AAAA,eACD;AAAA,YACA,qBAAC,OACA;AAAA,kCAAC,cAAW,IAAI,SAAS,yBAAW;AAAA,cACpC;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAS;AAAA,kBACT,MAAK;AAAA,kBACL,IAAI;AAAA,kBACJ,QAAO,cAAS,eAAT,YAAuB;AAAA,kBAC9B,UAAU,CAAC,MAAM,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,YAAY,EAAE,OAAO,MAAM,EAAE;AAAA;AAAA,cACjF;AAAA,eACD;AAAA,aACD;AAAA,UAEA,qBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAE,GACxD;AAAA,gCAAC,cAAW,IAAI,iCAAK,UAAL,EAAc,IAAI,EAAE,IAAG,oBAAM;AAAA,YAC7C;AAAA,cAAC;AAAA;AAAA,gBACA,MAAK;AAAA,gBACL,SAAS,CAAC,CAAC,SAAS;AAAA,gBACpB,UAAU,CAAC,MAAM,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,UAAU,EAAE,OAAO,QAAQ,EAAE;AAAA;AAAA,YACjF;AAAA,aACD;AAAA,WACD;AAAA,QAIA,QAAQ,KACR,qBAAC,OAAI,IAAI,EAAE,GAAG,IAAI,GACjB;AAAA,8BAAC,cAAW,IAAI,gBAAgB,6BAAe;AAAA,UAC/C,oBAAC,cAAW,SAAQ,SAAQ,OAAM,kBAAiB,IAAI,EAAE,IAAI,GAAG,UAAU,UAAU,GAAG,uFAEvF;AAAA,UACC,SAAS,UAAU,sBACnB,oBAAC,oBAAiB,aAAa,oBAAoB;AAAA,UAEpD,qBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,qBAAqB,EAAE,IAAI,OAAO,IAAI,UAAU,GAAG,KAAK,EAAE,GACrF;AAAA,iCAAC,OACA;AAAA,kCAAC,cAAW,IAAI,SAAS,oBAAM;AAAA,cAC/B;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAS;AAAA,kBACT,MAAK;AAAA,kBACL,IAAI;AAAA,kBACJ,QAAO,cAAS,UAAT,YAAkB;AAAA,kBACzB,UAAU,CAAC,MAAM,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,OAAO,EAAE,OAAO,MAAM,EAAE;AAAA;AAAA,cAC5E;AAAA,eACD;AAAA,YACA,qBAAC,OACA;AAAA,kCAAC,cAAW,IAAI,SAAS,qBAAO;AAAA,cAChC;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAS;AAAA,kBACT,MAAK;AAAA,kBACL,IAAI;AAAA,kBACJ,aAAY;AAAA,kBACZ,QAAO,cAAS,WAAT,YAAmB;AAAA,kBAC1B,UAAU,CAAC,MAAM,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,QAAQ,EAAE,OAAO,MAAM,EAAE;AAAA;AAAA,cAC7E;AAAA,eACD;AAAA,YACA,qBAAC,OACA;AAAA,kCAAC,cAAW,IAAI,SAAS,wBAAU;AAAA,cACnC;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAS;AAAA,kBACT,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,IAAI;AAAA,kBACJ,aAAY;AAAA,kBACZ,QAAO,cAAS,cAAT,YAAsB;AAAA,kBAC7B,UAAU,CAAC,MAAM,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,WAAW,EAAE,OAAO,MAAM,EAAE;AAAA;AAAA,cAChF;AAAA,eACD;AAAA,YACA,qBAAC,OACA;AAAA,kCAAC,cAAW,IAAI,SAAS,0BAAY;AAAA,cACrC;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAS;AAAA,kBACT,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,IAAI;AAAA,kBACJ,aAAY;AAAA,kBACZ,QAAO,cAAS,gBAAT,YAAwB;AAAA,kBAC/B,UAAU,CAAC,MAAM,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,aAAa,EAAE,OAAO,MAAM,EAAE;AAAA;AAAA,cAClF;AAAA,eACD;AAAA,YACA,qBAAC,OACA;AAAA,kCAAC,cAAW,IAAI,SAAS,+BAAiB;AAAA,cAC1C;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAS;AAAA,kBACT,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,IAAI;AAAA,kBACJ,aAAY;AAAA,kBACZ,QAAO,cAAS,oBAAT,YAA4B;AAAA,kBACnC,UAAU,CAAC,MAAM,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,iBAAiB,EAAE,OAAO,MAAM,EAAE;AAAA;AAAA,cACtF;AAAA,eACD;AAAA,YACA,qBAAC,OACA;AAAA,kCAAC,cAAW,IAAI,SAAS,qDAAuC;AAAA,cAChE;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAS;AAAA,kBACT,MAAK;AAAA,kBACL,IAAI;AAAA,kBACJ,QAAO,cAAS,gBAAT,YAAwB;AAAA,kBAC/B,UAAU,CAAC,MAAM,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,aAAa,EAAE,OAAO,MAAM,EAAE;AAAA;AAAA,cAClF;AAAA,eACD;AAAA,aACD;AAAA,WACD;AAAA,QAIA,QAAQ,KAAK,sBACb,qBAAC,OAAI,IAAI,EAAE,GAAG,IAAI,GACjB;AAAA,+BAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,gBAAgB,iBAAiB,YAAY,UAAU,IAAI,IAAI,GAC1F;AAAA,gCAAC,cAAW,IAAI,iCAAK,iBAAL,EAAqB,IAAI,EAAE,IAAG,2CAAwB;AAAA,YACtE,oBAAC,sBAAmB,aAAa,oBAAoB,cAAc,OAClE;AAAA,cAAC;AAAA;AAAA,gBAAU,MAAK;AAAA,gBAAQ,WAAW,oBAAC,WAAQ,IAAI,EAAE,UAAU,kBAAkB,GAAG;AAAA,gBAChF,SAAS,MAAM,aAAa,kBAAkB;AAAA,gBAAG;AAAA;AAAA,YAElD,GACD;AAAA,aACD;AAAA,UACA,oBAAC,kBAAe,WAAW,OAAO,SAAQ,YACzC,+BAAC,SAAM,MAAK,SACX;AAAA,gCAAC,aACA,8BAAC,YACC,WAAC,WAAW,aAAa,YAAY,YAAY,UAAU,SAAS,EAAE,IAAI,CAAC,QAC3E,oBAAC,aAAoB,OAAO,QAAQ,YAAY,WAAW,QAAQ,IAAI,YACrE,iBADc,GAEhB,CACA,GACF,GACD;AAAA,YACA,qBAAC,aACC;AAAA,uBAAS,IAAI,CAAC,YAAS;AAlhBhC,oBAAAC;AAmhBS,4CAAC,YAA0B,IAAI,YAC9B;AAAA,sCAAC,aAAU,IAAI,YAAa,kBAAQ,cAAa;AAAA,kBACjD,oBAAC,aAAU,IAAI,YAAa,kBAAQ,kBAAkB,IAAG;AAAA,kBACzD,oBAAC,aAAU,IAAI,YACb,YAAAA,MAAA,UAAU,KAAK,CAAC,MAAM,EAAE,OAAO,QAAQ,UAAU,MAAjD,gBAAAA,IAAoD,SAAQ,QAAQ,YACtE;AAAA,kBACA,oBAAC,aAAU,IAAI,YAAa,kBAAQ,oBAAoB,WAAU;AAAA,kBAClE,oBAAC,aAAU,IAAI,YACd;AAAA,oBAAC;AAAA;AAAA,sBACA,OAAO,gBAAgB,QAAQ,QAAQ;AAAA,sBACvC,MAAK;AAAA,sBACL,IAAI,aAAa,QAAQ,QAAQ;AAAA;AAAA,kBAClC,GACD;AAAA,kBACA,oBAAC,aAAU,IAAI,YAAY,OAAM,UAChC,8BAAC,sBAAmB,aAAa,oBAAoB,cAAc,OAClE,+BAAC,SAAM,WAAU,OAAM,SAAS,KAAK,gBAAe,UACnD;AAAA,wCAAC,WAAQ,OAAM,QACd;AAAA,sBAAC;AAAA;AAAA,wBACA,MAAK;AAAA,wBACL,IAAI;AAAA,wBACJ,SAAS,MAAM,cAAc,oBAAoB,OAAO;AAAA,wBAExD,8BAAC,YAAS,UAAS,SAAQ;AAAA;AAAA,oBAC5B,GACD;AAAA,oBACA,oBAAC,WAAQ,OAAM,UACd;AAAA,sBAAC;AAAA;AAAA,wBACA,MAAK;AAAA,wBACL,IAAI;AAAA,wBACJ,SAAS,MAAM,gBAAgB,oBAAoB,OAAO;AAAA,wBAE1D,8BAAC,cAAW,UAAS,SAAQ;AAAA;AAAA,oBAC9B,GACD;AAAA,qBACD,GACD,GACD;AAAA,qBArCc,QAAQ,EAsCvB;AAAA,eACA;AAAA,cACA,SAAS,WAAW,KACpB,oBAAC,YACA,8BAAC,aAAU,SAAS,GAAG,OAAM,UAAS,IAAI,EAAE,IAAI,GAAG,OAAO,QAAQ,UAAU,UAAU,GAAG,yCAEzF,GACD;AAAA,eAEF;AAAA,aACD,GACD;AAAA,WACD;AAAA;AAAA;AAAA,EAEF;AAEF,CAAC;AAkBD,IAAM,gBAAgB,KAAK,SAASC,eAAc;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAuB;AAvmBvB;AAwmBC,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,OAAO,CAAC,KAAa,UAC1B,aAAa,CAAC,SAAS;AACtB,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,KAAC,KAAK,GAAG,GAAG,KAAK,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC;AAC9D,WAAO;AAAA,EACR,CAAC;AAEF,SACC;AAAA,IAAC;AAAA;AAAA,MACA,OAAO,SAAS,QAAQ,qBAAqB;AAAA,MAC7C,OAAO,EAAE,IAAI,QAAQ,IAAI,IAAI;AAAA,MAC7B,QAAQ;AAAA,MACR;AAAA,MACA,QACC,iCACC;AAAA,4BAAC,aAAU,SAAQ,UAAS,SAAS,SAAS,oBAE9C;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,SAAS;AAAA,YACT,UAAU;AAAA,YACV,WAAW,SAAS,oBAAC,oBAAiB,MAAM,IAAI,OAAM,WAAU,IAAK;AAAA,YAEpE,mBAAS,QAAQ,WAAW;AAAA;AAAA,QAC9B;AAAA,SACD;AAAA,MAGD,+BAAC,OAAI,IAAI,EAAE,GAAG,IAAI,GAEjB;AAAA,6BAAC,OAAI,IAAI,EAAE,IAAI,EAAE,GAChB;AAAA,+BAAC,cAAW,IAAI,SAAS;AAAA;AAAA,YACP,oBAAC,YAAS;AAAA,aAC5B;AAAA,UACA,oBAAC,eAAY,WAAS,MAAC,MAAK,SAC3B;AAAA,YAAC;AAAA;AAAA,cACA,OAAO,SAAS,gBAAgB;AAAA,cAChC,cAAY;AAAA,cACZ,IAAI;AAAA,cACJ,WAAW,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAAE;AAAA,cACjD,UAAU,SAAS;AAAA,cACnB,aAAa,CAAC,aAAU;AAnpB/B,oBAAAD;AAopBQ,wBAAC,WACA,oBAAC,UAAK,OAAO,EAAE,OAAO,UAAU,GAAG,yBAAW,MAE9CA,MAAA,eAAe,KAAK,CAAC,SAAS,KAAK,OAAO,QAAQ,MAAlD,gBAAAA,IAAqD,SAAQ,SAAS,kBAAkB;AAAA;AAAA,cAG1F,UAAU,CAAC,MAAM;AAChB,sBAAM,eAAe,eAAe,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE,OAAO,KAAK;AAC7E,oBAAI,CAAC,aAAc;AACnB,4BAAY,CAAC,SAAU,iCACnB,OADmB;AAAA,kBAEtB,cAAc,aAAa;AAAA,kBAC3B,gBAAgB,aAAa;AAAA,gBAC9B,EAAE;AAAA,cACH;AAAA,cAEA;AAAA,oCAAC,YAAS,OAAM,IAAG,UAAQ,MAAC,yBAE5B;AAAA,gBACC,eAAe,IAAI,CAAC,SACpB,oBAAC,YAAuB,OAAO,KAAK,IAClC,eAAK,QADQ,KAAK,EAEpB,CACA;AAAA;AAAA;AAAA,UACF,GACD;AAAA,WACD;AAAA,QAEA,qBAAC,OAAI,IAAI,EAAE,IAAI,EAAE,GAChB;AAAA,+BAAC,cAAW,IAAI,SAAS;AAAA;AAAA,YACT,oBAAC,YAAS;AAAA,aAC1B;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACA,WAAS;AAAA,cACT,MAAK;AAAA,cACL,IAAI;AAAA,cACJ,aAAY;AAAA,cACZ,OAAO,SAAS,gBAAgB;AAAA,cAChC,UAAU,CAAC,MAAM,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,cAAc,EAAE,OAAO,MAAM,EAAE;AAAA;AAAA,UACnF;AAAA,WACD;AAAA,QAEA,qBAAC,OAAI,IAAI,EAAE,IAAI,EAAE,GAChB;AAAA,+BAAC,cAAW,IAAI,SAAS;AAAA;AAAA,YACR,oBAAC,YAAS;AAAA,aAC3B;AAAA,UACA,oBAAC,eAAY,WAAS,MAAC,MAAK,SAC3B;AAAA,YAAC;AAAA;AAAA,cACA,OAAO,SAAS,cAAc;AAAA,cAC9B,cAAY;AAAA,cACZ,IAAI;AAAA,cACJ,WAAW,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAAE;AAAA,cACjD,aAAa,CAAC,aAAU;AAxsB/B,oBAAAA;AAysBQ,wBAAC,WACA,oBAAC,UAAK,OAAO,EAAE,OAAO,UAAU,GAAG,6BAAe,MAElDA,MAAA,UAAU,KAAK,CAAC,MAAM,EAAE,OAAO,QAAQ,MAAvC,gBAAAA,IAA0C,SAAQ,OAAO,QAAQ;AAAA;AAAA,cAGnE,UAAU,CAAC,MAAM,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,YAAY,OAAO,EAAE,OAAO,KAAK,EAAE,EAAE;AAAA,cAEvF,oBAAU,IAAI,CAAC,MACf,oBAAC,YAAoB,OAAO,EAAE,IAC5B,YAAE,QADW,EAAE,EAEjB,CACA;AAAA;AAAA,UACF,GACD;AAAA,WACD;AAAA,QAEA,qBAAC,OAAI,IAAI,EAAE,IAAI,EAAE,GAChB;AAAA,8BAAC,cAAW,IAAI,SAAS,sCAAwB;AAAA,UACjD;AAAA,YAAC;AAAA;AAAA,cACA,WAAS;AAAA,cACT,MAAK;AAAA,cACL,MAAK;AAAA,cACL,IAAI;AAAA,cACJ,QAAO,cAAS,qBAAT,YAA6B;AAAA,cACpC,UAAU,CAAC,MACV,YAAY,CAAC,SAAU,iCACnB,OADmB;AAAA,gBAEtB,kBAAkB,EAAE,OAAO,QAAQ,OAAO,EAAE,OAAO,KAAK,IAAI;AAAA,cAC7D,EAAE;AAAA,cAEH,YAAY,EAAE,KAAK,GAAG,KAAK,GAAG;AAAA;AAAA,UAC/B;AAAA,WACD;AAAA,QAEA,qBAAC,OAAI,IAAI,EAAE,IAAI,EAAE,GAChB;AAAA,8BAAC,cAAW,IAAI,SAAS,4EAA8D;AAAA,UACtF,UAAU,WAAW,KACrB,oBAAC,cAAW,SAAQ,SAAQ,OAAM,kBAAiB,IAAI,EAAE,IAAI,GAAG,UAAU,SAAS,GAAG,yGAEtF;AAAA,UAEA,UAAU,IAAI,CAAC,KAAK,QACpB,qBAAC,OAAc,IAAI,EAAE,SAAS,QAAQ,KAAK,GAAG,IAAI,GAAG,YAAY,SAAS,GACzE;AAAA,iCAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,eAAe,SAAS,GACnD;AAAA,kCAAC,cAAW,MAAK,SAAQ,UAAU,QAAQ,GAAG,SAAS,MAAM,KAAK,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,GACzF,8BAAC,mBAAgB,UAAS,WAAU,GACrC;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACA,MAAK;AAAA,kBACL,UAAU,QAAQ,UAAU,SAAS;AAAA,kBACrC,SAAS,MAAM,KAAK,KAAK,CAAC;AAAA,kBAC1B,IAAI,EAAE,GAAG,KAAK;AAAA,kBAEd,8BAAC,qBAAkB,UAAS,WAAU;AAAA;AAAA,cACvC;AAAA,eACD;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACA,WAAS;AAAA,gBACT,MAAK;AAAA,gBACL,IAAI;AAAA,gBACJ,aAAY;AAAA,gBACZ,OAAO,IAAI;AAAA,gBACX,UAAU,CAAC,MACV,aAAa,CAAC,SAAS,KAAK,IAAI,CAAC,GAAG,MAAO,MAAM,MAAM,iCAAK,IAAL,EAAQ,KAAK,EAAE,OAAO,MAAM,KAAI,CAAE,CAAC;AAAA;AAAA,YAE5F;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACA,WAAS;AAAA,gBACT,MAAK;AAAA,gBACL,IAAI;AAAA,gBACJ,aAAY;AAAA,gBACZ,OAAO,IAAI;AAAA,gBACX,UAAU,CAAC,MACV,aAAa,CAAC,SAAS,KAAK,IAAI,CAAC,GAAG,MAAO,MAAM,MAAM,iCAAK,IAAL,EAAQ,OAAO,EAAE,OAAO,MAAM,KAAI,CAAE,CAAC;AAAA;AAAA,YAE9F;AAAA,YACA,oBAAC,cAAW,MAAK,SAAQ,IAAI,iBAAiB,SAAS,MAAM,aAAa,CAAC,SAAS,KAAK,OAAO,CAAC,GAAG,MAAM,MAAM,GAAG,CAAC,GACnH,8BAAC,cAAW,UAAS,SAAQ,GAC9B;AAAA,eApCS,GAqCV,CACA;AAAA,UACD;AAAA,YAAC;AAAA;AAAA,cACA,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,WAAW,oBAAC,WAAQ,IAAI,EAAE,UAAU,kBAAkB,GAAG;AAAA,cACzD,SAAS,MAAM,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,KAAK,IAAI,OAAO,GAAG,CAAC,CAAC;AAAA,cACvE;AAAA;AAAA,UAED;AAAA,WACD;AAAA,QAEA,qBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAE,GACxD;AAAA,8BAAC,cAAW,IAAI,iCAAK,UAAL,EAAc,IAAI,EAAE,IAAG,oBAAM;AAAA,UAC7C;AAAA,YAAC;AAAA;AAAA,cACA,MAAK;AAAA,cACL,SAAS,CAAC,CAAC,SAAS;AAAA,cACpB,UAAU,CAAC,MAAM,YAAY,CAAC,SAAU,iCAAK,OAAL,EAAW,UAAU,EAAE,OAAO,QAAQ,EAAE;AAAA;AAAA,UACjF;AAAA,WACD;AAAA,SACD;AAAA;AAAA,EACD;AAEF,CAAC;AAID,SAAS,WAAW;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAMG;AACF,MAAI,CAAC,KAAM,QAAO;AAClB,SACC;AAAA,IAAC;AAAA;AAAA,MACA,OAAO,uBAAkB,eAAe;AAAA,MACxC,OAAO,EAAE,IAAI,QAAQ,IAAI,IAAI;AAAA,MAC7B,QAAQ;AAAA,MACR;AAAA,MACA,QACC,oBAAC,aAAU,SAAQ,UAAS,SAAS,SAAS,mBAE9C;AAAA,MAGD,8BAAC,OAAI,IAAI,EAAE,GAAG,IAAI,GAChB,oBACA,oBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,gBAAgB,UAAU,IAAI,EAAE,GAC3D,8BAAC,oBAAiB,MAAM,IAAI,GAC7B,IAEA,oBAAC,kBAAe,WAAW,OAAO,SAAQ,YACzC,+BAAC,SAAM,MAAK,SACX;AAAA,4BAAC,aACA,8BAAC,YACC,WAAC,QAAQ,UAAU,UAAU,iBAAiB,OAAO,EAAE,IAAI,CAAC,QAC5D,oBAAC,aAAoB,IAAI,YACvB,iBADc,GAEhB,CACA,GACF,GACD;AAAA,QACA,qBAAC,aACC;AAAA,eAAK,IAAI,CAAC,QACV,qBAAC,YAAsB,IAAI,YAC1B;AAAA,gCAAC,aAAU,IAAI,YAAa,cAAI,KAAK,IAAI,SAAS,EAAE,eAAe,GAAE;AAAA,YACrE,oBAAC,aAAU,IAAI,YAAa,cAAI,eAAc;AAAA,YAC9C,oBAAC,aAAU,IAAI,YACd;AAAA,cAAC;AAAA;AAAA,gBACA,OAAO,IAAI,YAAY,YAAY;AAAA,gBACnC,MAAK;AAAA,gBACL,OAAO,IAAI,YAAY,YAAY;AAAA;AAAA,YACpC,GACD;AAAA,YACA,oBAAC,aAAU,IAAI,YAAa,cAAI,cAAa;AAAA,YAC7C,oBAAC,aAAU,IAAI,YACd,8BAAC,WAAQ,OAAO,IAAI,gBAAgB,IACnC;AAAA,cAAC;AAAA;AAAA,gBACA,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,IAAI,EAAE,UAAU,KAAK,UAAU,UAAU,cAAc,YAAY,UAAU,SAAS;AAAA,gBACtF,QAAM;AAAA,gBAEL,cAAI,gBAAgB;AAAA;AAAA,YACtB,GACD,GACD;AAAA,eAtBc,IAAI,EAuBnB,CACA;AAAA,UACA,KAAK,WAAW,KAChB,oBAAC,YACA,8BAAC,aAAU,SAAS,GAAG,OAAM,UAAS,IAAI,EAAE,IAAI,GAAG,OAAO,QAAQ,UAAU,UAAU,GAAG,mCAEzF,GACD;AAAA,WAEF;AAAA,SACD,GACD,GAEF;AAAA;AAAA,EACD;AAEF;AAIA,SAAS,cAAc;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAOG;AACF,MAAI,CAAC,KAAM,QAAO;AAClB,SACC;AAAA,IAAC;AAAA;AAAA,MACA,IAAI;AAAA,QACH,UAAU;AAAA,QACV,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,MACjB;AAAA,MACA,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,MAElC;AAAA,QAAC;AAAA;AAAA,UACA,WAAW;AAAA,UACX,IAAI,EAAE,OAAO,EAAE,IAAI,QAAQ,IAAI,IAAI,GAAG,cAAc,QAAQ,UAAU,UAAU,WAAW,8BAA8B;AAAA,UAEzH;AAAA,iCAAC,OAAI,IAAI,iCAAK,iBAAL,EAAqB,cAAc,QAAQ,IAAI,EAAE,IACzD;AAAA,kCAAC,cAAW,YAAY,KAAK,UAAS,QAAO,YAAW,8BACtD,iBACF;AAAA,cACA,oBAAC,cAAW,MAAK,SAAQ,SAAS,SAAS,oBAE3C;AAAA,eACD;AAAA,YACA,oBAAC,OAAI,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,GAC3B,8BAAC,cAAW,UAAS,WAAU,OAAM,QAAO,YAAW,8BACrD,mBACF,GACD;AAAA,YACA,qBAAC,OAAI,IAAI,gBACR;AAAA,kCAAC,aAAU,SAAQ,UAAS,SAAS,SAAS,oBAE9C;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACA,SAAQ;AAAA,kBACR,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,WAAW,UAAU,oBAAC,oBAAiB,MAAM,IAAI,OAAM,WAAU,IAAK;AAAA,kBACtE;AAAA;AAAA,cAED;AAAA,eACD;AAAA;AAAA;AAAA,MACD;AAAA;AAAA,EACD;AAEF;AAIA,IAAM,0BAA0B,KAAK,MAAM;AA98B3C;AA+8BC,QAAM,EAAE,UAAU,IAAI,SAAS;AAC/B,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI,oBAAoB;AACxB,QAAM,EAAE,WAAW,eAAe,IAAI,aAAa;AAGnD,QAAM,CAAC,QAAQ,SAAS,IAAID,UAAS,EAAE;AACvC,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAiB,KAAK;AAC9D,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAS,CAAC;AAClC,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,EAAE;AAGjD,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,KAAK;AAClD,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAyB,KAAK;AAClE,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAwB,IAAI;AAC9D,QAAM,CAAC,UAAU,WAAW,IAAIA,UAAmC,sBAAsB;AACzF,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAAS,KAAK;AAG1C,QAAM,CAAC,mBAAmB,oBAAoB,IAAIA,UAAS,KAAK;AAChE,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAyB,KAAK;AACpE,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAAwB,IAAI;AAC5E,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,UAAmC,kBAAkB;AACnG,QAAM,CAAC,WAAW,YAAY,IAAIA,UAA6B,CAAC,CAAC;AACjE,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAA0B,CAAC,CAAC;AACxE,QAAM,CAAC,qBAAqB,sBAAsB,IAAIA,UAAiC,IAAI;AAC3F,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAS,KAAK;AAGxD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAS,KAAK;AAC1D,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAuB,CAAC,CAAC;AAC/D,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AAGpD,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAiC,IAAI;AAC7E,QAAM,CAAC,qBAAqB,sBAAsB,IAAIA,UAAwE,IAAI;AAClI,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAAiC,IAAI;AACrF,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AAEpD,QAAM,UAAUG,aAAY,YAAY;AACvC,QAAI;AACH,YAAM,kBAAkB;AAAA,IACzB,SAAS,OAAY;AACpB,gBAAU,OAAO,OAAO,8BAA8B,GAAG,OAAO;AAAA,IACjE;AAAA,EACD,GAAG,CAAC,mBAAmB,SAAS,CAAC;AAEjC,YAAU,MAAM;AACf,YAAQ;AAAA,EACT,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,WAAW,QAAQ,MAAM;AAC9B,UAAM,IAAI,OAAO,KAAK,EAAE,YAAY;AACpC,WAAO,aAAa;AAAA,MACnB,CAAC,MAAG;AAjhCP,YAAAF;AAkhCK,iBAAC,OAAKA,MAAA,EAAE,SAAF,gBAAAA,IAAQ,cAAc,SAAS,SACrC,iBAAiB,SAAS,EAAE,eAAe;AAAA;AAAA,IAC9C;AAAA,EACD,GAAG,CAAC,cAAc,QAAQ,YAAY,CAAC;AAEvC,QAAM,YAAY;AAAA,IACjB,MAAM,SAAS,MAAM,OAAO,aAAa,OAAO,cAAc,WAAW;AAAA,IACzE,CAAC,UAAU,MAAM,WAAW;AAAA,EAC7B;AAGA,QAAM,qBAAqB,aAAa,QAAO,kBAAa,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS,MAA3C,YAAgD,OAAO;AAItG,QAAM,aAAa,CAAC,MAAsB,gBAAkC;AAC3E,kBAAc,IAAI;AAClB,QAAI,SAAS,UAAU,aAAa;AACnC,mBAAa,YAAY,EAAE;AAC3B,kBAAY;AAAA,QACX,MAAM,YAAY;AAAA,QAClB,YAAY,YAAY;AAAA,QACxB,UAAU,YAAY;AAAA,QACtB,OAAO,YAAY,SAAS;AAAA,QAC5B,YAAY,YAAY;AAAA,QACxB,mBAAmB,YAAY;AAAA,QAC/B,QAAQ,YAAY,UAAU;AAAA,QAC9B,eAAe,YAAY;AAAA,QAC3B,UAAU,YAAY;AAAA,MACvB,CAAC;AAAA,IACF,OAAO;AACN,mBAAa,IAAI;AACjB,kBAAY,sBAAsB;AAAA,IACnC;AACA,kBAAc,IAAI;AAClB,mBAAe;AAAA,EAChB;AAEA,QAAM,wBAAwB,YAAY;AACzC,QAAI,CAAC,SAAS,KAAK,KAAK,GAAG;AAC1B,gBAAU,gCAAgC,SAAS;AACnD;AAAA,IACD;AACA,cAAU,IAAI;AACd,QAAI;AACH,UAAI,eAAe,OAAO;AACzB,cAAM,kBAAkB,QAAQ;AAChC,kBAAU,oCAAoC,SAAS;AAAA,MACxD,WAAW,WAAW;AACrB,cAAM,kBAAkB,WAAW,QAAoC;AACvE,kBAAU,oCAAoC,SAAS;AAAA,MACxD;AACA,oBAAc,KAAK;AACnB,YAAM,QAAQ;AAAA,IACf,SAAS,OAAY;AACpB,gBAAU,OAAO,OAAO,4BAA4B,GAAG,OAAO;AAAA,IAC/D,UAAE;AACD,gBAAU,KAAK;AAAA,IAChB;AAAA,EACD;AAEA,QAAM,0BAA0B,YAAY;AAC3C,QAAI,CAAC,aAAc;AACnB,mBAAe,IAAI;AACnB,QAAI;AACH,YAAM,kBAAkB,aAAa,EAAE;AACvC,gBAAU,oCAAoC,SAAS;AACvD,sBAAgB,IAAI;AACpB,YAAM,QAAQ;AAAA,IACf,SAAS,OAAY;AACpB,gBAAU,OAAO,OAAO,8BAA8B,GAAG,OAAO;AAAA,IACjE,UAAE;AACD,qBAAe,KAAK;AAAA,IACrB;AAAA,EACD;AAEA,QAAM,wBAAwB,YAAY;AACzC,QAAI,CAAC,iBAAkB;AACvB,mBAAe,IAAI;AACnB,QAAI;AACH,YAAM,uBAAuB,iBAAiB,EAAE;AAChD,gBAAU,6BAA6B,SAAS;AAChD,0BAAoB,IAAI;AACxB,YAAM,QAAQ;AAAA,IACf,SAAS,OAAY;AACpB,gBAAU,OAAO,OAAO,4BAA4B,GAAG,OAAO;AAAA,IAC/D,UAAE;AACD,qBAAe,KAAK;AAAA,IACrB;AAAA,EACD;AAEA,QAAM,uBAAuB,CAAC,QAAgB;AA7mC/C,QAAAA;AA8mCE,KAAAA,MAAA,UAAU,cAAV,gBAAAA,IAAqB,UAAU;AAC/B,cAAU,mCAAmC,MAAM;AAAA,EACpD;AAIA,QAAM,oBAAoB,OAAO,aAA8B,MAAsB,YAA0B;AAC9G,2BAAuB,WAAW;AAClC,mBAAe,IAAI;AACnB,QAAI,SAAS,UAAU,SAAS;AAC/B,0BAAoB,QAAQ,EAAE;AAC9B,yBAAmB;AAAA,QAClB,cAAc,QAAQ;AAAA,QACtB,gBAAgB,QAAQ,kBAAkB;AAAA,QAC1C,cAAc,QAAQ,gBAAgB;AAAA,QACtC,YAAY,QAAQ;AAAA,QACpB,kBAAkB,QAAQ,oBAAoB;AAAA,QAC9C,UAAU,QAAQ;AAAA,MACnB,CAAC;AACD,mBAAa,QAAQ,iBAAiB,CAAC,CAAC;AAAA,IACzC,OAAO;AACN,0BAAoB,IAAI;AACxB,yBAAmB,kBAAkB;AACrC,mBAAa,CAAC,CAAC;AAAA,IAChB;AACA,mBAAe;AACf,sBAAkB,CAAC,CAAC;AACpB,yBAAqB,IAAI;AACzB,QAAI;AACH,wBAAkB,MAAM,kBAAkB,YAAY,EAAE,CAAC;AAAA,IAC1D,SAAS,OAAY;AACpB,gBAAU,OAAO,OAAO,iCAAiC,GAAG,OAAO;AAAA,IACpE;AAAA,EACD;AAEA,QAAM,oBAAoB,YAAY;AACrC,QAAI,CAAC,uBAAuB,CAAC,gBAAgB,gBAAgB,CAAC,gBAAgB,YAAY;AACzF,gBAAU,qCAAqC,SAAS;AACxD;AAAA,IACD;AACA,UAAM,UAAU,iCACZ,kBADY;AAAA,MAEf,eAAe,UACb,OAAO,CAAC,QAAQ,IAAI,IAAI,KAAK,CAAC,EAC9B,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,IAAI,KAAK,GAAG,OAAO,IAAI,MAAM,KAAK,EAAE,EAAE;AAAA,IAClE;AACA,qBAAiB,IAAI;AACrB,QAAI;AACH,UAAI,gBAAgB,OAAO;AAC1B,cAAM,kBAAkB,oBAAoB,IAAI,OAAO;AACvD,kBAAU,wBAAwB,SAAS;AAAA,MAC5C,WAAW,kBAAkB;AAC5B,cAAM,kBAAkB,oBAAoB,IAAI,kBAAkB,OAAO;AACzE,kBAAU,wBAAwB,SAAS;AAAA,MAC5C;AACA,2BAAqB,KAAK;AAC1B,YAAM,QAAQ;AAAA,IACf,SAAS,OAAY;AACpB,gBAAU,OAAO,OAAO,wBAAwB,GAAG,OAAO;AAAA,IAC3D,UAAE;AACD,uBAAiB,KAAK;AAAA,IACvB;AAAA,EACD;AAEA,QAAM,sBAAsB,YAAY;AACvC,QAAI,CAAC,oBAAqB;AAC1B,mBAAe,IAAI;AACnB,QAAI;AACH,YAAM,kBAAkB,oBAAoB,YAAY,IAAI,oBAAoB,QAAQ,EAAE;AAC1F,gBAAU,wBAAwB,SAAS;AAC3C,6BAAuB,IAAI;AAC3B,YAAM,QAAQ;AAAA,IACf,SAAS,OAAY;AACpB,gBAAU,OAAO,OAAO,0BAA0B,GAAG,OAAO;AAAA,IAC7D,UAAE;AACD,qBAAe,KAAK;AAAA,IACrB;AAAA,EACD;AAIA,QAAM,WAAW,OAAO,gBAAiC;AACxD,2BAAuB,WAAW;AAClC,mBAAe,CAAC,CAAC;AACjB,mBAAe,IAAI;AACnB,sBAAkB,IAAI;AACtB,QAAI;AACH,qBAAe,MAAM,eAAe,YAAY,EAAE,CAAC;AAAA,IACpD,SAAS,OAAY;AACpB,gBAAU,OAAO,OAAO,sBAAsB,GAAG,OAAO;AAAA,IACzD,UAAE;AACD,qBAAe,KAAK;AAAA,IACrB;AAAA,EACD;AAIA,SACC,qBAAC,OACA;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,OAAM;AAAA,QACN,OAAO,SAAS;AAAA,QAChB,YAAW;AAAA,QACX,SACC,qBAAC,SAAM,WAAU,OAAM,YAAW,UAAS,SAAS,GACnD;AAAA;AAAA,YAAC;AAAA;AAAA,cACA,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,WACC,UAAU,oBAAC,oBAAiB,MAAM,IAAI,OAAM,WAAU,IAAK,oBAAC,eAAY,IAAI,EAAE,UAAU,qBAAqB,GAAG;AAAA,cAEjH,SAAS;AAAA,cACT,UAAU;AAAA,cACV,IAAI,EAAE,QAAQ,GAAG;AAAA,cACjB;AAAA;AAAA,UAED;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACA,aAAa,CAAC,gBAAgB,0BAA0B,gBAAgB,wBAAwB;AAAA,cAChG,cAAc;AAAA,cAEd;AAAA,gBAAC;AAAA;AAAA,kBACA,MAAK;AAAA,kBACL,WAAW,oBAAC,WAAQ,IAAI,EAAE,UAAU,kBAAkB,GAAG;AAAA,kBACzD,SAAS,MAAM,WAAW,KAAK;AAAA,kBAC/B,IAAI,EAAE,QAAQ,GAAG;AAAA,kBACjB;AAAA;AAAA,cAED;AAAA;AAAA,UACD;AAAA,WACD;AAAA;AAAA,IAEF;AAAA,IAEA,qBAAC,OAAI,IAAI,KAAK,IAAI,GAEjB;AAAA,2BAAC,SAAM,WAAU,OAAM,SAAS,GAAG,YAAW,UAAS,IAAI,GAAG,UAAS,QAAO,YAAU,MACvF;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAO;AAAA,YACP,UAAU,CAAC,MAAM;AAChB,wBAAU,CAAC;AACX,sBAAQ,CAAC;AAAA,YACV;AAAA,YACA,aAAY;AAAA;AAAA,QACb;AAAA,QACA,oBAAC,eAAY,MAAK,SAAQ,IAAI,EAAE,UAAU,IAAI,GAC7C;AAAA,UAAC;AAAA;AAAA,YACA,OAAO;AAAA,YACP,UAAU,CAAC,MAAM;AAChB,8BAAgB,EAAE,OAAO,KAAK;AAC9B,sBAAQ,CAAC;AAAA,YACV;AAAA,YACA,IAAI,EAAE,QAAQ,IAAI,UAAU,WAAW,cAAc,MAAM;AAAA,YAE3D;AAAA,kCAAC,YAAS,OAAM,OAAM,yBAAW;AAAA,cAChC,oBAAoB,IAAI,CAAC,QACzB,qBAAC,YAAyB,OAAO,IAAI,OACnC;AAAA,oBAAI;AAAA,gBAAK;AAAA,gBAAE,IAAI;AAAA,mBADF,IAAI,KAEnB,CACA;AAAA;AAAA;AAAA,QACF,GACD;AAAA,SACD;AAAA,MAGA,qBAAC,kBAAe,WAAW,OAAO,SAAQ,YAAW,IAAI,EAAE,SAAS,QAAQ,eAAe,SAAS,GACnG;AAAA,4BAAC,OAAI,IAAI,EAAE,WAAW,QAAQ,WAAW,IAAI,GAC5C,+BAAC,SAAM,cAAY,MAAC,MAAK,SACxB;AAAA,8BAAC,aACA,8BAAC,YACC,2BAAiB,IAAI,CAAC,QACtB,oBAAC,aAAoB,OAAO,YAAY,IAAI,GAAG,IAAI,WAAW,QAAQ,IAAI,YACxE,iBADc,GAEhB,CACA,GACF,GACD;AAAA,UACA,oBAAC,aACC,oBACA,oBAAC,YACA,8BAAC,aAAU,SAAS,iBAAiB,QAAQ,OAAM,UAAS,IAAI,EAAE,IAAI,EAAE,GACvE,8BAAC,oBAAiB,MAAM,IAAI,GAC7B,GACD,IACG,UAAU,WAAW,IACxB,oBAAC,YACA;AAAA,YAAC;AAAA;AAAA,cACA,SAAS,iBAAiB;AAAA,cAC1B,OAAM;AAAA,cACN,IAAI,EAAE,IAAI,GAAG,OAAO,QAAQ,UAAU,UAAU;AAAA,cAChD;AAAA;AAAA,UAED,GACD,IAEA,UAAU,IAAI,CAAC,gBAAa;AAjzCrC,gBAAAA;AAkzCU,wCAAC,YAA8B,IAAI,YAClC;AAAA,kCAAC,aAAU,IAAI,YACd,8BAAC,cAAW,YAAY,KAAK,UAAS,WACpC,sBAAY,MACd,GACD;AAAA,cACA,oBAAC,aAAU,IAAI,YACd;AAAA,gBAAC;AAAA;AAAA,kBACA,OAAO,GAAG,kBAAkB,YAAY,UAAU,CAAC,IAAI,mBAAmB,YAAY,UAAU,CAAC;AAAA,kBACjG,MAAK;AAAA,kBACL,SAAQ;AAAA;AAAA,cACT,GACD;AAAA,cACA,oBAAC,aAAU,IAAI,YACd;AAAA,gBAAC;AAAA;AAAA,kBACA,OAAO,gBAAgB,YAAY,QAAQ;AAAA,kBAC3C,MAAK;AAAA,kBACL,IAAI,aAAa,YAAY,QAAQ;AAAA;AAAA,cACtC,GACD;AAAA,cACA,oBAAC,aAAU,IAAI,YACd,8BAAC,mBAAgB,aAA0B,GAC5C;AAAA,cACA,oBAAC,aAAU,IAAI,YACd,+BAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,GAC1D;AAAA,oCAAC,WAAQ,OAAO,YAAY,cAAc,IACzC;AAAA,kBAAC;AAAA;AAAA,oBACA,QAAM;AAAA,oBACN,IAAI,EAAE,UAAU,UAAU,UAAU,KAAK,UAAU,UAAU,cAAc,WAAW;AAAA,oBAErF,sBAAY;AAAA;AAAA,gBACd,GACD;AAAA,gBACA,oBAAC,WAAQ,OAAM,YACd,8BAAC,cAAW,MAAK,SAAQ,SAAS,MAAM,qBAAqB,YAAY,UAAU,GAClF,8BAAC,mBAAgB,UAAS,SAAQ,GACnC,GACD;AAAA,iBACD,GACD;AAAA,cACA,qBAAC,aAAU,IAAI,YACd;AAAA,oCAAC,cAAW,UAAS,WAAW,sBAAY,oBAAmB;AAAA,gBAC9D,YAAY,cACZ,qBAAC,cAAW,SAAQ,WAAU,OAAM,kBAAiB;AAAA;AAAA,kBAC7C,IAAI,KAAK,YAAY,UAAU,EAAE,mBAAmB;AAAA,mBAC5D;AAAA,iBAEF;AAAA,cACA,oBAAC,aAAU,IAAI,YACd,+BAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,GAC1D;AAAA,oCAAC,QAAK,OAAO,KAAGA,MAAA,YAAY,iBAAZ,gBAAAA,IAA0B,WAAU,CAAC,aAAa,MAAK,SAAQ;AAAA,gBAC/E,oBAAC,sBAAmB,aAAa,oBAAoB,cAAc,OAClE,8BAAC,WAAQ,OAAM,eACd,8BAAC,cAAW,MAAK,SAAQ,SAAS,MAAM,kBAAkB,aAAa,KAAK,GAC3E,8BAAC,WAAQ,UAAS,SAAQ,GAC3B,GACD,GACD;AAAA,iBACD,GACD;AAAA,cACA,oBAAC,aAAU,IAAI,YAAY,OAAM,UAChC,+BAAC,SAAM,WAAU,OAAM,SAAS,KAAK,gBAAe,UACnD;AAAA,oCAAC,sBAAmB,aAAa,oBAAoB,cAAc,OAClE,8BAAC,WAAQ,OAAM,QACd,8BAAC,cAAW,MAAK,SAAQ,IAAI,kBAAkB,SAAS,MAAM,WAAW,QAAQ,WAAW,GAC3F,8BAAC,YAAS,UAAS,SAAQ,GAC5B,GACD,GACD;AAAA,gBACA,oBAAC,WAAQ,OAAM,aACd,8BAAC,cAAW,MAAK,SAAQ,SAAS,MAAM,SAAS,WAAW,GAC3D,8BAAC,eAAY,UAAS,SAAQ,GAC/B,GACD;AAAA,gBACA,oBAAC,sBAAmB,aAAa,oBAAoB,cAAc,OAClE,8BAAC,WAAQ,OAAM,oBACd,8BAAC,cAAW,MAAK,SAAQ,SAAS,MAAM,oBAAoB,WAAW,GACtE,8BAAC,eAAY,UAAS,SAAQ,GAC/B,GACD,GACD;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACA,aAAa;AAAA,sBACZ,gBAAgB;AAAA,sBAChB,gBAAgB;AAAA,oBACjB;AAAA,oBACA,cAAc;AAAA,oBAEd,8BAAC,WAAQ,OAAM,UACd,8BAAC,cAAW,MAAK,SAAQ,IAAI,iBAAiB,SAAS,MAAM,gBAAgB,WAAW,GACvF,8BAAC,cAAW,UAAS,SAAQ,GAC9B,GACD;AAAA;AAAA,gBACD;AAAA,iBACD,GACD;AAAA,iBA/Fc,YAAY,EAgG3B;AAAA,WACA,GAEH;AAAA,WACD,GACD;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,WAAU;AAAA,YACV,OAAO,SAAS;AAAA,YAChB;AAAA,YACA;AAAA,YACA,cAAc,CAAC,GAAG,MAAM,QAAQ,CAAC;AAAA,YACjC,qBAAqB,CAAC,MAAM;AAC3B,6BAAe,SAAS,EAAE,OAAO,OAAO,EAAE,CAAC;AAC3C,sBAAQ,CAAC;AAAA,YACV;AAAA,YACA,oBAAoB,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG;AAAA,YACxC,IAAI,EAAE,WAAW,oBAAoB;AAAA;AAAA,QACtC;AAAA,SACD;AAAA,OACD;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,SAAS,MAAM,cAAc,KAAK;AAAA,QAClC,cAAc,CAAC,gBAAgB,kBAAkB,aAAa,KAAK;AAAA,QACnE,eAAe,CAAC,aAAa,YAAY,kBAAkB,aAAa,QAAQ,OAAO;AAAA,QACvF,iBAAiB,CAAC,aAAa,YAAY,uBAAuB,EAAE,aAAa,QAAQ,CAAC;AAAA;AAAA,IAC3F;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SAAS,MAAM,qBAAqB,KAAK;AAAA;AAAA,IAC1C;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,MAAM;AAAA,QACN,kBAAiB,2DAAqB,SAAQ;AAAA,QAC9C,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS,MAAM,kBAAkB,KAAK;AAAA;AAAA,IACvC;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,MAAM,CAAC,CAAC;AAAA,QACR,OAAM;AAAA,QACN,SAAS,WAAW,6CAAc,IAAI;AAAA,QACtC,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS,MAAM,gBAAgB,IAAI;AAAA;AAAA,IACpC;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,MAAM,CAAC,CAAC;AAAA,QACR,OAAM;AAAA,QACN,SAAS,iCAAgC,2DAAqB,QAAQ,oBAAkB,2DAAqB,QAAQ,aAAY;AAAA,QACjI,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS,MAAM,uBAAuB,IAAI;AAAA;AAAA,IAC3C;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,MAAM,CAAC,CAAC;AAAA,QACR,OAAM;AAAA,QACN,SAAS,qCAAqC,qDAAkB,IAAI;AAAA,QACpE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS,MAAM,oBAAoB,IAAI;AAAA;AAAA,IACxC;AAAA,KACD;AAEF,CAAC;AAED,wBAAwB,cAAc;AAItC,IAAM,mBAA6B,MAClC,oBAAC,eACA,8BAAC,2BAAwB,GAC1B;AAGD,IAAO,2BAAQ;","names":["useCallback","useState","IntegrationDialog","useState","_a","MappingDialog","useCallback"]}