@libredb/studio 0.9.12 → 0.9.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/drawer.tsx","../src/lib/connection-string-parser.ts","../src/hooks/use-connection-form.ts","../src/hooks/use-mobile.ts","../src/components/ConnectionModal.tsx"],"names":["DrawerPrimitive","__spreadValues","__objRest","jsx","cn","jsxs","__spreadProps","useState","useEffect","getDBConfig","useCallback","ENVIRONMENT_COLORS","React","Fragment","motion","Zap","ClipboardPaste","AnimatePresence","Label","Input","Button","Database","ENVIRONMENT_LABELS","Globe","Link","Key","ShieldCheck","Settings2","ChevronDown","Lock","Terminal","CheckCircle2","XCircle","Dialog","DialogContent","DialogTitle","DialogDescription"],"mappings":"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","file":"chunk-JOGLIOFO.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Drawer({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n \"group/drawer-content bg-background fixed z-50 flex h-auto flex-col\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n <div className=\"bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n","import { DatabaseType } from '@/lib/types';\n\nexport interface ParsedConnection {\n type: DatabaseType;\n host?: string;\n port?: string;\n user?: string;\n password?: string;\n database?: string;\n connectionString?: string;\n}\n\n/**\n * Parse a database connection string URL into its components.\n * Supports: postgres://, postgresql://, mysql://, mongodb://, mongodb+srv://, redis://\n */\nexport function parseConnectionString(input: string): ParsedConnection | null {\n const trimmed = input.trim();\n if (!trimmed) return null;\n\n // MongoDB connection strings\n if (trimmed.startsWith('mongodb://') || trimmed.startsWith('mongodb+srv://')) {\n return parseMongoDBString(trimmed);\n }\n\n // PostgreSQL\n if (trimmed.startsWith('postgres://') || trimmed.startsWith('postgresql://')) {\n return parseGenericURL(trimmed, 'postgres', '5432');\n }\n\n // MySQL\n if (trimmed.startsWith('mysql://')) {\n return parseGenericURL(trimmed, 'mysql', '3306');\n }\n\n // Redis\n if (trimmed.startsWith('redis://') || trimmed.startsWith('rediss://')) {\n return parseGenericURL(trimmed, 'redis', '6379');\n }\n\n // Oracle\n if (trimmed.startsWith('oracle://')) {\n return parseGenericURL(trimmed, 'oracle', '1521');\n }\n\n // MSSQL / SQL Server\n if (trimmed.startsWith('mssql://') || trimmed.startsWith('sqlserver://')) {\n return parseGenericURL(trimmed, 'mssql', '1433');\n }\n\n // ADO.NET format: Server=host;Database=db;User Id=user;Password=pass;\n if (/^Server\\s*=/i.test(trimmed)) {\n return parseADONetString(trimmed);\n }\n\n return null;\n}\n\nfunction parseMongoDBString(uri: string): ParsedConnection {\n const result: ParsedConnection = {\n type: 'mongodb',\n connectionString: uri,\n };\n\n try {\n // For mongodb+srv, we can't use URL directly for host/port\n // but we can extract user/pass/database\n const isSRV = uri.startsWith('mongodb+srv://');\n\n // Extract database from path\n const withoutProtocol = uri.replace(/^mongodb(\\+srv)?:\\/\\//, '');\n const atIndex = withoutProtocol.indexOf('@');\n const afterAuth = atIndex >= 0 ? withoutProtocol.slice(atIndex + 1) : withoutProtocol;\n\n // Split host(s) from path\n const slashIndex = afterAuth.indexOf('/');\n if (slashIndex >= 0) {\n const pathPart = afterAuth.slice(slashIndex + 1);\n const dbName = pathPart.split('?')[0];\n if (dbName) result.database = decodeURIComponent(dbName);\n }\n\n // Extract credentials\n if (atIndex >= 0) {\n const authPart = withoutProtocol.slice(0, atIndex);\n const colonIndex = authPart.indexOf(':');\n if (colonIndex >= 0) {\n result.user = decodeURIComponent(authPart.slice(0, colonIndex));\n result.password = decodeURIComponent(authPart.slice(colonIndex + 1));\n } else {\n result.user = decodeURIComponent(authPart);\n }\n }\n\n // Extract host/port for non-SRV\n if (!isSRV && slashIndex >= 0) {\n const hostPart = afterAuth.slice(0, slashIndex);\n const firstHost = hostPart.split(',')[0]; // take first host for replica sets\n const [host, port] = firstHost.split(':');\n if (host) result.host = host;\n if (port) result.port = port;\n }\n } catch {\n // If parsing fails, we still have the connectionString\n }\n\n return result;\n}\n\nfunction parseADONetString(input: string): ParsedConnection | null {\n try {\n const params: Record<string, string> = {};\n input.split(';').forEach((part) => {\n const eq = part.indexOf('=');\n if (eq > 0) {\n const key = part.slice(0, eq).trim().toLowerCase();\n const val = part.slice(eq + 1).trim();\n params[key] = val;\n }\n });\n\n const host = params['server'] || params['data source'] || 'localhost';\n const [hostPart, portPart] = host.split(',');\n\n return {\n type: 'mssql',\n host: hostPart || 'localhost',\n port: portPart || '1433',\n user: params['user id'] || params['uid'] || undefined,\n password: params['password'] || params['pwd'] || undefined,\n database: params['database'] || params['initial catalog'] || undefined,\n };\n } catch {\n return null;\n }\n}\n\nfunction parseGenericURL(\n uri: string,\n type: DatabaseType,\n defaultPort: string\n): ParsedConnection | null {\n try {\n const url = new URL(uri);\n\n return {\n type,\n host: url.hostname || 'localhost',\n port: url.port || defaultPort,\n user: url.username ? decodeURIComponent(url.username) : undefined,\n password: url.password ? decodeURIComponent(url.password) : undefined,\n database: url.pathname.slice(1) || undefined, // remove leading /\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Detect the database type from a connection string.\n */\nexport function detectConnectionStringType(input: string): DatabaseType | null {\n const trimmed = input.trim().toLowerCase();\n if (trimmed.startsWith('postgres://') || trimmed.startsWith('postgresql://')) return 'postgres';\n if (trimmed.startsWith('mysql://')) return 'mysql';\n if (trimmed.startsWith('mongodb://') || trimmed.startsWith('mongodb+srv://')) return 'mongodb';\n if (trimmed.startsWith('redis://') || trimmed.startsWith('rediss://')) return 'redis';\n if (trimmed.startsWith('oracle://')) return 'oracle';\n if (trimmed.startsWith('mssql://') || trimmed.startsWith('sqlserver://')) return 'mssql';\n if (/^server\\s*=/i.test(trimmed)) return 'mssql';\n return null;\n}\n","'use client';\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { DatabaseConnection, DatabaseType, ConnectionEnvironment, ENVIRONMENT_COLORS, SSLMode, SSLConfig, SSHTunnelConfig } from '@/lib/types';\nimport { getDBConfig } from '@/lib/db-ui-config';\nimport { parseConnectionString } from '@/lib/connection-string-parser';\n\ninterface UseConnectionFormProps {\n isOpen: boolean;\n onClose: () => void;\n onConnect: (conn: DatabaseConnection) => void;\n editConnection?: DatabaseConnection | null;\n /** Optional API adapter: when provided, bypasses the built-in /api/db/test-connection fetch. */\n onTestConnection?: (connection: DatabaseConnection) => Promise<{ success: boolean; latency?: number; error?: string }>;\n}\n\nexport function useConnectionForm({ isOpen, onConnect, editConnection, onTestConnection }: UseConnectionFormProps) {\n const [type, setType] = useState<DatabaseType>('postgres');\n const [name, setName] = useState('');\n const [host, setHost] = useState('localhost');\n const [port, setPort] = useState('5432');\n const [user, setUser] = useState('');\n const [password, setPassword] = useState('');\n const [database, setDatabase] = useState('');\n const [isTesting, setIsTesting] = useState(false);\n const [connectionString, setConnectionString] = useState('');\n const [mongoConnectionMode, setMongoConnectionMode] = useState<'host' | 'connectionString'>('host');\n const [environment, setEnvironment] = useState<ConnectionEnvironment>('local');\n const [testResult, setTestResult] = useState<{ success: boolean; message: string; latency?: number } | null>(null);\n const [pasteInput, setPasteInput] = useState('');\n const [showPasteInput, setShowPasteInput] = useState(false);\n\n // SSL/TLS\n const [showSSL, setShowSSL] = useState(false);\n const [sslMode, setSSLMode] = useState<SSLMode>('disable');\n const [caCert, setCaCert] = useState('');\n const [clientCert, setClientCert] = useState('');\n const [clientKey, setClientKey] = useState('');\n\n // Advanced (Oracle/MSSQL)\n const [showAdvanced, setShowAdvanced] = useState(false);\n const [serviceName, setServiceName] = useState('');\n const [instanceName, setInstanceName] = useState('');\n\n // SSH Tunnel\n const [showSSH, setShowSSH] = useState(false);\n const [sshEnabled, setSSHEnabled] = useState(false);\n const [sshHost, setSSHHost] = useState('');\n const [sshPort, setSSHPort] = useState('22');\n const [sshUsername, setSSHUsername] = useState('');\n const [sshAuthMethod, setSSHAuthMethod] = useState<'password' | 'privateKey'>('password');\n const [sshPassword, setSSHPassword] = useState('');\n const [sshPrivateKey, setSSHPrivateKey] = useState('');\n const [sshPassphrase, setSSHPassphrase] = useState('');\n\n const isEditMode = !!editConnection;\n\n // Populate form when editing\n useEffect(() => {\n if (editConnection) {\n setType(editConnection.type);\n setName(editConnection.name);\n setHost(editConnection.host || 'localhost');\n setPort(editConnection.port?.toString() || getDBConfig(editConnection.type).defaultPort);\n setUser(editConnection.user || '');\n setPassword(editConnection.password || '');\n setDatabase(editConnection.database || '');\n setConnectionString(editConnection.connectionString || '');\n setEnvironment(editConnection.environment || 'local');\n if (editConnection.connectionString) {\n setMongoConnectionMode('connectionString');\n }\n // Advanced fields\n if (editConnection.serviceName) {\n setServiceName(editConnection.serviceName);\n setShowAdvanced(true);\n }\n if (editConnection.instanceName) {\n setInstanceName(editConnection.instanceName);\n setShowAdvanced(true);\n }\n // SSL\n if (editConnection.ssl) {\n setSSLMode(editConnection.ssl.mode);\n setCaCert(editConnection.ssl.caCert || '');\n setClientCert(editConnection.ssl.clientCert || '');\n setClientKey(editConnection.ssl.clientKey || '');\n if (editConnection.ssl.mode !== 'disable') setShowSSL(true);\n }\n // SSH\n if (editConnection.sshTunnel?.enabled) {\n setSSHEnabled(true);\n setShowSSH(true);\n setSSHHost(editConnection.sshTunnel.host);\n setSSHPort(editConnection.sshTunnel.port.toString());\n setSSHUsername(editConnection.sshTunnel.username);\n setSSHAuthMethod(editConnection.sshTunnel.authMethod);\n setSSHPassword(editConnection.sshTunnel.password || '');\n setSSHPrivateKey(editConnection.sshTunnel.privateKey || '');\n setSSHPassphrase(editConnection.sshTunnel.passphrase || '');\n }\n }\n }, [editConnection]);\n\n // Reset form when modal closes\n useEffect(() => {\n if (!isOpen) {\n setTestResult(null);\n setShowPasteInput(false);\n setPasteInput('');\n if (!editConnection) {\n setName('');\n setUser('');\n setPassword('');\n setDatabase('');\n setConnectionString('');\n setMongoConnectionMode('host');\n setType('postgres');\n setHost('localhost');\n setPort('5432');\n }\n }\n }, [isOpen, editConnection]);\n\n const buildConnection = useCallback((): DatabaseConnection => {\n const sslConfig: SSLConfig | undefined = sslMode !== 'disable' ? {\n mode: sslMode,\n ...(caCert ? { caCert } : {}),\n ...(clientCert ? { clientCert } : {}),\n ...(clientKey ? { clientKey } : {}),\n } : undefined;\n\n const sshConfig: SSHTunnelConfig | undefined = sshEnabled ? {\n enabled: true,\n host: sshHost,\n port: parseInt(sshPort) || 22,\n username: sshUsername,\n authMethod: sshAuthMethod,\n ...(sshAuthMethod === 'password' ? { password: sshPassword } : {}),\n ...(sshAuthMethod === 'privateKey' ? { privateKey: sshPrivateKey } : {}),\n ...(sshPassphrase ? { passphrase: sshPassphrase } : {}),\n } : undefined;\n\n return {\n id: editConnection?.id || Math.random().toString(36).substr(2, 9),\n name: name || `${type}-connection`,\n type,\n host,\n port: parseInt(port),\n user,\n password,\n database,\n createdAt: editConnection?.createdAt || new Date(),\n environment,\n color: ENVIRONMENT_COLORS[environment],\n ...(sslConfig ? { ssl: sslConfig } : {}),\n ...(sshConfig ? { sshTunnel: sshConfig } : {}),\n ...(getDBConfig(type).showConnectionStringToggle && mongoConnectionMode === 'connectionString' ? {\n connectionString,\n host: undefined,\n port: undefined,\n user: undefined,\n password: undefined,\n } : {}),\n ...(type === 'oracle' && serviceName ? { serviceName } : {}),\n ...(type === 'mssql' && instanceName ? { instanceName } : {}),\n };\n }, [\n sslMode, caCert, clientCert, clientKey,\n sshEnabled, sshHost, sshPort, sshUsername, sshAuthMethod, sshPassword, sshPrivateKey, sshPassphrase,\n editConnection, name, type, host, port, user, password, database, environment,\n mongoConnectionMode, connectionString, serviceName, instanceName,\n ]);\n\n const handleTestConnection = useCallback(async () => {\n setIsTesting(true);\n setTestResult(null);\n\n try {\n const conn = buildConnection();\n\n if (onTestConnection) {\n // Platform adapter: use callback instead of fetch\n const result = await onTestConnection(conn);\n setTestResult({\n success: result.success,\n message: result.success\n ? `Connected successfully${result.latency ? ` (${result.latency}ms)` : ''}`\n : result.error || 'Connection failed',\n latency: result.latency,\n });\n } else {\n // Default: existing fetch behavior\n const response = await fetch('/api/db/test-connection', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(conn),\n });\n\n const result = await response.json();\n setTestResult({\n success: result.success,\n message: result.success\n ? `Connected successfully${result.latency ? ` (${result.latency}ms)` : ''}`\n : result.error || 'Connection failed',\n latency: result.latency,\n });\n }\n } catch {\n setTestResult({ success: false, message: 'Network error - could not reach server' });\n } finally {\n setIsTesting(false);\n }\n }, [buildConnection, onTestConnection]);\n\n const handleConnect = useCallback(async () => {\n setIsTesting(true);\n setTestResult(null);\n\n try {\n const conn = buildConnection();\n\n let result: { success: boolean; error?: string };\n if (onTestConnection) {\n // Platform adapter: use callback instead of fetch\n result = await onTestConnection(conn);\n } else {\n // Default: existing fetch behavior\n const response = await fetch('/api/db/test-connection', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(conn),\n });\n result = await response.json();\n }\n\n if (result.success) {\n onConnect(conn);\n // Reset form\n setName('');\n setUser('');\n setPassword('');\n setDatabase('');\n setConnectionString('');\n setMongoConnectionMode('host');\n setTestResult(null);\n } else {\n setTestResult({ success: false, message: result.error || 'Connection failed' });\n }\n } catch {\n setTestResult({ success: false, message: 'Network error - could not reach server' });\n } finally {\n setIsTesting(false);\n }\n }, [buildConnection, type, onConnect, onTestConnection]);\n\n const handlePasteConnectionString = useCallback(() => {\n const trimmed = pasteInput.trim();\n if (!trimmed) return;\n\n const parsed = parseConnectionString(trimmed);\n if (!parsed) {\n setTestResult({ success: false, message: 'Could not parse connection string. Supported formats: postgres://, mysql://, mongodb://, redis://, oracle://, mssql://' });\n return;\n }\n\n // Auto-switch DB type\n setType(parsed.type);\n if (parsed.host) setHost(parsed.host);\n if (parsed.port) setPort(parsed.port);\n if (parsed.user) setUser(parsed.user);\n if (parsed.password) setPassword(parsed.password);\n if (parsed.database) setDatabase(parsed.database);\n\n // For MongoDB, also set connection string mode\n if (parsed.type === 'mongodb' && parsed.connectionString) {\n setConnectionString(parsed.connectionString);\n setMongoConnectionMode('connectionString');\n }\n\n // Auto-fill name if empty\n if (!name) {\n const dbName = parsed.database || parsed.host || parsed.type;\n setName(`${dbName}`);\n }\n\n setShowPasteInput(false);\n setPasteInput('');\n setTestResult({ success: true, message: 'Connection string parsed successfully. Review the fields and connect.' });\n }, [pasteInput, name]);\n\n const selectableTypes: DatabaseType[] = ['postgres', 'mysql', 'oracle', 'mssql', 'mongodb', 'redis'];\n const dbTypes = selectableTypes.map(t => {\n const cfg = getDBConfig(t);\n return { value: t, label: cfg.label, icon: cfg.icon, color: cfg.color };\n });\n\n return {\n // Connection fields\n type, setType,\n name, setName,\n host, setHost,\n port, setPort,\n user, setUser,\n password, setPassword,\n database, setDatabase,\n connectionString, setConnectionString,\n mongoConnectionMode, setMongoConnectionMode,\n environment, setEnvironment,\n\n // UI state\n isTesting,\n testResult, setTestResult,\n pasteInput, setPasteInput,\n showPasteInput, setShowPasteInput,\n isEditMode,\n\n // SSL/TLS\n showSSL, setShowSSL,\n sslMode, setSSLMode,\n caCert, setCaCert,\n clientCert, setClientCert,\n clientKey, setClientKey,\n\n // Advanced (Oracle/MSSQL)\n showAdvanced, setShowAdvanced,\n serviceName, setServiceName,\n instanceName, setInstanceName,\n\n // SSH Tunnel\n showSSH, setShowSSH,\n sshEnabled, setSSHEnabled,\n sshHost, setSSHHost,\n sshPort, setSSHPort,\n sshUsername, setSSHUsername,\n sshAuthMethod, setSSHAuthMethod,\n sshPassword, setSSHPassword,\n sshPrivateKey, setSSHPrivateKey,\n sshPassphrase, setSSHPassphrase,\n\n // Handlers\n handleTestConnection,\n handleConnect,\n handlePasteConnectionString,\n\n // Derived data\n dbTypes,\n };\n}\n","import * as React from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean>(false)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(mql.matches)\n }\n // Set initial value immediately\n setIsMobile(mql.matches)\n mql.addEventListener(\"change\", onChange)\n return () => mql.removeEventListener(\"change\", onChange)\n }, [])\n\n return isMobile\n}\n","\"use client\";\n\nimport { Dialog, DialogContent, DialogTitle, DialogDescription } from '@/components/ui/dialog';\nimport { Drawer, DrawerContent, DrawerHeader, DrawerTitle, DrawerDescription } from '@/components/ui/drawer';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport { DatabaseConnection, ConnectionEnvironment, ENVIRONMENT_COLORS, ENVIRONMENT_LABELS, SSLMode } from '@/lib/types';\nimport { Database, ShieldCheck, Zap, Globe, Key, Link, CheckCircle2, XCircle, ClipboardPaste, Lock, ChevronDown, Terminal, Settings2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { getDBConfig } from '@/lib/db-ui-config';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { useConnectionForm } from '@/hooks/use-connection-form';\nimport { useIsMobile } from '@/hooks/use-mobile';\n\ninterface ConnectionModalProps {\n isOpen: boolean;\n onClose: () => void;\n onConnect: (conn: DatabaseConnection) => void;\n editConnection?: DatabaseConnection | null;\n /** Optional API adapter: when provided, bypasses the built-in /api/db/test-connection fetch. */\n onTestConnection?: (connection: DatabaseConnection) => Promise<{ success: boolean; latency?: number; error?: string }>;\n}\n\nexport function ConnectionModal({ isOpen, onClose, onConnect, editConnection, onTestConnection }: ConnectionModalProps) {\n const isMobile = useIsMobile();\n const {\n // Connection fields\n type, setType,\n name, setName,\n host, setHost,\n port, setPort,\n user, setUser,\n password, setPassword,\n database, setDatabase,\n connectionString, setConnectionString,\n mongoConnectionMode, setMongoConnectionMode,\n environment, setEnvironment,\n\n // UI state\n isTesting,\n testResult, setTestResult,\n pasteInput, setPasteInput,\n showPasteInput, setShowPasteInput,\n isEditMode,\n\n // SSL/TLS\n showSSL, setShowSSL,\n sslMode, setSSLMode,\n caCert, setCaCert,\n clientCert, setClientCert,\n clientKey, setClientKey,\n\n // Advanced (Oracle/MSSQL)\n showAdvanced, setShowAdvanced,\n serviceName, setServiceName,\n instanceName, setInstanceName,\n\n // SSH Tunnel\n showSSH, setShowSSH,\n sshEnabled, setSSHEnabled,\n sshHost, setSSHHost,\n sshPort, setSSHPort,\n sshUsername, setSSHUsername,\n sshAuthMethod, setSSHAuthMethod,\n sshPassword, setSSHPassword,\n sshPrivateKey, setSSHPrivateKey,\n sshPassphrase, setSSHPassphrase,\n\n // Handlers\n handleTestConnection,\n handleConnect,\n handlePasteConnectionString,\n\n // Derived data\n dbTypes,\n } = useConnectionForm({ isOpen, onClose, onConnect, editConnection, onTestConnection });\n\n const formContent = (\n <>\n {/* Progress bar — fixed top */}\n <div className=\"shrink-0 h-2 w-full bg-blue-600/20\">\n <motion.div\n initial={{ width: 0 }}\n animate={{ width: '100%' }}\n className=\"h-full bg-blue-500 shadow-[0_0_15px_rgba(59,130,246,0.5)]\"\n />\n </div>\n\n {/* Scrollable body */}\n <div className=\"flex-1 overflow-y-auto p-4 md:p-8\">\n <div className=\"mb-4 md:mb-8\">\n <div className=\"flex items-center gap-3 mb-2\">\n <div className=\"p-2 rounded-xl bg-blue-500/10 border border-blue-500/20\">\n <Zap className=\"w-5 h-5 text-blue-400\" />\n </div>\n <h2 className=\"text-xl md:text-2xl font-bold tracking-tight\">\n {isEditMode ? 'Edit Connection' : 'New Connection'}\n </h2>\n </div>\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-zinc-500\">\n {isEditMode ? 'Update your database connection parameters.' : 'Configure your database connection parameters securely.'}\n </p>\n {!isEditMode && (\n <button\n onClick={() => setShowPasteInput(!showPasteInput)}\n className=\"flex items-center gap-1.5 text-xs font-bold uppercase tracking-wider text-blue-400 hover:text-blue-300 transition-colors px-2 py-1 rounded-md hover:bg-blue-500/10\"\n >\n <ClipboardPaste className=\"w-3 h-3\" />\n Paste URL\n </button>\n )}\n </div>\n </div>\n\n {/* Paste Connection String Input */}\n <AnimatePresence>\n {showPasteInput && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"mb-6 overflow-hidden\"\n >\n <div className=\"p-3 rounded-lg border border-blue-500/20 bg-blue-500/5 space-y-2\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-blue-400\">\n Paste Connection URL\n </Label>\n <div className=\"flex gap-2\">\n <Input\n value={pasteInput}\n onChange={(e) => setPasteInput(e.target.value)}\n placeholder=\"postgres://user:pass@host:5432/db or mongodb://...\"\n className=\"h-9 bg-zinc-900/50 border-white/5 focus:border-blue-500/50 text-sm font-mono flex-1\"\n onKeyDown={(e) => e.key === 'Enter' && handlePasteConnectionString()}\n />\n <Button\n size=\"sm\"\n onClick={handlePasteConnectionString}\n className=\"bg-blue-600 hover:bg-blue-500 text-white h-9 px-4 text-xs font-bold\"\n >\n Parse\n </Button>\n </div>\n <p className=\"text-xs text-zinc-500\">\n Supports: postgres://, mysql://, mongodb://, redis://, oracle://, mssql://\n </p>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n <div className=\"space-y-4 md:space-y-6\">\n {/* Connection Name - always visible */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 mb-1\">\n <Database className=\"w-3 h-3 text-zinc-500\" />\n <Label htmlFor=\"name\" className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Connection Name</Label>\n </div>\n <Input\n id=\"name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"My Database\"\n className=\"h-10 bg-zinc-900/50 border-white/5 focus:border-blue-500/50 transition-all text-sm\"\n />\n </div>\n\n {/* Environment Selector */}\n <div className=\"space-y-2\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Environment</Label>\n <div className=\"flex flex-wrap items-center gap-2\">\n {(Object.keys(ENVIRONMENT_COLORS) as ConnectionEnvironment[]).map((env) => (\n <button\n key={env}\n onClick={() => setEnvironment(env)}\n className={cn(\n \"flex items-center gap-1.5 px-3 py-1.5 rounded-md text-xs font-bold uppercase tracking-wider transition-all border\",\n environment === env\n ? \"border-white/20 bg-white/5 text-zinc-200\"\n : \"border-transparent text-zinc-500 hover:text-zinc-300 hover:bg-white/5\"\n )}\n >\n <div\n className=\"w-2 h-2 rounded-full\"\n style={{ backgroundColor: ENVIRONMENT_COLORS[env] }}\n />\n {env === 'other' ? 'Other' : ENVIRONMENT_LABELS[env]}\n </button>\n ))}\n </div>\n </div>\n\n {/* DB Type Selector */}\n <div className=\"grid grid-cols-2 gap-3\">\n {dbTypes.map((db) => (\n <button\n key={db.value}\n onClick={() => {\n setType(db.value);\n const cfg = getDBConfig(db.value);\n if (cfg.defaultPort) setPort(cfg.defaultPort);\n setTestResult(null);\n }}\n disabled={isEditMode}\n className={cn(\n \"flex flex-col items-center justify-center p-3 md:p-4 rounded-xl border transition-all duration-200 gap-2 group\",\n type === db.value\n ? \"bg-blue-600/10 border-blue-500/50 shadow-[0_0_20px_rgba(59,130,246,0.1)]\"\n : \"bg-zinc-900/50 border-white/5 hover:border-white/10 hover:bg-zinc-900\",\n isEditMode && type !== db.value && \"opacity-30 cursor-not-allowed\"\n )}\n >\n <db.icon className={cn(\"w-6 h-6 mb-1 transition-transform group-hover:scale-110\", type === db.value ? db.color : \"text-zinc-600\")} />\n <span className={cn(\"text-xs font-semibold\", type === db.value ? \"text-zinc-200\" : \"text-zinc-500\")}>\n {db.label}\n </span>\n </button>\n ))}\n </div>\n\n <div className=\"space-y-4 animate-in fade-in slide-in-from-bottom-4 duration-500\">\n <>\n {/* Connection string mode toggle */}\n {getDBConfig(type).showConnectionStringToggle && (\n <div className=\"flex items-center gap-2 p-1 rounded-lg bg-zinc-900/50 border border-white/5\">\n <button\n onClick={() => setMongoConnectionMode('host')}\n className={cn(\n \"flex-1 flex items-center justify-center gap-2 px-3 py-2 rounded-md text-xs font-bold transition-all\",\n mongoConnectionMode === 'host'\n ? \"bg-blue-600/20 text-blue-400 border border-blue-500/30\"\n : \"text-zinc-500 hover:text-zinc-300\"\n )}\n >\n <Globe className=\"w-3 h-3\" />\n Host / Port\n </button>\n <button\n onClick={() => setMongoConnectionMode('connectionString')}\n className={cn(\n \"flex-1 flex items-center justify-center gap-2 px-3 py-2 rounded-md text-xs font-bold transition-all\",\n mongoConnectionMode === 'connectionString'\n ? \"bg-blue-600/20 text-blue-400 border border-blue-500/30\"\n : \"text-zinc-500 hover:text-zinc-300\"\n )}\n >\n <Link className=\"w-3 h-3\" />\n Connection String\n </button>\n </div>\n )}\n\n {getDBConfig(type).showConnectionStringToggle && mongoConnectionMode === 'connectionString' ? (\n <>\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 mb-1\">\n <Link className=\"w-3 h-3 text-zinc-500\" />\n <Label htmlFor=\"connectionString\" className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Connection URI</Label>\n </div>\n <Input\n id=\"connectionString\"\n value={connectionString}\n onChange={(e) => setConnectionString(e.target.value)}\n placeholder=\"mongodb://localhost:27017/mydb or mongodb+srv://...\"\n className=\"h-10 bg-zinc-900/50 border-white/5 focus:border-blue-500/50 transition-all text-sm font-mono\"\n />\n </div>\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 mb-1\">\n <Database className=\"w-3 h-3 text-zinc-500\" />\n <Label htmlFor=\"database\" className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Database Name (optional override)</Label>\n </div>\n <Input\n id=\"database\"\n value={database}\n onChange={(e) => setDatabase(e.target.value)}\n placeholder=\"Extracted from URI if not provided\"\n className=\"h-10 bg-zinc-900/50 border-white/5 focus:border-blue-500/50 transition-all text-sm font-mono\"\n />\n </div>\n </>\n ) : (\n <>\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 mb-1\">\n <Globe className=\"w-3 h-3 text-zinc-500\" />\n <Label htmlFor=\"host\" className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Host & Instance</Label>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-3\">\n <Input\n id=\"host\"\n value={host}\n onChange={(e) => setHost(e.target.value)}\n placeholder=\"localhost\"\n className=\"md:col-span-3 h-10 bg-zinc-900/50 border-white/5 focus:border-blue-500/50 transition-all text-sm\"\n />\n <Input\n id=\"port\"\n value={port}\n onChange={(e) => setPort(e.target.value)}\n className=\"h-10 bg-zinc-900/50 border-white/5 focus:border-blue-500/50 transition-all text-sm font-mono\"\n />\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 mb-1\">\n <Key className=\"w-3 h-3 text-zinc-500\" />\n <Label htmlFor=\"user\" className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Username</Label>\n </div>\n <Input\n id=\"user\"\n value={user}\n onChange={(e) => setUser(e.target.value)}\n placeholder=\"postgres\"\n className=\"h-10 bg-zinc-900/50 border-white/5 focus:border-blue-500/50 transition-all text-sm\"\n />\n </div>\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 mb-1\">\n <ShieldCheck className=\"w-3 h-3 text-zinc-500\" />\n <Label htmlFor=\"password\" className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Password</Label>\n </div>\n <Input\n id=\"password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"••••••••\"\n className=\"h-10 bg-zinc-900/50 border-white/5 focus:border-blue-500/50 transition-all text-sm\"\n />\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 mb-1\">\n <Database className=\"w-3 h-3 text-zinc-500\" />\n <Label htmlFor=\"database\" className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Database Name</Label>\n </div>\n <Input\n id=\"database\"\n value={database}\n onChange={(e) => setDatabase(e.target.value)}\n placeholder=\"production_db\"\n className=\"h-10 bg-zinc-900/50 border-white/5 focus:border-blue-500/50 transition-all text-sm font-mono\"\n />\n </div>\n </>\n )}\n </>\n </div>\n\n {/* Advanced Settings (Oracle/MSSQL) */}\n {(type === 'oracle' || type === 'mssql') && (\n <div className=\"space-y-2\">\n <button\n type=\"button\"\n onClick={() => setShowAdvanced(!showAdvanced)}\n className=\"flex items-center gap-2 w-full px-3 py-2 rounded-lg border border-white/5 hover:border-white/10 bg-zinc-900/30 text-xs font-bold text-zinc-400 hover:text-zinc-200 transition-all\"\n >\n <Settings2 className=\"w-3.5 h-3.5 text-orange-500\" />\n <span>Advanced</span>\n {(serviceName || instanceName) && (\n <span className=\"ml-1 px-1.5 py-0.5 rounded text-label bg-orange-500/10 text-orange-400 border border-orange-500/20\">\n SET\n </span>\n )}\n <ChevronDown className={cn(\"w-3 h-3 ml-auto transition-transform\", showAdvanced && \"rotate-180\")} />\n </button>\n <AnimatePresence>\n {showAdvanced && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"overflow-hidden\"\n >\n <div className=\"p-3 rounded-lg border border-orange-500/10 bg-orange-500/5 space-y-3\">\n {type === 'oracle' && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Service Name</Label>\n <Input\n value={serviceName}\n onChange={(e) => setServiceName(e.target.value)}\n placeholder=\"ORCL or XEPDB1\"\n className=\"h-9 bg-zinc-900/50 border-white/5 focus:border-orange-500/50 text-sm\"\n />\n <p className=\"text-xs text-zinc-500\">\n If empty, the Database Name field is used as the service name.\n </p>\n </div>\n )}\n {type === 'mssql' && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Instance Name</Label>\n <Input\n value={instanceName}\n onChange={(e) => setInstanceName(e.target.value)}\n placeholder=\"SQLEXPRESS\"\n className=\"h-9 bg-zinc-900/50 border-white/5 focus:border-orange-500/50 text-sm\"\n />\n <p className=\"text-xs text-zinc-500\">\n For named instances (e.g. SQLEXPRESS). Leave empty for default instance.\n </p>\n </div>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )}\n\n {/* SSL/TLS & SSH Panels - only for non-sqlite */}\n {type !== 'sqlite' && (\n <div className=\"space-y-2\">\n {/* SSL/TLS Toggle */}\n <button\n type=\"button\"\n onClick={() => setShowSSL(!showSSL)}\n className=\"flex items-center gap-2 w-full px-3 py-2 rounded-lg border border-white/5 hover:border-white/10 bg-zinc-900/30 text-xs font-bold text-zinc-400 hover:text-zinc-200 transition-all\"\n >\n <Lock className=\"w-3.5 h-3.5 text-emerald-500\" />\n <span>SSL / TLS</span>\n {sslMode !== 'disable' && (\n <span className=\"ml-1 px-1.5 py-0.5 rounded text-label bg-emerald-500/10 text-emerald-400 border border-emerald-500/20\">\n {sslMode.toUpperCase()}\n </span>\n )}\n <ChevronDown className={cn(\"w-3 h-3 ml-auto transition-transform\", showSSL && \"rotate-180\")} />\n </button>\n <AnimatePresence>\n {showSSL && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"overflow-hidden\"\n >\n <div className=\"p-3 rounded-lg border border-emerald-500/10 bg-emerald-500/5 space-y-3\">\n <div className=\"space-y-2\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">SSL Mode</Label>\n <div className=\"flex flex-wrap gap-1.5\">\n {(['disable', 'require', 'verify-ca', 'verify-full'] as SSLMode[]).map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => setSSLMode(mode)}\n className={cn(\n \"px-2.5 py-1.5 rounded-md text-xs font-bold uppercase tracking-wider transition-all border\",\n sslMode === mode\n ? \"border-emerald-500/30 bg-emerald-500/10 text-emerald-400\"\n : \"border-transparent text-zinc-500 hover:text-zinc-300 hover:bg-white/5\"\n )}\n >\n {mode}\n </button>\n ))}\n </div>\n </div>\n {sslMode !== 'disable' && (\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">CA Certificate (PEM)</Label>\n <textarea\n value={caCert}\n onChange={(e) => setCaCert(e.target.value)}\n placeholder=\"-----BEGIN CERTIFICATE-----&#10;Paste CA cert content here...&#10;-----END CERTIFICATE-----\"\n rows={3}\n className=\"w-full rounded-md bg-zinc-900/50 border border-white/5 focus:border-emerald-500/50 text-xs font-mono text-zinc-300 p-2 resize-none placeholder:text-zinc-600\"\n />\n </div>\n {(sslMode === 'verify-ca' || sslMode === 'verify-full') && (\n <>\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Client Certificate (PEM)</Label>\n <textarea\n value={clientCert}\n onChange={(e) => setClientCert(e.target.value)}\n placeholder=\"-----BEGIN CERTIFICATE-----&#10;Optional client cert...&#10;-----END CERTIFICATE-----\"\n rows={3}\n className=\"w-full rounded-md bg-zinc-900/50 border border-white/5 focus:border-emerald-500/50 text-xs font-mono text-zinc-300 p-2 resize-none placeholder:text-zinc-600\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Client Private Key (PEM)</Label>\n <textarea\n value={clientKey}\n onChange={(e) => setClientKey(e.target.value)}\n placeholder=\"-----BEGIN PRIVATE KEY-----&#10;Optional client key...&#10;-----END PRIVATE KEY-----\"\n rows={3}\n className=\"w-full rounded-md bg-zinc-900/50 border border-white/5 focus:border-emerald-500/50 text-xs font-mono text-zinc-300 p-2 resize-none placeholder:text-zinc-600\"\n />\n </div>\n </>\n )}\n </div>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* SSH Tunnel Toggle */}\n <button\n type=\"button\"\n onClick={() => setShowSSH(!showSSH)}\n className=\"flex items-center gap-2 w-full px-3 py-2 rounded-lg border border-white/5 hover:border-white/10 bg-zinc-900/30 text-xs font-bold text-zinc-400 hover:text-zinc-200 transition-all\"\n >\n <Terminal className=\"w-3.5 h-3.5 text-purple-500\" />\n <span>SSH Tunnel</span>\n {sshEnabled && (\n <span className=\"ml-1 px-1.5 py-0.5 rounded text-label bg-purple-500/10 text-purple-400 border border-purple-500/20\">\n ON\n </span>\n )}\n <ChevronDown className={cn(\"w-3 h-3 ml-auto transition-transform\", showSSH && \"rotate-180\")} />\n </button>\n <AnimatePresence>\n {showSSH && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"overflow-hidden\"\n >\n <div className=\"p-3 rounded-lg border border-purple-500/10 bg-purple-500/5 space-y-3\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={sshEnabled}\n onChange={(e) => setSSHEnabled(e.target.checked)}\n className=\"rounded border-white/20 bg-zinc-900/50\"\n />\n <span className=\"text-xs font-semibold text-zinc-300\">Enable SSH Tunnel</span>\n </label>\n {sshEnabled && (\n <div className=\"space-y-3\">\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-3\">\n <div className=\"md:col-span-3 space-y-1.5\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">SSH Host</Label>\n <Input\n value={sshHost}\n onChange={(e) => setSSHHost(e.target.value)}\n placeholder=\"bastion.example.com\"\n className=\"h-9 bg-zinc-900/50 border-white/5 focus:border-purple-500/50 text-sm\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Port</Label>\n <Input\n value={sshPort}\n onChange={(e) => setSSHPort(e.target.value)}\n className=\"h-9 bg-zinc-900/50 border-white/5 focus:border-purple-500/50 text-sm font-mono\"\n />\n </div>\n </div>\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Username</Label>\n <Input\n value={sshUsername}\n onChange={(e) => setSSHUsername(e.target.value)}\n placeholder=\"ubuntu\"\n className=\"h-9 bg-zinc-900/50 border-white/5 focus:border-purple-500/50 text-sm\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Auth Method</Label>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => setSSHAuthMethod('password')}\n className={cn(\n \"flex-1 px-3 py-1.5 rounded-md text-xs font-bold uppercase tracking-wider transition-all border\",\n sshAuthMethod === 'password'\n ? \"border-purple-500/30 bg-purple-500/10 text-purple-400\"\n : \"border-transparent text-zinc-500 hover:text-zinc-300 hover:bg-white/5\"\n )}\n >\n Password\n </button>\n <button\n type=\"button\"\n onClick={() => setSSHAuthMethod('privateKey')}\n className={cn(\n \"flex-1 px-3 py-1.5 rounded-md text-xs font-bold uppercase tracking-wider transition-all border\",\n sshAuthMethod === 'privateKey'\n ? \"border-purple-500/30 bg-purple-500/10 text-purple-400\"\n : \"border-transparent text-zinc-500 hover:text-zinc-300 hover:bg-white/5\"\n )}\n >\n Private Key\n </button>\n </div>\n </div>\n {sshAuthMethod === 'password' ? (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">SSH Password</Label>\n <Input\n type=\"password\"\n value={sshPassword}\n onChange={(e) => setSSHPassword(e.target.value)}\n placeholder=\"••••••••\"\n className=\"h-9 bg-zinc-900/50 border-white/5 focus:border-purple-500/50 text-sm\"\n />\n </div>\n ) : (\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Private Key (PEM)</Label>\n <textarea\n value={sshPrivateKey}\n onChange={(e) => setSSHPrivateKey(e.target.value)}\n placeholder=\"-----BEGIN OPENSSH PRIVATE KEY-----&#10;Paste private key here...&#10;-----END OPENSSH PRIVATE KEY-----\"\n rows={4}\n className=\"w-full rounded-md bg-zinc-900/50 border border-white/5 focus:border-purple-500/50 text-xs font-mono text-zinc-300 p-2 resize-none placeholder:text-zinc-600\"\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs font-bold uppercase tracking-wider text-zinc-500\">Passphrase (optional)</Label>\n <Input\n type=\"password\"\n value={sshPassphrase}\n onChange={(e) => setSSHPassphrase(e.target.value)}\n placeholder=\"Key passphrase (if encrypted)\"\n className=\"h-9 bg-zinc-900/50 border-white/5 focus:border-purple-500/50 text-sm\"\n />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )}\n\n {/* Test Result */}\n <AnimatePresence>\n {testResult && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n className=\"overflow-hidden\"\n >\n <div className={cn(\n \"flex items-center gap-2 p-3 rounded-lg border text-xs\",\n testResult.success\n ? \"bg-emerald-500/5 border-emerald-500/20 text-emerald-400\"\n : \"bg-red-500/5 border-red-500/20 text-red-400\"\n )}>\n {testResult.success ? (\n <CheckCircle2 className=\"w-4 h-4 shrink-0\" />\n ) : (\n <XCircle className=\"w-4 h-4 shrink-0\" />\n )}\n <span className=\"leading-relaxed\">{testResult.message}</span>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </div>\n\n {/* Sticky footer */}\n <div className=\"shrink-0 bg-zinc-900/30 p-4 md:p-6 border-t border-white/5\">\n <div className=\"flex flex-col-reverse gap-3 md:flex-row md:items-center md:justify-between\">\n <Button\n variant=\"ghost\"\n onClick={onClose}\n className=\"w-full md:w-auto text-zinc-500 hover:text-zinc-200 hover:bg-white/5 text-xs font-semibold\"\n >\n Cancel\n </Button>\n <div className=\"flex flex-col gap-2 md:flex-row md:items-center md:gap-2\">\n <Button\n variant=\"outline\"\n onClick={handleTestConnection}\n disabled={isTesting}\n className=\"w-full md:w-auto border-white/10 text-zinc-400 hover:text-white hover:bg-white/5 text-xs font-bold h-10 px-4\"\n >\n {isTesting ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"w-3 h-3 border-2 border-zinc-400/30 border-t-zinc-400 rounded-full animate-spin\" />\n Testing...\n </div>\n ) : (\n 'Test Connection'\n )}\n </Button>\n <Button\n onClick={handleConnect}\n disabled={isTesting || (getDBConfig(type).showConnectionStringToggle && mongoConnectionMode === 'connectionString' && !connectionString.trim())}\n className=\"w-full md:w-auto min-w-0 md:min-w-[140px] bg-blue-600 hover:bg-blue-500 text-white font-bold text-xs h-10 shadow-lg shadow-blue-900/20 group relative overflow-hidden\"\n >\n <AnimatePresence mode=\"wait\">\n {isTesting ? (\n <motion.div\n key=\"testing\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"flex items-center gap-2\"\n >\n <div className=\"w-3.5 h-3.5 border-2 border-white/30 border-t-white rounded-full animate-spin\" />\n Connecting...\n </motion.div>\n ) : (\n <motion.div\n key=\"connect\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"flex items-center gap-2\"\n >\n {isEditMode ? 'Save Changes' : 'Establish Connection'}\n </motion.div>\n )}\n </AnimatePresence>\n </Button>\n </div>\n </div>\n </div>\n </>\n );\n\n if (isMobile) {\n return (\n <Drawer open={isOpen} onOpenChange={(open) => { if (!open) onClose(); }}>\n <DrawerContent className=\"max-h-[95dvh] bg-[#0a0a0a] border-white/5 text-zinc-200 p-0 flex flex-col\">\n <DrawerHeader className=\"sr-only\">\n <DrawerTitle>{isEditMode ? 'Edit Connection' : 'New Connection'}</DrawerTitle>\n <DrawerDescription>Configure database connection parameters.</DrawerDescription>\n </DrawerHeader>\n {formContent}\n </DrawerContent>\n </Drawer>\n );\n }\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent\n className=\"sm:max-w-[500px] lg:max-w-[540px] max-h-[90vh] bg-[#0a0a0a] border-white/5 text-zinc-200 p-0 overflow-hidden shadow-2xl flex flex-col\"\n showCloseButton={false}\n >\n <DialogTitle className=\"sr-only\">{isEditMode ? 'Edit Connection' : 'New Connection'}</DialogTitle>\n <DialogDescription className=\"sr-only\">Configure database connection parameters.</DialogDescription>\n {formContent}\n </DialogContent>\n </Dialog>\n );\n}\n"]}