@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.
- package/dist/{chunk-VWVRUCQO.mjs → chunk-CPF7XWV5.mjs} +77 -77
- package/dist/chunk-CPF7XWV5.mjs.map +1 -0
- package/dist/{chunk-DZ2UB3C6.mjs → chunk-G3S66G64.mjs} +259 -265
- package/dist/chunk-G3S66G64.mjs.map +1 -0
- package/dist/{chunk-JOGLIOFO.js → chunk-HGPD6PWV.js} +129 -129
- package/dist/chunk-HGPD6PWV.js.map +1 -0
- package/dist/{chunk-RBVDMLFV.js → chunk-Y52UIFEX.js} +259 -265
- package/dist/chunk-Y52UIFEX.js.map +1 -0
- package/dist/components.js +14 -14
- package/dist/components.mjs +2 -2
- package/dist/index.js +14 -14
- package/dist/index.mjs +2 -2
- package/dist/workspace.js +350 -358
- package/dist/workspace.js.map +1 -1
- package/dist/workspace.mjs +220 -228
- package/dist/workspace.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-DZ2UB3C6.mjs.map +0 -1
- package/dist/chunk-JOGLIOFO.js.map +0 -1
- package/dist/chunk-RBVDMLFV.js.map +0 -1
- package/dist/chunk-VWVRUCQO.mjs.map +0 -1
package/dist/workspace.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/sidebar/ConnectionItem.tsx","../src/components/sidebar/ConnectionsList.tsx","../src/components/sidebar/Sidebar.tsx","../src/components/DataImportModal.tsx","../src/components/ui/textarea.tsx","../src/components/SaveQueryModal.tsx","../src/components/studio/StudioTabBar.tsx","../src/components/studio/QueryToolbar.tsx","../src/components/AIAutopilotPanel.tsx","../src/components/PivotTable.tsx","../src/components/DatabaseDocs.tsx","../src/components/QueryHistory.tsx","../src/components/SavedQueries.tsx","../src/components/ui/badge.tsx","../src/hooks/use-all-connections.ts","../src/lib/schema-diff/diff-engine.ts","../src/lib/schema-diff/migration-generator.ts","../src/components/SnapshotTimeline.tsx","../src/components/SchemaDiff.tsx","../src/components/studio/BottomPanel.tsx","../src/hooks/use-toast.ts","../src/hooks/use-tab-manager.ts","../src/workspace/hooks/use-connection-adapter.ts","../src/workspace/hooks/use-query-adapter.ts","../src/workspace/types.ts","../src/components/ui/resizable.tsx","../src/components/ui/alert-dialog.tsx","../src/workspace/StudioWorkspace.tsx"],"names":["ConnectionItem","jsxs","jsx","_a","React","useState","FileJson","X","Plus","Fragment","Save","Square","Play","Pencil","Upload","useRef","Check","Copy","Sparkles","Loader2","useMemo","useCallback","ArrowRight","FileText","useEffect","format","HistoryIcon","Download","Trash2","Search","Database","Hash","Bookmark","Edit3","Tag","AlertTriangle","sourceId","targetId","ChevronDown","Zap","Clock","Columns3","GitCompare","Terminal","toast","sonnerToast","storage","_b"],"mappings":"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","file":"workspace.mjs","sourcesContent":["import React from 'react';\nimport { DatabaseConnection, ENVIRONMENT_LABELS } from '@/lib/types';\nimport { Lock, Trash2, Pencil } from 'lucide-react';\nimport { getDBIcon } from '@/lib/db-ui-config';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\nimport { motion } from 'framer-motion';\n\ninterface ConnectionItemProps {\n connection: DatabaseConnection;\n isActive: boolean;\n onSelect: (conn: DatabaseConnection) => void;\n onDelete: (id: string) => void;\n onEdit?: (conn: DatabaseConnection) => void;\n}\n\nexport const ConnectionItem = React.memo(function ConnectionItem({\n connection: conn,\n isActive,\n onSelect,\n onDelete,\n onEdit,\n}: ConnectionItemProps) {\n return (\n <motion.div\n initial={false}\n className={cn(\n 'group flex items-center gap-2.5 px-3 py-2 rounded-lg cursor-pointer transition-all duration-200 text-sm relative overflow-hidden',\n isActive\n ? 'bg-blue-600/10 text-blue-400'\n : 'hover:bg-accent/50 text-muted-foreground hover:text-foreground'\n )}\n onClick={() => onSelect(conn)}\n >\n {isActive && (\n <motion.div\n layoutId=\"active-indicator\"\n className=\"absolute left-0 w-1 h-4 rounded-r-full\"\n style={{ backgroundColor: conn.color || '#3b82f6' }}\n />\n )}\n <div\n className={cn(\n 'p-1 rounded transition-colors',\n isActive ? 'bg-blue-500/20' : 'bg-muted group-hover:bg-accent'\n )}\n >\n {React.createElement(getDBIcon(conn.type), { className: 'w-3 h-3' })}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"truncate block font-medium text-body\">{conn.name}</span>\n {conn.environment && conn.environment !== 'other' && (\n <span\n className=\"text-micro uppercase tracking-wider font-bold px-1.5 py-0.5 rounded-sm shrink-0\"\n style={{\n color: conn.color || '#6b7280',\n backgroundColor: `${conn.color || '#6b7280'}15`,\n }}\n >\n {ENVIRONMENT_LABELS[conn.environment]}\n </span>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-0.5\">\n {conn.managed && (\n <div\n data-testid={`managed-lock-${conn.seedId || conn.id}`}\n className=\"w-6 h-6 flex items-center justify-center text-amber-500/60\"\n title=\"Managed by administrator\"\n >\n <Lock className=\"w-3 h-3\" />\n </div>\n )}\n {!conn.managed && onEdit && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity hover:bg-blue-500/20 hover:text-blue-400\"\n onClick={(e) => {\n e.stopPropagation();\n onEdit(conn);\n }}\n >\n <Pencil className=\"w-3 h-3\" />\n </Button>\n )}\n {!conn.managed && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity hover:bg-red-500/20 hover:text-red-400\"\n onClick={(e) => {\n e.stopPropagation();\n onDelete(conn.id);\n }}\n >\n <Trash2 className=\"w-3 h-3\" />\n </Button>\n )}\n </div>\n </motion.div>\n );\n});\n","import React from 'react';\nimport { DatabaseConnection } from '@/lib/types';\nimport { Button } from '@/components/ui/button';\nimport { ConnectionItem } from './ConnectionItem';\n\ninterface ConnectionsListProps {\n connections: DatabaseConnection[];\n activeConnection: DatabaseConnection | null;\n onSelectConnection: (conn: DatabaseConnection) => void;\n onDeleteConnection: (id: string) => void;\n onEditConnection?: (conn: DatabaseConnection) => void;\n onAddConnection: () => void;\n}\n\nexport function ConnectionsList({\n connections,\n activeConnection,\n onSelectConnection,\n onDeleteConnection,\n onEditConnection,\n onAddConnection,\n}: ConnectionsListProps) {\n return (\n <section>\n <div className=\"px-3 mb-2 flex items-center justify-between\">\n <span className=\"text-xs font-bold uppercase tracking-[0.15em] text-muted-foreground\">\n Connections\n </span>\n <div className=\"h-[1px] flex-1 bg-border/30 ml-3\" />\n </div>\n\n <div className=\"space-y-0.5\">\n {connections.length === 0 ? (\n <div className=\"px-3 py-6 text-center border border-dashed border-border/50 rounded-lg mx-2\">\n <p className=\"text-body text-muted-foreground mb-3 leading-relaxed\">\n No database connections established yet.\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={onAddConnection}\n >\n Add Connection\n </Button>\n </div>\n ) : (\n connections.map((conn) => (\n <ConnectionItem\n key={conn.id}\n connection={conn}\n isActive={activeConnection?.id === conn.id}\n onSelect={onSelectConnection}\n onDelete={onDeleteConnection}\n onEdit={onEditConnection}\n />\n ))\n )}\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport React from 'react';\nimport { DatabaseConnection, TableSchema } from '@/lib/types';\nimport type { ProviderMetadata } from '@/hooks/use-provider-metadata';\nimport { Plus, Zap, Layers } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { ScrollArea } from '@/components/ui/scroll-area';\nimport { SchemaExplorer } from '@/components/schema-explorer';\nimport { ConnectionsList } from './ConnectionsList';\n\ninterface SidebarProps {\n connections: DatabaseConnection[];\n activeConnection: DatabaseConnection | null;\n schema: TableSchema[];\n isLoadingSchema: boolean;\n onSelectConnection: (connection: DatabaseConnection) => void;\n onDeleteConnection: (id: string) => void;\n onEditConnection?: (conn: DatabaseConnection) => void;\n onAddConnection: () => void;\n onTableClick?: (tableName: string) => void;\n onGenerateSelect?: (tableName: string) => void;\n onCreateTableClick?: () => void;\n onShowDiagram?: () => void;\n isAdmin?: boolean;\n onOpenMaintenance?: (tab?: 'global' | 'tables' | 'sessions', table?: string) => void;\n databaseType?: string;\n metadata?: ProviderMetadata | null;\n onProfileTable?: (tableName: string) => void;\n onGenerateCode?: (tableName: string) => void;\n onGenerateTestData?: (tableName: string) => void;\n}\n\nexport function Sidebar({\n connections,\n activeConnection,\n schema,\n isLoadingSchema,\n onSelectConnection,\n onDeleteConnection,\n onEditConnection,\n onAddConnection,\n onTableClick,\n onGenerateSelect,\n onCreateTableClick,\n onShowDiagram,\n isAdmin = false,\n onOpenMaintenance,\n databaseType,\n metadata,\n onProfileTable,\n onGenerateCode,\n onGenerateTestData,\n}: SidebarProps) {\n return (\n <div className=\"flex w-full h-full border-r border-border flex-col bg-background select-none\">\n <div className=\"h-14 px-4 flex items-center justify-between border-b border-border\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-6 h-6 bg-blue-600 rounded-md flex items-center justify-center\">\n <Zap className=\"w-3.5 h-3.5 text-white fill-current\" />\n </div>\n <span className=\"font-bold text-sm tracking-tight bg-gradient-to-r from-foreground to-muted-foreground bg-clip-text text-transparent\">\n LibreDB Studio\n </span>\n </div>\n <div className=\"flex items-center gap-1\">\n {activeConnection && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 hover:bg-accent text-muted-foreground hover:text-foreground transition-colors\"\n onClick={onShowDiagram}\n title=\"Show ERD Diagram\"\n >\n <Layers className=\"w-4 h-4\" />\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 hover:bg-accent text-muted-foreground hover:text-foreground transition-colors\"\n onClick={onAddConnection}\n >\n <Plus className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n\n <ScrollArea className=\"flex-1 min-h-0 px-2 py-4\">\n <div className=\"space-y-6\">\n <ConnectionsList\n connections={connections}\n activeConnection={activeConnection}\n onSelectConnection={onSelectConnection}\n onDeleteConnection={onDeleteConnection}\n onEditConnection={onEditConnection}\n onAddConnection={onAddConnection}\n />\n\n {activeConnection && (\n <SchemaExplorer\n schema={schema}\n isLoadingSchema={isLoadingSchema}\n onTableClick={onTableClick}\n onGenerateSelect={onGenerateSelect}\n onCreateTableClick={onCreateTableClick}\n isAdmin={isAdmin}\n onOpenMaintenance={onOpenMaintenance}\n databaseType={databaseType}\n metadata={metadata}\n onProfileTable={onProfileTable}\n onGenerateCode={onGenerateCode}\n onGenerateTestData={onGenerateTestData}\n />\n )}\n </div>\n </ScrollArea>\n\n <div className=\"p-3 border-t border-border bg-card/50 backdrop-blur-md\">\n <div className=\"flex items-center justify-between px-2 py-1.5 rounded-lg bg-muted/30 border border-border/50\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-1.5 h-1.5 rounded-full bg-green-500 animate-pulse\" />\n <span className=\"text-xs font-medium text-muted-foreground\">Connected</span>\n </div>\n <span className=\"text-xs font-mono text-muted-foreground/70\">v1.2.5</span>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useCallback, useRef, useMemo } from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { cn } from '@/lib/utils';\nimport {\n Upload,\n FileSpreadsheet,\n FileJson,\n FileText,\n Check,\n AlertTriangle,\n Table2,\n ArrowRight,\n Loader2,\n X,\n} from 'lucide-react';\nimport type { TableSchema } from '@/lib/types';\n\ninterface DataImportModalProps {\n isOpen: boolean;\n onClose: () => void;\n onImport: (sql: string) => void;\n tables: TableSchema[];\n databaseType?: string;\n}\n\nexport interface ParsedData {\n headers: string[];\n rows: string[][];\n totalRows: number;\n}\n\ntype ImportStep = 'upload' | 'preview' | 'configure' | 'ready';\n\nexport function parseCSV(text: string): ParsedData {\n const lines = text.split(/\\r?\\n/).filter(line => line.trim());\n if (lines.length === 0) return { headers: [], rows: [], totalRows: 0 };\n\n // Parse CSV with basic quote handling\n const parseLine = (line: string): string[] => {\n const result: string[] = [];\n let current = '';\n let inQuotes = false;\n\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (ch === '\"' && !inQuotes) {\n inQuotes = true;\n } else if (ch === '\"' && inQuotes) {\n if (i + 1 < line.length && line[i + 1] === '\"') {\n current += '\"';\n i++;\n } else {\n inQuotes = false;\n }\n } else if (ch === ',' && !inQuotes) {\n result.push(current.trim());\n current = '';\n } else {\n current += ch;\n }\n }\n result.push(current.trim());\n return result;\n };\n\n const headers = parseLine(lines[0]);\n const rows = lines.slice(1).map(line => parseLine(line));\n return { headers, rows, totalRows: rows.length };\n}\n\nexport function parseJSON(text: string): ParsedData {\n const data = JSON.parse(text);\n const arr = Array.isArray(data) ? data : [data];\n if (arr.length === 0) return { headers: [], rows: [], totalRows: 0 };\n\n const headers = [...new Set(arr.flatMap(obj => Object.keys(obj)))];\n const rows = arr.map(obj => headers.map(h => {\n const val = obj[h];\n if (val === null || val === undefined) return '';\n if (typeof val === 'object') return JSON.stringify(val);\n return String(val);\n }));\n\n return { headers, rows, totalRows: rows.length };\n}\n\nexport function inferSqlType(values: string[]): string {\n const nonEmpty = values.filter(v => v !== '' && v !== null);\n if (nonEmpty.length === 0) return 'TEXT';\n\n const allIntegers = nonEmpty.every(v => /^-?\\d+$/.test(v));\n if (allIntegers) return 'INTEGER';\n\n const allNumbers = nonEmpty.every(v => /^-?\\d+(\\.\\d+)?$/.test(v));\n if (allNumbers) return 'NUMERIC';\n\n const allBooleans = nonEmpty.every(v => /^(true|false|0|1)$/i.test(v));\n if (allBooleans) return 'BOOLEAN';\n\n return 'TEXT';\n}\n\nexport function escapeSQL(value: string): string {\n if (value === '' || value === 'null' || value === 'NULL') return 'NULL';\n return `'${value.replace(/'/g, \"''\")}'`;\n}\n\nexport function generateImportSQL(\n parsedData: ParsedData | null,\n targetTable: string,\n createNewTable: boolean,\n newTableName: string,\n columnMapping: Record<string, string>,\n): string {\n if (!parsedData) return '';\n\n const tableName = createNewTable ? (newTableName || 'imported_data') : targetTable;\n if (!tableName) return '';\n\n const statements: string[] = [];\n\n // CREATE TABLE if new\n if (createNewTable) {\n const colDefs = parsedData.headers.map(h => {\n const colValues = parsedData.rows.slice(0, 100).map(r => r[parsedData.headers.indexOf(h)]);\n const sqlType = inferSqlType(colValues);\n const colName = columnMapping[h] || h;\n return ` ${colName} ${sqlType}`;\n });\n statements.push(`CREATE TABLE ${tableName} (\\n${colDefs.join(',\\n')}\\n);`);\n }\n\n // INSERT statements (batch in groups of 100)\n const mappedHeaders = parsedData.headers.map(h => columnMapping[h] || h);\n const batchSize = 100;\n\n for (let i = 0; i < parsedData.rows.length; i += batchSize) {\n const batch = parsedData.rows.slice(i, i + batchSize);\n const valueRows = batch.map(row => {\n const values = row.map((val, idx) => {\n const sqlType = inferSqlType(parsedData.rows.slice(0, 100).map(r => r[idx]));\n if (val === '' || val === 'NULL' || val === 'null') return 'NULL';\n if (sqlType === 'INTEGER' || sqlType === 'NUMERIC' || sqlType === 'BOOLEAN') {\n if (sqlType === 'BOOLEAN') return val.toLowerCase() === 'true' || val === '1' ? 'TRUE' : 'FALSE';\n return val;\n }\n return escapeSQL(val);\n });\n return ` (${values.join(', ')})`;\n });\n\n statements.push(\n `INSERT INTO ${tableName} (${mappedHeaders.join(', ')})\\nVALUES\\n${valueRows.join(',\\n')};`\n );\n }\n\n return statements.join('\\n\\n');\n}\n\nexport function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }: DataImportModalProps) {\n const [step, setStep] = useState<ImportStep>('upload');\n const [parsedData, setParsedData] = useState<ParsedData | null>(null);\n const [fileName, setFileName] = useState('');\n const [fileType, setFileType] = useState<'csv' | 'json'>('csv');\n const [targetTable, setTargetTable] = useState('');\n const [createNewTable, setCreateNewTable] = useState(false);\n const [newTableName, setNewTableName] = useState('');\n const [columnMapping, setColumnMapping] = useState<Record<string, string>>({});\n const [error, setError] = useState<string | null>(null);\n const [isImporting, setIsImporting] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const resetState = useCallback(() => {\n setStep('upload');\n setParsedData(null);\n setFileName('');\n setTargetTable('');\n setCreateNewTable(false);\n setNewTableName('');\n setColumnMapping({});\n setError(null);\n setIsImporting(false);\n }, []);\n\n const handleClose = () => {\n resetState();\n onClose();\n };\n\n const handleFileSelect = useCallback((file: File) => {\n setError(null);\n setFileName(file.name);\n\n const ext = file.name.split('.').pop()?.toLowerCase();\n const isJSON = ext === 'json';\n setFileType(isJSON ? 'json' : 'csv');\n\n const reader = new FileReader();\n reader.onload = (e) => {\n try {\n const text = e.target?.result as string;\n const data = isJSON ? parseJSON(text) : parseCSV(text);\n\n if (data.headers.length === 0) {\n setError('No data found in file');\n return;\n }\n\n setParsedData(data);\n // Auto-map columns 1:1\n const mapping: Record<string, string> = {};\n data.headers.forEach(h => { mapping[h] = h; });\n setColumnMapping(mapping);\n setStep('preview');\n } catch (err) {\n setError(`Failed to parse file: ${err instanceof Error ? err.message : 'Unknown error'}`);\n }\n };\n reader.readAsText(file);\n }, []);\n\n const handleDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n const file = e.dataTransfer.files[0];\n if (file) handleFileSelect(file);\n }, [handleFileSelect]);\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n }, []);\n\n const generatedSQL = useMemo(\n () => generateImportSQL(parsedData, targetTable, createNewTable, newTableName, columnMapping),\n [parsedData, targetTable, createNewTable, newTableName, columnMapping],\n );\n\n const handleImport = () => {\n if (!generatedSQL) return;\n setIsImporting(true);\n onImport(generatedSQL);\n setTimeout(() => {\n handleClose();\n }, 200);\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={handleClose}>\n <DialogContent className=\"bg-[#0a0a0a] border-white/10 text-zinc-100 max-w-2xl max-h-[85vh] overflow-hidden flex flex-col\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <Upload className=\"w-5 h-5 text-blue-400\" />\n Import Data\n {fileName && (\n <span className=\"text-xs text-zinc-500 font-normal ml-2\">\n {fileName}\n </span>\n )}\n </DialogTitle>\n </DialogHeader>\n\n {/* Step Indicator */}\n <div className=\"flex items-center gap-2 px-1 py-2\">\n {(['upload', 'preview', 'configure', 'ready'] as ImportStep[]).map((s, idx) => (\n <React.Fragment key={s}>\n <div className={cn(\n \"flex items-center gap-1.5 text-xs font-bold uppercase tracking-wider\",\n step === s ? \"text-blue-400\" : idx < ['upload', 'preview', 'configure', 'ready'].indexOf(step) ? \"text-emerald-400\" : \"text-zinc-600\"\n )}>\n <div className={cn(\n \"w-5 h-5 rounded-full flex items-center justify-center text-label\",\n step === s ? \"bg-blue-500/20 border border-blue-500/40\" :\n idx < ['upload', 'preview', 'configure', 'ready'].indexOf(step) ? \"bg-emerald-500/20 border border-emerald-500/40\" :\n \"bg-white/5 border border-white/10\"\n )}>\n {idx < ['upload', 'preview', 'configure', 'ready'].indexOf(step) ? (\n <Check className=\"w-3 h-3\" />\n ) : (\n idx + 1\n )}\n </div>\n <span className=\"hidden sm:inline\">{s === 'upload' ? 'Upload' : s === 'preview' ? 'Preview' : s === 'configure' ? 'Configure' : 'Import'}</span>\n </div>\n {idx < 3 && <ArrowRight className=\"w-3 h-3 text-zinc-700\" />}\n </React.Fragment>\n ))}\n </div>\n\n <div className=\"flex-1 overflow-auto min-h-0\">\n {/* Step 1: Upload */}\n {step === 'upload' && (\n <div className=\"p-4\">\n <div\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onClick={() => fileInputRef.current?.click()}\n className=\"border-2 border-dashed border-white/10 rounded-xl p-12 text-center cursor-pointer hover:border-blue-500/30 hover:bg-blue-500/5 transition-all\"\n >\n <Upload className=\"w-10 h-10 text-zinc-600 mx-auto mb-4\" />\n <p className=\"text-sm text-zinc-400 mb-1\">\n Drop a file here or click to browse\n </p>\n <p className=\"text-xs text-zinc-600\">\n Supports CSV and JSON files\n </p>\n <div className=\"flex items-center justify-center gap-4 mt-4\">\n <div className=\"flex items-center gap-1.5 text-zinc-500\">\n <FileSpreadsheet className=\"w-4 h-4\" />\n <span className=\"text-xs\">CSV</span>\n </div>\n <div className=\"flex items-center gap-1.5 text-zinc-500\">\n <FileJson className=\"w-4 h-4\" />\n <span className=\"text-xs\">JSON</span>\n </div>\n </div>\n </div>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\".csv,.json,.tsv\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) handleFileSelect(file);\n }}\n />\n {error && (\n <div className=\"mt-4 p-3 rounded-lg bg-red-500/10 border border-red-500/20 flex items-center gap-2\">\n <AlertTriangle className=\"w-4 h-4 text-red-400 shrink-0\" />\n <span className=\"text-xs text-red-400\">{error}</span>\n </div>\n )}\n </div>\n )}\n\n {/* Step 2: Preview */}\n {step === 'preview' && parsedData && (\n <div className=\"p-4 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n {fileType === 'json' ? (\n <FileJson className=\"w-5 h-5 text-amber-400\" />\n ) : (\n <FileText className=\"w-5 h-5 text-emerald-400\" />\n )}\n <div>\n <p className=\"text-sm font-medium\">{fileName}</p>\n <p className=\"text-xs text-zinc-500\">\n {parsedData.totalRows} rows, {parsedData.headers.length} columns\n </p>\n </div>\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs text-zinc-500\"\n onClick={() => { resetState(); }}\n >\n <X className=\"w-3 h-3 mr-1\" /> Reset\n </Button>\n </div>\n\n {/* Preview Table */}\n <div className=\"border border-white/5 rounded-lg overflow-auto max-h-60\">\n <table className=\"w-full text-xs\">\n <thead>\n <tr className=\"bg-[#0d0d0d]\">\n {parsedData.headers.map(h => (\n <th key={h} className=\"px-3 py-2 text-left text-xs uppercase tracking-wider text-zinc-500 font-mono border-b border-white/5 whitespace-nowrap\">\n {h}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {parsedData.rows.slice(0, 10).map((row, idx) => (\n <tr key={idx} className=\"border-b border-white/5 hover:bg-white/[0.02]\">\n {row.map((cell, cidx) => (\n <td key={cidx} className=\"px-3 py-1.5 text-zinc-300 font-mono whitespace-nowrap max-w-[200px] truncate\">\n {cell || <span className=\"text-zinc-600 italic\">NULL</span>}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n {parsedData.totalRows > 10 && (\n <div className=\"text-center py-2 text-xs text-zinc-600 bg-[#0d0d0d]\">\n ... and {parsedData.totalRows - 10} more rows\n </div>\n )}\n </div>\n\n <div className=\"flex justify-end\">\n <Button\n size=\"sm\"\n className=\"bg-blue-600 hover:bg-blue-500 h-8 text-xs gap-1\"\n onClick={() => setStep('configure')}\n >\n Configure Import <ArrowRight className=\"w-3 h-3\" />\n </Button>\n </div>\n </div>\n )}\n\n {/* Step 3: Configure */}\n {step === 'configure' && parsedData && (\n <div className=\"p-4 space-y-4\">\n {/* Target Table */}\n <div className=\"space-y-2\">\n <label className=\"text-xs text-zinc-400 font-medium\">Target Table</label>\n <div className=\"flex items-center gap-2\">\n <button\n className={cn(\n \"flex-1 px-3 py-2 rounded-lg border text-xs text-left transition-all\",\n !createNewTable ? \"border-blue-500/40 bg-blue-500/10 text-blue-400\" : \"border-white/10 text-zinc-500 hover:bg-white/5\"\n )}\n onClick={() => setCreateNewTable(false)}\n >\n <Table2 className=\"w-4 h-4 mb-1\" />\n Existing Table\n </button>\n <button\n className={cn(\n \"flex-1 px-3 py-2 rounded-lg border text-xs text-left transition-all\",\n createNewTable ? \"border-emerald-500/40 bg-emerald-500/10 text-emerald-400\" : \"border-white/10 text-zinc-500 hover:bg-white/5\"\n )}\n onClick={() => setCreateNewTable(true)}\n >\n <FileSpreadsheet className=\"w-4 h-4 mb-1\" />\n New Table\n </button>\n </div>\n </div>\n\n {createNewTable ? (\n <div>\n <label className=\"text-xs text-zinc-400\">New Table Name</label>\n <Input\n value={newTableName}\n onChange={(e) => setNewTableName(e.target.value)}\n placeholder=\"imported_data\"\n className=\"mt-1 bg-[#111] border-white/10 text-sm h-9\"\n />\n </div>\n ) : (\n <div>\n <label className=\"text-xs text-zinc-400\">Select Table</label>\n <select\n value={targetTable}\n onChange={(e) => setTargetTable(e.target.value)}\n className=\"w-full mt-1 bg-[#111] border border-white/10 rounded-md px-3 py-2 text-sm text-zinc-300 outline-none focus:border-blue-500/40\"\n >\n <option value=\"\">-- Select a table --</option>\n {tables.map(t => (\n <option key={t.name} value={t.name}>{t.name}</option>\n ))}\n </select>\n </div>\n )}\n\n {/* Column Mapping */}\n <div className=\"space-y-2\">\n <label className=\"text-xs text-zinc-400 font-medium\">Column Mapping</label>\n <div className=\"border border-white/5 rounded-lg overflow-hidden\">\n <div className=\"bg-[#0d0d0d] grid grid-cols-[1fr,auto,1fr] gap-2 px-3 py-1.5 text-xs uppercase tracking-wider text-zinc-500 border-b border-white/5\">\n <span>Source Column</span>\n <span></span>\n <span>Target Column</span>\n </div>\n <div className=\"max-h-40 overflow-auto\">\n {parsedData.headers.map(header => (\n <div key={header} className=\"grid grid-cols-[1fr,auto,1fr] gap-2 items-center px-3 py-1.5 border-b border-white/5\">\n <span className=\"text-xs text-zinc-300 font-mono truncate\">{header}</span>\n <ArrowRight className=\"w-3 h-3 text-zinc-600\" />\n <Input\n value={columnMapping[header] || ''}\n onChange={(e) => setColumnMapping(prev => ({ ...prev, [header]: e.target.value }))}\n className=\"h-7 text-xs bg-[#111] border-white/10\"\n placeholder={header}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n\n <div className=\"flex justify-between\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 text-xs text-zinc-500\"\n onClick={() => setStep('preview')}\n >\n Back\n </Button>\n <Button\n size=\"sm\"\n className=\"bg-blue-600 hover:bg-blue-500 h-8 text-xs gap-1\"\n onClick={() => setStep('ready')}\n disabled={!createNewTable && !targetTable}\n >\n Review SQL <ArrowRight className=\"w-3 h-3\" />\n </Button>\n </div>\n </div>\n )}\n\n {/* Step 4: Ready / Review */}\n {step === 'ready' && (\n <div className=\"p-4 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">Ready to Import</p>\n <p className=\"text-xs text-zinc-500 mt-0.5\">\n {parsedData?.totalRows} rows into {createNewTable ? newTableName || 'imported_data' : targetTable}\n </p>\n </div>\n {databaseType && (\n <span className=\"text-xs uppercase tracking-wider text-zinc-500 bg-white/5 px-2 py-1 rounded\">\n {databaseType}\n </span>\n )}\n </div>\n\n {/* SQL Preview */}\n <div className=\"border border-white/5 rounded-lg bg-[#0d0d0d] overflow-auto max-h-60\">\n <pre className=\"p-3 text-xs text-zinc-400 font-mono whitespace-pre-wrap\">\n {generatedSQL.substring(0, 3000)}\n {generatedSQL.length > 3000 && '\\n\\n... (truncated for preview)'}\n </pre>\n </div>\n\n <div className=\"flex justify-between\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 text-xs text-zinc-500\"\n onClick={() => setStep('configure')}\n >\n Back\n </Button>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 text-xs border-white/10\"\n onClick={() => {\n navigator.clipboard.writeText(generatedSQL);\n }}\n >\n Copy SQL\n </Button>\n <Button\n size=\"sm\"\n className=\"bg-emerald-600 hover:bg-emerald-500 h-8 text-xs gap-1\"\n onClick={handleImport}\n disabled={isImporting}\n >\n {isImporting ? (\n <><Loader2 className=\"w-3 h-3 animate-spin\" /> Importing...</>\n ) : (\n <><Upload className=\"w-3 h-3\" /> Execute Import</>\n )}\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { \n Dialog, DialogContent, DialogHeader, \n DialogTitle, DialogFooter, DialogDescription \n} from './ui/dialog';\nimport { Button } from './ui/button';\nimport { Input } from './ui/input';\nimport { Label } from './ui/label';\nimport { Textarea } from './ui/textarea';\nimport { Bookmark, Tag } from 'lucide-react';\n\ninterface SaveQueryModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSave: (name: string, description: string, tags: string[]) => void;\n defaultQuery: string;\n}\n\nexport function SaveQueryModal({ isOpen, onClose, onSave, defaultQuery }: SaveQueryModalProps) {\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [tagsInput, setTagsInput] = useState('');\n\n const handleSave = () => {\n if (!name) return;\n const tags = tagsInput.split(',').map(t => t.trim()).filter(t => t);\n onSave(name, description, tags);\n setName('');\n setDescription('');\n setTagsInput('');\n onClose();\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent className=\"bg-[#0d0d0d] border-white/10 text-zinc-300 sm:max-w-[425px]\">\n <DialogHeader>\n <DialogTitle className=\"text-white flex items-center gap-2\">\n <Bookmark className=\"w-5 h-5 text-blue-500\" /> Save Query\n </DialogTitle>\n <DialogDescription className=\"text-zinc-500\">\n Give your query a name and description to find it easily later.\n </DialogDescription>\n </DialogHeader>\n \n <div className=\"grid gap-4 py-4\">\n <div className=\"grid gap-2\">\n <Label htmlFor=\"name\" className=\"text-xs font-bold uppercase tracking-widest text-zinc-500\">Name</Label>\n <Input\n id=\"name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"e.g. Monthly Active Users\"\n className=\"bg-white/5 border-white/10 focus:ring-blue-500/20\"\n />\n </div>\n <div className=\"grid gap-2\">\n <Label htmlFor=\"description\" className=\"text-xs font-bold uppercase tracking-widest text-zinc-500\">Description</Label>\n <Textarea\n id=\"description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"What does this query do?\"\n className=\"bg-white/5 border-white/10 focus:ring-blue-500/20 min-h-[80px]\"\n />\n </div>\n <div className=\"grid gap-2\">\n <Label htmlFor=\"tags\" className=\"text-xs font-bold uppercase tracking-widest text-zinc-500 flex items-center gap-2\">\n <Tag className=\"w-3 h-3\" /> Tags (comma separated)\n </Label>\n <Input\n id=\"tags\"\n value={tagsInput}\n onChange={(e) => setTagsInput(e.target.value)}\n placeholder=\"reports, analytics, users\"\n className=\"bg-white/5 border-white/10 focus:ring-blue-500/20\"\n />\n </div>\n <div className=\"mt-2\">\n <Label className=\"text-xs font-bold uppercase tracking-widest text-zinc-500 mb-2 block\">Preview</Label>\n <div className=\"bg-[#050505] p-3 rounded-md border border-white/5 max-h-[100px] overflow-y-auto\">\n <pre className=\"text-xs font-mono text-zinc-500 italic whitespace-pre-wrap break-words\">\n {defaultQuery}\n </pre>\n </div>\n </div>\n </div>\n\n <DialogFooter>\n <Button variant=\"ghost\" onClick={onClose} className=\"text-zinc-400\">Cancel</Button>\n <Button \n onClick={handleSave} \n disabled={!name}\n className=\"bg-blue-600 hover:bg-blue-500 text-white font-bold\"\n >\n Save Query\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","'use client';\n\nimport React, { type Dispatch, type SetStateAction } from 'react';\nimport type { QueryTab } from '@/lib/types';\nimport { cn } from '@/lib/utils';\nimport { FileJson, Hash, Plus, X } from 'lucide-react';\n\ninterface StudioTabBarProps {\n tabs: QueryTab[];\n activeTabId: string;\n editingTabId: string | null;\n editingTabName: string;\n onSetActiveTabId: (id: string) => void;\n onSetEditingTabId: (id: string | null) => void;\n onSetEditingTabName: (name: string) => void;\n onSetTabs: Dispatch<SetStateAction<QueryTab[]>>;\n onCloseTab: (id: string, e: React.MouseEvent) => void;\n onAddTab: () => void;\n}\n\nexport function StudioTabBar({\n tabs,\n activeTabId,\n editingTabId,\n editingTabName,\n onSetActiveTabId,\n onSetEditingTabId,\n onSetEditingTabName,\n onSetTabs,\n onCloseTab,\n onAddTab,\n}: StudioTabBarProps) {\n return (\n <div className=\"hidden md:flex h-10 bg-[#0d0d0d] border-b border-white/5 items-center px-2 gap-1 overflow-x-auto no-scrollbar\">\n {tabs.map(tab => (\n <div\n key={tab.id}\n onClick={() => onSetActiveTabId(tab.id)}\n onDoubleClick={() => {\n onSetEditingTabId(tab.id);\n onSetEditingTabName(tab.name);\n }}\n className={cn(\n \"h-8 flex items-center px-3 gap-2 rounded-t-md transition-all cursor-pointer min-w-[120px] max-w-[200px] group relative border-t-2\",\n activeTabId === tab.id ? \"bg-[#141414] text-zinc-100 border-blue-500\" : \"text-zinc-500 hover:bg-white/5 border-transparent\"\n )}\n >\n {tab.type === 'sql' ? <Hash className=\"w-3 h-3\" /> : <FileJson className=\"w-3 h-3\" />}\n {editingTabId === tab.id ? (\n <input\n autoFocus\n value={editingTabName}\n onChange={(e) => onSetEditingTabName(e.target.value)}\n onBlur={() => {\n if (editingTabName.trim()) {\n onSetTabs(prev => prev.map(t => t.id === tab.id ? { ...t, name: editingTabName.trim() } : t));\n }\n onSetEditingTabId(null);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n if (editingTabName.trim()) {\n onSetTabs(prev => prev.map(t => t.id === tab.id ? { ...t, name: editingTabName.trim() } : t));\n }\n onSetEditingTabId(null);\n } else if (e.key === 'Escape') {\n onSetEditingTabId(null);\n }\n }}\n onClick={(e) => e.stopPropagation()}\n className=\"text-xs font-medium bg-transparent border-b border-blue-500 outline-none w-full text-zinc-100\"\n />\n ) : (\n <span className=\"text-xs truncate font-medium\">{tab.name}</span>\n )}\n {tabs.length > 1 && <X className=\"w-3 h-3 ml-auto opacity-0 group-hover:opacity-100 hover:text-white shrink-0\" onClick={(e) => onCloseTab(tab.id, e)} />}\n </div>\n ))}\n <Plus className=\"w-4 h-4 text-zinc-500 cursor-pointer hover:text-white mx-2\" onClick={onAddTab} />\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport type { DatabaseConnection } from '@/lib/types';\nimport type { ProviderMetadata } from '@/hooks/use-provider-metadata';\nimport { cn } from '@/lib/utils';\nimport { FlaskConical, Pencil, Play, Save, Square, Terminal, Upload } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\n\ninterface QueryToolbarProps {\n activeConnection: DatabaseConnection | null;\n metadata: ProviderMetadata | null;\n isExecuting: boolean;\n playgroundMode: boolean;\n transactionActive: boolean;\n editingEnabled: boolean;\n onSaveQuery: () => void;\n onExecuteQuery: () => void;\n onCancelQuery: () => void;\n onBeginTransaction: () => void;\n onCommitTransaction: () => void;\n onRollbackTransaction: () => void;\n onTogglePlayground: () => void;\n onToggleEditing: () => void;\n onImport: () => void;\n}\n\nexport function QueryToolbar({\n activeConnection,\n metadata,\n isExecuting,\n playgroundMode,\n transactionActive,\n editingEnabled,\n onSaveQuery,\n onExecuteQuery,\n onCancelQuery,\n onBeginTransaction,\n onCommitTransaction,\n onRollbackTransaction,\n onTogglePlayground,\n onToggleEditing,\n onImport,\n}: QueryToolbarProps) {\n return (\n <>\n {/* Playground Mode Banner */}\n {playgroundMode && (\n <div className=\"hidden md:flex items-center justify-center gap-2 px-4 py-1 bg-emerald-500/10 border-b border-emerald-500/20 text-emerald-400\">\n <FlaskConical className=\"w-3 h-3\" />\n <span className=\"text-xs font-bold uppercase tracking-widest\">\n Sandbox Mode — All changes will be auto-rolled back\n </span>\n </div>\n )}\n\n {/* Desktop Query Toolbar */}\n <div className=\"hidden md:flex items-center justify-between px-4 py-1.5 bg-[#0a0a0a] border-b border-white/5\">\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center gap-2 px-2 py-0.5 rounded bg-blue-500/5 border border-blue-500/10\">\n <Terminal className=\"w-3 h-3 text-blue-400\" />\n <span className=\"text-xs font-bold text-blue-400 uppercase tracking-widest\">Query</span>\n </div>\n <div className=\"h-4 w-px bg-white/5\" />\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs font-bold uppercase tracking-widest text-zinc-500 hover:text-white gap-2\"\n onClick={onSaveQuery}\n >\n <Save className=\"w-3 h-3\" /> Save\n </Button>\n </div>\n {isExecuting ? (\n <Button\n size=\"sm\"\n className=\"bg-red-600 hover:bg-red-500 text-white font-bold text-body h-7 px-4 gap-2\"\n onClick={onCancelQuery}\n >\n <Square className=\"w-3 h-3 fill-current\" />\n CANCEL\n </Button>\n ) : (\n <Button\n size=\"sm\"\n className=\"bg-blue-600 hover:bg-blue-500 text-white font-bold text-body h-7 px-4 gap-2\"\n onClick={onExecuteQuery}\n disabled={!activeConnection}\n >\n <Play className=\"w-3 h-3 fill-current\" />\n RUN\n </Button>\n )}\n\n {/* Transaction Controls + Playground + Import + Edit */}\n {activeConnection && metadata?.capabilities.queryLanguage === 'sql' && (\n <div className=\"flex items-center gap-1 ml-2 pl-2 border-l border-white/10\">\n {transactionActive ? (\n <>\n <span className=\"text-label font-bold text-amber-400 uppercase tracking-wider px-1.5 py-0.5 bg-amber-500/10 rounded border border-amber-500/20 mr-1\">\n TXN\n </span>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-7 text-xs font-bold text-emerald-400 hover:text-emerald-300 hover:bg-emerald-500/10 gap-1\"\n onClick={onCommitTransaction}\n >\n COMMIT\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-7 text-xs font-bold text-red-400 hover:text-red-300 hover:bg-red-500/10 gap-1\"\n onClick={onRollbackTransaction}\n >\n ROLLBACK\n </Button>\n </>\n ) : (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-7 text-xs font-bold uppercase tracking-widest text-zinc-500 hover:text-white gap-1\"\n onClick={onBeginTransaction}\n disabled={playgroundMode}\n >\n BEGIN\n </Button>\n )}\n\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className={cn(\n \"h-7 text-xs font-bold uppercase tracking-widest gap-1\",\n playgroundMode\n ? \"text-emerald-400 bg-emerald-500/10 hover:bg-emerald-500/20\"\n : \"text-zinc-500 hover:text-white\"\n )}\n onClick={onTogglePlayground}\n disabled={transactionActive}\n title=\"Playground mode: queries are auto-rolled back\"\n >\n <FlaskConical className=\"w-3 h-3\" />\n SANDBOX\n </Button>\n\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className={cn(\n \"h-7 text-xs font-bold uppercase tracking-widest gap-1\",\n editingEnabled\n ? \"text-amber-400 bg-amber-500/10 hover:bg-amber-500/20\"\n : \"text-zinc-500 hover:text-white\"\n )}\n onClick={onToggleEditing}\n title=\"Enable inline data editing\"\n >\n <Pencil className=\"w-3 h-3\" />\n EDIT\n </Button>\n\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-7 text-xs font-bold uppercase tracking-widest text-zinc-500 hover:text-white gap-1\"\n onClick={onImport}\n title=\"Import data from CSV/JSON\"\n >\n <Upload className=\"w-3 h-3\" />\n IMPORT\n </Button>\n </div>\n )}\n </div>\n </>\n );\n}\n","\"use client\";\n\nimport React, { useState, useRef } from 'react';\nimport { Loader2, Sparkles, RefreshCw, Play, Copy, Check } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { DatabaseConnection } from '@/lib/types';\n\ninterface AIAutopilotPanelProps {\n connection: DatabaseConnection | null;\n schemaContext: string;\n onExecuteQuery?: (query: string) => void;\n}\n\nexport function AIAutopilotPanel({ connection, schemaContext, onExecuteQuery }: AIAutopilotPanelProps) {\n const [isLoading, setIsLoading] = useState(false);\n const [report, setReport] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [copiedIndex, setCopiedIndex] = useState<number | null>(null);\n const reportRef = useRef<HTMLDivElement>(null);\n\n const runAutopilot = async () => {\n if (!connection) return;\n setIsLoading(true);\n setError(null);\n setReport('');\n\n try {\n // Fetch monitoring data in parallel\n const [monitoringRes] = await Promise.all([\n fetch('/api/db/monitoring', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n connection,\n options: {\n includeTables: true,\n includeIndexes: true,\n slowQueryLimit: 20,\n },\n }),\n }),\n ]);\n\n let monitoringData = null;\n if (monitoringRes.ok) {\n monitoringData = await monitoringRes.json();\n }\n\n // Build filtered schema\n let filteredSchema = '';\n if (schemaContext) {\n try {\n const tables = JSON.parse(schemaContext);\n filteredSchema = tables.slice(0, 30).map((t: { name: string; rowCount?: number; columns?: { name: string; type: string }[] }) => {\n const cols = t.columns?.slice(0, 6).map(c => `${c.name} (${c.type})`).join(', ') || '';\n return `${t.name} (${t.rowCount || 0} rows): ${cols}`;\n }).join('\\n');\n } catch {\n filteredSchema = schemaContext.substring(0, 2000);\n }\n }\n\n // Call autopilot AI\n const response = await fetch('/api/ai/autopilot', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n slowQueries: monitoringData?.slowQueries,\n indexStats: monitoringData?.indexes,\n tableStats: monitoringData?.tables,\n performanceMetrics: monitoringData?.performance,\n overview: monitoringData?.overview,\n schemaContext: filteredSchema,\n databaseType: connection.type,\n }),\n });\n\n if (!response.ok) {\n const errData = await response.json();\n throw new Error(errData.error || 'Autopilot analysis failed');\n }\n\n const reader = response.body?.getReader();\n if (!reader) throw new Error('No reader');\n\n let fullResponse = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n fullResponse += new TextDecoder().decode(value);\n setReport(fullResponse);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n };\n\n const copyToClipboard = (text: string, index: number) => {\n navigator.clipboard.writeText(text);\n setCopiedIndex(index);\n setTimeout(() => setCopiedIndex(null), 2000);\n };\n\n // Simple markdown rendering (headers, bold, lists)\n const renderMarkdown = (text: string) => {\n const lines = text.split('\\n');\n const elements: React.ReactNode[] = [];\n let inCodeBlock = false;\n let codeContent = '';\n let codeBlockIdx = 0;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.startsWith('```')) {\n if (inCodeBlock) {\n // End of code block\n const blockIndex = codeBlockIdx++;\n const sql = codeContent.trim();\n elements.push(\n <div key={`code-${i}`} className=\"relative group my-2\">\n <pre className=\"bg-[#050505] rounded-lg p-3 text-body font-mono text-blue-300 overflow-x-auto whitespace-pre-wrap border border-white/5\">\n {sql}\n </pre>\n <div className=\"absolute top-1.5 right-1.5 flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n onClick={() => copyToClipboard(sql, blockIndex)}\n className=\"p-1 rounded bg-white/10 hover:bg-white/20 text-zinc-400\"\n title=\"Copy\"\n >\n {copiedIndex === blockIndex ? <Check className=\"w-3 h-3 text-emerald-400\" /> : <Copy className=\"w-3 h-3\" />}\n </button>\n {onExecuteQuery && (\n <button\n onClick={() => onExecuteQuery(sql)}\n className=\"p-1 rounded bg-blue-600/20 hover:bg-blue-600/30 text-blue-400\"\n title=\"Execute\"\n >\n <Play className=\"w-3 h-3 fill-current\" />\n </button>\n )}\n </div>\n </div>\n );\n codeContent = '';\n inCodeBlock = false;\n } else {\n inCodeBlock = true;\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeContent += line + '\\n';\n continue;\n }\n\n // Headers\n if (line.startsWith('## ')) {\n elements.push(<h2 key={i} className=\"text-sm font-bold text-zinc-200 mt-4 mb-2\">{line.slice(3)}</h2>);\n } else if (line.startsWith('### ')) {\n elements.push(<h3 key={i} className=\"text-xs font-bold text-zinc-300 mt-3 mb-1\">{line.slice(4)}</h3>);\n } else if (line.startsWith('- ')) {\n const content = line.slice(2).replace(/\\*\\*(.*?)\\*\\*/g, '<strong class=\"text-zinc-200\">$1</strong>');\n elements.push(<li key={i} className=\"text-xs text-zinc-400 ml-4 leading-relaxed\" dangerouslySetInnerHTML={{ __html: content }} />);\n } else if (line.match(/^\\d+\\.\\s/)) {\n const content = line.replace(/\\*\\*(.*?)\\*\\*/g, '<strong class=\"text-zinc-200\">$1</strong>');\n elements.push(<li key={i} className=\"text-xs text-zinc-400 ml-4 leading-relaxed list-decimal\" dangerouslySetInnerHTML={{ __html: content }} />);\n } else if (line.trim()) {\n const content = line.replace(/\\*\\*(.*?)\\*\\*/g, '<strong class=\"text-zinc-200\">$1</strong>');\n elements.push(<p key={i} className=\"text-xs text-zinc-400 leading-relaxed\" dangerouslySetInnerHTML={{ __html: content }} />);\n } else {\n elements.push(<div key={i} className=\"h-2\" />);\n }\n }\n\n return elements;\n };\n\n return (\n <div className=\"h-full flex flex-col bg-[#080808]\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-white/5 bg-[#0a0a0a]\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-1 rounded bg-cyan-500/10\">\n <Sparkles className=\"w-3.5 h-3.5 text-cyan-400\" />\n </div>\n <span className=\"text-xs font-bold text-cyan-400 uppercase tracking-widest\">\n AI Performance Autopilot\n </span>\n </div>\n <button\n onClick={runAutopilot}\n disabled={isLoading || !connection}\n className={cn(\n \"flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-bold transition-colors\",\n isLoading\n ? \"bg-cyan-600/20 text-cyan-400 cursor-wait\"\n : \"bg-cyan-600 hover:bg-cyan-500 text-white\"\n )}\n >\n {isLoading ? (\n <><Loader2 className=\"w-3 h-3 animate-spin\" /> Analyzing...</>\n ) : (\n <><RefreshCw className=\"w-3 h-3\" /> {report ? 'Re-analyze' : 'Run Analysis'}</>\n )}\n </button>\n </div>\n\n {/* Content */}\n <div ref={reportRef} className=\"flex-1 overflow-auto p-4\">\n {!report && !isLoading && !error && (\n <div className=\"flex flex-col items-center justify-center h-full opacity-40\">\n <Sparkles className=\"w-8 h-8 mb-3\" />\n <p className=\"text-sm font-medium\">AI Performance Autopilot</p>\n <p className=\"text-xs text-zinc-500 mt-1\">\n Click "Run Analysis" to get AI-powered optimization recommendations\n </p>\n </div>\n )}\n\n {error && (\n <div className=\"bg-red-500/10 border border-red-500/20 rounded-lg p-3 text-xs text-red-400\">\n {error}\n </div>\n )}\n\n {report && (\n <div className=\"prose prose-invert prose-xs max-w-none\">\n {renderMarkdown(report)}\n </div>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useMemo, useCallback, useEffect } from 'react';\nimport { Columns3, GripVertical, ArrowRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { QueryResult } from '@/lib/types';\n\ninterface PivotTableProps {\n result: QueryResult | null;\n onLoadQuery?: (query: string) => void;\n}\n\ntype AggFunction = 'count' | 'sum' | 'avg' | 'min' | 'max';\n\nconst AGG_LABELS: Record<AggFunction, string> = {\n count: 'COUNT',\n sum: 'SUM',\n avg: 'AVG',\n min: 'MIN',\n max: 'MAX',\n};\n\nexport function aggregate(values: unknown[], fn: AggFunction): string {\n const nums = values.map(v => Number(v)).filter(n => !isNaN(n));\n\n switch (fn) {\n case 'count': return String(values.length);\n case 'sum': return nums.length ? nums.reduce((a, b) => a + b, 0).toFixed(2) : '0';\n case 'avg': return nums.length ? (nums.reduce((a, b) => a + b, 0) / nums.length).toFixed(2) : '0';\n case 'min': return nums.length ? String(Math.min(...nums)) : '-';\n case 'max': return nums.length ? String(Math.max(...nums)) : '-';\n }\n}\n\nexport function PivotTable({ result, onLoadQuery }: PivotTableProps) {\n const [rowField, setRowField] = useState<string | null>(null);\n const [colField, setColField] = useState<string | null>(null);\n const [valueField, setValueField] = useState<string | null>(null);\n const [aggFunction, setAggFunction] = useState<AggFunction>('count');\n const fields = result?.fields || [];\n const rows = useMemo(() => result?.rows || [], [result?.rows]);\n\n // Auto-detect fields on first render\n useEffect(() => {\n if (fields.length >= 2 && !rowField) {\n const strCol = fields.find(f => {\n const sample = rows[0]?.[f];\n return typeof sample === 'string';\n });\n if (strCol) setRowField(strCol);\n\n const numCol = fields.find(f => {\n const sample = rows[0]?.[f];\n return typeof sample === 'number';\n });\n if (numCol) setValueField(numCol);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fields.length]);\n\n // Compute pivot data\n const pivotData = useMemo(() => {\n if (!rowField || !rows.length) return null;\n\n // Group rows\n const groups = new Map<string, Map<string, unknown[]>>();\n const colValues = new Set<string>();\n\n for (const row of rows) {\n const rowKey = String(row[rowField] ?? 'NULL');\n const colKey = colField ? String(row[colField] ?? 'NULL') : '__all__';\n const value = valueField ? row[valueField] : 1;\n\n if (colField) colValues.add(colKey);\n\n if (!groups.has(rowKey)) groups.set(rowKey, new Map());\n const colMap = groups.get(rowKey)!;\n if (!colMap.has(colKey)) colMap.set(colKey, []);\n colMap.get(colKey)!.push(value);\n }\n\n const colKeys = colField ? Array.from(colValues).sort() : ['__all__'];\n\n // Build pivot rows\n const pivotRows: { rowKey: string; values: Map<string, string> }[] = [];\n for (const [rowKey, colMap] of groups) {\n const values = new Map<string, string>();\n for (const ck of colKeys) {\n const vals = colMap.get(ck) || [];\n values.set(ck, aggregate(vals, aggFunction));\n }\n pivotRows.push({ rowKey, values });\n }\n\n // Sort by row key\n pivotRows.sort((a, b) => a.rowKey.localeCompare(b.rowKey));\n\n return { colKeys, pivotRows };\n }, [rows, rowField, colField, valueField, aggFunction]);\n\n // Generate SQL\n const generateSQL = useCallback(() => {\n if (!rowField) return '';\n const select: string[] = [`\"${rowField}\"`];\n const groupBy: string[] = [`\"${rowField}\"`];\n\n if (colField) {\n // Use CASE WHEN for pivot columns\n const colKeys = pivotData?.colKeys || [];\n for (const ck of colKeys) {\n if (ck === '__all__') continue;\n const valExpr = valueField ? `\"${valueField}\"` : '1';\n select.push(\n `${AGG_LABELS[aggFunction]}(CASE WHEN \"${colField}\" = '${ck.replace(/'/g, \"''\")}' THEN ${valExpr} END) AS \"${ck}\"`\n );\n }\n } else {\n const valExpr = valueField ? `\"${valueField}\"` : '*';\n select.push(`${AGG_LABELS[aggFunction]}(${valExpr}) AS \"${aggFunction}_value\"`);\n }\n\n return `SELECT\\n ${select.join(',\\n ')}\\nFROM your_table\\nGROUP BY ${groupBy.join(', ')}\\nORDER BY ${groupBy.join(', ')};`;\n }, [rowField, colField, valueField, aggFunction, pivotData]);\n\n if (!result || rows.length === 0) {\n return (\n <div className=\"h-full flex flex-col items-center justify-center opacity-30\">\n <Columns3 className=\"w-8 h-8 mb-3\" />\n <p className=\"text-sm font-medium\">Pivot Table</p>\n <p className=\"text-xs text-zinc-500 mt-1\">Execute a query to create pivot tables</p>\n </div>\n );\n }\n\n return (\n <div className=\"h-full flex flex-col bg-[#080808]\">\n {/* Config Bar */}\n <div className=\"flex items-center gap-3 px-4 py-2 border-b border-white/5 bg-[#0a0a0a] flex-wrap\">\n {/* Row Field */}\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-xs text-zinc-500 font-bold uppercase\">Rows:</span>\n <select\n value={rowField || ''}\n onChange={e => setRowField(e.target.value || null)}\n className=\"bg-[#111] border border-white/10 rounded px-2 py-1 text-body text-zinc-300 outline-none\"\n >\n <option value=\"\">Select...</option>\n {fields.map(f => <option key={f} value={f}>{f}</option>)}\n </select>\n </div>\n\n {/* Column Field */}\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-xs text-zinc-500 font-bold uppercase\">Columns:</span>\n <select\n value={colField || ''}\n onChange={e => setColField(e.target.value || null)}\n className=\"bg-[#111] border border-white/10 rounded px-2 py-1 text-body text-zinc-300 outline-none\"\n >\n <option value=\"\">None</option>\n {fields.filter(f => f !== rowField).map(f => <option key={f} value={f}>{f}</option>)}\n </select>\n </div>\n\n {/* Value Field */}\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-xs text-zinc-500 font-bold uppercase\">Values:</span>\n <select\n value={valueField || ''}\n onChange={e => setValueField(e.target.value || null)}\n className=\"bg-[#111] border border-white/10 rounded px-2 py-1 text-body text-zinc-300 outline-none\"\n >\n <option value=\"\">Count</option>\n {fields.filter(f => f !== rowField && f !== colField).map(f => <option key={f} value={f}>{f}</option>)}\n </select>\n </div>\n\n {/* Aggregation */}\n <div className=\"flex items-center gap-1\">\n {(Object.keys(AGG_LABELS) as AggFunction[]).map(fn => (\n <button\n key={fn}\n onClick={() => setAggFunction(fn)}\n className={cn(\n \"px-1.5 py-0.5 rounded text-xs font-bold transition-colors\",\n aggFunction === fn\n ? \"bg-blue-500/20 text-blue-400 border border-blue-500/20\"\n : \"text-zinc-600 hover:text-zinc-400\"\n )}\n >\n {AGG_LABELS[fn]}\n </button>\n ))}\n </div>\n\n {/* Generate SQL Button */}\n {onLoadQuery && rowField && (\n <button\n onClick={() => {\n const sql = generateSQL();\n if (sql) onLoadQuery(sql);\n }}\n className=\"ml-auto flex items-center gap-1 px-2 py-1 rounded text-xs font-bold text-zinc-500 hover:text-blue-400 hover:bg-blue-500/10 transition-colors\"\n >\n <ArrowRight className=\"w-3 h-3\" /> Generate SQL\n </button>\n )}\n </div>\n\n {/* Pivot Result */}\n <div className=\"flex-1 overflow-auto\">\n {pivotData && pivotData.pivotRows.length > 0 ? (\n <table className=\"w-full text-body font-mono\">\n <thead className=\"sticky top-0 z-10 bg-[#0d0d0d]\">\n <tr>\n <th className=\"text-left px-3 py-2 text-zinc-500 border-b border-r border-white/5 font-bold uppercase tracking-wider\">\n {rowField}\n </th>\n {pivotData.colKeys.map(ck => (\n <th key={ck} className=\"text-right px-3 py-2 text-zinc-500 border-b border-r border-white/5 font-bold\">\n {ck === '__all__' ? `${AGG_LABELS[aggFunction]}(${valueField || '*'})` : ck}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {pivotData.pivotRows.map((row, i) => (\n <tr key={i} className=\"hover:bg-blue-500/[0.03] border-b border-white/5\">\n <td className=\"px-3 py-1.5 text-zinc-300 border-r border-white/5 font-medium\">\n {row.rowKey}\n </td>\n {pivotData.colKeys.map(ck => (\n <td key={ck} className=\"px-3 py-1.5 text-right text-amber-500/90 border-r border-white/5\">\n {row.values.get(ck) || '0'}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n ) : (\n <div className=\"flex flex-col items-center justify-center h-full opacity-30\">\n <GripVertical className=\"w-6 h-6 mb-2\" />\n <p className=\"text-xs\">Select row and value fields to build pivot</p>\n </div>\n )}\n </div>\n\n {/* Status */}\n {pivotData && (\n <div className=\"px-4 py-1.5 border-t border-white/5 bg-[#0a0a0a] text-xs text-zinc-500 font-mono\">\n {pivotData.pivotRows.length} groups • {pivotData.colKeys.length} columns • {AGG_LABELS[aggFunction]} aggregation\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { FileText, Loader2, Search, Sparkles, Download } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { TableSchema } from '@/lib/types';\n\ninterface DatabaseDocsProps {\n schema: TableSchema[];\n schemaContext: string;\n databaseType?: string;\n}\n\nexport function DatabaseDocs({ schema, schemaContext, databaseType }: DatabaseDocsProps) {\n const [search, setSearch] = useState('');\n const [aiDocs, setAiDocs] = useState('');\n const [isAiLoading, setIsAiLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const filteredSchema = schema.filter(t =>\n t.name.toLowerCase().includes(search.toLowerCase()) ||\n t.columns?.some(c => c.name.toLowerCase().includes(search.toLowerCase()))\n );\n\n const generateAiDocs = async () => {\n setIsAiLoading(true);\n setError(null);\n setAiDocs('');\n\n try {\n let filteredSchemaStr = '';\n if (schemaContext) {\n try {\n const tables = JSON.parse(schemaContext);\n filteredSchemaStr = tables.slice(0, 50).map((t: { name: string; rowCount?: number; columns?: { name: string; type: string; isPrimary?: boolean; isNullable?: boolean }[] }) => {\n const cols = t.columns?.map(c =>\n `${c.name} (${c.type}${c.isPrimary ? ', PK' : ''}${c.isNullable === false ? ', NOT NULL' : ''})`\n ).join(', ') || '';\n return `Table: ${t.name} (${t.rowCount || 0} rows)\\nColumns: ${cols}`;\n }).join('\\n\\n');\n } catch {\n filteredSchemaStr = schemaContext.substring(0, 5000);\n }\n }\n\n const response = await fetch('/api/ai/describe-schema', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n schemaContext: filteredSchemaStr,\n databaseType,\n mode: 'full',\n }),\n });\n\n if (!response.ok) {\n const err = await response.json();\n throw new Error(err.error || 'Documentation generation failed');\n }\n\n const reader = response.body?.getReader();\n if (!reader) throw new Error('No reader');\n\n let full = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n full += new TextDecoder().decode(value);\n setAiDocs(full);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsAiLoading(false);\n }\n };\n\n const exportMarkdown = () => {\n let md = `# Database Documentation\\n\\n`;\n md += `**Type:** ${databaseType || 'Unknown'}\\n`;\n md += `**Tables:** ${schema.length}\\n\\n`;\n\n if (aiDocs) {\n md += `## AI Analysis\\n\\n${aiDocs}\\n\\n---\\n\\n`;\n }\n\n md += `## Table Reference\\n\\n`;\n\n for (const table of schema) {\n md += `### ${table.name}\\n\\n`;\n if (table.rowCount !== undefined) md += `Rows: ${table.rowCount.toLocaleString()}\\n\\n`;\n\n if (table.columns && table.columns.length > 0) {\n md += `| Column | Type | Primary | Nullable |\\n|--------|------|---------|----------|\\n`;\n for (const col of table.columns) {\n md += `| ${col.name} | ${col.type} | ${col.isPrimary ? 'Yes' : ''} | ${col.nullable !== false ? 'Yes' : 'No'} |\\n`;\n }\n md += '\\n';\n }\n }\n\n const blob = new Blob([md], { type: 'text/markdown' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = 'database-docs.md';\n a.click();\n URL.revokeObjectURL(url);\n };\n\n // Simple markdown rendering for AI docs\n const renderMarkdown = (text: string) => {\n return text.split('\\n').map((line, i) => {\n if (line.startsWith('## ')) return <h2 key={i} className=\"text-sm font-bold text-zinc-200 mt-4 mb-2\">{line.slice(3)}</h2>;\n if (line.startsWith('### ')) return <h3 key={i} className=\"text-xs font-bold text-zinc-300 mt-3 mb-1\">{line.slice(4)}</h3>;\n if (line.startsWith('- ')) {\n const content = line.slice(2).replace(/\\*\\*(.*?)\\*\\*/g, '<strong class=\"text-zinc-200\">$1</strong>');\n return <li key={i} className=\"text-xs text-zinc-400 ml-4 leading-relaxed\" dangerouslySetInnerHTML={{ __html: content }} />;\n }\n if (line.match(/^\\d+\\.\\s/)) {\n const content = line.replace(/\\*\\*(.*?)\\*\\*/g, '<strong class=\"text-zinc-200\">$1</strong>');\n return <li key={i} className=\"text-xs text-zinc-400 ml-4 leading-relaxed list-decimal\" dangerouslySetInnerHTML={{ __html: content }} />;\n }\n if (line.trim()) {\n const content = line.replace(/\\*\\*(.*?)\\*\\*/g, '<strong class=\"text-zinc-200\">$1</strong>');\n return <p key={i} className=\"text-xs text-zinc-400 leading-relaxed\" dangerouslySetInnerHTML={{ __html: content }} />;\n }\n return <div key={i} className=\"h-1.5\" />;\n });\n };\n\n return (\n <div className=\"h-full flex flex-col bg-[#080808]\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-white/5 bg-[#0a0a0a]\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-1 rounded bg-teal-500/10\">\n <FileText className=\"w-3.5 h-3.5 text-teal-400\" />\n </div>\n <span className=\"text-xs font-bold text-teal-400 uppercase tracking-widest\">\n Database Docs\n </span>\n <span className=\"text-label text-zinc-500 font-mono\">{schema.length} tables</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <button\n onClick={generateAiDocs}\n disabled={isAiLoading}\n className={cn(\n \"flex items-center gap-1 px-2.5 py-1 rounded-lg text-xs font-bold transition-colors\",\n isAiLoading\n ? \"bg-teal-600/20 text-teal-400 cursor-wait\"\n : \"bg-teal-600 hover:bg-teal-500 text-white\"\n )}\n >\n {isAiLoading ? <Loader2 className=\"w-3 h-3 animate-spin\" /> : <Sparkles className=\"w-3 h-3\" />}\n {aiDocs ? 'Regenerate' : 'AI Describe'}\n </button>\n <button\n onClick={exportMarkdown}\n className=\"flex items-center gap-1 px-2.5 py-1 rounded-lg bg-white/5 text-zinc-400 text-xs font-bold hover:bg-white/10 transition-colors\"\n >\n <Download className=\"w-3 h-3\" /> Export MD\n </button>\n </div>\n </div>\n\n {/* Search */}\n <div className=\"px-4 py-2 border-b border-white/5 bg-[#0a0a0a]\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-zinc-500\" />\n <input\n value={search}\n onChange={e => setSearch(e.target.value)}\n placeholder=\"Search tables or columns...\"\n className=\"w-full bg-[#111] border border-white/10 rounded-lg pl-7 pr-3 py-1.5 text-xs text-zinc-200 placeholder:text-zinc-600 outline-none focus:border-teal-500/30\"\n />\n </div>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-auto p-4 space-y-3\">\n {error && (\n <div className=\"bg-red-500/10 border border-red-500/20 rounded-lg p-3 text-xs text-red-400\">\n {error}\n </div>\n )}\n\n {/* AI Documentation Section */}\n {(aiDocs || isAiLoading) && (\n <div className=\"bg-teal-500/5 border border-teal-500/10 rounded-lg p-4 mb-4\">\n <div className=\"flex items-center gap-2 mb-3\">\n <Sparkles className=\"w-3.5 h-3.5 text-teal-400\" />\n <span className=\"text-xs font-bold text-teal-400 uppercase tracking-wider\">\n AI-Generated Documentation\n </span>\n {isAiLoading && <Loader2 className=\"w-3 h-3 animate-spin text-teal-400\" />}\n </div>\n {aiDocs && (\n <div className=\"prose prose-invert prose-xs max-w-none\">\n {renderMarkdown(aiDocs)}\n </div>\n )}\n </div>\n )}\n\n {/* Table Reference */}\n <h3 className=\"text-xs font-bold text-zinc-400 uppercase tracking-wider\">Table Reference</h3>\n {filteredSchema.map(table => (\n <div key={table.name} className=\"bg-[#0a0a0a] border border-white/5 rounded-lg overflow-hidden\">\n <div className=\"px-3 py-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-bold text-zinc-200\">{table.name}</span>\n {table.rowCount !== undefined && (\n <span className=\"text-xs text-zinc-500 font-mono\">{table.rowCount.toLocaleString()} rows</span>\n )}\n </div>\n <span className=\"text-xs text-zinc-600\">{table.columns?.length || 0} columns</span>\n </div>\n {table.columns && table.columns.length > 0 && (\n <div className=\"border-t border-white/5\">\n <table className=\"w-full text-body\">\n <thead>\n <tr className=\"text-zinc-500\">\n <th className=\"text-left px-3 py-1 font-normal\">Column</th>\n <th className=\"text-left px-3 py-1 font-normal\">Type</th>\n <th className=\"text-left px-3 py-1 font-normal\">PK</th>\n <th className=\"text-left px-3 py-1 font-normal\">Nullable</th>\n </tr>\n </thead>\n <tbody>\n {table.columns.map(col => (\n <tr key={col.name} className=\"border-t border-white/[0.03] hover:bg-white/[0.02]\">\n <td className=\"px-3 py-1 text-zinc-300 font-mono\">{col.name}</td>\n <td className=\"px-3 py-1 text-zinc-500 font-mono\">{col.type}</td>\n <td className=\"px-3 py-1\">\n {col.isPrimary && <span className=\"text-amber-400 text-label font-bold\">PK</span>}\n </td>\n <td className=\"px-3 py-1 text-zinc-600\">{col.nullable !== false ? 'Yes' : 'No'}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useEffect, useMemo } from 'react';\nimport { storage } from '@/lib/storage';\nimport { QueryHistoryItem } from '@/lib/types';\nimport { \n CheckCircle2, AlertCircle, \n RotateCcw, Trash2, Search, Download,\n ArrowUpDown, Hash,\n Database, History as HistoryIcon, X\n} from 'lucide-react';\nimport { Button } from './ui/button';\nimport { Input } from './ui/input';\nimport { cn } from '@/lib/utils';\nimport { format } from 'date-fns';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\n\ninterface QueryHistoryProps {\n onSelectQuery: (query: string) => void;\n activeConnectionId?: string;\n refreshTrigger?: number;\n}\n\ntype SortField = 'executedAt' | 'executionTime' | 'rowCount';\ntype SortOrder = 'asc' | 'desc';\n\nexport function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }: QueryHistoryProps) {\n const [history, setHistory] = useState<QueryHistoryItem[]>([]);\n const [search, setSearch] = useState('');\n const [filterStatus, setFilterStatus] = useState<'all' | 'success' | 'error'>('all');\n const [isGlobal, setIsGlobal] = useState(false);\n const [sortField, setSortField] = useState<SortField>('executedAt');\n const [sortOrder, setSortOrder] = useState<SortOrder>('desc');\n\n // Refresh history when refreshTrigger changes (replaces key-based re-mount)\n useEffect(() => {\n setHistory(storage.getHistory());\n }, [refreshTrigger]);\n\n const filteredHistory = useMemo(() => {\n return history.filter(item => {\n const matchesSearch = item.query.toLowerCase().includes(search.toLowerCase()) || \n item.connectionName?.toLowerCase().includes(search.toLowerCase()) ||\n item.tabName?.toLowerCase().includes(search.toLowerCase());\n const matchesStatus = filterStatus === 'all' || item.status === filterStatus;\n const matchesConnection = isGlobal || !activeConnectionId || item.connectionId === activeConnectionId;\n return matchesSearch && matchesStatus && matchesConnection;\n }).sort((a, b) => {\n let valA: number = 0;\n let valB: number = 0;\n \n if (sortField === 'executedAt') {\n valA = a.executedAt ? new Date(a.executedAt).getTime() : 0;\n valB = b.executedAt ? new Date(b.executedAt).getTime() : 0;\n } else {\n valA = (a[sortField] as number) || 0;\n valB = (b[sortField] as number) || 0;\n }\n\n if (sortOrder === 'asc') return valA > valB ? 1 : -1;\n return valA < valB ? 1 : -1;\n });\n }, [history, search, filterStatus, isGlobal, activeConnectionId, sortField, sortOrder]);\n\n const handleClearHistory = () => {\n if (confirm('Are you sure you want to clear all history?')) {\n storage.clearHistory();\n setHistory([]);\n }\n };\n\n const handleSort = (field: SortField) => {\n if (sortField === field) {\n setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc');\n } else {\n setSortField(field);\n setSortOrder('desc');\n }\n };\n\n const exportHistory = (format: 'csv' | 'json') => {\n let content = '';\n let mimeType = '';\n const fileName = `query_history_${new Date().getTime()}.${format}`;\n\n if (format === 'csv') {\n const headers = ['Executed At', 'Status', 'Connection', 'Tab', 'Execution Time (ms)', 'Rows', 'Query', 'Error'];\n const rows = filteredHistory.map(item => [\n item.executedAt,\n item.status,\n item.connectionName || item.connectionId,\n item.tabName || '',\n item.executionTime,\n item.rowCount || 0,\n `\"${item.query.replace(/\"/g, '\"\"')}\"`,\n `\"${(item.errorMessage || '').replace(/\"/g, '\"\"')}\"`\n ].join(','));\n content = [headers.join(','), ...rows].join('\\n');\n mimeType = 'text/csv';\n } else {\n content = JSON.stringify(filteredHistory, null, 2);\n mimeType = 'application/json';\n }\n\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n link.click();\n URL.revokeObjectURL(url);\n };\n\n return (\n <div className=\"h-full flex flex-col bg-[#080808]\">\n <div className=\"p-4 border-b border-white/5 bg-[#0a0a0a]/50 backdrop-blur-sm sticky top-0 z-10 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 rounded-lg bg-emerald-500/10 border border-emerald-500/20\">\n <HistoryIcon className=\"w-4 h-4 text-emerald-400\" />\n </div>\n <div>\n <h3 className=\"text-sm font-bold text-zinc-100 uppercase tracking-widest flex items-center gap-2\">\n Query History\n </h3>\n <p className=\"text-xs text-zinc-500 font-medium\">\n Showing {filteredHistory.length} executions\n </p>\n </div>\n </div>\n \n <div className=\"flex items-center gap-2\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"h-8 text-xs font-bold uppercase tracking-widest text-zinc-400 hover:text-white gap-2\">\n <Download className=\"w-3.5 h-3.5\" /> Export\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"bg-[#0d0d0d] border-white/10 text-zinc-300\">\n <DropdownMenuItem onClick={() => exportHistory('csv')} className=\"text-xs cursor-pointer\">\n Export as CSV\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => exportHistory('json')} className=\"text-xs cursor-pointer\">\n Export as JSON\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <Button \n variant=\"ghost\" \n size=\"sm\" \n onClick={handleClearHistory} \n className=\"h-8 text-xs font-bold uppercase tracking-widest text-red-400/70 hover:text-red-400 hover:bg-red-400/10\"\n >\n <Trash2 className=\"w-3.5 h-3.5 mr-2\" /> Clear\n </Button>\n </div>\n </div>\n \n <div className=\"flex flex-wrap items-center gap-3\">\n <div className=\"relative flex-1 min-w-[240px]\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-zinc-500\" />\n <Input \n placeholder=\"Search by query, connection or tab...\" \n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-9 h-9 bg-white/5 border-white/10 text-xs focus:ring-emerald-500/20 rounded-lg\"\n />\n {search && (\n <button \n onClick={() => setSearch('')}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-zinc-500 hover:text-white\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n \n <div className=\"flex items-center gap-2 bg-white/5 rounded-lg p-1 border border-white/10\">\n <button\n onClick={() => setIsGlobal(false)}\n className={cn(\n \"px-3 py-1.5 text-xs font-bold uppercase rounded-md transition-all\",\n !isGlobal ? \"bg-emerald-600 text-white shadow-lg shadow-emerald-600/20\" : \"text-zinc-500 hover:text-zinc-300\"\n )}\n >\n Active Conn\n </button>\n <button\n onClick={() => setIsGlobal(true)}\n className={cn(\n \"px-3 py-1.5 text-xs font-bold uppercase rounded-md transition-all\",\n isGlobal ? \"bg-emerald-600 text-white shadow-lg shadow-emerald-600/20\" : \"text-zinc-500 hover:text-zinc-300\"\n )}\n >\n All Connections\n </button>\n </div>\n\n <div className=\"flex bg-white/5 rounded-lg p-1 border border-white/10\">\n {(['all', 'success', 'error'] as const).map((status) => (\n <button\n key={status}\n onClick={() => setFilterStatus(status)}\n className={cn(\n \"px-3 py-1.5 text-xs font-bold uppercase rounded-md transition-all\",\n filterStatus === status ? \"bg-white/10 text-white\" : \"text-zinc-500 hover:text-zinc-300\"\n )}\n >\n {status}\n </button>\n ))}\n </div>\n </div>\n </div>\n\n <div className=\"flex-1 overflow-auto custom-scrollbar\">\n {filteredHistory.length === 0 ? (\n <div className=\"h-full flex flex-col items-center justify-center opacity-20 p-8 text-center\">\n <HistoryIcon className=\"w-16 h-16 mb-4 text-zinc-600\" />\n <p className=\"text-sm font-medium\">No history items found</p>\n <p className=\"text-xs text-zinc-500 mt-1 uppercase tracking-widest\">Run some queries to see them here</p>\n </div>\n ) : (\n <div className=\"min-w-[800px]\">\n <table className=\"w-full text-left border-collapse\">\n <thead>\n <tr className=\"bg-white/[0.02] border-b border-white/5 text-xs font-bold uppercase tracking-wider text-zinc-500\">\n <th className=\"px-4 py-3 w-10 text-center\">Status</th>\n <th className=\"px-4 py-3 cursor-pointer hover:text-zinc-300 transition-colors group\" onClick={() => handleSort('executedAt')}>\n <div className=\"flex items-center gap-2\">\n Executed At\n <ArrowUpDown className={cn(\"w-3 h-3 transition-opacity\", sortField === 'executedAt' ? \"opacity-100 text-emerald-500\" : \"opacity-0 group-hover:opacity-100\")} />\n </div>\n </th>\n <th className=\"px-4 py-3\">Source</th>\n <th className=\"px-4 py-3\">SQL Query</th>\n <th className=\"px-4 py-3 cursor-pointer hover:text-zinc-300 transition-colors group\" onClick={() => handleSort('executionTime')}>\n <div className=\"flex items-center gap-2\">\n Duration\n <ArrowUpDown className={cn(\"w-3 h-3 transition-opacity\", sortField === 'executionTime' ? \"opacity-100 text-emerald-500\" : \"opacity-0 group-hover:opacity-100\")} />\n </div>\n </th>\n <th className=\"px-4 py-3 cursor-pointer hover:text-zinc-300 transition-colors group\" onClick={() => handleSort('rowCount')}>\n <div className=\"flex items-center gap-2\">\n Rows\n <ArrowUpDown className={cn(\"w-3 h-3 transition-opacity\", sortField === 'rowCount' ? \"opacity-100 text-emerald-500\" : \"opacity-0 group-hover:opacity-100\")} />\n </div>\n </th>\n <th className=\"px-4 py-3 w-20\"></th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-white/5\">\n {filteredHistory.map((item) => (\n <tr \n key={item.id}\n className=\"hover:bg-white/[0.03] transition-colors group text-xs border-b border-white/5\"\n >\n <td className=\"px-4 py-4 text-center\">\n <div className=\"flex justify-center\">\n {item.status === 'success' ? (\n <div className=\"w-5 h-5 rounded-full bg-emerald-500/10 flex items-center justify-center border border-emerald-500/20\">\n <CheckCircle2 className=\"w-3 h-3 text-emerald-500\" />\n </div>\n ) : (\n <div className=\"w-5 h-5 rounded-full bg-red-500/10 flex items-center justify-center border border-red-500/20\">\n <AlertCircle className=\"w-3 h-3 text-red-500\" />\n </div>\n )}\n </div>\n </td>\n <td className=\"px-4 py-4 whitespace-nowrap\">\n <div className=\"flex flex-col\">\n <span className=\"text-zinc-200 font-medium\">\n {item.executedAt ? format(new Date(item.executedAt), 'MMM d, HH:mm:ss') : '-'}\n </span>\n <span className=\"text-xs text-zinc-500 font-mono mt-0.5\">\n {item.executedAt ? format(new Date(item.executedAt), 'yyyy') : ''}\n </span>\n </div>\n </td>\n <td className=\"px-4 py-4 whitespace-nowrap\">\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-1.5 text-zinc-300\">\n <Database className=\"w-3 h-3 text-blue-400\" />\n <span className=\"font-semibold\">{item.connectionName || 'Unknown'}</span>\n </div>\n <div className=\"flex items-center gap-1.5 text-zinc-500 text-xs\">\n <Hash className=\"w-2.5 h-2.5\" />\n <span>{item.tabName || 'Default Tab'}</span>\n </div>\n </div>\n </td>\n <td className=\"px-4 py-4 max-w-md\">\n <div className=\"bg-[#050505] border border-white/5 rounded-md p-2 relative group-hover:border-white/10 transition-colors\">\n <pre className=\"text-body font-mono text-zinc-400 line-clamp-2 break-all whitespace-pre-wrap leading-relaxed\">\n {item.query}\n </pre>\n {item.errorMessage && (\n <div className=\"mt-2 pt-2 border-t border-red-500/10 text-xs text-red-400/80 font-mono italic\">\n {item.errorMessage}\n </div>\n )}\n </div>\n </td>\n <td className=\"px-4 py-4 whitespace-nowrap\">\n <span className={cn(\n \"px-2 py-0.5 rounded text-xs font-mono font-bold\",\n item.executionTime > 500 ? \"text-amber-400 bg-amber-400/10\" : \"text-zinc-400 bg-white/5\"\n )}>\n {item.executionTime}ms\n </span>\n </td>\n <td className=\"px-4 py-4 whitespace-nowrap\">\n <span className=\"text-zinc-400 font-mono text-xs\">\n {item.rowCount != null ? item.rowCount.toLocaleString() : '-'}\n </span>\n </td>\n <td className=\"px-4 py-4 text-right\">\n <Button \n variant=\"ghost\" \n size=\"sm\" \n className=\"h-8 w-8 p-0 hover:bg-emerald-500/10 hover:text-emerald-400\"\n onClick={() => onSelectQuery(item.query)}\n title=\"Restore Query\"\n >\n <RotateCcw className=\"w-3.5 h-3.5\" />\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useEffect } from 'react';\nimport { storage } from '@/lib/storage';\nimport { SavedQuery } from '@/lib/types';\nimport { \n Bookmark, Search, Trash2, Edit3, \n Tag, Calendar\n} from 'lucide-react';\nimport { Button } from './ui/button';\nimport { Input } from './ui/input';\nimport { format } from 'date-fns';\n\ninterface SavedQueriesProps {\n onSelectQuery: (query: string) => void;\n connectionType?: string;\n refreshTrigger?: number;\n}\n\nexport function SavedQueries({ onSelectQuery, connectionType, refreshTrigger }: SavedQueriesProps) {\n const [queries, setQueries] = useState<SavedQuery[]>([]);\n const [search, setSearch] = useState('');\n\n // Refresh queries when refreshTrigger changes (replaces key-based re-mount)\n useEffect(() => {\n setQueries(storage.getSavedQueries());\n }, [refreshTrigger]);\n\n const filteredQueries = queries.filter(q => {\n const matchesSearch = q.name.toLowerCase().includes(search.toLowerCase()) || \n q.query.toLowerCase().includes(search.toLowerCase());\n const matchesType = !connectionType || q.connectionType === connectionType;\n return matchesSearch && matchesType;\n });\n\n const handleDelete = (id: string, e: React.MouseEvent) => {\n e.stopPropagation();\n if (confirm('Are you sure you want to delete this saved query?')) {\n storage.deleteSavedQuery(id);\n setQueries(storage.getSavedQueries());\n }\n };\n\n return (\n <div className=\"h-full flex flex-col bg-[#0a0a0a]\">\n <div className=\"p-4 border-b border-white/5 flex flex-col gap-4\">\n <h3 className=\"text-sm font-bold text-zinc-400 uppercase tracking-widest flex items-center gap-2\">\n <Bookmark className=\"w-4 h-4\" /> Saved Queries\n </h3>\n \n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-zinc-500\" />\n <Input \n placeholder=\"Search saved queries...\" \n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-8 h-8 bg-white/5 border-white/10 text-xs focus:ring-blue-500/20\"\n />\n </div>\n </div>\n\n <div className=\"flex-1 overflow-y-auto custom-scrollbar\">\n {filteredQueries.length === 0 ? (\n <div className=\"h-full flex flex-col items-center justify-center opacity-20 p-8 text-center\">\n <Bookmark className=\"w-12 h-12 mb-4\" />\n <p className=\"text-sm italic\">No saved queries found</p>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-px bg-white/5\">\n {filteredQueries.map((q) => (\n <div \n key={q.id}\n className=\"bg-[#0a0a0a] p-4 hover:bg-white/[0.02] transition-colors group cursor-pointer\"\n onClick={() => onSelectQuery(q.query)}\n >\n <div className=\"flex items-start justify-between mb-2\">\n <div>\n <h4 className=\"text-xs font-bold text-blue-400 mb-1 group-hover:text-blue-300 transition-colors\">\n {q.name}\n </h4>\n {q.description && (\n <p className=\"text-xs text-zinc-500 line-clamp-1\">{q.description}</p>\n )}\n </div>\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <Button variant=\"ghost\" size=\"icon\" className=\"h-6 w-6 text-zinc-500 hover:text-white\">\n <Edit3 className=\"w-3 h-3\" />\n </Button>\n <Button \n variant=\"ghost\" \n size=\"icon\" \n className=\"h-6 w-6 text-zinc-500 hover:text-red-400\"\n onClick={(e) => handleDelete(q.id, e)}\n >\n <Trash2 className=\"w-3 h-3\" />\n </Button>\n </div>\n </div>\n\n <div className=\"bg-[#050505] border border-white/5 rounded-md p-2 mb-3\">\n <pre className=\"text-xs font-mono text-zinc-400 line-clamp-3\">\n {q.query}\n </pre>\n </div>\n\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"px-1.5 py-0.5 rounded bg-blue-500/10 border border-blue-500/20 text-label font-bold text-blue-400 uppercase tracking-tighter\">\n {q.connectionType}\n </span>\n {q.tags?.map(tag => (\n <span key={tag} className=\"flex items-center gap-1 text-label text-zinc-500\">\n <Tag className=\"w-2.5 h-2.5\" /> {tag}\n </span>\n ))}\n </div>\n <span className=\"text-label text-zinc-600 flex items-center gap-1 font-mono\">\n <Calendar className=\"w-2.5 h-2.5\" /> {format(q.updatedAt, 'MMM d, yyyy')}\n </span>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport type { DatabaseConnection } from '@/lib/types';\nimport { storage } from '@/lib/storage';\n\n/**\n * Returns all connections: user connections from localStorage + managed seed connections from server.\n * Use this instead of storage.getConnections() in components that need the full list.\n *\n * This is a lightweight alternative to useConnectionManager — it only fetches and merges,\n * without active connection state, schema loading, or health checks.\n */\nexport function useAllConnections() {\n const [connections, setConnections] = useState<DatabaseConnection[]>([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let cancelled = false;\n\n async function load() {\n const userConns = storage.getConnections();\n\n try {\n const res = await fetch('/api/connections/managed');\n if (res.ok) {\n const { connections: managedConns } = await res.json();\n if (managedConns?.length > 0 && !cancelled) {\n const merged: DatabaseConnection[] = [];\n const addedIds = new Set<string>();\n\n // Managed connections first\n for (const mc of managedConns) {\n merged.push({ ...mc, createdAt: new Date(mc.createdAt) });\n addedIds.add(mc.id);\n if (mc.seedId) addedIds.add(`seed:${mc.seedId}`);\n }\n\n // User connections (skip duplicates)\n for (const uc of userConns) {\n if (addedIds.has(uc.id)) continue;\n if (uc.seedId && managedConns.some((mc: { seedId: string }) => mc.seedId === uc.seedId)) continue;\n merged.push(uc);\n }\n\n setConnections(merged);\n setLoading(false);\n return;\n }\n }\n } catch {\n // Managed connections optional\n }\n\n if (!cancelled) {\n setConnections(userConns);\n setLoading(false);\n }\n }\n\n load();\n return () => { cancelled = true; };\n }, []);\n\n return { connections, loading };\n}\n","import type { TableSchema, ColumnSchema, IndexSchema, ForeignKeySchema } from '@/lib/types';\nimport type { SchemaDiff, TableDiff, ColumnDiff, IndexDiff, ForeignKeyDiff } from './types';\n\nfunction diffColumns(sourceCols: ColumnSchema[], targetCols: ColumnSchema[]): ColumnDiff[] {\n const diffs: ColumnDiff[] = [];\n const sourceMap = new Map(sourceCols.map(c => [c.name, c]));\n const targetMap = new Map(targetCols.map(c => [c.name, c]));\n\n // Added columns (in target but not in source)\n for (const [name, col] of targetMap) {\n if (!sourceMap.has(name)) {\n diffs.push({\n action: 'added',\n columnName: name,\n targetType: col.type,\n targetNullable: col.nullable,\n targetDefault: col.defaultValue,\n targetIsPrimary: col.isPrimary,\n changes: [`Added column \"${name}\" (${col.type})`],\n });\n }\n }\n\n // Removed columns (in source but not in target)\n for (const [name, col] of sourceMap) {\n if (!targetMap.has(name)) {\n diffs.push({\n action: 'removed',\n columnName: name,\n sourceType: col.type,\n sourceNullable: col.nullable,\n sourceDefault: col.defaultValue,\n sourceIsPrimary: col.isPrimary,\n changes: [`Removed column \"${name}\" (${col.type})`],\n });\n }\n }\n\n // Modified columns (in both, check for differences)\n for (const [name, sourceCol] of sourceMap) {\n const targetCol = targetMap.get(name);\n if (!targetCol) continue;\n\n const changes: string[] = [];\n\n if (sourceCol.type.toLowerCase() !== targetCol.type.toLowerCase()) {\n changes.push(`Type changed: ${sourceCol.type} → ${targetCol.type}`);\n }\n if (sourceCol.nullable !== targetCol.nullable) {\n changes.push(`Nullable changed: ${sourceCol.nullable} → ${targetCol.nullable}`);\n }\n if ((sourceCol.defaultValue || '') !== (targetCol.defaultValue || '')) {\n changes.push(`Default changed: ${sourceCol.defaultValue || 'none'} → ${targetCol.defaultValue || 'none'}`);\n }\n if (sourceCol.isPrimary !== targetCol.isPrimary) {\n changes.push(`Primary key changed: ${sourceCol.isPrimary} → ${targetCol.isPrimary}`);\n }\n\n if (changes.length > 0) {\n diffs.push({\n action: 'modified',\n columnName: name,\n sourceType: sourceCol.type,\n targetType: targetCol.type,\n sourceNullable: sourceCol.nullable,\n targetNullable: targetCol.nullable,\n sourceDefault: sourceCol.defaultValue,\n targetDefault: targetCol.defaultValue,\n sourceIsPrimary: sourceCol.isPrimary,\n targetIsPrimary: targetCol.isPrimary,\n changes,\n });\n }\n }\n\n return diffs;\n}\n\nfunction diffIndexes(sourceIndexes: IndexSchema[], targetIndexes: IndexSchema[]): IndexDiff[] {\n const diffs: IndexDiff[] = [];\n\n const sourceMap = new Map<string, IndexSchema>();\n sourceIndexes.forEach(idx => {\n const key = idx.name || idx.columns.sort().join(',');\n sourceMap.set(key, idx);\n });\n\n const targetMap = new Map<string, IndexSchema>();\n targetIndexes.forEach(idx => {\n const key = idx.name || idx.columns.sort().join(',');\n targetMap.set(key, idx);\n });\n\n for (const [key, idx] of targetMap) {\n if (!sourceMap.has(key)) {\n diffs.push({\n action: 'added',\n indexName: idx.name || key,\n targetColumns: idx.columns,\n targetUnique: idx.unique,\n changes: [`Added index \"${idx.name || key}\" on (${idx.columns.join(', ')})`],\n });\n }\n }\n\n for (const [key, idx] of sourceMap) {\n if (!targetMap.has(key)) {\n diffs.push({\n action: 'removed',\n indexName: idx.name || key,\n sourceColumns: idx.columns,\n sourceUnique: idx.unique,\n changes: [`Removed index \"${idx.name || key}\"`],\n });\n }\n }\n\n for (const [key, sourceIdx] of sourceMap) {\n const targetIdx = targetMap.get(key);\n if (!targetIdx) continue;\n\n const changes: string[] = [];\n const sourceColStr = sourceIdx.columns.sort().join(',');\n const targetColStr = targetIdx.columns.sort().join(',');\n\n if (sourceColStr !== targetColStr) {\n changes.push(`Columns changed: (${sourceIdx.columns.join(', ')}) → (${targetIdx.columns.join(', ')})`);\n }\n if (sourceIdx.unique !== targetIdx.unique) {\n changes.push(`Unique changed: ${sourceIdx.unique} → ${targetIdx.unique}`);\n }\n\n if (changes.length > 0) {\n diffs.push({\n action: 'modified',\n indexName: sourceIdx.name || key,\n sourceColumns: sourceIdx.columns,\n targetColumns: targetIdx.columns,\n sourceUnique: sourceIdx.unique,\n targetUnique: targetIdx.unique,\n changes,\n });\n }\n }\n\n return diffs;\n}\n\nfunction diffForeignKeys(sourceFKs: ForeignKeySchema[], targetFKs: ForeignKeySchema[]): ForeignKeyDiff[] {\n const diffs: ForeignKeyDiff[] = [];\n\n const makeKey = (fk: ForeignKeySchema) => `${fk.columnName}→${fk.referencedTable}.${fk.referencedColumn}`;\n\n const sourceMap = new Map(sourceFKs.map(fk => [makeKey(fk), fk]));\n const targetMap = new Map(targetFKs.map(fk => [makeKey(fk), fk]));\n\n for (const [key, fk] of targetMap) {\n if (!sourceMap.has(key)) {\n diffs.push({\n action: 'added',\n columnName: fk.columnName,\n targetReferencedTable: fk.referencedTable,\n targetReferencedColumn: fk.referencedColumn,\n changes: [`Added FK: ${fk.columnName} → ${fk.referencedTable}(${fk.referencedColumn})`],\n });\n }\n }\n\n for (const [key, fk] of sourceMap) {\n if (!targetMap.has(key)) {\n diffs.push({\n action: 'removed',\n columnName: fk.columnName,\n sourceReferencedTable: fk.referencedTable,\n sourceReferencedColumn: fk.referencedColumn,\n changes: [`Removed FK: ${fk.columnName} → ${fk.referencedTable}(${fk.referencedColumn})`],\n });\n }\n }\n\n return diffs;\n}\n\nexport function diffSchemas(source: TableSchema[], target: TableSchema[]): SchemaDiff {\n const sourceMap = new Map(source.map(t => [t.name, t]));\n const targetMap = new Map(target.map(t => [t.name, t]));\n\n const tables: TableDiff[] = [];\n let added = 0, removed = 0, modified = 0;\n\n // Added tables\n for (const [name, table] of targetMap) {\n if (!sourceMap.has(name)) {\n tables.push({\n action: 'added',\n tableName: name,\n columns: table.columns.map(c => ({\n action: 'added' as const,\n columnName: c.name,\n targetType: c.type,\n targetNullable: c.nullable,\n targetDefault: c.defaultValue,\n targetIsPrimary: c.isPrimary,\n changes: [`Added column \"${c.name}\" (${c.type})`],\n })),\n indexes: table.indexes.map(idx => ({\n action: 'added' as const,\n indexName: idx.name,\n targetColumns: idx.columns,\n targetUnique: idx.unique,\n changes: [`Added index \"${idx.name}\"`],\n })),\n foreignKeys: (table.foreignKeys || []).map(fk => ({\n action: 'added' as const,\n columnName: fk.columnName,\n targetReferencedTable: fk.referencedTable,\n targetReferencedColumn: fk.referencedColumn,\n changes: [`Added FK: ${fk.columnName} → ${fk.referencedTable}(${fk.referencedColumn})`],\n })),\n });\n added++;\n }\n }\n\n // Removed tables\n for (const [name, table] of sourceMap) {\n if (!targetMap.has(name)) {\n tables.push({\n action: 'removed',\n tableName: name,\n columns: table.columns.map(c => ({\n action: 'removed' as const,\n columnName: c.name,\n sourceType: c.type,\n sourceNullable: c.nullable,\n sourceDefault: c.defaultValue,\n sourceIsPrimary: c.isPrimary,\n changes: [`Removed column \"${c.name}\"`],\n })),\n indexes: [],\n foreignKeys: [],\n });\n removed++;\n }\n }\n\n // Modified tables\n for (const [name, sourceTable] of sourceMap) {\n const targetTable = targetMap.get(name);\n if (!targetTable) continue;\n\n const columns = diffColumns(sourceTable.columns, targetTable.columns);\n const indexes = diffIndexes(sourceTable.indexes, targetTable.indexes);\n const foreignKeys = diffForeignKeys(sourceTable.foreignKeys || [], targetTable.foreignKeys || []);\n\n if (columns.length > 0 || indexes.length > 0 || foreignKeys.length > 0) {\n tables.push({\n action: 'modified',\n tableName: name,\n columns,\n indexes,\n foreignKeys,\n });\n modified++;\n }\n }\n\n return {\n tables,\n summary: { added, removed, modified },\n hasChanges: tables.length > 0,\n };\n}\n","import type { DatabaseType } from '@/lib/types';\nimport type { SchemaDiff, TableDiff, ColumnDiff } from './types';\n\nfunction escapeIdentifier(name: string, dialect: DatabaseType): string {\n switch (dialect) {\n case 'mysql': return `\\`${name}\\``;\n case 'mssql': return `[${name.replace(/\\]/g, ']]')}]`;\n case 'oracle':\n case 'postgres':\n case 'sqlite':\n default: return `\"${name}\"`;\n }\n}\n\nfunction generateColumnDef(col: ColumnDiff, dialect: DatabaseType): string {\n const type = col.targetType || col.sourceType || 'TEXT';\n const nullable = col.targetNullable === false ? ' NOT NULL' : '';\n const defaultVal = col.targetDefault ? ` DEFAULT ${col.targetDefault}` : '';\n return `${escapeIdentifier(col.columnName, dialect)} ${type}${nullable}${defaultVal}`;\n}\n\nfunction generateCreateTable(table: TableDiff, dialect: DatabaseType): string {\n const lines: string[] = [];\n const id = escapeIdentifier(table.tableName, dialect);\n\n const colDefs = table.columns\n .filter(c => c.action === 'added')\n .map(c => ` ${generateColumnDef(c, dialect)}`);\n\n // Add primary key constraint\n const pkCols = table.columns.filter(c => c.targetIsPrimary).map(c => escapeIdentifier(c.columnName, dialect));\n\n lines.push(`CREATE TABLE ${id} (`);\n lines.push(colDefs.join(',\\n'));\n if (pkCols.length > 0) {\n lines.push(`, PRIMARY KEY (${pkCols.join(', ')})`);\n }\n lines.push(');');\n\n // Indexes\n table.indexes.filter(i => i.action === 'added').forEach(idx => {\n const unique = idx.targetUnique ? 'UNIQUE ' : '';\n const cols = (idx.targetColumns || []).map(c => escapeIdentifier(c, dialect)).join(', ');\n lines.push(`CREATE ${unique}INDEX ${escapeIdentifier(idx.indexName, dialect)} ON ${id} (${cols});`);\n });\n\n // Foreign keys\n table.foreignKeys.filter(fk => fk.action === 'added').forEach(fk => {\n lines.push(`ALTER TABLE ${id} ADD CONSTRAINT ${escapeIdentifier(`fk_${table.tableName}_${fk.columnName}`, dialect)} FOREIGN KEY (${escapeIdentifier(fk.columnName, dialect)}) REFERENCES ${escapeIdentifier(fk.targetReferencedTable || '', dialect)}(${escapeIdentifier(fk.targetReferencedColumn || '', dialect)});`);\n });\n\n return lines.join('\\n');\n}\n\nfunction generateDropTable(table: TableDiff, dialect: DatabaseType): string {\n return `DROP TABLE IF EXISTS ${escapeIdentifier(table.tableName, dialect)};`;\n}\n\nfunction generateAlterTable(table: TableDiff, dialect: DatabaseType): string {\n const lines: string[] = [];\n const id = escapeIdentifier(table.tableName, dialect);\n\n lines.push(`-- Alter table: ${table.tableName}`);\n\n // Added columns\n table.columns.filter(c => c.action === 'added').forEach(col => {\n lines.push(`ALTER TABLE ${id} ADD COLUMN ${generateColumnDef(col, dialect)};`);\n });\n\n // Removed columns\n table.columns.filter(c => c.action === 'removed').forEach(col => {\n if (dialect === 'sqlite') {\n lines.push(`-- SQLite: Cannot drop column \"${col.columnName}\" directly. Requires table recreation.`);\n } else {\n lines.push(`ALTER TABLE ${id} DROP COLUMN ${escapeIdentifier(col.columnName, dialect)};`);\n }\n });\n\n // Modified columns\n table.columns.filter(c => c.action === 'modified').forEach(col => {\n if (dialect === 'sqlite') {\n lines.push(`-- SQLite: Cannot alter column \"${col.columnName}\" type directly. Requires table recreation.`);\n } else if (dialect === 'mysql') {\n const type = col.targetType || col.sourceType || 'TEXT';\n const nullable = col.targetNullable === false ? ' NOT NULL' : ' NULL';\n const defaultVal = col.targetDefault ? ` DEFAULT ${col.targetDefault}` : '';\n lines.push(`ALTER TABLE ${id} MODIFY COLUMN ${escapeIdentifier(col.columnName, dialect)} ${type}${nullable}${defaultVal};`);\n } else if (dialect === 'oracle') {\n const type = col.targetType || col.sourceType || 'VARCHAR2(255)';\n const nullable = col.targetNullable === false ? ' NOT NULL' : ' NULL';\n const defaultVal = col.targetDefault ? ` DEFAULT ${col.targetDefault}` : '';\n lines.push(`ALTER TABLE ${id} MODIFY (${escapeIdentifier(col.columnName, dialect)} ${type}${defaultVal}${nullable});`);\n } else if (dialect === 'mssql') {\n const type = col.targetType || col.sourceType || 'NVARCHAR(MAX)';\n const nullable = col.targetNullable === false ? ' NOT NULL' : ' NULL';\n lines.push(`ALTER TABLE ${id} ALTER COLUMN ${escapeIdentifier(col.columnName, dialect)} ${type}${nullable};`);\n if (col.sourceDefault !== col.targetDefault && col.targetDefault) {\n lines.push(`ALTER TABLE ${id} ADD DEFAULT ${col.targetDefault} FOR ${escapeIdentifier(col.columnName, dialect)};`);\n }\n } else {\n // PostgreSQL\n if (col.sourceType !== col.targetType) {\n lines.push(`ALTER TABLE ${id} ALTER COLUMN ${escapeIdentifier(col.columnName, dialect)} TYPE ${col.targetType};`);\n }\n if (col.sourceNullable !== col.targetNullable) {\n if (col.targetNullable) {\n lines.push(`ALTER TABLE ${id} ALTER COLUMN ${escapeIdentifier(col.columnName, dialect)} DROP NOT NULL;`);\n } else {\n lines.push(`ALTER TABLE ${id} ALTER COLUMN ${escapeIdentifier(col.columnName, dialect)} SET NOT NULL;`);\n }\n }\n if (col.sourceDefault !== col.targetDefault) {\n if (col.targetDefault) {\n lines.push(`ALTER TABLE ${id} ALTER COLUMN ${escapeIdentifier(col.columnName, dialect)} SET DEFAULT ${col.targetDefault};`);\n } else {\n lines.push(`ALTER TABLE ${id} ALTER COLUMN ${escapeIdentifier(col.columnName, dialect)} DROP DEFAULT;`);\n }\n }\n }\n });\n\n // Added indexes\n table.indexes.filter(i => i.action === 'added').forEach(idx => {\n const unique = idx.targetUnique ? 'UNIQUE ' : '';\n const cols = (idx.targetColumns || []).map(c => escapeIdentifier(c, dialect)).join(', ');\n lines.push(`CREATE ${unique}INDEX ${escapeIdentifier(idx.indexName, dialect)} ON ${id} (${cols});`);\n });\n\n // Removed indexes\n table.indexes.filter(i => i.action === 'removed').forEach(idx => {\n if (dialect === 'mysql') {\n lines.push(`DROP INDEX ${escapeIdentifier(idx.indexName, dialect)} ON ${id};`);\n } else {\n lines.push(`DROP INDEX IF EXISTS ${escapeIdentifier(idx.indexName, dialect)};`);\n }\n });\n\n // Added foreign keys\n table.foreignKeys.filter(fk => fk.action === 'added').forEach(fk => {\n const constraintName = escapeIdentifier(`fk_${table.tableName}_${fk.columnName}`, dialect);\n lines.push(`ALTER TABLE ${id} ADD CONSTRAINT ${constraintName} FOREIGN KEY (${escapeIdentifier(fk.columnName, dialect)}) REFERENCES ${escapeIdentifier(fk.targetReferencedTable || '', dialect)}(${escapeIdentifier(fk.targetReferencedColumn || '', dialect)});`);\n });\n\n // Removed foreign keys\n table.foreignKeys.filter(fk => fk.action === 'removed').forEach(fk => {\n const constraintName = escapeIdentifier(`fk_${table.tableName}_${fk.columnName}`, dialect);\n if (dialect === 'mysql') {\n lines.push(`ALTER TABLE ${id} DROP FOREIGN KEY ${constraintName};`);\n } else if (dialect === 'sqlite') {\n lines.push(`-- SQLite: Cannot drop foreign key directly. Requires table recreation.`);\n } else {\n lines.push(`ALTER TABLE ${id} DROP CONSTRAINT IF EXISTS ${constraintName};`);\n }\n });\n\n return lines.join('\\n');\n}\n\nexport function generateMigrationSQL(diff: SchemaDiff, dialect: DatabaseType): string {\n if (!diff.hasChanges) {\n return '-- No schema changes detected.';\n }\n\n const sections: string[] = [];\n sections.push(`-- Migration generated at ${new Date().toISOString()}`);\n sections.push(`-- Dialect: ${dialect}`);\n sections.push(`-- Changes: ${diff.summary.added} added, ${diff.summary.removed} removed, ${diff.summary.modified} modified`);\n sections.push('');\n\n if (dialect !== 'sqlite') {\n sections.push('BEGIN;');\n sections.push('');\n }\n\n // Drop tables first (reverse dependency order)\n const droppedTables = diff.tables.filter(t => t.action === 'removed');\n if (droppedTables.length > 0) {\n sections.push('-- Drop removed tables');\n droppedTables.forEach(t => sections.push(generateDropTable(t, dialect)));\n sections.push('');\n }\n\n // Create new tables\n const addedTables = diff.tables.filter(t => t.action === 'added');\n if (addedTables.length > 0) {\n sections.push('-- Create new tables');\n addedTables.forEach(t => {\n sections.push(generateCreateTable(t, dialect));\n sections.push('');\n });\n }\n\n // Alter existing tables\n const modifiedTables = diff.tables.filter(t => t.action === 'modified');\n if (modifiedTables.length > 0) {\n sections.push('-- Modify existing tables');\n modifiedTables.forEach(t => {\n sections.push(generateAlterTable(t, dialect));\n sections.push('');\n });\n }\n\n if (dialect !== 'sqlite') {\n sections.push('COMMIT;');\n }\n\n return sections.join('\\n');\n}\n","'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport { Badge } from '@/components/ui/badge';\nimport { cn } from '@/lib/utils';\nimport type { SchemaSnapshot } from '@/lib/types';\n\ninterface SnapshotTimelineProps {\n snapshots: SchemaSnapshot[];\n onCompare: (sourceId: string, targetId: string) => void;\n onDelete: (id: string) => void;\n}\n\nexport function SnapshotTimeline({ snapshots, onCompare, onDelete }: SnapshotTimelineProps) {\n const [selected, setSelected] = useState<string[]>([]);\n\n const handleClick = (id: string) => {\n setSelected(prev => {\n if (prev.includes(id)) {\n return prev.filter(s => s !== id);\n }\n if (prev.length >= 2) {\n return [prev[1], id];\n }\n return [...prev, id];\n });\n };\n\n const canCompare = selected.length === 2;\n\n useEffect(() => {\n if (canCompare) {\n onCompare(selected[0], selected[1]);\n }\n }, [selected, canCompare, onCompare]);\n\n if (snapshots.length === 0) {\n return (\n <div className=\"flex items-center justify-center py-4 text-zinc-600 text-xs\">\n No snapshots taken yet. Take a snapshot to start tracking schema changes.\n </div>\n );\n }\n\n const sorted = [...snapshots].sort((a, b) =>\n new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()\n );\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between px-2\">\n <span className=\"text-xs uppercase text-zinc-500 font-bold\">Timeline</span>\n {canCompare && (\n <span className=\"text-xs text-blue-400\">Comparing 2 snapshots</span>\n )}\n </div>\n\n {/* Horizontal timeline */}\n <div className=\"relative flex items-center overflow-x-auto pb-2 px-2 gap-0\">\n {/* Timeline line */}\n <div className=\"absolute top-[18px] left-4 right-4 h-[2px] bg-white/10\" />\n\n {sorted.map((snapshot, idx) => {\n const isSelected = selected.includes(snapshot.id);\n const date = new Date(snapshot.createdAt);\n\n return (\n <div\n key={snapshot.id}\n className=\"relative flex flex-col items-center min-w-[100px] cursor-pointer group\"\n onClick={() => handleClick(snapshot.id)}\n >\n {/* Dot */}\n <div className={cn(\n \"w-4 h-4 rounded-full border-2 z-10 transition-all\",\n isSelected\n ? \"bg-blue-500 border-blue-400 scale-125\"\n : \"bg-[#0d0d0d] border-white/20 hover:border-white/40\"\n )} />\n\n {/* Connector */}\n {idx < sorted.length - 1 && (\n <div className=\"absolute top-[7px] left-[50%] w-full h-[2px] bg-white/10\" />\n )}\n\n {/* Label */}\n <div className={cn(\n \"mt-2 text-center transition-colors\",\n isSelected ? \"text-blue-400\" : \"text-zinc-500 group-hover:text-zinc-300\"\n )}>\n <div className=\"text-xs font-medium truncate max-w-[90px]\">\n {snapshot.label || snapshot.connectionName}\n </div>\n <div className=\"text-label text-zinc-600\">\n {date.toLocaleDateString()} {date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </div>\n <Badge variant=\"secondary\" className=\"text-label mt-1\">\n {snapshot.schema.length} tables\n </Badge>\n </div>\n\n {/* Delete button */}\n <button\n onClick={(e) => { e.stopPropagation(); onDelete(snapshot.id); }}\n className=\"absolute -top-2 -right-1 p-0.5 text-zinc-600 hover:text-red-400 opacity-0 group-hover:opacity-100 transition-opacity\"\n >\n <Trash2 className=\"w-2.5 h-2.5\" />\n </button>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React, { useState, useMemo, useCallback } from 'react';\nimport {\n GitCompare,\n Plus,\n Minus,\n Edit3,\n Camera,\n FileCode,\n ChevronRight,\n ChevronDown,\n Clock,\n Database,\n AlertTriangle,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { Badge } from '@/components/ui/badge';\nimport { cn } from '@/lib/utils';\nimport type { TableSchema, SchemaSnapshot, DatabaseType, DatabaseConnection } from '@/lib/types';\nimport { storage } from '@/lib/storage';\nimport { useAllConnections } from '@/hooks/use-all-connections';\nimport { diffSchemas } from '@/lib/schema-diff/diff-engine';\nimport { generateMigrationSQL } from '@/lib/schema-diff/migration-generator';\nimport type { SchemaDiff as SchemaDiffType, TableDiff } from '@/lib/schema-diff/types';\nimport { SnapshotTimeline } from '@/components/SnapshotTimeline';\n\ninterface SchemaDiffProps {\n schema: TableSchema[];\n connection: DatabaseConnection | null;\n}\n\nexport function SchemaDiff({ schema, connection }: SchemaDiffProps) {\n const [snapshots, setSnapshots] = useState<SchemaSnapshot[]>(() =>\n storage.getSchemaSnapshots()\n );\n const [sourceId, setSourceId] = useState<string>('current');\n const [targetId, setTargetId] = useState<string>('');\n const [selectedTable, setSelectedTable] = useState<string | null>(null);\n const [showMigration, setShowMigration] = useState(false);\n const [snapshotLabel, setSnapshotLabel] = useState('');\n const [showLabelInput, setShowLabelInput] = useState(false);\n\n // Take snapshot of current schema\n const takeSnapshot = useCallback(() => {\n if (!connection) return;\n const snapshot: SchemaSnapshot = {\n id: Date.now().toString(),\n connectionId: connection.id,\n connectionName: connection.name,\n databaseType: connection.type,\n schema: JSON.parse(JSON.stringify(schema)),\n createdAt: new Date(),\n label: snapshotLabel.trim() || undefined,\n };\n storage.saveSchemaSnapshot(snapshot);\n setSnapshots(storage.getSchemaSnapshots());\n setSnapshotLabel('');\n setShowLabelInput(false);\n }, [schema, connection, snapshotLabel]);\n\n // Delete snapshot\n const deleteSnapshot = useCallback((id: string) => {\n storage.deleteSchemaSnapshot(id);\n setSnapshots(storage.getSchemaSnapshots());\n if (sourceId === id) setSourceId('current');\n if (targetId === id) setTargetId('');\n }, [sourceId, targetId]);\n\n // Compute diff\n const diff = useMemo<SchemaDiffType | null>(() => {\n if (!targetId) return null;\n\n const sourceSchema = sourceId === 'current'\n ? schema\n : snapshots.find(s => s.id === sourceId)?.schema || [];\n\n const targetSchema = targetId === 'current'\n ? schema\n : snapshots.find(s => s.id === targetId)?.schema || [];\n\n if (sourceId === targetId) return null;\n\n return diffSchemas(sourceSchema, targetSchema);\n }, [sourceId, targetId, schema, snapshots]);\n\n // Generate migration SQL\n const migrationSQL = useMemo(() => {\n if (!diff || !diff.hasChanges) return '';\n const dialect = connection?.type || 'postgres';\n return generateMigrationSQL(diff, dialect as DatabaseType);\n }, [diff, connection]);\n\n // Get all connections for cross-connection comparison\n const { connections: allConnections } = useAllConnections();\n const [fetchingRemote, setFetchingRemote] = useState(false);\n\n // Fetch schema from a remote connection\n const fetchRemoteSchema = useCallback(async (connId: string) => {\n const conn = allConnections.find(c => c.id === connId);\n if (!conn) return;\n\n setFetchingRemote(true);\n try {\n const res = await fetch('/api/db/schema-snapshot', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(\n conn.managed && conn.seedId\n ? { connectionId: `seed:${conn.seedId}` }\n : { connection: conn }\n ),\n });\n const data = await res.json();\n if (!res.ok) throw new Error(data.error);\n\n // Auto-save as snapshot\n const snapshot: SchemaSnapshot = {\n id: `remote-${Date.now()}`,\n connectionId: conn.id,\n connectionName: conn.name,\n databaseType: conn.type,\n schema: data.schema,\n createdAt: new Date(),\n label: `Live: ${conn.name}`,\n };\n storage.saveSchemaSnapshot(snapshot);\n setSnapshots(storage.getSchemaSnapshots());\n setTargetId(snapshot.id);\n } catch (err) {\n console.error('Failed to fetch remote schema:', err);\n } finally {\n setFetchingRemote(false);\n }\n }, [allConnections]);\n\n const getActionBadge = (action: string) => {\n switch (action) {\n case 'added': return <Badge className=\"bg-green-500/20 text-green-400 border-green-500/30 text-xs\"><Plus className=\"w-2.5 h-2.5 mr-0.5\" />Added</Badge>;\n case 'removed': return <Badge className=\"bg-red-500/20 text-red-400 border-red-500/30 text-xs\"><Minus className=\"w-2.5 h-2.5 mr-0.5\" />Removed</Badge>;\n case 'modified': return <Badge className=\"bg-yellow-500/20 text-yellow-400 border-yellow-500/30 text-xs\"><Edit3 className=\"w-2.5 h-2.5 mr-0.5\" />Modified</Badge>;\n default: return null;\n }\n };\n\n const formatSnapshotLabel = (s: SchemaSnapshot) => {\n const date = new Date(s.createdAt).toLocaleString();\n return `${s.label || s.connectionName} (${date})`;\n };\n\n return (\n <div className=\"h-full flex flex-col bg-[#080808]\">\n {/* Header */}\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-white/5 bg-[#0a0a0a] flex-wrap\">\n <GitCompare className=\"w-4 h-4 text-rose-400\" />\n <span className=\"text-xs font-bold uppercase text-zinc-400 tracking-wider\">Schema Diff</span>\n\n <div className=\"h-4 w-px bg-white/10\" />\n\n {/* Source selector */}\n <div className=\"flex items-center gap-1\">\n <span className=\"text-xs text-zinc-600 uppercase\">Source</span>\n <Select value={sourceId} onValueChange={setSourceId}>\n <SelectTrigger className=\"h-7 w-[180px] text-xs bg-white/5 border-white/10\">\n <SelectValue placeholder=\"Select source\" />\n </SelectTrigger>\n <SelectContent className=\"bg-[#111] border-white/10\">\n <SelectItem value=\"current\" className=\"text-xs\">\n <div className=\"flex items-center gap-1\">\n <Database className=\"w-3 h-3\" /> Current Schema\n </div>\n </SelectItem>\n {snapshots.map(s => (\n <SelectItem key={s.id} value={s.id} className=\"text-xs\">\n <div className=\"flex items-center gap-1\">\n <Clock className=\"w-3 h-3\" /> {formatSnapshotLabel(s)}\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <span className=\"text-zinc-600 text-xs\">vs</span>\n\n {/* Target selector */}\n <div className=\"flex items-center gap-1\">\n <span className=\"text-xs text-zinc-600 uppercase\">Target</span>\n <Select value={targetId} onValueChange={(v) => {\n if (v.startsWith('conn:')) {\n fetchRemoteSchema(v.replace('conn:', ''));\n } else {\n setTargetId(v);\n }\n }}>\n <SelectTrigger className=\"h-7 w-[180px] text-xs bg-white/5 border-white/10\">\n <SelectValue placeholder=\"Select target\" />\n </SelectTrigger>\n <SelectContent className=\"bg-[#111] border-white/10\">\n <SelectItem value=\"current\" className=\"text-xs\">\n <div className=\"flex items-center gap-1\">\n <Database className=\"w-3 h-3\" /> Current Schema\n </div>\n </SelectItem>\n {snapshots.map(s => (\n <SelectItem key={s.id} value={s.id} className=\"text-xs\">\n <div className=\"flex items-center gap-1\">\n <Clock className=\"w-3 h-3\" /> {formatSnapshotLabel(s)}\n </div>\n </SelectItem>\n ))}\n {allConnections.filter(c => c.id !== connection?.id).length > 0 && (\n <>\n <div className=\"px-2 py-1 text-label text-zinc-600 uppercase border-t border-white/5 mt-1\">\n Fetch from connection\n </div>\n {allConnections.filter(c => c.id !== connection?.id).map(c => (\n <SelectItem key={`conn:${c.id}`} value={`conn:${c.id}`} className=\"text-xs\">\n <div className=\"flex items-center gap-1\">\n <Database className=\"w-3 h-3 text-blue-400\" /> {c.name}\n {c.environment === 'production' && (\n <AlertTriangle className=\"w-3 h-3 text-red-400\" />\n )}\n </div>\n </SelectItem>\n ))}\n </>\n )}\n </SelectContent>\n </Select>\n {fetchingRemote && <span className=\"text-xs text-zinc-500 animate-pulse\">Fetching...</span>}\n </div>\n\n <div className=\"flex-1\" />\n\n {/* Snapshot controls */}\n {showLabelInput ? (\n <div className=\"flex items-center gap-1\">\n <input\n type=\"text\"\n placeholder=\"Label (optional)...\"\n value={snapshotLabel}\n onChange={(e) => setSnapshotLabel(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && takeSnapshot()}\n className=\"h-7 px-2 text-xs bg-white/5 border border-white/10 rounded text-zinc-300 focus:outline-none focus:border-blue-500 w-32\"\n autoFocus\n />\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs text-blue-400\" onClick={takeSnapshot}>\n Save\n </Button>\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs text-zinc-500\" onClick={() => setShowLabelInput(false)}>\n Cancel\n </Button>\n </div>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs font-bold uppercase text-zinc-500 hover:text-white gap-1\"\n onClick={() => setShowLabelInput(true)}\n disabled={!connection}\n >\n <Camera className=\"w-3 h-3\" /> Snapshot\n </Button>\n )}\n\n {diff?.hasChanges && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs font-bold uppercase text-zinc-500 hover:text-white gap-1\"\n onClick={() => setShowMigration(!showMigration)}\n >\n <FileCode className=\"w-3 h-3\" /> {showMigration ? 'Diff View' : 'SQL Migration'}\n </Button>\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-hidden flex\">\n {!targetId ? (\n <div className=\"flex-1 flex flex-col items-center justify-center text-zinc-600 gap-3\">\n <GitCompare className=\"w-10 h-10 opacity-30\" />\n <p className=\"text-sm\">Select source and target to compare schemas</p>\n <p className=\"text-xs text-zinc-700\">Take a snapshot first, then compare with the current schema</p>\n\n {/* Snapshot Timeline */}\n {snapshots.length > 0 && (\n <div className=\"mt-4 w-full max-w-2xl px-4\">\n <SnapshotTimeline\n snapshots={snapshots}\n onCompare={(sourceId, targetId) => {\n setSourceId(sourceId);\n setTargetId(targetId);\n }}\n onDelete={deleteSnapshot}\n />\n </div>\n )}\n </div>\n ) : showMigration && migrationSQL ? (\n <div className=\"flex-1 overflow-auto p-4\">\n <pre className=\"text-xs font-mono text-zinc-300 bg-[#0d0d0d] border border-white/10 rounded-lg p-4 overflow-auto whitespace-pre-wrap\">\n {migrationSQL}\n </pre>\n </div>\n ) : diff && diff.hasChanges ? (\n <>\n {/* Table List */}\n <div className=\"w-64 border-r border-white/5 overflow-auto\">\n <div className=\"p-2 border-b border-white/5\">\n <div className=\"text-xs text-zinc-500 uppercase px-2 mb-1\">\n {diff.summary.added} added, {diff.summary.removed} removed, {diff.summary.modified} modified\n </div>\n </div>\n {diff.tables.map(table => (\n <button\n key={table.tableName}\n onClick={() => setSelectedTable(table.tableName)}\n className={cn(\n \"w-full text-left px-3 py-2 text-xs flex items-center gap-2 hover:bg-white/5 transition-colors\",\n selectedTable === table.tableName && \"bg-white/10\"\n )}\n >\n {selectedTable === table.tableName ? (\n <ChevronDown className=\"w-3 h-3 text-zinc-500\" />\n ) : (\n <ChevronRight className=\"w-3 h-3 text-zinc-500\" />\n )}\n <span className=\"text-zinc-300\">{table.tableName}</span>\n <span className=\"ml-auto\">{getActionBadge(table.action)}</span>\n </button>\n ))}\n </div>\n\n {/* Table Detail */}\n <div className=\"flex-1 overflow-auto p-4\">\n {selectedTable ? (\n <TableDiffDetail diff={diff.tables.find(t => t.tableName === selectedTable)!} />\n ) : (\n <div className=\"h-full flex items-center justify-center text-zinc-600 text-sm\">\n Select a table to view diff details\n </div>\n )}\n </div>\n </>\n ) : diff && !diff.hasChanges ? (\n <div className=\"flex-1 flex items-center justify-center text-zinc-600 gap-2\">\n <span className=\"text-sm\">No differences found between source and target</span>\n </div>\n ) : (\n <div className=\"flex-1 flex items-center justify-center text-zinc-600 gap-2\">\n <AlertTriangle className=\"w-4 h-4\" />\n <span className=\"text-sm\">Cannot compare same schema with itself</span>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction TableDiffDetail({ diff }: { diff: TableDiff }) {\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center gap-2\">\n <Database className=\"w-4 h-4 text-zinc-400\" />\n <h3 className=\"text-sm font-bold text-zinc-200\">{diff.tableName}</h3>\n <Badge className={cn(\n \"text-xs\",\n diff.action === 'added' && \"bg-green-500/20 text-green-400\",\n diff.action === 'removed' && \"bg-red-500/20 text-red-400\",\n diff.action === 'modified' && \"bg-yellow-500/20 text-yellow-400\",\n )}>\n {diff.action}\n </Badge>\n </div>\n\n {/* Columns */}\n {diff.columns.length > 0 && (\n <div>\n <h4 className=\"text-xs uppercase text-zinc-500 mb-2 font-bold\">Columns</h4>\n <div className=\"space-y-1\">\n {diff.columns.map((col, i) => (\n <div key={i} className={cn(\n \"px-3 py-2 rounded text-xs flex items-center gap-2\",\n col.action === 'added' && \"bg-green-500/5 border border-green-500/10\",\n col.action === 'removed' && \"bg-red-500/5 border border-red-500/10\",\n col.action === 'modified' && \"bg-yellow-500/5 border border-yellow-500/10\",\n )}>\n <span className=\"font-mono text-zinc-300 min-w-[120px]\">{col.columnName}</span>\n {col.action === 'modified' && (\n <div className=\"flex flex-col gap-0.5\">\n {col.changes.map((change, j) => (\n <span key={j} className=\"text-xs text-zinc-500\">{change}</span>\n ))}\n </div>\n )}\n {col.action === 'added' && (\n <span className=\"text-xs text-green-400 font-mono\">{col.targetType}</span>\n )}\n {col.action === 'removed' && (\n <span className=\"text-xs text-red-400 font-mono\">{col.sourceType}</span>\n )}\n <span className=\"ml-auto\">{getActionIcon(col.action)}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Indexes */}\n {diff.indexes.length > 0 && (\n <div>\n <h4 className=\"text-xs uppercase text-zinc-500 mb-2 font-bold\">Indexes</h4>\n <div className=\"space-y-1\">\n {diff.indexes.map((idx, i) => (\n <div key={i} className={cn(\n \"px-3 py-2 rounded text-xs flex items-center gap-2\",\n idx.action === 'added' && \"bg-green-500/5 border border-green-500/10\",\n idx.action === 'removed' && \"bg-red-500/5 border border-red-500/10\",\n idx.action === 'modified' && \"bg-yellow-500/5 border border-yellow-500/10\",\n )}>\n <span className=\"font-mono text-zinc-300\">{idx.indexName}</span>\n {idx.changes.map((change, j) => (\n <span key={j} className=\"text-xs text-zinc-500\">{change}</span>\n ))}\n <span className=\"ml-auto\">{getActionIcon(idx.action)}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Foreign Keys */}\n {diff.foreignKeys.length > 0 && (\n <div>\n <h4 className=\"text-xs uppercase text-zinc-500 mb-2 font-bold\">Foreign Keys</h4>\n <div className=\"space-y-1\">\n {diff.foreignKeys.map((fk, i) => (\n <div key={i} className={cn(\n \"px-3 py-2 rounded text-xs flex items-center gap-2\",\n fk.action === 'added' && \"bg-green-500/5 border border-green-500/10\",\n fk.action === 'removed' && \"bg-red-500/5 border border-red-500/10\",\n )}>\n <span className=\"font-mono text-zinc-300\">{fk.columnName}</span>\n {fk.changes.map((change, j) => (\n <span key={j} className=\"text-xs text-zinc-500\">{change}</span>\n ))}\n <span className=\"ml-auto\">{getActionIcon(fk.action)}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction getActionIcon(action: string) {\n switch (action) {\n case 'added': return <Plus className=\"w-3 h-3 text-green-400\" />;\n case 'removed': return <Minus className=\"w-3 h-3 text-red-400\" />;\n case 'modified': return <Edit3 className=\"w-3 h-3 text-yellow-400\" />;\n default: return null;\n }\n}\n","'use client';\n\nimport React from 'react';\nimport type { DatabaseConnection, QueryTab, TableSchema, QueryResult } from '@/lib/types';\nimport type { ProviderMetadata } from '@/hooks/use-provider-metadata';\nimport type { MaskingConfig } from '@/lib/data-masking';\nimport type { CellChange } from '@/components/ResultsGrid';\nimport { ResultsGrid } from '@/components/ResultsGrid';\nimport { NL2SQLPanel } from '@/components/NL2SQLPanel';\nimport { AIAutopilotPanel } from '@/components/AIAutopilotPanel';\nimport { PivotTable } from '@/components/PivotTable';\nimport { DatabaseDocs } from '@/components/DatabaseDocs';\nimport { VisualExplain, type ExplainPlanResult } from '@/components/VisualExplain';\nimport { QueryHistory } from '@/components/QueryHistory';\nimport { SavedQueries } from '@/components/SavedQueries';\nimport { DataCharts } from '@/components/DataCharts';\nimport { SchemaDiff } from '@/components/SchemaDiff';\nimport { cn } from '@/lib/utils';\nimport {\n BarChart3, Bookmark, Clock, Columns3, Download,\n FileText, GitCompare, LayoutDashboard, LayoutGrid,\n Sparkles, Terminal, Zap,\n} from 'lucide-react';\nimport {\n DropdownMenu, DropdownMenuContent,\n DropdownMenuItem, DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { Button } from '@/components/ui/button';\nimport { storage } from '@/lib/storage';\n\nexport type BottomPanelMode = 'results' | 'explain' | 'history' | 'saved' | 'charts' | 'nl2sql' | 'autopilot' | 'pivot' | 'docs' | 'schemadiff' | 'dashboard';\n\n// Lazy-loaded chart dashboard\nfunction ChartDashboardLazy({ result }: { result: QueryResult | null }) {\n const [savedCharts, setSavedCharts] = React.useState<{ id: string; name: string; chartType: string; xAxis: string; yAxis: string[] }[]>([]);\n React.useEffect(() => {\n const charts = storage.getSavedCharts();\n if (charts.length > 0) setSavedCharts(charts);\n }, []);\n\n if (savedCharts.length === 0) {\n return (\n <div className=\"h-full flex flex-col items-center justify-center bg-[#080808] text-zinc-500 gap-2\">\n <LayoutDashboard className=\"w-10 h-10 opacity-30\" />\n <p className=\"text-sm\">No saved charts yet</p>\n <p className=\"text-xs text-zinc-600\">Save charts from the Charts tab to display them here</p>\n </div>\n );\n }\n\n return (\n <div className=\"h-full overflow-auto bg-[#080808] p-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {savedCharts.map(chart => (\n <div key={chart.id} className=\"bg-[#0d0d0d] border border-white/10 rounded-lg p-3\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-xs font-bold text-zinc-300\">{chart.name}</span>\n <span className=\"text-xs text-zinc-600 uppercase\">{chart.chartType}</span>\n </div>\n <div className=\"text-xs text-zinc-500\">\n {chart.xAxis && <span>X: {chart.xAxis}</span>}\n {chart.yAxis?.length > 0 && <span className=\"ml-2\">Y: {chart.yAxis.join(', ')}</span>}\n </div>\n {result ? (\n <div className=\"mt-2 h-[160px]\">\n <DataCharts result={result} />\n </div>\n ) : (\n <div className=\"mt-2 h-[100px] flex items-center justify-center text-zinc-600 text-xs\">\n Execute a query to see chart\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n}\n\ninterface BottomPanelProps {\n mode: BottomPanelMode;\n onSetMode: (mode: BottomPanelMode) => void;\n currentTab: QueryTab;\n schema: TableSchema[];\n schemaContext: string;\n activeConnection: DatabaseConnection | null;\n metadata: ProviderMetadata | null;\n historyKey: number;\n savedKey: number;\n isNL2SQLOpen: boolean;\n onSetIsNL2SQLOpen: (open: boolean) => void;\n // Masking\n maskingEnabled: boolean;\n onToggleMasking: (() => void) | undefined;\n userRole: string | undefined;\n maskingConfig: MaskingConfig;\n // Editing\n editingEnabled: boolean;\n pendingChanges: CellChange[];\n onCellChange: (change: CellChange) => void;\n onApplyChanges: () => void;\n onDiscardChanges: () => void;\n // Actions\n onExecuteQuery: (query: string) => void;\n onLoadQuery: (query: string) => void;\n onLoadMore: (() => void) | undefined;\n isLoadingMore: boolean | undefined;\n onExportResults: (format: 'csv' | 'json' | 'sql-insert' | 'sql-ddl') => void;\n}\n\nexport function BottomPanel({\n mode,\n onSetMode,\n currentTab,\n schema,\n schemaContext,\n activeConnection,\n metadata,\n historyKey,\n savedKey,\n isNL2SQLOpen,\n onSetIsNL2SQLOpen,\n maskingEnabled,\n onToggleMasking,\n userRole,\n maskingConfig,\n editingEnabled,\n pendingChanges,\n onCellChange,\n onApplyChanges,\n onDiscardChanges,\n onExecuteQuery,\n onLoadQuery,\n onLoadMore,\n isLoadingMore,\n onExportResults,\n}: BottomPanelProps) {\n const tabs: { key: BottomPanelMode; label: string; icon: React.ReactNode; activeClass: string }[] = [\n { key: 'results', label: 'Results', icon: <LayoutGrid className=\"w-3 h-3\" />, activeClass: 'text-blue-400 border-blue-500 bg-white/5' },\n { key: 'explain', label: 'Explain', icon: <Zap className=\"w-3 h-3\" />, activeClass: 'text-amber-400 border-amber-500 bg-white/5' },\n { key: 'history', label: 'History', icon: <Clock className=\"w-3 h-3\" />, activeClass: 'text-emerald-400 border-emerald-500 bg-white/5' },\n { key: 'saved', label: 'Saved', icon: <Bookmark className=\"w-3 h-3\" />, activeClass: 'text-purple-400 border-purple-500 bg-white/5' },\n { key: 'charts', label: 'Charts', icon: <BarChart3 className=\"w-3 h-3\" />, activeClass: 'text-cyan-400 border-cyan-500 bg-white/5' },\n { key: 'nl2sql', label: 'NL2SQL', icon: <Sparkles className=\"w-3 h-3\" />, activeClass: 'text-violet-400 border-violet-500 bg-white/5' },\n { key: 'autopilot', label: 'Autopilot', icon: <Zap className=\"w-3 h-3\" />, activeClass: 'text-cyan-400 border-cyan-500 bg-white/5' },\n { key: 'pivot', label: 'Pivot', icon: <Columns3 className=\"w-3 h-3\" />, activeClass: 'text-orange-400 border-orange-500 bg-white/5' },\n { key: 'docs', label: 'Docs', icon: <FileText className=\"w-3 h-3\" />, activeClass: 'text-teal-400 border-teal-500 bg-white/5' },\n { key: 'schemadiff', label: 'Diff', icon: <GitCompare className=\"w-3 h-3\" />, activeClass: 'text-rose-400 border-rose-500 bg-white/5' },\n { key: 'dashboard', label: 'Dashboard', icon: <LayoutDashboard className=\"w-3 h-3\" />, activeClass: 'text-indigo-400 border-indigo-500 bg-white/5' },\n ];\n\n return (\n <div className=\"h-full flex flex-col bg-[#080808]\">\n <div className=\"h-9 bg-[#0a0a0a] border-b border-white/5 flex items-center justify-between px-2\">\n <div className=\"flex items-center h-full gap-1\">\n {tabs.map(tab => (\n <button\n key={tab.key}\n onClick={() => {\n onSetMode(tab.key);\n if (tab.key === 'nl2sql') onSetIsNL2SQLOpen(true);\n }}\n className={cn(\n \"h-full px-3 text-xs font-bold uppercase transition-all border-b-2 flex items-center gap-2\",\n mode === tab.key\n ? tab.activeClass\n : \"text-zinc-500 border-transparent hover:text-zinc-300\"\n )}\n >\n {tab.icon} {tab.label}\n </button>\n ))}\n </div>\n\n {currentTab.result && mode === 'results' && (\n <div className=\"flex items-center gap-1\">\n <span className=\"text-xs font-mono text-zinc-500 mr-2\">\n {currentTab.result.rowCount} rows • {currentTab.result.executionTime}ms\n </span>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs font-bold uppercase text-zinc-500 hover:text-white gap-2\">\n <Download className=\"w-3 h-3\" /> Export\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"bg-[#0d0d0d] border-white/10 text-zinc-300\">\n <DropdownMenuItem onClick={() => onExportResults('csv')} className=\"text-xs cursor-pointer\">\n Export as CSV\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => onExportResults('json')} className=\"text-xs cursor-pointer\">\n Export as JSON\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => onExportResults('sql-insert')} className=\"text-xs cursor-pointer\">\n Export as SQL INSERT\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => onExportResults('sql-ddl')} className=\"text-xs cursor-pointer\">\n Export as DDL (CREATE TABLE)\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )}\n </div>\n\n <div className=\"flex-1 overflow-hidden relative\">\n {mode === 'nl2sql' ? (\n <NL2SQLPanel\n isOpen={isNL2SQLOpen}\n onClose={() => { onSetIsNL2SQLOpen(false); onSetMode('results'); }}\n onExecuteQuery={onExecuteQuery}\n onLoadQuery={(q) => { onLoadQuery(q); onSetMode('results'); }}\n schemaContext={schemaContext}\n databaseType={activeConnection?.type}\n queryLanguage={metadata?.capabilities.queryLanguage}\n />\n ) : mode === 'autopilot' ? (\n <AIAutopilotPanel\n connection={activeConnection}\n schemaContext={schemaContext}\n onExecuteQuery={onExecuteQuery}\n />\n ) : mode === 'pivot' ? (\n <PivotTable\n result={currentTab.result}\n onLoadQuery={(q) => { onLoadQuery(q); onSetMode('results'); }}\n />\n ) : mode === 'docs' ? (\n <DatabaseDocs\n schema={schema}\n schemaContext={schemaContext}\n databaseType={activeConnection?.type}\n />\n ) : mode === 'history' ? (\n <QueryHistory\n refreshTrigger={historyKey}\n activeConnectionId={activeConnection?.id}\n onSelectQuery={(q) => { onLoadQuery(q); onSetMode('results'); }}\n />\n ) : mode === 'saved' ? (\n <SavedQueries\n refreshTrigger={savedKey}\n connectionType={activeConnection?.type}\n onSelectQuery={(q) => { onLoadQuery(q); onSetMode('results'); }}\n />\n ) : mode === 'charts' ? (\n <DataCharts result={currentTab.result} />\n ) : mode === 'schemadiff' ? (\n <SchemaDiff schema={schema} connection={activeConnection} />\n ) : mode === 'dashboard' ? (\n <ChartDashboardLazy result={currentTab.result} />\n ) : currentTab.result ? (\n mode === 'explain' ? (\n <VisualExplain\n plan={currentTab.explainPlan as ExplainPlanResult[] | null | undefined}\n query={currentTab.query}\n schemaContext={schemaContext}\n databaseType={activeConnection?.type}\n onLoadQuery={(q) => { onLoadQuery(q); onSetMode('results'); }}\n />\n ) : (\n <ResultsGrid\n result={currentTab.result}\n onLoadMore={onLoadMore}\n isLoadingMore={isLoadingMore}\n maskingEnabled={maskingEnabled}\n onToggleMasking={onToggleMasking}\n userRole={userRole}\n maskingConfig={maskingConfig}\n editingEnabled={editingEnabled}\n pendingChanges={pendingChanges}\n onCellChange={onCellChange}\n onApplyChanges={onApplyChanges}\n onDiscardChanges={onDiscardChanges}\n />\n )\n ) : (\n <div className=\"h-full flex flex-col items-center justify-center opacity-20 bg-[#0a0a0a]\">\n <Terminal className=\"w-12 h-12 mb-4\" />\n <p className=\"text-sm font-medium\">Execute a query or check history</p>\n <p className=\"text-xs uppercase tracking-widest mt-2\">Ready to query</p>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useCallback } from \"react\";\nimport { toast as sonnerToast } from \"sonner\";\n\ninterface ToastParams {\n title: string;\n description?: string;\n variant?: \"default\" | \"destructive\";\n}\n\nexport function useToast() {\n const toast = useCallback(({ title, description, variant }: ToastParams) => {\n if (variant === \"destructive\") {\n sonnerToast.error(title, { description });\n } else {\n sonnerToast.success(title, { description });\n }\n }, []);\n\n return { toast };\n}\n","'use client';\n\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport type { DatabaseConnection, TableSchema, QueryTab } from '@/lib/types';\nimport type { ProviderMetadata } from '@/hooks/use-provider-metadata';\nimport { generateTableQuery, generateSelectQuery } from '@/lib/query-generators';\n\nconst DEFAULT_TAB: QueryTab = {\n id: 'default',\n name: 'Query 1',\n query: '',\n result: null,\n isExecuting: false,\n type: 'sql'\n};\n\nconst WORKSPACE_STORAGE_PREFIX = 'libredb_workspace_tabs_v1';\n\ninterface PersistedTabState {\n id: string;\n name: string;\n query: string;\n type: QueryTab['type'];\n}\n\ninterface PersistedWorkspaceState {\n activeTabId: string;\n tabs: PersistedTabState[];\n}\n\ninterface UseTabManagerParams {\n activeConnection: DatabaseConnection | null;\n metadata: ProviderMetadata | null;\n schema: TableSchema[];\n persistWorkspace?: boolean;\n}\n\nexport function useTabManager({\n activeConnection,\n metadata,\n schema,\n persistWorkspace,\n}: UseTabManagerParams) {\n const [tabs, setTabs] = useState<QueryTab[]>([DEFAULT_TAB]);\n const [activeTabId, setActiveTabId] = useState<string>('default');\n const [editingTabId, setEditingTabId] = useState<string | null>(null);\n const [editingTabName, setEditingTabName] = useState('');\n const [isWorkspaceHydrated, setIsWorkspaceHydrated] = useState(false);\n\n const workspaceKey = useMemo(\n () => `${WORKSPACE_STORAGE_PREFIX}:${activeConnection?.id ?? 'default'}`,\n [activeConnection?.id]\n );\n const shouldPersistWorkspace = persistWorkspace ?? process.env.NODE_ENV !== 'test';\n\n const currentTab = tabs.find(t => t.id === activeTabId) || tabs[0];\n\n // LOAD EFFECT — restore tabs from localStorage on connection switch\n useEffect(() => {\n setIsWorkspaceHydrated(false);\n if (!shouldPersistWorkspace) return;\n\n const storage = typeof globalThis !== 'undefined' && 'localStorage' in globalThis\n ? globalThis.localStorage\n : null;\n if (!storage) return;\n\n try {\n const raw = storage.getItem(workspaceKey);\n if (!raw) {\n setTabs([DEFAULT_TAB]);\n setActiveTabId(DEFAULT_TAB.id);\n return;\n }\n\n const parsed = JSON.parse(raw) as PersistedWorkspaceState;\n if (!parsed || !Array.isArray(parsed.tabs) || parsed.tabs.length === 0) {\n setTabs([DEFAULT_TAB]);\n setActiveTabId(DEFAULT_TAB.id);\n return;\n }\n\n const restoredTabs: QueryTab[] = parsed.tabs.map(tab => ({\n id: tab.id,\n name: tab.name,\n query: tab.query,\n type: tab.type,\n result: null,\n isExecuting: false,\n }));\n\n const hasActiveTab = restoredTabs.some(tab => tab.id === parsed.activeTabId);\n setTabs(restoredTabs);\n setActiveTabId(hasActiveTab ? parsed.activeTabId : restoredTabs[0].id);\n } catch (error) {\n console.error('[useTabManager] Failed to restore workspace tabs:', error);\n setTabs([DEFAULT_TAB]);\n setActiveTabId(DEFAULT_TAB.id);\n }\n // NOTE: hydration flag stays false — set by ready effect below.\n }, [workspaceKey, shouldPersistWorkspace]);\n\n // READY EFFECT — fires after load's setTabs commits (next render)\n useEffect(() => {\n if (!shouldPersistWorkspace || isWorkspaceHydrated) return;\n setIsWorkspaceHydrated(true);\n }, [tabs, activeTabId, shouldPersistWorkspace, isWorkspaceHydrated]);\n\n // SAVE EFFECT — debounced write to localStorage (500ms)\n useEffect(() => {\n if (!shouldPersistWorkspace) return;\n const storage = typeof globalThis !== 'undefined' && 'localStorage' in globalThis\n ? globalThis.localStorage\n : null;\n if (!isWorkspaceHydrated || !storage) return;\n\n const timer = setTimeout(() => {\n const serialized: PersistedWorkspaceState = {\n activeTabId,\n tabs: tabs.map(tab => ({\n id: tab.id,\n name: tab.name,\n query: tab.query,\n type: tab.type,\n })),\n };\n storage.setItem(workspaceKey, JSON.stringify(serialized));\n }, 500);\n\n return () => clearTimeout(timer);\n }, [tabs, activeTabId, workspaceKey, shouldPersistWorkspace, isWorkspaceHydrated]);\n\n const updateTabById = useCallback((tabId: string, updates: Partial<QueryTab>) => {\n setTabs(prev => prev.map(t => t.id === tabId ? { ...t, ...updates } : t));\n }, []);\n\n const updateCurrentTab = useCallback((updates: Partial<QueryTab>) => {\n updateTabById(activeTabId, updates);\n }, [activeTabId, updateTabById]);\n\n const addTab = useCallback(() => {\n const newId = Math.random().toString(36).substring(7);\n const queryLanguage = metadata?.capabilities.queryLanguage;\n setTabs(prev => [...prev, {\n id: newId,\n name: `Query ${prev.length + 1}`,\n query: '',\n result: null,\n isExecuting: false,\n type: queryLanguage === 'json' ? 'mongodb' : 'sql'\n }]);\n setActiveTabId(newId);\n }, [activeConnection, metadata]);\n\n const closeTab = useCallback((id: string, e: React.MouseEvent) => {\n e.stopPropagation();\n setTabs(prev => {\n if (prev.length === 1) return prev;\n const newTabs = prev.filter(t => t.id !== id);\n if (activeTabId === id && newTabs.length > 0) {\n setActiveTabId(newTabs[newTabs.length - 1].id);\n }\n return newTabs;\n });\n }, [activeTabId]);\n\n // handleTableClick takes executeQuery as callback param to avoid circular dependency\n const handleTableClick = useCallback((\n tableName: string,\n executeQueryFn: (query: string, tabId: string) => void\n ) => {\n const capabilities = metadata?.capabilities;\n const newQuery = capabilities\n ? generateTableQuery(tableName, capabilities)\n : `SELECT * FROM ${tableName} LIMIT 50;`;\n\n const newId = Math.random().toString(36).substring(7);\n const newTab: QueryTab = {\n id: newId,\n name: tableName,\n query: newQuery,\n result: null,\n isExecuting: false,\n type: capabilities?.queryLanguage === 'json' ? 'mongodb' : 'sql'\n };\n setTabs(prev => [...prev, newTab]);\n setActiveTabId(newId);\n setTimeout(() => executeQueryFn(newQuery, newId), 100);\n }, [metadata]);\n\n const handleGenerateSelect = useCallback((tableName: string) => {\n const capabilities = metadata?.capabilities;\n const table = schema.find(t => t.name === tableName);\n const columns = table?.columns || [];\n\n const newQuery = capabilities\n ? generateSelectQuery(tableName, columns, capabilities)\n : `SELECT\\n${columns.map(c => ` ${c.name}`).join(',\\n') || ' *'}\\nFROM ${tableName}\\nWHERE 1=1\\nLIMIT 100;`;\n\n const tabType: 'sql' | 'mongodb' | 'redis' = capabilities?.queryLanguage === 'json' ? 'mongodb' : 'sql';\n\n const newId = Math.random().toString(36).substring(7);\n setTabs(prev => [...prev, {\n id: newId,\n name: `Query: ${tableName}`,\n query: newQuery,\n result: null,\n isExecuting: false,\n type: tabType\n }]);\n setActiveTabId(newId);\n }, [metadata, schema]);\n\n return {\n tabs,\n setTabs,\n activeTabId,\n setActiveTabId,\n currentTab,\n editingTabId,\n setEditingTabId,\n editingTabName,\n setEditingTabName,\n addTab,\n closeTab,\n updateCurrentTab,\n updateTabById,\n handleTableClick,\n handleGenerateSelect,\n };\n}\n","'use client';\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport type { DatabaseConnection, TableSchema } from '@/lib/types';\nimport type { WorkspaceConnection } from '@/workspace/types';\n\ninterface UseConnectionAdapterParams {\n connections: WorkspaceConnection[];\n onSchemaFetch: (connectionId: string) => Promise<TableSchema[]>;\n}\n\nexport function useConnectionAdapter({\n connections: externalConnections,\n onSchemaFetch,\n}: UseConnectionAdapterParams) {\n const connections: DatabaseConnection[] = useMemo(\n () =>\n externalConnections.map((c) => ({\n id: c.id,\n name: c.name,\n type: c.type,\n createdAt: new Date(),\n managed: true,\n })),\n [externalConnections]\n );\n\n const [activeConnection, setActiveConnection] = useState<DatabaseConnection | null>(\n connections[0] ?? null\n );\n const [schema, setSchema] = useState<TableSchema[]>([]);\n const [isLoadingSchema, setIsLoadingSchema] = useState(false);\n\n useEffect(() => {\n if (connections.length === 0) {\n setActiveConnection(null);\n return;\n }\n if (activeConnection && connections.some((c) => c.id === activeConnection.id)) {\n return;\n }\n setActiveConnection(connections[0]);\n }, [connections]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const fetchSchema = useCallback(\n async (conn: DatabaseConnection) => {\n setIsLoadingSchema(true);\n try {\n const result = await onSchemaFetch(conn.id);\n setSchema(result);\n } catch {\n setSchema([]);\n } finally {\n setIsLoadingSchema(false);\n }\n },\n [onSchemaFetch]\n );\n\n const tableNames = useMemo(() => schema.map((s) => s.name), [schema]);\n const schemaContext = useMemo(() => JSON.stringify(schema), [schema]);\n\n return {\n connections,\n setConnections: (() => {}) as React.Dispatch<React.SetStateAction<DatabaseConnection[]>>,\n activeConnection,\n setActiveConnection: setActiveConnection as (conn: DatabaseConnection | null) => void,\n schema,\n setSchema,\n isLoadingSchema,\n connectionPulse: null as 'healthy' | 'degraded' | 'error' | null,\n fetchSchema,\n tableNames,\n schemaContext,\n };\n}\n","'use client';\n\nimport { useState, useCallback, useRef, type Dispatch, type SetStateAction } from 'react';\nimport type { DatabaseConnection, QueryTab } from '@/lib/types';\nimport type { WorkspaceQueryResult, WorkspaceFeatures } from '@/workspace/types';\nimport type { BottomPanelMode } from '@/components/studio/BottomPanel';\nimport { useToast } from '@/hooks/use-toast';\nimport { isDangerousQuery } from '@/components/QuerySafetyDialog';\n\ninterface UseQueryAdapterParams {\n activeConnection: DatabaseConnection | null;\n onQueryExecute: (connectionId: string, sql: string, options?: {\n limit?: number;\n offset?: number;\n unlimited?: boolean;\n }) => Promise<WorkspaceQueryResult>;\n tabs: QueryTab[];\n activeTabId: string;\n currentTab: QueryTab;\n setTabs: Dispatch<SetStateAction<QueryTab[]>>;\n fetchSchema: (conn: DatabaseConnection) => Promise<void>;\n features: Partial<WorkspaceFeatures>;\n}\n\nexport function useQueryAdapter({\n activeConnection,\n onQueryExecute,\n tabs,\n activeTabId,\n currentTab,\n setTabs,\n fetchSchema: _fetchSchema,\n features: _features,\n}: UseQueryAdapterParams) {\n // Reserved for future use (schema refresh after DDL, feature gating)\n void _fetchSchema;\n void _features;\n const cancelledRef = useRef(false);\n\n const [safetyCheckQuery, setSafetyCheckQuery] = useState<string | null>(null);\n const [unlimitedWarningOpen, setUnlimitedWarningOpen] = useState(false);\n const [pendingUnlimitedQuery, setPendingUnlimitedQuery] = useState<{\n query: string;\n tabId: string;\n } | null>(null);\n const [historyKey, setHistoryKey] = useState(0);\n const [bottomPanelMode, setBottomPanelMode] = useState<BottomPanelMode>('results');\n\n const { toast } = useToast();\n\n const executeQuery = useCallback(async (\n overrideQuery?: string,\n tabId?: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _isExplain: boolean = false,\n ) => {\n const targetTabId = tabId || activeTabId;\n const tabToExec = tabs.find(t => t.id === targetTabId) || currentTab;\n\n const queryToExecute = overrideQuery || tabToExec.query;\n\n if (!activeConnection) {\n toast({ title: 'No Connection', description: 'Select a connection first.', variant: 'destructive' });\n return;\n }\n\n if (!queryToExecute || queryToExecute.trim() === '') {\n toast({ title: 'Empty Query', description: 'Enter a query to execute.', variant: 'destructive' });\n return;\n }\n\n // Safety check for dangerous queries (skip for force-execute via forceExecuteQuery)\n if (isDangerousQuery(queryToExecute)) {\n setSafetyCheckQuery(queryToExecute);\n return;\n }\n\n cancelledRef.current = false;\n\n // Set tab executing state\n setTabs(prev => prev.map(t => t.id === targetTabId ? {\n ...t,\n isExecuting: true,\n } : t));\n setBottomPanelMode('results');\n\n const startTime = Date.now();\n\n try {\n const result = await onQueryExecute(activeConnection.id, queryToExecute);\n\n // Check if cancelled while awaiting\n if (cancelledRef.current) return;\n\n const executionTime = result.executionTime || (Date.now() - startTime);\n\n setTabs(prev => prev.map(t => {\n if (t.id !== targetTabId) return t;\n\n return {\n ...t,\n result: {\n rows: result.rows,\n fields: result.fields,\n rowCount: result.rowCount,\n executionTime,\n pagination: result.pagination,\n },\n allRows: result.rows,\n currentOffset: result.rows.length,\n isExecuting: false,\n isLoadingMore: false,\n };\n }));\n\n setHistoryKey(prev => prev + 1);\n } catch (error) {\n // Skip updates if cancelled\n if (cancelledRef.current) return;\n\n setTabs(prev => prev.map(t => t.id === targetTabId ? {\n ...t,\n isExecuting: false,\n isLoadingMore: false,\n } : t));\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n toast({ title: 'Query Error', description: errorMessage, variant: 'destructive' });\n }\n }, [activeConnection, tabs, currentTab, activeTabId, toast, onQueryExecute, setTabs]);\n\n // Force execute (bypass safety check)\n const forceExecuteQuery = useCallback((query: string) => {\n setSafetyCheckQuery(null);\n\n if (!activeConnection) {\n toast({ title: 'No Connection', description: 'Select a connection first.', variant: 'destructive' });\n return;\n }\n\n if (!query || query.trim() === '') {\n toast({ title: 'Empty Query', description: 'Enter a query to execute.', variant: 'destructive' });\n return;\n }\n\n cancelledRef.current = false;\n\n setTabs(prev => prev.map(t => t.id === activeTabId ? {\n ...t,\n isExecuting: true,\n } : t));\n setBottomPanelMode('results');\n\n const startTime = Date.now();\n\n onQueryExecute(activeConnection.id, query)\n .then((result) => {\n if (cancelledRef.current) return;\n\n const executionTime = result.executionTime || (Date.now() - startTime);\n\n setTabs(prev => prev.map(t => {\n if (t.id !== activeTabId) return t;\n\n return {\n ...t,\n result: {\n rows: result.rows,\n fields: result.fields,\n rowCount: result.rowCount,\n executionTime,\n pagination: result.pagination,\n },\n allRows: result.rows,\n currentOffset: result.rows.length,\n isExecuting: false,\n isLoadingMore: false,\n };\n }));\n\n setHistoryKey(prev => prev + 1);\n })\n .catch((error) => {\n if (cancelledRef.current) return;\n\n setTabs(prev => prev.map(t => t.id === activeTabId ? {\n ...t,\n isExecuting: false,\n isLoadingMore: false,\n } : t));\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n toast({ title: 'Query Error', description: errorMessage, variant: 'destructive' });\n });\n }, [activeConnection, activeTabId, toast, onQueryExecute, setTabs]);\n\n // Cancel running query (best-effort via ref flag)\n const cancelQuery = useCallback(() => {\n cancelledRef.current = true;\n\n setTabs(prev => prev.map(t => t.isExecuting ? {\n ...t,\n isExecuting: false,\n isLoadingMore: false,\n } : t));\n\n toast({ title: 'Query Cancelled', description: 'Query execution was cancelled.' });\n }, [setTabs, toast]);\n\n // Load More handler\n const handleLoadMore = useCallback(() => {\n if (!currentTab.result?.pagination?.hasMore) return;\n if (!activeConnection) return;\n\n const currentOffset = currentTab.currentOffset || currentTab.result.rows.length;\n\n setTabs(prev => prev.map(t => t.id === currentTab.id ? {\n ...t,\n isLoadingMore: true,\n } : t));\n\n onQueryExecute(activeConnection.id, currentTab.query, {\n limit: 500,\n offset: currentOffset,\n })\n .then((result) => {\n if (cancelledRef.current) return;\n\n setTabs(prev => prev.map(t => {\n if (t.id !== currentTab.id) return t;\n\n const existingRows = t.allRows || t.result?.rows || [];\n const newAllRows = [...existingRows, ...result.rows];\n\n return {\n ...t,\n result: {\n rows: newAllRows,\n fields: result.fields,\n rowCount: newAllRows.length,\n executionTime: t.result?.executionTime || 0,\n pagination: result.pagination,\n },\n allRows: newAllRows,\n currentOffset: currentOffset + result.rows.length,\n isExecuting: false,\n isLoadingMore: false,\n };\n }));\n })\n .catch((error) => {\n if (cancelledRef.current) return;\n\n setTabs(prev => prev.map(t => t.id === currentTab.id ? {\n ...t,\n isExecuting: false,\n isLoadingMore: false,\n } : t));\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n toast({ title: 'Load More Error', description: errorMessage, variant: 'destructive' });\n });\n }, [currentTab, activeConnection, onQueryExecute, setTabs, toast]);\n\n // Unlimited query handler\n const handleUnlimitedQuery = useCallback(() => {\n if (!pendingUnlimitedQuery) return;\n if (!activeConnection) return;\n\n const { query, tabId } = pendingUnlimitedQuery;\n\n cancelledRef.current = false;\n\n setTabs(prev => prev.map(t => t.id === tabId ? {\n ...t,\n isExecuting: true,\n } : t));\n\n onQueryExecute(activeConnection.id, query, { unlimited: true })\n .then((result) => {\n if (cancelledRef.current) return;\n\n setTabs(prev => prev.map(t => {\n if (t.id !== tabId) return t;\n\n return {\n ...t,\n result: {\n rows: result.rows,\n fields: result.fields,\n rowCount: result.rowCount,\n executionTime: result.executionTime,\n pagination: result.pagination,\n },\n allRows: result.rows,\n currentOffset: result.rows.length,\n isExecuting: false,\n isLoadingMore: false,\n };\n }));\n\n setHistoryKey(prev => prev + 1);\n })\n .catch((error) => {\n if (cancelledRef.current) return;\n\n setTabs(prev => prev.map(t => t.id === tabId ? {\n ...t,\n isExecuting: false,\n isLoadingMore: false,\n } : t));\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n toast({ title: 'Query Error', description: errorMessage, variant: 'destructive' });\n });\n\n setUnlimitedWarningOpen(false);\n setPendingUnlimitedQuery(null);\n }, [pendingUnlimitedQuery, activeConnection, onQueryExecute, setTabs, toast]);\n\n return {\n executeQuery,\n forceExecuteQuery,\n cancelQuery,\n handleLoadMore,\n handleUnlimitedQuery,\n safetyCheckQuery,\n setSafetyCheckQuery,\n unlimitedWarningOpen,\n setUnlimitedWarningOpen,\n pendingUnlimitedQuery,\n setPendingUnlimitedQuery,\n historyKey,\n bottomPanelMode,\n setBottomPanelMode,\n };\n}\n","// src/workspace/types.ts\nimport type { DatabaseType, TableSchema, SavedQuery } from '@/lib/types';\n\n// === Connection (platform → studio) ===\n\nexport interface WorkspaceConnection {\n id: string;\n name: string;\n type: DatabaseType;\n}\n\n// === User (platform → studio) ===\n\nexport interface WorkspaceUser {\n id: string;\n name?: string;\n role?: string;\n}\n\n// === Query result (studio ← platform) ===\n\nexport interface WorkspaceQueryResult {\n rows: Record<string, unknown>[];\n fields: string[];\n columns?: { name: string; type?: string }[];\n rowCount: number;\n executionTime: number;\n pagination?: {\n limit: number;\n offset: number;\n hasMore: boolean;\n totalReturned: number;\n wasLimited: boolean;\n };\n}\n\n// === Feature flags ===\n\nexport interface WorkspaceFeatures {\n ai?: boolean;\n charts?: boolean;\n codeGenerator?: boolean;\n testDataGenerator?: boolean;\n schemaDiagram?: boolean;\n dataImport?: boolean;\n inlineEditing?: boolean;\n transactions?: boolean;\n connectionManagement?: boolean;\n dataMasking?: boolean;\n}\n\nexport const DEFAULT_WORKSPACE_FEATURES: Required<WorkspaceFeatures> = {\n ai: false,\n charts: true,\n codeGenerator: true,\n testDataGenerator: true,\n schemaDiagram: true,\n dataImport: true,\n inlineEditing: false,\n transactions: false,\n connectionManagement: false,\n dataMasking: false,\n};\n\n// === Saved query input ===\n\nexport interface SavedQueryInput {\n name: string;\n query: string;\n description?: string;\n connectionType?: string;\n tags?: string[];\n}\n\n// === Main props ===\n\nexport interface StudioWorkspaceProps {\n connections: WorkspaceConnection[];\n currentUser?: WorkspaceUser;\n\n onQueryExecute: (connectionId: string, sql: string, options?: {\n limit?: number;\n offset?: number;\n unlimited?: boolean;\n }) => Promise<WorkspaceQueryResult>;\n onSchemaFetch: (connectionId: string) => Promise<TableSchema[]>;\n\n onTestConnection?: (config: {\n type: DatabaseType;\n host: string;\n port: number;\n database: string;\n username: string;\n password: string;\n sslEnabled?: boolean;\n }) => Promise<{ success: boolean; message: string }>;\n onSaveQuery?: (query: SavedQueryInput) => Promise<void>;\n onLoadSavedQueries?: () => Promise<SavedQuery[]>;\n\n features?: WorkspaceFeatures;\n className?: string;\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { GripVerticalIcon } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction ResizablePanelGroup({\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) {\n return (\n <ResizablePrimitive.PanelGroup\n data-slot=\"resizable-panel-group\"\n className={cn(\n \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ResizablePanel({\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.Panel>) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {\n withHandle?: boolean\n}) {\n return (\n <ResizablePrimitive.PanelResizeHandle\n data-slot=\"resizable-handle\"\n className={cn(\n \"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border\">\n <GripVerticalIcon className=\"size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.PanelResizeHandle>\n )\n}\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants } from \"@/components/ui/button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-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 AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n return (\n <AlertDialogPrimitive.Action\n className={cn(buttonVariants(), className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","'use client';\n\nimport React, { useState, useEffect, useRef, useMemo, useCallback } from 'react';\nimport { Sidebar, ConnectionsList } from '@/components/sidebar';\n// MobileNav excluded in embedded mode — platform provides its own navigation\nimport { SchemaExplorer } from '@/components/schema-explorer';\nimport { QueryEditor, QueryEditorRef } from '@/components/QueryEditor';\nimport { DataImportModal } from '@/components/DataImportModal';\nimport { QuerySafetyDialog } from '@/components/QuerySafetyDialog';\nimport { DataProfiler } from '@/components/DataProfiler';\nimport { CodeGenerator } from '@/components/CodeGenerator';\nimport { TestDataGenerator } from '@/components/TestDataGenerator';\nimport { SchemaDiagram } from '@/components/SchemaDiagram';\nimport { SaveQueryModal } from '@/components/SaveQueryModal';\nimport {\n StudioTabBar,\n QueryToolbar,\n BottomPanel,\n} from '@/components/studio/index';\nimport type { DatabaseConnection } from '@/lib/types';\nimport type { MaskingConfig } from '@/lib/data-masking';\nimport { useToast } from '@/hooks/use-toast';\nimport { useTabManager } from '@/hooks/use-tab-manager';\nimport { useConnectionAdapter } from '@/workspace/hooks/use-connection-adapter';\nimport { useQueryAdapter } from '@/workspace/hooks/use-query-adapter';\nimport {\n type StudioWorkspaceProps,\n DEFAULT_WORKSPACE_FEATURES,\n} from '@/workspace/types';\nimport { cn } from '@/lib/utils';\n\n/**\n * Scoped CSS for studio's dark theme.\n * When embedded in a host app that uses different CSS variable formats\n * (e.g. OKLCH instead of hex), studio injects its own scoped styles\n * to ensure correct rendering. Uses data-studio-workspace attribute\n * for high-specificity scoping without affecting the host app.\n */\nconst STUDIO_SCOPED_CSS = `\n[data-studio-workspace] {\n /* Dark theme — monochrome (black/white/gray) */\n --background: #09090b;\n --foreground: #fafafa;\n --card: #09090b;\n --card-foreground: #fafafa;\n --popover: #09090b;\n --popover-foreground: #fafafa;\n --primary: #fafafa;\n --primary-foreground: #09090b;\n --secondary: #27272a;\n --secondary-foreground: #fafafa;\n --muted: #27272a;\n --muted-foreground: #a1a1aa;\n --accent: #27272a;\n --accent-foreground: #fafafa;\n --destructive: #dc2626;\n --destructive-foreground: #fafafa;\n --border: #27272a;\n --input: #27272a;\n --ring: #d4d4d8;\n --radius: 0.5rem;\n --chart-1: #e4e4e7;\n --chart-2: #a1a1aa;\n --chart-3: #71717a;\n --chart-4: #52525b;\n --chart-5: #3f3f46;\n\n /* Font — Geist (inherited from host or fallback to system) */\n font-family: var(--font-geist-sans, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif);\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-feature-settings: \"rlig\" 1, \"calt\" 1;\n letter-spacing: -0.011em;\n}\n[data-studio-workspace] *,\n[data-studio-workspace] *::before,\n[data-studio-workspace] *::after {\n font-family: inherit;\n}\n[data-studio-workspace] code,\n[data-studio-workspace] pre,\n[data-studio-workspace] kbd,\n[data-studio-workspace] .font-mono {\n font-family: var(--font-geist-mono, ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace);\n}\n`;\n\nfunction useStudioTheme() {\n useEffect(() => {\n const id = 'studio-workspace-theme';\n if (document.getElementById(id)) return;\n const style = document.createElement('style');\n style.id = id;\n style.textContent = STUDIO_SCOPED_CSS;\n document.head.appendChild(style);\n return () => {\n document.getElementById(id)?.remove();\n };\n }, []);\n}\nimport { AlertTriangle, Database } from 'lucide-react';\nimport { ResizablePanelGroup, ResizablePanel, ResizableHandle } from '@/components/ui/resizable';\nimport { AnimatePresence } from 'framer-motion';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogTitle,\n} from '@/components/ui/alert-dialog';\n\n// No-op masking config for embedded mode (masking disabled)\nconst NOOP_MASKING_CONFIG: MaskingConfig = {\n enabled: false,\n patterns: [],\n roleSettings: {\n admin: { canToggle: false, canReveal: false },\n user: { canToggle: false, canReveal: false },\n },\n};\n\nexport function StudioWorkspace({\n connections: externalConnections,\n currentUser,\n onQueryExecute,\n onSchemaFetch,\n onSaveQuery: onSaveQueryProp,\n // onLoadSavedQueries — reserved for future saved-queries panel integration\n features: featuresProp,\n className,\n}: StudioWorkspaceProps) {\n const queryEditorRef = useRef<QueryEditorRef>(null);\n const { toast } = useToast();\n\n // Merge feature flags with defaults\n const features = useMemo(\n () => ({ ...DEFAULT_WORKSPACE_FEATURES, ...featuresProp }),\n [featuresProp],\n );\n\n // 1. Connection Adapter (platform-managed connections)\n const conn = useConnectionAdapter({\n connections: externalConnections,\n onSchemaFetch,\n });\n\n // 2. Tab Manager (pure UI state, reused as-is)\n const tabMgr = useTabManager({\n activeConnection: conn.activeConnection,\n metadata: null,\n schema: conn.schema,\n });\n\n // 3. Query Adapter (platform-delegated execution)\n const queryExec = useQueryAdapter({\n activeConnection: conn.activeConnection,\n onQueryExecute,\n tabs: tabMgr.tabs,\n activeTabId: tabMgr.activeTabId,\n currentTab: tabMgr.currentTab,\n setTabs: tabMgr.setTabs,\n fetchSchema: conn.fetchSchema,\n features,\n });\n\n // === Inject scoped dark theme CSS ===\n useStudioTheme();\n\n // === Connection change effect ===\n useEffect(() => {\n if (conn.activeConnection) {\n conn.fetchSchema(conn.activeConnection);\n } else {\n conn.setSchema([]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [conn.activeConnection]);\n\n // === Modal / overlay state ===\n const [showDiagram, setShowDiagram] = useState(false);\n const [isSaveQueryModalOpen, setIsSaveQueryModalOpen] = useState(false);\n const [savedKey, setSavedKey] = useState(0);\n const [activeMobileTab, setActiveMobileTab] = useState<'database' | 'schema' | 'editor'>('editor');\n const [isImportModalOpen, setIsImportModalOpen] = useState(false);\n const [isNL2SQLOpen, setIsNL2SQLOpen] = useState(false);\n const [profilerTable, setProfilerTable] = useState<string | null>(null);\n const [codeGenTable, setCodeGenTable] = useState<string | null>(null);\n const [testDataTable, setTestDataTable] = useState<string | null>(null);\n\n // === Save query handler ===\n const handleSaveQuery = useCallback(async (name: string, description: string, tags: string[]) => {\n if (!conn.activeConnection) return;\n\n if (onSaveQueryProp) {\n try {\n await onSaveQueryProp({\n name,\n query: tabMgr.currentTab.query,\n description,\n connectionType: conn.activeConnection.type,\n tags,\n });\n setSavedKey(prev => prev + 1);\n toast({ title: 'Query Saved', description: `\"${name}\" has been added to your saved queries.` });\n } catch (error) {\n const msg = error instanceof Error ? error.message : 'Failed to save query';\n toast({ title: 'Save Failed', description: msg, variant: 'destructive' });\n }\n }\n }, [conn.activeConnection, tabMgr.currentTab.query, onSaveQueryProp, toast]);\n\n // === Export results (simplified, no masking) ===\n const exportResults = useCallback((format: 'csv' | 'json' | 'sql-insert' | 'sql-ddl') => {\n if (!tabMgr.currentTab.result) return;\n const data = tabMgr.currentTab.result.rows;\n let content = '';\n let mimeType = 'text/plain';\n let ext: string = format;\n\n if (format === 'csv') {\n const headers = Object.keys(data[0] || {}).join(',');\n const rows = data.map(row => Object.values(row).map(val => `\"${val}\"`).join(',')).join('\\n');\n content = `${headers}\\n${rows}`;\n mimeType = 'text/csv';\n ext = 'csv';\n } else if (format === 'json') {\n content = JSON.stringify(data, null, 2);\n mimeType = 'application/json';\n ext = 'json';\n } else if (format === 'sql-insert') {\n const tableName = tabMgr.currentTab.name.replace(/^Query[: ]*/, '') || 'table_name';\n const columns = Object.keys(data[0] || {});\n const lines = data.map(row => {\n const values = columns.map(col => {\n const val = row[col];\n if (val === null || val === undefined) return 'NULL';\n if (typeof val === 'number' || typeof val === 'boolean') return String(val);\n return `'${String(val).replace(/'/g, \"''\")}'`;\n });\n return `INSERT INTO ${tableName} (${columns.join(', ')}) VALUES (${values.join(', ')});`;\n });\n content = lines.join('\\n');\n mimeType = 'text/sql';\n ext = 'sql';\n } else if (format === 'sql-ddl') {\n const tableName = tabMgr.currentTab.name.replace(/^Query[: ]*/, '') || 'table_name';\n const columns = Object.keys(data[0] || {});\n const colDefs = columns.map(col => {\n const sampleVal = data[0]?.[col];\n let sqlType = 'TEXT';\n if (typeof sampleVal === 'number') {\n sqlType = Number.isInteger(sampleVal) ? 'INTEGER' : 'NUMERIC';\n } else if (typeof sampleVal === 'boolean') {\n sqlType = 'BOOLEAN';\n } else if (sampleVal instanceof Date) {\n sqlType = 'TIMESTAMP';\n }\n return ` ${col} ${sqlType}`;\n });\n content = `CREATE TABLE ${tableName} (\\n${colDefs.join(',\\n')}\\n);`;\n mimeType = 'text/sql';\n ext = 'sql';\n }\n\n const fileName = `query_result_export.${ext}`;\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n link.click();\n URL.revokeObjectURL(url);\n }, [tabMgr.currentTab]);\n\n // === Table click handler ===\n const onTableClick = useCallback((tableName: string) => {\n tabMgr.handleTableClick(tableName, queryExec.executeQuery);\n }, [tabMgr, queryExec.executeQuery]);\n\n // === No-op callbacks for disabled features ===\n const noop = useCallback(() => {}, []);\n\n return (\n <div\n data-studio-workspace=\"\"\n className={cn('dark flex h-full w-full bg-[#050505] text-zinc-100 overflow-hidden font-sans select-none', className)}\n >\n <ResizablePanelGroup id=\"workspace-main\" direction=\"horizontal\" className=\"h-full\">\n <ResizablePanel defaultSize={22} minSize={15} maxSize={35} className=\"hidden md:block\">\n <Sidebar\n connections={conn.connections}\n activeConnection={conn.activeConnection}\n schema={conn.schema}\n isLoadingSchema={conn.isLoadingSchema}\n onSelectConnection={conn.setActiveConnection}\n onDeleteConnection={noop}\n onEditConnection={noop}\n onAddConnection={noop}\n onTableClick={onTableClick}\n onGenerateSelect={tabMgr.handleGenerateSelect}\n onCreateTableClick={undefined}\n onShowDiagram={features.schemaDiagram ? () => setShowDiagram(true) : undefined}\n isAdmin={false}\n onOpenMaintenance={noop}\n databaseType={conn.activeConnection?.type}\n metadata={null}\n onProfileTable={features.codeGenerator ? (name: string) => setProfilerTable(name) : undefined}\n onGenerateCode={features.codeGenerator ? (name: string) => setCodeGenTable(name) : undefined}\n onGenerateTestData={features.testDataGenerator ? (name: string) => setTestDataTable(name) : undefined}\n />\n </ResizablePanel>\n <ResizableHandle className=\"hidden md:flex w-1 bg-transparent hover:bg-blue-500/30 transition-colors\" />\n <ResizablePanel defaultSize={78}>\n <div className=\"flex-1 flex flex-col min-w-0 h-full bg-[#0a0a0a]\">\n {/* No desktop/mobile headers — platform provides its own */}\n\n <StudioTabBar\n tabs={tabMgr.tabs}\n activeTabId={tabMgr.activeTabId}\n editingTabId={tabMgr.editingTabId}\n editingTabName={tabMgr.editingTabName}\n onSetActiveTabId={tabMgr.setActiveTabId}\n onSetEditingTabId={tabMgr.setEditingTabId}\n onSetEditingTabName={tabMgr.setEditingTabName}\n onSetTabs={tabMgr.setTabs}\n onCloseTab={tabMgr.closeTab}\n onAddTab={tabMgr.addTab}\n />\n\n <main className=\"flex-1 overflow-hidden relative\">\n {/* Schema Diagram overlay */}\n {features.schemaDiagram && (\n <AnimatePresence>\n {showDiagram && (\n <SchemaDiagram schema={conn.schema} onClose={() => setShowDiagram(false)} />\n )}\n </AnimatePresence>\n )}\n\n {/* Mobile: Database Tab */}\n {activeMobileTab === 'database' && (\n <div className=\"md:hidden h-full bg-[#080808] overflow-auto p-4\">\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-sm font-bold text-zinc-300 uppercase tracking-widest\">Connections</h2>\n </div>\n <ConnectionsList\n connections={conn.connections}\n activeConnection={conn.activeConnection}\n onSelectConnection={(c: DatabaseConnection) => {\n conn.setActiveConnection(c);\n setActiveMobileTab('editor');\n }}\n onDeleteConnection={noop}\n onAddConnection={noop}\n />\n </div>\n )}\n\n {/* Mobile: Schema Tab */}\n {activeMobileTab === 'schema' && (\n <div className=\"md:hidden h-full bg-[#080808] overflow-auto p-4\">\n {conn.activeConnection ? (\n <SchemaExplorer\n schema={conn.schema}\n isLoadingSchema={conn.isLoadingSchema}\n onTableClick={(tableName: string) => {\n onTableClick(tableName);\n setActiveMobileTab('editor');\n }}\n onGenerateSelect={(tableName: string) => {\n tabMgr.handleGenerateSelect(tableName);\n setActiveMobileTab('editor');\n }}\n onCreateTableClick={undefined}\n isAdmin={false}\n onOpenMaintenance={noop}\n databaseType={conn.activeConnection?.type}\n metadata={null}\n onProfileTable={features.codeGenerator ? (name: string) => setProfilerTable(name) : undefined}\n onGenerateCode={features.codeGenerator ? (name: string) => setCodeGenTable(name) : undefined}\n onGenerateTestData={features.testDataGenerator ? (name: string) => setTestDataTable(name) : undefined}\n />\n ) : (\n <div className=\"flex flex-col items-center justify-center h-full text-zinc-500\">\n <Database className=\"w-12 h-12 mb-4 opacity-30\" />\n <p className=\"text-sm\">Select a connection first</p>\n </div>\n )}\n </div>\n )}\n\n {/* Desktop & Mobile Editor Tab */}\n <div className={cn(\n 'h-full',\n activeMobileTab !== 'editor' && 'hidden md:block',\n )}>\n <div className=\"h-full\">\n <ResizablePanelGroup id=\"workspace-editor\" direction=\"vertical\">\n <ResizablePanel defaultSize={40} minSize={20}>\n <div className=\"h-full flex flex-col\">\n <QueryToolbar\n activeConnection={conn.activeConnection}\n metadata={null}\n isExecuting={tabMgr.currentTab.isExecuting}\n playgroundMode={false}\n transactionActive={false}\n editingEnabled={false}\n onSaveQuery={onSaveQueryProp ? () => setIsSaveQueryModalOpen(true) : noop}\n onExecuteQuery={() => queryExec.executeQuery()}\n onCancelQuery={queryExec.cancelQuery}\n onBeginTransaction={noop}\n onCommitTransaction={noop}\n onRollbackTransaction={noop}\n onTogglePlayground={noop}\n onToggleEditing={noop}\n onImport={features.dataImport ? () => setIsImportModalOpen(true) : noop}\n />\n\n <div className=\"flex-1 relative\">\n <QueryEditor\n ref={queryEditorRef}\n value={tabMgr.currentTab.query}\n onContentChange={(val) => tabMgr.updateTabById(tabMgr.currentTab.id, { query: val })}\n language={tabMgr.currentTab.type === 'mongodb' ? 'json' : 'sql'}\n tables={conn.tableNames}\n databaseType={conn.activeConnection?.type}\n schemaContext={conn.schemaContext}\n capabilities={undefined}\n />\n </div>\n </div>\n </ResizablePanel>\n <ResizableHandle className=\"h-1 bg-white/5 hover:bg-blue-500/20\" />\n <ResizablePanel defaultSize={60} minSize={20}>\n <BottomPanel\n mode={queryExec.bottomPanelMode}\n onSetMode={queryExec.setBottomPanelMode}\n currentTab={tabMgr.currentTab}\n schema={conn.schema}\n schemaContext={conn.schemaContext}\n activeConnection={conn.activeConnection}\n metadata={null}\n historyKey={queryExec.historyKey}\n savedKey={savedKey}\n isNL2SQLOpen={features.ai ? isNL2SQLOpen : false}\n onSetIsNL2SQLOpen={features.ai ? setIsNL2SQLOpen : noop}\n maskingEnabled={false}\n onToggleMasking={undefined}\n userRole={currentUser?.role}\n maskingConfig={NOOP_MASKING_CONFIG}\n editingEnabled={false}\n pendingChanges={[]}\n onCellChange={noop as never}\n onApplyChanges={noop}\n onDiscardChanges={noop}\n onExecuteQuery={(q) => queryExec.executeQuery(q)}\n onLoadQuery={(q) => tabMgr.updateCurrentTab({ query: q })}\n onLoadMore={\n tabMgr.currentTab.result?.pagination?.hasMore\n ? queryExec.handleLoadMore\n : undefined\n }\n isLoadingMore={tabMgr.currentTab.isLoadingMore}\n onExportResults={exportResults}\n />\n </ResizablePanel>\n </ResizablePanelGroup>\n </div>\n </div>\n </main>\n </div>\n </ResizablePanel>\n </ResizablePanelGroup>\n\n {/* Modals — only render those that are feature-enabled */}\n\n {onSaveQueryProp && (\n <SaveQueryModal\n isOpen={isSaveQueryModalOpen}\n onClose={() => setIsSaveQueryModalOpen(false)}\n onSave={handleSaveQuery}\n defaultQuery={tabMgr.currentTab.query}\n />\n )}\n\n {features.dataImport && (\n <DataImportModal\n isOpen={isImportModalOpen}\n onClose={() => setIsImportModalOpen(false)}\n onImport={(sql) => queryExec.executeQuery(sql)}\n tables={conn.schema}\n databaseType={conn.activeConnection?.type}\n />\n )}\n\n {/* Safety dialog — stub AI analysis to prevent internal fetch */}\n <QuerySafetyDialog\n isOpen={!!queryExec.safetyCheckQuery}\n query={queryExec.safetyCheckQuery || ''}\n schemaContext={conn.schemaContext}\n databaseType={conn.activeConnection?.type}\n onClose={() => queryExec.setSafetyCheckQuery(null)}\n onProceed={() => {\n if (queryExec.safetyCheckQuery) queryExec.forceExecuteQuery(queryExec.safetyCheckQuery);\n }}\n onAnalyzeSafety={async () => ({\n riskLevel: 'high' as const,\n summary: 'Potentially dangerous query detected',\n warnings: [{\n type: 'destructive',\n severity: 'high',\n message: 'This query may modify or delete data',\n detail: 'Review carefully before proceeding.',\n }],\n affectedRows: 'unknown',\n cascadeEffects: 'unknown',\n recommendation: 'Review this query carefully before proceeding.',\n })}\n />\n\n {/* Data Profiler */}\n {features.codeGenerator && (\n <DataProfiler\n isOpen={!!profilerTable}\n onClose={() => setProfilerTable(null)}\n tableName={profilerTable || ''}\n tableSchema={conn.schema.find(t => t.name === profilerTable) || null}\n connection={conn.activeConnection}\n schemaContext={conn.schemaContext}\n databaseType={conn.activeConnection?.type}\n />\n )}\n\n {/* Code Generator */}\n {features.codeGenerator && (\n <CodeGenerator\n isOpen={!!codeGenTable}\n onClose={() => setCodeGenTable(null)}\n tableName={codeGenTable || ''}\n tableSchema={conn.schema.find(t => t.name === codeGenTable) || null}\n databaseType={conn.activeConnection?.type}\n />\n )}\n\n {/* Test Data Generator */}\n {features.testDataGenerator && (\n <TestDataGenerator\n isOpen={!!testDataTable}\n onClose={() => setTestDataTable(null)}\n tableName={testDataTable || ''}\n tableSchema={conn.schema.find(t => t.name === testDataTable) || null}\n databaseType={conn.activeConnection?.type}\n queryLanguage={undefined}\n onExecuteQuery={(q) => queryExec.executeQuery(q)}\n />\n )}\n\n {/* Unlimited Query Warning */}\n <AlertDialog open={queryExec.unlimitedWarningOpen} onOpenChange={queryExec.setUnlimitedWarningOpen}>\n <AlertDialogContent className=\"bg-[#111] border-white/5 max-w-sm p-0 gap-0 overflow-hidden\">\n <div className=\"px-6 pt-6 pb-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-10 h-10 rounded-xl bg-gradient-to-br from-amber-500/20 to-red-500/10 flex items-center justify-center shrink-0\">\n <AlertTriangle className=\"w-5 h-5 text-amber-400\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <AlertDialogTitle className=\"text-[15px] font-semibold text-zinc-100 mb-1\">\n Load all results?\n </AlertDialogTitle>\n <AlertDialogDescription className=\"text-[13px] text-zinc-500 leading-relaxed\">\n This may slow down your browser. Max <span className=\"text-zinc-400\">100K</span> rows will be loaded.\n </AlertDialogDescription>\n </div>\n </div>\n </div>\n <div className=\"px-6 pb-6 flex gap-2\">\n <AlertDialogCancel className=\"flex-1 h-9 bg-white/5 border-0 text-zinc-400 text-[13px] font-medium hover:bg-white/10 hover:text-zinc-200\">\n Cancel\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={queryExec.handleUnlimitedQuery}\n className=\"flex-1 h-9 bg-amber-600 border-0 text-white text-[13px] font-medium hover:bg-amber-500\"\n >\n Load All\n </AlertDialogAction>\n </div>\n </AlertDialogContent>\n </AlertDialog>\n\n {/* Mobile Navigation — hidden in embedded mode, platform provides its own */}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/sidebar/ConnectionItem.tsx","../src/components/sidebar/ConnectionsList.tsx","../src/components/sidebar/Sidebar.tsx","../src/components/DataImportModal.tsx","../src/components/ui/textarea.tsx","../src/components/SaveQueryModal.tsx","../src/components/studio/StudioTabBar.tsx","../src/components/studio/QueryToolbar.tsx","../src/components/AIAutopilotPanel.tsx","../src/components/PivotTable.tsx","../src/components/DatabaseDocs.tsx","../src/components/QueryHistory.tsx","../src/components/SavedQueries.tsx","../src/components/ui/badge.tsx","../src/hooks/use-all-connections.ts","../src/lib/schema-diff/diff-engine.ts","../src/lib/schema-diff/migration-generator.ts","../src/components/SnapshotTimeline.tsx","../src/components/SchemaDiff.tsx","../src/components/studio/BottomPanel.tsx","../src/hooks/use-toast.ts","../src/hooks/use-tab-manager.ts","../src/workspace/hooks/use-connection-adapter.ts","../src/workspace/hooks/use-query-adapter.ts","../src/workspace/types.ts","../src/components/ui/resizable.tsx","../src/components/ui/alert-dialog.tsx","../src/workspace/StudioWorkspace.tsx"],"names":["ConnectionItem","jsxs","jsx","_a","React","useState","FileJson","X","Plus","Fragment","Save","Square","Play","Pencil","Upload","useRef","Check","Copy","Sparkles","Loader2","useMemo","useCallback","ArrowRight","FileText","useEffect","format","HistoryIcon","Download","Trash2","Search","Database","Hash","Bookmark","Edit3","Tag","AlertTriangle","sourceId","targetId","ChevronDown","Zap","Clock","Columns3","GitCompare","Terminal","toast","sonnerToast","storage","_b"],"mappings":"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","file":"workspace.mjs","sourcesContent":["import React from 'react';\nimport { DatabaseConnection, ENVIRONMENT_LABELS } from '@/lib/types';\nimport { Lock, Trash2, Pencil } from 'lucide-react';\nimport { getDBIcon } from '@/lib/db-ui-config';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\nimport { motion } from 'framer-motion';\n\ninterface ConnectionItemProps {\n connection: DatabaseConnection;\n isActive: boolean;\n onSelect: (conn: DatabaseConnection) => void;\n onDelete: (id: string) => void;\n onEdit?: (conn: DatabaseConnection) => void;\n}\n\nexport const ConnectionItem = React.memo(function ConnectionItem({\n connection: conn,\n isActive,\n onSelect,\n onDelete,\n onEdit,\n}: ConnectionItemProps) {\n return (\n <motion.div\n initial={false}\n className={cn(\n 'group flex items-center gap-2.5 px-3 py-2 rounded-lg cursor-pointer transition-all duration-200 text-xs relative overflow-hidden',\n isActive\n ? 'bg-blue-600/10 text-blue-400'\n : 'hover:bg-accent/50 text-muted-foreground hover:text-foreground'\n )}\n onClick={() => onSelect(conn)}\n >\n {isActive && (\n <motion.div\n layoutId=\"active-indicator\"\n className=\"absolute left-0 w-1 h-4 rounded-r-full\"\n style={{ backgroundColor: conn.color || '#3b82f6' }}\n />\n )}\n <div\n className={cn(\n 'p-1 rounded transition-colors',\n isActive ? 'bg-blue-500/20' : 'bg-muted group-hover:bg-accent'\n )}\n >\n {React.createElement(getDBIcon(conn.type), { className: 'w-3 h-3' })}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"truncate block font-medium text-xs\">{conn.name}</span>\n {conn.environment && conn.environment !== 'other' && (\n <span\n className=\"text-[0.5rem] font-medium px-1.5 py-0.5 rounded-sm shrink-0\"\n style={{\n color: conn.color || '#6b7280',\n backgroundColor: `${conn.color || '#6b7280'}15`,\n }}\n >\n {ENVIRONMENT_LABELS[conn.environment]}\n </span>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-0.5\">\n {conn.managed && (\n <div\n data-testid={`managed-lock-${conn.seedId || conn.id}`}\n className=\"flex items-center justify-center text-amber-500/60\"\n title=\"Managed by administrator\"\n >\n <Lock strokeWidth={1.5} className=\"w-3 h-3\" />\n </div>\n )}\n {!conn.managed && onEdit && (\n <button\n className=\"p-1 rounded opacity-0 group-hover:opacity-100 transition-opacity hover:bg-blue-500/20 hover:text-blue-400\"\n onClick={(e) => {\n e.stopPropagation();\n onEdit(conn);\n }}\n >\n <Pencil strokeWidth={1.5} className=\"w-3 h-3\" />\n </button>\n )}\n {!conn.managed && (\n <button\n className=\"p-1 rounded opacity-0 group-hover:opacity-100 transition-opacity hover:bg-red-500/20 hover:text-red-400\"\n onClick={(e) => {\n e.stopPropagation();\n onDelete(conn.id);\n }}\n >\n <Trash2 strokeWidth={1.5} className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n </motion.div>\n );\n});\n","import React from 'react';\nimport { DatabaseConnection } from '@/lib/types';\nimport { Button } from '@/components/ui/button';\nimport { ConnectionItem } from './ConnectionItem';\n\ninterface ConnectionsListProps {\n connections: DatabaseConnection[];\n activeConnection: DatabaseConnection | null;\n onSelectConnection: (conn: DatabaseConnection) => void;\n onDeleteConnection: (id: string) => void;\n onEditConnection?: (conn: DatabaseConnection) => void;\n onAddConnection: () => void;\n}\n\nexport function ConnectionsList({\n connections,\n activeConnection,\n onSelectConnection,\n onDeleteConnection,\n onEditConnection,\n onAddConnection,\n}: ConnectionsListProps) {\n return (\n <section>\n <div className=\"px-3 mb-2 flex items-center justify-between\">\n <span className=\"text-xs font-medium text-muted-foreground\">\n Connections\n </span>\n <div className=\"h-[1px] flex-1 bg-border/30 ml-3\" />\n </div>\n\n <div className=\"space-y-0.5\">\n {connections.length === 0 ? (\n <div className=\"px-3 py-6 text-center border border-dashed border-border/50 rounded-lg mx-2\">\n <p className=\"text-xs text-muted-foreground mb-3 leading-relaxed\">\n No database connections established yet.\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={onAddConnection}\n >\n Add Connection\n </Button>\n </div>\n ) : (\n connections.map((conn) => (\n <ConnectionItem\n key={conn.id}\n connection={conn}\n isActive={activeConnection?.id === conn.id}\n onSelect={onSelectConnection}\n onDelete={onDeleteConnection}\n onEdit={onEditConnection}\n />\n ))\n )}\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport React from 'react';\nimport { DatabaseConnection, TableSchema } from '@/lib/types';\nimport type { ProviderMetadata } from '@/hooks/use-provider-metadata';\nimport { Plus, Zap, Layers } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { ScrollArea } from '@/components/ui/scroll-area';\nimport { SchemaExplorer } from '@/components/schema-explorer';\nimport { ConnectionsList } from './ConnectionsList';\n\ninterface SidebarProps {\n connections: DatabaseConnection[];\n activeConnection: DatabaseConnection | null;\n schema: TableSchema[];\n isLoadingSchema: boolean;\n onSelectConnection: (connection: DatabaseConnection) => void;\n onDeleteConnection: (id: string) => void;\n onEditConnection?: (conn: DatabaseConnection) => void;\n onAddConnection: () => void;\n onTableClick?: (tableName: string) => void;\n onGenerateSelect?: (tableName: string) => void;\n onCreateTableClick?: () => void;\n onShowDiagram?: () => void;\n isAdmin?: boolean;\n onOpenMaintenance?: (tab?: 'global' | 'tables' | 'sessions', table?: string) => void;\n databaseType?: string;\n metadata?: ProviderMetadata | null;\n onProfileTable?: (tableName: string) => void;\n onGenerateCode?: (tableName: string) => void;\n onGenerateTestData?: (tableName: string) => void;\n}\n\nexport function Sidebar({\n connections,\n activeConnection,\n schema,\n isLoadingSchema,\n onSelectConnection,\n onDeleteConnection,\n onEditConnection,\n onAddConnection,\n onTableClick,\n onGenerateSelect,\n onCreateTableClick,\n onShowDiagram,\n isAdmin = false,\n onOpenMaintenance,\n databaseType,\n metadata,\n onProfileTable,\n onGenerateCode,\n onGenerateTestData,\n}: SidebarProps) {\n return (\n <div className=\"flex w-full h-full border-r border-border flex-col bg-background select-none\">\n <div className=\"h-14 px-4 flex items-center justify-between border-b border-border\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-5 h-5 bg-blue-600 rounded flex items-center justify-center\">\n <Zap strokeWidth={1.5} className=\"w-3 h-3 text-white fill-current\" />\n </div>\n <span className=\"font-medium text-xs tracking-tight bg-gradient-to-r from-foreground to-muted-foreground bg-clip-text text-transparent\">\n LibreDB Studio\n </span>\n </div>\n <div className=\"flex items-center gap-1\">\n {activeConnection && (\n <button\n className=\"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground transition-colors\"\n onClick={onShowDiagram}\n title=\"Show ERD Diagram\"\n >\n <Layers strokeWidth={1.5} className=\"w-3.5 h-3.5\" />\n </button>\n )}\n <button\n className=\"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground transition-colors\"\n onClick={onAddConnection}\n >\n <Plus strokeWidth={1.5} className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n </div>\n\n <ScrollArea className=\"flex-1 min-h-0 px-2 py-4\">\n <div className=\"space-y-6\">\n <ConnectionsList\n connections={connections}\n activeConnection={activeConnection}\n onSelectConnection={onSelectConnection}\n onDeleteConnection={onDeleteConnection}\n onEditConnection={onEditConnection}\n onAddConnection={onAddConnection}\n />\n\n {activeConnection && (\n <SchemaExplorer\n schema={schema}\n isLoadingSchema={isLoadingSchema}\n onTableClick={onTableClick}\n onGenerateSelect={onGenerateSelect}\n onCreateTableClick={onCreateTableClick}\n isAdmin={isAdmin}\n onOpenMaintenance={onOpenMaintenance}\n databaseType={databaseType}\n metadata={metadata}\n onProfileTable={onProfileTable}\n onGenerateCode={onGenerateCode}\n onGenerateTestData={onGenerateTestData}\n />\n )}\n </div>\n </ScrollArea>\n\n <div className=\"p-3 border-t border-border bg-card/50 backdrop-blur-md\">\n <div className=\"flex items-center justify-between px-2 py-1.5 rounded-lg bg-muted/30 border border-border/50\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-1.5 h-1.5 rounded-full bg-green-500 animate-pulse\" />\n <span className=\"text-xs font-medium text-muted-foreground\">Connected</span>\n </div>\n <span className=\"text-xs font-mono text-muted-foreground/70\">v1.2.5</span>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useCallback, useRef, useMemo } from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { cn } from '@/lib/utils';\nimport {\n Upload,\n FileSpreadsheet,\n FileJson,\n FileText,\n Check,\n AlertTriangle,\n Table2,\n ArrowRight,\n Loader2,\n X,\n} from 'lucide-react';\nimport type { TableSchema } from '@/lib/types';\n\ninterface DataImportModalProps {\n isOpen: boolean;\n onClose: () => void;\n onImport: (sql: string) => void;\n tables: TableSchema[];\n databaseType?: string;\n}\n\nexport interface ParsedData {\n headers: string[];\n rows: string[][];\n totalRows: number;\n}\n\ntype ImportStep = 'upload' | 'preview' | 'configure' | 'ready';\n\nexport function parseCSV(text: string): ParsedData {\n const lines = text.split(/\\r?\\n/).filter(line => line.trim());\n if (lines.length === 0) return { headers: [], rows: [], totalRows: 0 };\n\n // Parse CSV with basic quote handling\n const parseLine = (line: string): string[] => {\n const result: string[] = [];\n let current = '';\n let inQuotes = false;\n\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (ch === '\"' && !inQuotes) {\n inQuotes = true;\n } else if (ch === '\"' && inQuotes) {\n if (i + 1 < line.length && line[i + 1] === '\"') {\n current += '\"';\n i++;\n } else {\n inQuotes = false;\n }\n } else if (ch === ',' && !inQuotes) {\n result.push(current.trim());\n current = '';\n } else {\n current += ch;\n }\n }\n result.push(current.trim());\n return result;\n };\n\n const headers = parseLine(lines[0]);\n const rows = lines.slice(1).map(line => parseLine(line));\n return { headers, rows, totalRows: rows.length };\n}\n\nexport function parseJSON(text: string): ParsedData {\n const data = JSON.parse(text);\n const arr = Array.isArray(data) ? data : [data];\n if (arr.length === 0) return { headers: [], rows: [], totalRows: 0 };\n\n const headers = [...new Set(arr.flatMap(obj => Object.keys(obj)))];\n const rows = arr.map(obj => headers.map(h => {\n const val = obj[h];\n if (val === null || val === undefined) return '';\n if (typeof val === 'object') return JSON.stringify(val);\n return String(val);\n }));\n\n return { headers, rows, totalRows: rows.length };\n}\n\nexport function inferSqlType(values: string[]): string {\n const nonEmpty = values.filter(v => v !== '' && v !== null);\n if (nonEmpty.length === 0) return 'TEXT';\n\n const allIntegers = nonEmpty.every(v => /^-?\\d+$/.test(v));\n if (allIntegers) return 'INTEGER';\n\n const allNumbers = nonEmpty.every(v => /^-?\\d+(\\.\\d+)?$/.test(v));\n if (allNumbers) return 'NUMERIC';\n\n const allBooleans = nonEmpty.every(v => /^(true|false|0|1)$/i.test(v));\n if (allBooleans) return 'BOOLEAN';\n\n return 'TEXT';\n}\n\nexport function escapeSQL(value: string): string {\n if (value === '' || value === 'null' || value === 'NULL') return 'NULL';\n return `'${value.replace(/'/g, \"''\")}'`;\n}\n\nexport function generateImportSQL(\n parsedData: ParsedData | null,\n targetTable: string,\n createNewTable: boolean,\n newTableName: string,\n columnMapping: Record<string, string>,\n): string {\n if (!parsedData) return '';\n\n const tableName = createNewTable ? (newTableName || 'imported_data') : targetTable;\n if (!tableName) return '';\n\n const statements: string[] = [];\n\n // CREATE TABLE if new\n if (createNewTable) {\n const colDefs = parsedData.headers.map(h => {\n const colValues = parsedData.rows.slice(0, 100).map(r => r[parsedData.headers.indexOf(h)]);\n const sqlType = inferSqlType(colValues);\n const colName = columnMapping[h] || h;\n return ` ${colName} ${sqlType}`;\n });\n statements.push(`CREATE TABLE ${tableName} (\\n${colDefs.join(',\\n')}\\n);`);\n }\n\n // INSERT statements (batch in groups of 100)\n const mappedHeaders = parsedData.headers.map(h => columnMapping[h] || h);\n const batchSize = 100;\n\n for (let i = 0; i < parsedData.rows.length; i += batchSize) {\n const batch = parsedData.rows.slice(i, i + batchSize);\n const valueRows = batch.map(row => {\n const values = row.map((val, idx) => {\n const sqlType = inferSqlType(parsedData.rows.slice(0, 100).map(r => r[idx]));\n if (val === '' || val === 'NULL' || val === 'null') return 'NULL';\n if (sqlType === 'INTEGER' || sqlType === 'NUMERIC' || sqlType === 'BOOLEAN') {\n if (sqlType === 'BOOLEAN') return val.toLowerCase() === 'true' || val === '1' ? 'TRUE' : 'FALSE';\n return val;\n }\n return escapeSQL(val);\n });\n return ` (${values.join(', ')})`;\n });\n\n statements.push(\n `INSERT INTO ${tableName} (${mappedHeaders.join(', ')})\\nVALUES\\n${valueRows.join(',\\n')};`\n );\n }\n\n return statements.join('\\n\\n');\n}\n\nexport function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }: DataImportModalProps) {\n const [step, setStep] = useState<ImportStep>('upload');\n const [parsedData, setParsedData] = useState<ParsedData | null>(null);\n const [fileName, setFileName] = useState('');\n const [fileType, setFileType] = useState<'csv' | 'json'>('csv');\n const [targetTable, setTargetTable] = useState('');\n const [createNewTable, setCreateNewTable] = useState(false);\n const [newTableName, setNewTableName] = useState('');\n const [columnMapping, setColumnMapping] = useState<Record<string, string>>({});\n const [error, setError] = useState<string | null>(null);\n const [isImporting, setIsImporting] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const resetState = useCallback(() => {\n setStep('upload');\n setParsedData(null);\n setFileName('');\n setTargetTable('');\n setCreateNewTable(false);\n setNewTableName('');\n setColumnMapping({});\n setError(null);\n setIsImporting(false);\n }, []);\n\n const handleClose = () => {\n resetState();\n onClose();\n };\n\n const handleFileSelect = useCallback((file: File) => {\n setError(null);\n setFileName(file.name);\n\n const ext = file.name.split('.').pop()?.toLowerCase();\n const isJSON = ext === 'json';\n setFileType(isJSON ? 'json' : 'csv');\n\n const reader = new FileReader();\n reader.onload = (e) => {\n try {\n const text = e.target?.result as string;\n const data = isJSON ? parseJSON(text) : parseCSV(text);\n\n if (data.headers.length === 0) {\n setError('No data found in file');\n return;\n }\n\n setParsedData(data);\n // Auto-map columns 1:1\n const mapping: Record<string, string> = {};\n data.headers.forEach(h => { mapping[h] = h; });\n setColumnMapping(mapping);\n setStep('preview');\n } catch (err) {\n setError(`Failed to parse file: ${err instanceof Error ? err.message : 'Unknown error'}`);\n }\n };\n reader.readAsText(file);\n }, []);\n\n const handleDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n const file = e.dataTransfer.files[0];\n if (file) handleFileSelect(file);\n }, [handleFileSelect]);\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n }, []);\n\n const generatedSQL = useMemo(\n () => generateImportSQL(parsedData, targetTable, createNewTable, newTableName, columnMapping),\n [parsedData, targetTable, createNewTable, newTableName, columnMapping],\n );\n\n const handleImport = () => {\n if (!generatedSQL) return;\n setIsImporting(true);\n onImport(generatedSQL);\n setTimeout(() => {\n handleClose();\n }, 200);\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={handleClose}>\n <DialogContent className=\"bg-[#0a0a0a] border-white/10 text-zinc-100 max-w-2xl max-h-[85vh] overflow-hidden flex flex-col\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <Upload strokeWidth={1.5} className=\"w-5 h-5 text-blue-400\" />\n Import Data\n {fileName && (\n <span className=\"text-xs text-zinc-500 font-normal ml-2\">\n {fileName}\n </span>\n )}\n </DialogTitle>\n </DialogHeader>\n\n {/* Step Indicator */}\n <div className=\"flex items-center gap-2 px-1 py-2\">\n {(['upload', 'preview', 'configure', 'ready'] as ImportStep[]).map((s, idx) => (\n <React.Fragment key={s}>\n <div className={cn(\n \"flex items-center gap-1.5 text-xs font-mediumr\",\n step === s ? \"text-blue-400\" : idx < ['upload', 'preview', 'configure', 'ready'].indexOf(step) ? \"text-emerald-400\" : \"text-zinc-600\"\n )}>\n <div className={cn(\n \"w-5 h-5 rounded-full flex items-center justify-center text-[0.625rem]\",\n step === s ? \"bg-blue-500/20 border border-blue-500/40\" :\n idx < ['upload', 'preview', 'configure', 'ready'].indexOf(step) ? \"bg-emerald-500/20 border border-emerald-500/40\" :\n \"bg-white/5 border border-white/10\"\n )}>\n {idx < ['upload', 'preview', 'configure', 'ready'].indexOf(step) ? (\n <Check strokeWidth={1.5} className=\"w-3 h-3\" />\n ) : (\n idx + 1\n )}\n </div>\n <span className=\"hidden sm:inline\">{s === 'upload' ? 'Upload' : s === 'preview' ? 'Preview' : s === 'configure' ? 'Configure' : 'Import'}</span>\n </div>\n {idx < 3 && <ArrowRight strokeWidth={1.5} className=\"w-3 h-3 text-zinc-700\" />}\n </React.Fragment>\n ))}\n </div>\n\n <div className=\"flex-1 overflow-auto min-h-0\">\n {/* Step 1: Upload */}\n {step === 'upload' && (\n <div className=\"p-4\">\n <div\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onClick={() => fileInputRef.current?.click()}\n className=\"border-2 border-dashed border-white/10 rounded-xl p-12 text-center cursor-pointer hover:border-blue-500/30 hover:bg-blue-500/5 transition-all\"\n >\n <Upload strokeWidth={1.5} className=\"w-10 h-10 text-zinc-600 mx-auto mb-4\" />\n <p className=\"text-xs text-zinc-400 mb-1\">\n Drop a file here or click to browse\n </p>\n <p className=\"text-xs text-zinc-600\">\n Supports CSV and JSON files\n </p>\n <div className=\"flex items-center justify-center gap-4 mt-4\">\n <div className=\"flex items-center gap-1.5 text-zinc-500\">\n <FileSpreadsheet strokeWidth={1.5} className=\"w-3.5 h-3.5\" />\n <span className=\"text-xs\">CSV</span>\n </div>\n <div className=\"flex items-center gap-1.5 text-zinc-500\">\n <FileJson strokeWidth={1.5} className=\"w-3.5 h-3.5\" />\n <span className=\"text-xs\">JSON</span>\n </div>\n </div>\n </div>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\".csv,.json,.tsv\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) handleFileSelect(file);\n }}\n />\n {error && (\n <div className=\"mt-4 p-3 rounded-lg bg-red-500/10 border border-red-500/20 flex items-center gap-2\">\n <AlertTriangle strokeWidth={1.5} className=\"w-3.5 h-3.5 text-red-400 shrink-0\" />\n <span className=\"text-xs text-red-400\">{error}</span>\n </div>\n )}\n </div>\n )}\n\n {/* Step 2: Preview */}\n {step === 'preview' && parsedData && (\n <div className=\"p-4 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n {fileType === 'json' ? (\n <FileJson strokeWidth={1.5} className=\"w-5 h-5 text-amber-400\" />\n ) : (\n <FileText strokeWidth={1.5} className=\"w-5 h-5 text-emerald-400\" />\n )}\n <div>\n <p className=\"text-xs font-medium\">{fileName}</p>\n <p className=\"text-xs text-zinc-500\">\n {parsedData.totalRows} rows, {parsedData.headers.length} columns\n </p>\n </div>\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs text-zinc-500\"\n onClick={() => { resetState(); }}\n >\n <X strokeWidth={1.5} className=\"w-3 h-3 mr-1\" /> Reset\n </Button>\n </div>\n\n {/* Preview Table */}\n <div className=\"border border-white/5 rounded-lg overflow-auto max-h-60\">\n <table className=\"w-full text-xs\">\n <thead>\n <tr className=\"bg-[#0d0d0d]\">\n {parsedData.headers.map(h => (\n <th key={h} className=\"px-3 py-2 text-left text-xs uppercase text-zinc-500 font-mono border-b border-white/5 whitespace-nowrap\">\n {h}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {parsedData.rows.slice(0, 10).map((row, idx) => (\n <tr key={idx} className=\"border-b border-white/5 hover:bg-white/[0.02]\">\n {row.map((cell, cidx) => (\n <td key={cidx} className=\"px-3 py-1.5 text-zinc-300 font-mono whitespace-nowrap max-w-[200px] truncate\">\n {cell || <span className=\"text-zinc-600 italic\">NULL</span>}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n {parsedData.totalRows > 10 && (\n <div className=\"text-center py-2 text-xs text-zinc-600 bg-[#0d0d0d]\">\n ... and {parsedData.totalRows - 10} more rows\n </div>\n )}\n </div>\n\n <div className=\"flex justify-end\">\n <Button\n size=\"sm\"\n className=\"bg-blue-600 hover:bg-blue-500 h-8 text-xs gap-1\"\n onClick={() => setStep('configure')}\n >\n Configure Import <ArrowRight strokeWidth={1.5} className=\"w-3 h-3\" />\n </Button>\n </div>\n </div>\n )}\n\n {/* Step 3: Configure */}\n {step === 'configure' && parsedData && (\n <div className=\"p-4 space-y-4\">\n {/* Target Table */}\n <div className=\"space-y-2\">\n <label className=\"text-xs text-zinc-400 font-medium\">Target Table</label>\n <div className=\"flex items-center gap-2\">\n <button\n className={cn(\n \"flex-1 px-3 py-2 rounded-lg border text-xs text-left transition-all\",\n !createNewTable ? \"border-blue-500/40 bg-blue-500/10 text-blue-400\" : \"border-white/10 text-zinc-500 hover:bg-white/5\"\n )}\n onClick={() => setCreateNewTable(false)}\n >\n <Table2 strokeWidth={1.5} className=\"w-3.5 h-3.5 mb-1\" />\n Existing Table\n </button>\n <button\n className={cn(\n \"flex-1 px-3 py-2 rounded-lg border text-xs text-left transition-all\",\n createNewTable ? \"border-emerald-500/40 bg-emerald-500/10 text-emerald-400\" : \"border-white/10 text-zinc-500 hover:bg-white/5\"\n )}\n onClick={() => setCreateNewTable(true)}\n >\n <FileSpreadsheet strokeWidth={1.5} className=\"w-3.5 h-3.5 mb-1\" />\n New Table\n </button>\n </div>\n </div>\n\n {createNewTable ? (\n <div>\n <label className=\"text-xs text-zinc-400\">New Table Name</label>\n <Input\n value={newTableName}\n onChange={(e) => setNewTableName(e.target.value)}\n placeholder=\"imported_data\"\n className=\"mt-1 bg-[#111] border-white/10 text-xs h-9\"\n />\n </div>\n ) : (\n <div>\n <label className=\"text-xs text-zinc-400\">Select Table</label>\n <select\n value={targetTable}\n onChange={(e) => setTargetTable(e.target.value)}\n className=\"w-full mt-1 bg-[#111] border border-white/10 rounded-md px-3 py-2 text-xs text-zinc-300 outline-none focus:border-blue-500/40\"\n >\n <option value=\"\">-- Select a table --</option>\n {tables.map(t => (\n <option key={t.name} value={t.name}>{t.name}</option>\n ))}\n </select>\n </div>\n )}\n\n {/* Column Mapping */}\n <div className=\"space-y-2\">\n <label className=\"text-xs text-zinc-400 font-medium\">Column Mapping</label>\n <div className=\"border border-white/5 rounded-lg overflow-hidden\">\n <div className=\"bg-[#0d0d0d] grid grid-cols-[1fr,auto,1fr] gap-2 px-3 py-1.5 text-xs text-zinc-500 border-b border-white/5\">\n <span>Source Column</span>\n <span></span>\n <span>Target Column</span>\n </div>\n <div className=\"max-h-40 overflow-auto\">\n {parsedData.headers.map(header => (\n <div key={header} className=\"grid grid-cols-[1fr,auto,1fr] gap-2 items-center px-3 py-1.5 border-b border-white/5\">\n <span className=\"text-xs text-zinc-300 font-mono truncate\">{header}</span>\n <ArrowRight strokeWidth={1.5} className=\"w-3 h-3 text-zinc-600\" />\n <Input\n value={columnMapping[header] || ''}\n onChange={(e) => setColumnMapping(prev => ({ ...prev, [header]: e.target.value }))}\n className=\"h-7 text-xs bg-[#111] border-white/10\"\n placeholder={header}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n\n <div className=\"flex justify-between\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 text-xs text-zinc-500\"\n onClick={() => setStep('preview')}\n >\n Back\n </Button>\n <Button\n size=\"sm\"\n className=\"bg-blue-600 hover:bg-blue-500 h-8 text-xs gap-1\"\n onClick={() => setStep('ready')}\n disabled={!createNewTable && !targetTable}\n >\n Review SQL <ArrowRight strokeWidth={1.5} className=\"w-3 h-3\" />\n </Button>\n </div>\n </div>\n )}\n\n {/* Step 4: Ready / Review */}\n {step === 'ready' && (\n <div className=\"p-4 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-xs font-medium\">Ready to Import</p>\n <p className=\"text-xs text-zinc-500 mt-0.5\">\n {parsedData?.totalRows} rows into {createNewTable ? newTableName || 'imported_data' : targetTable}\n </p>\n </div>\n {databaseType && (\n <span className=\"text-xs text-zinc-500 bg-white/5 px-2 py-1 rounded\">\n {databaseType}\n </span>\n )}\n </div>\n\n {/* SQL Preview */}\n <div className=\"border border-white/5 rounded-lg bg-[#0d0d0d] overflow-auto max-h-60\">\n <pre className=\"p-3 text-xs text-zinc-400 font-mono whitespace-pre-wrap\">\n {generatedSQL.substring(0, 3000)}\n {generatedSQL.length > 3000 && '\\n\\n... (truncated for preview)'}\n </pre>\n </div>\n\n <div className=\"flex justify-between\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 text-xs text-zinc-500\"\n onClick={() => setStep('configure')}\n >\n Back\n </Button>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 text-xs border-white/10\"\n onClick={() => {\n navigator.clipboard.writeText(generatedSQL);\n }}\n >\n Copy SQL\n </Button>\n <Button\n size=\"sm\"\n className=\"bg-emerald-600 hover:bg-emerald-500 h-8 text-xs gap-1\"\n onClick={handleImport}\n disabled={isImporting}\n >\n {isImporting ? (\n <><Loader2 strokeWidth={1.5} className=\"w-3 h-3 animate-spin\" /> Importing...</>\n ) : (\n <><Upload strokeWidth={1.5} className=\"w-3 h-3\" /> Execute Import</>\n )}\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { \n Dialog, DialogContent, DialogHeader, \n DialogTitle, DialogFooter, DialogDescription \n} from './ui/dialog';\nimport { Button } from './ui/button';\nimport { Input } from './ui/input';\nimport { Label } from './ui/label';\nimport { Textarea } from './ui/textarea';\nimport { Bookmark, Tag } from 'lucide-react';\n\ninterface SaveQueryModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSave: (name: string, description: string, tags: string[]) => void;\n defaultQuery: string;\n}\n\nexport function SaveQueryModal({ isOpen, onClose, onSave, defaultQuery }: SaveQueryModalProps) {\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [tagsInput, setTagsInput] = useState('');\n\n const handleSave = () => {\n if (!name) return;\n const tags = tagsInput.split(',').map(t => t.trim()).filter(t => t);\n onSave(name, description, tags);\n setName('');\n setDescription('');\n setTagsInput('');\n onClose();\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent className=\"bg-[#0d0d0d] border-white/10 text-zinc-300 sm:max-w-[425px]\">\n <DialogHeader>\n <DialogTitle className=\"text-white flex items-center gap-2\">\n <Bookmark strokeWidth={1.5} className=\"w-5 h-5 text-blue-500\" /> Save Query\n </DialogTitle>\n <DialogDescription className=\"text-zinc-500\">\n Give your query a name and description to find it easily later.\n </DialogDescription>\n </DialogHeader>\n \n <div className=\"grid gap-4 py-4\">\n <div className=\"grid gap-2\">\n <Label htmlFor=\"name\" className=\"text-xs font-medium text-zinc-500\">Name</Label>\n <Input\n id=\"name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"e.g. Monthly Active Users\"\n className=\"bg-white/5 border-white/10 focus:ring-blue-500/20\"\n />\n </div>\n <div className=\"grid gap-2\">\n <Label htmlFor=\"description\" className=\"text-xs font-medium text-zinc-500\">Description</Label>\n <Textarea\n id=\"description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"What does this query do?\"\n className=\"bg-white/5 border-white/10 focus:ring-blue-500/20 min-h-[80px]\"\n />\n </div>\n <div className=\"grid gap-2\">\n <Label htmlFor=\"tags\" className=\"text-xs font-medium text-zinc-500 flex items-center gap-2\">\n <Tag strokeWidth={1.5} className=\"w-3 h-3\" /> Tags (comma separated)\n </Label>\n <Input\n id=\"tags\"\n value={tagsInput}\n onChange={(e) => setTagsInput(e.target.value)}\n placeholder=\"reports, analytics, users\"\n className=\"bg-white/5 border-white/10 focus:ring-blue-500/20\"\n />\n </div>\n <div className=\"mt-2\">\n <Label className=\"text-xs font-medium text-zinc-500 mb-2 block\">Preview</Label>\n <div className=\"bg-[#050505] p-3 rounded-md border border-white/5 max-h-[100px] overflow-y-auto\">\n <pre className=\"text-xs font-mono text-zinc-500 italic whitespace-pre-wrap break-words\">\n {defaultQuery}\n </pre>\n </div>\n </div>\n </div>\n\n <DialogFooter>\n <Button variant=\"ghost\" onClick={onClose} className=\"text-zinc-400\">Cancel</Button>\n <Button \n onClick={handleSave} \n disabled={!name}\n className=\"bg-blue-600 hover:bg-blue-500 text-white font-medium\"\n >\n Save Query\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","'use client';\n\nimport React, { type Dispatch, type SetStateAction } from 'react';\nimport type { QueryTab } from '@/lib/types';\nimport { cn } from '@/lib/utils';\nimport { FileJson, Hash, Plus, X } from 'lucide-react';\n\ninterface StudioTabBarProps {\n tabs: QueryTab[];\n activeTabId: string;\n editingTabId: string | null;\n editingTabName: string;\n onSetActiveTabId: (id: string) => void;\n onSetEditingTabId: (id: string | null) => void;\n onSetEditingTabName: (name: string) => void;\n onSetTabs: Dispatch<SetStateAction<QueryTab[]>>;\n onCloseTab: (id: string, e: React.MouseEvent) => void;\n onAddTab: () => void;\n}\n\nexport function StudioTabBar({\n tabs,\n activeTabId,\n editingTabId,\n editingTabName,\n onSetActiveTabId,\n onSetEditingTabId,\n onSetEditingTabName,\n onSetTabs,\n onCloseTab,\n onAddTab,\n}: StudioTabBarProps) {\n return (\n <div className=\"hidden md:flex h-10 bg-[#0d0d0d] border-b border-white/5 items-center px-2 gap-1 overflow-x-auto no-scrollbar\">\n {tabs.map(tab => (\n <div\n key={tab.id}\n onClick={() => onSetActiveTabId(tab.id)}\n onDoubleClick={() => {\n onSetEditingTabId(tab.id);\n onSetEditingTabName(tab.name);\n }}\n className={cn(\n \"h-8 flex items-center px-3 gap-2 rounded-t-md transition-all cursor-pointer min-w-[120px] max-w-[200px] group relative border-t-2\",\n activeTabId === tab.id ? \"bg-[#141414] text-zinc-100 border-blue-500\" : \"text-zinc-500 hover:bg-white/5 border-transparent\"\n )}\n >\n {tab.type === 'sql' ? <Hash strokeWidth={1.5} className=\"w-3 h-3\" /> : <FileJson strokeWidth={1.5} className=\"w-3 h-3\" />}\n {editingTabId === tab.id ? (\n <input\n autoFocus\n value={editingTabName}\n onChange={(e) => onSetEditingTabName(e.target.value)}\n onBlur={() => {\n if (editingTabName.trim()) {\n onSetTabs(prev => prev.map(t => t.id === tab.id ? { ...t, name: editingTabName.trim() } : t));\n }\n onSetEditingTabId(null);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n if (editingTabName.trim()) {\n onSetTabs(prev => prev.map(t => t.id === tab.id ? { ...t, name: editingTabName.trim() } : t));\n }\n onSetEditingTabId(null);\n } else if (e.key === 'Escape') {\n onSetEditingTabId(null);\n }\n }}\n onClick={(e) => e.stopPropagation()}\n className=\"text-xs font-medium bg-transparent border-b border-blue-500 outline-none w-full text-zinc-100\"\n />\n ) : (\n <span className=\"text-xs truncate font-medium\">{tab.name}</span>\n )}\n {tabs.length > 1 && <X strokeWidth={1.5} className=\"w-3 h-3 ml-auto opacity-0 group-hover:opacity-100 hover:text-white shrink-0\" onClick={(e) => onCloseTab(tab.id, e)} />}\n </div>\n ))}\n <Plus strokeWidth={1.5} className=\"w-3.5 h-3.5 text-zinc-500 cursor-pointer hover:text-white mx-2\" onClick={onAddTab} />\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport type { DatabaseConnection } from '@/lib/types';\nimport type { ProviderMetadata } from '@/hooks/use-provider-metadata';\nimport { cn } from '@/lib/utils';\nimport { FlaskConical, Pencil, Play, Save, Square, Terminal, Upload } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\n\ninterface QueryToolbarProps {\n activeConnection: DatabaseConnection | null;\n metadata: ProviderMetadata | null;\n isExecuting: boolean;\n playgroundMode: boolean;\n transactionActive: boolean;\n editingEnabled: boolean;\n onSaveQuery: () => void;\n onExecuteQuery: () => void;\n onCancelQuery: () => void;\n onBeginTransaction: () => void;\n onCommitTransaction: () => void;\n onRollbackTransaction: () => void;\n onTogglePlayground: () => void;\n onToggleEditing: () => void;\n onImport: () => void;\n}\n\nexport function QueryToolbar({\n activeConnection,\n metadata,\n isExecuting,\n playgroundMode,\n transactionActive,\n editingEnabled,\n onSaveQuery,\n onExecuteQuery,\n onCancelQuery,\n onBeginTransaction,\n onCommitTransaction,\n onRollbackTransaction,\n onTogglePlayground,\n onToggleEditing,\n onImport,\n}: QueryToolbarProps) {\n return (\n <>\n {/* Playground Mode Banner */}\n {playgroundMode && (\n <div className=\"hidden md:flex items-center justify-center gap-2 px-4 py-1 bg-emerald-500/10 border-b border-emerald-500/20 text-emerald-400\">\n <FlaskConical strokeWidth={1.5} className=\"w-3 h-3\" />\n <span className=\"text-xs font-mediumr\">\n Sandbox Mode — All changes will be auto-rolled back\n </span>\n </div>\n )}\n\n {/* Desktop Query Toolbar */}\n <div className=\"hidden md:flex items-center justify-between px-4 py-1.5 bg-[#0a0a0a] border-b border-white/5\">\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center gap-2 px-2 py-0.5 rounded bg-blue-500/5 border border-blue-500/10\">\n <Terminal strokeWidth={1.5} className=\"w-3 h-3 text-blue-400\" />\n <span className=\"text-xs font-medium text-blue-400\">Query</span>\n </div>\n <div className=\"h-4 w-px bg-white/5\" />\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs font-medium text-zinc-500 hover:text-white gap-2\"\n onClick={onSaveQuery}\n >\n <Save strokeWidth={1.5} className=\"w-3 h-3\" /> Save\n </Button>\n </div>\n {isExecuting ? (\n <Button\n size=\"sm\"\n className=\"bg-red-600 hover:bg-red-500 text-white font-medium text-xs h-7 px-4 gap-2\"\n onClick={onCancelQuery}\n >\n <Square strokeWidth={1.5} className=\"w-3 h-3 fill-current\" />\n CANCEL\n </Button>\n ) : (\n <Button\n size=\"sm\"\n className=\"bg-blue-600 hover:bg-blue-500 text-white font-medium text-xs h-7 px-4 gap-2\"\n onClick={onExecuteQuery}\n disabled={!activeConnection}\n >\n <Play strokeWidth={1.5} className=\"w-3 h-3 fill-current\" />\n RUN\n </Button>\n )}\n\n {/* Transaction Controls + Playground + Import + Edit */}\n {activeConnection && metadata?.capabilities.queryLanguage === 'sql' && (\n <div className=\"flex items-center gap-1 ml-2 pl-2 border-l border-white/10\">\n {transactionActive ? (\n <>\n <span className=\"text-[0.625rem] font-medium text-amber-400 px-1.5 py-0.5 bg-amber-500/10 rounded border border-amber-500/20 mr-1\">\n TXN\n </span>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-7 text-xs font-medium text-emerald-400 hover:text-emerald-300 hover:bg-emerald-500/10 gap-1\"\n onClick={onCommitTransaction}\n >\n COMMIT\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-7 text-xs font-medium text-red-400 hover:text-red-300 hover:bg-red-500/10 gap-1\"\n onClick={onRollbackTransaction}\n >\n ROLLBACK\n </Button>\n </>\n ) : (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-7 text-xs font-medium text-zinc-500 hover:text-white gap-1\"\n onClick={onBeginTransaction}\n disabled={playgroundMode}\n >\n BEGIN\n </Button>\n )}\n\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className={cn(\n \"h-7 text-xs font-medium gap-1\",\n playgroundMode\n ? \"text-emerald-400 bg-emerald-500/10 hover:bg-emerald-500/20\"\n : \"text-zinc-500 hover:text-white\"\n )}\n onClick={onTogglePlayground}\n disabled={transactionActive}\n title=\"Playground mode: queries are auto-rolled back\"\n >\n <FlaskConical strokeWidth={1.5} className=\"w-3 h-3\" />\n SANDBOX\n </Button>\n\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className={cn(\n \"h-7 text-xs font-medium gap-1\",\n editingEnabled\n ? \"text-amber-400 bg-amber-500/10 hover:bg-amber-500/20\"\n : \"text-zinc-500 hover:text-white\"\n )}\n onClick={onToggleEditing}\n title=\"Enable inline data editing\"\n >\n <Pencil strokeWidth={1.5} className=\"w-3 h-3\" />\n EDIT\n </Button>\n\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-7 text-xs font-medium text-zinc-500 hover:text-white gap-1\"\n onClick={onImport}\n title=\"Import data from CSV/JSON\"\n >\n <Upload strokeWidth={1.5} className=\"w-3 h-3\" />\n IMPORT\n </Button>\n </div>\n )}\n </div>\n </>\n );\n}\n","\"use client\";\n\nimport React, { useState, useRef } from 'react';\nimport { Loader2, Sparkles, RefreshCw, Play, Copy, Check } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { DatabaseConnection } from '@/lib/types';\n\ninterface AIAutopilotPanelProps {\n connection: DatabaseConnection | null;\n schemaContext: string;\n onExecuteQuery?: (query: string) => void;\n}\n\nexport function AIAutopilotPanel({ connection, schemaContext, onExecuteQuery }: AIAutopilotPanelProps) {\n const [isLoading, setIsLoading] = useState(false);\n const [report, setReport] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [copiedIndex, setCopiedIndex] = useState<number | null>(null);\n const reportRef = useRef<HTMLDivElement>(null);\n\n const runAutopilot = async () => {\n if (!connection) return;\n setIsLoading(true);\n setError(null);\n setReport('');\n\n try {\n // Fetch monitoring data in parallel\n const [monitoringRes] = await Promise.all([\n fetch('/api/db/monitoring', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n connection,\n options: {\n includeTables: true,\n includeIndexes: true,\n slowQueryLimit: 20,\n },\n }),\n }),\n ]);\n\n let monitoringData = null;\n if (monitoringRes.ok) {\n monitoringData = await monitoringRes.json();\n }\n\n // Build filtered schema\n let filteredSchema = '';\n if (schemaContext) {\n try {\n const tables = JSON.parse(schemaContext);\n filteredSchema = tables.slice(0, 30).map((t: { name: string; rowCount?: number; columns?: { name: string; type: string }[] }) => {\n const cols = t.columns?.slice(0, 6).map(c => `${c.name} (${c.type})`).join(', ') || '';\n return `${t.name} (${t.rowCount || 0} rows): ${cols}`;\n }).join('\\n');\n } catch {\n filteredSchema = schemaContext.substring(0, 2000);\n }\n }\n\n // Call autopilot AI\n const response = await fetch('/api/ai/autopilot', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n slowQueries: monitoringData?.slowQueries,\n indexStats: monitoringData?.indexes,\n tableStats: monitoringData?.tables,\n performanceMetrics: monitoringData?.performance,\n overview: monitoringData?.overview,\n schemaContext: filteredSchema,\n databaseType: connection.type,\n }),\n });\n\n if (!response.ok) {\n const errData = await response.json();\n throw new Error(errData.error || 'Autopilot analysis failed');\n }\n\n const reader = response.body?.getReader();\n if (!reader) throw new Error('No reader');\n\n let fullResponse = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n fullResponse += new TextDecoder().decode(value);\n setReport(fullResponse);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n };\n\n const copyToClipboard = (text: string, index: number) => {\n navigator.clipboard.writeText(text);\n setCopiedIndex(index);\n setTimeout(() => setCopiedIndex(null), 2000);\n };\n\n // Simple markdown rendering (headers, bold, lists)\n const renderMarkdown = (text: string) => {\n const lines = text.split('\\n');\n const elements: React.ReactNode[] = [];\n let inCodeBlock = false;\n let codeContent = '';\n let codeBlockIdx = 0;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.startsWith('```')) {\n if (inCodeBlock) {\n // End of code block\n const blockIndex = codeBlockIdx++;\n const sql = codeContent.trim();\n elements.push(\n <div key={`code-${i}`} className=\"relative group my-2\">\n <pre className=\"bg-[#050505] rounded-lg p-3 text-xs font-mono text-blue-300 overflow-x-auto whitespace-pre-wrap border border-white/5\">\n {sql}\n </pre>\n <div className=\"absolute top-1.5 right-1.5 flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n onClick={() => copyToClipboard(sql, blockIndex)}\n className=\"p-1 rounded bg-white/10 hover:bg-white/20 text-zinc-400\"\n title=\"Copy\"\n >\n {copiedIndex === blockIndex ? <Check strokeWidth={1.5} className=\"w-3 h-3 text-emerald-400\" /> : <Copy strokeWidth={1.5} className=\"w-3 h-3\" />}\n </button>\n {onExecuteQuery && (\n <button\n onClick={() => onExecuteQuery(sql)}\n className=\"p-1 rounded bg-blue-600/20 hover:bg-blue-600/30 text-blue-400\"\n title=\"Execute\"\n >\n <Play strokeWidth={1.5} className=\"w-3 h-3 fill-current\" />\n </button>\n )}\n </div>\n </div>\n );\n codeContent = '';\n inCodeBlock = false;\n } else {\n inCodeBlock = true;\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeContent += line + '\\n';\n continue;\n }\n\n // Headers\n if (line.startsWith('## ')) {\n elements.push(<h2 key={i} className=\"text-xs font-medium text-zinc-200 mt-4 mb-2\">{line.slice(3)}</h2>);\n } else if (line.startsWith('### ')) {\n elements.push(<h3 key={i} className=\"text-xs font-medium text-zinc-300 mt-3 mb-1\">{line.slice(4)}</h3>);\n } else if (line.startsWith('- ')) {\n const content = line.slice(2).replace(/\\*\\*(.*?)\\*\\*/g, '<strong class=\"text-zinc-200\">$1</strong>');\n elements.push(<li key={i} className=\"text-xs text-zinc-400 ml-4 leading-relaxed\" dangerouslySetInnerHTML={{ __html: content }} />);\n } else if (line.match(/^\\d+\\.\\s/)) {\n const content = line.replace(/\\*\\*(.*?)\\*\\*/g, '<strong class=\"text-zinc-200\">$1</strong>');\n elements.push(<li key={i} className=\"text-xs text-zinc-400 ml-4 leading-relaxed list-decimal\" dangerouslySetInnerHTML={{ __html: content }} />);\n } else if (line.trim()) {\n const content = line.replace(/\\*\\*(.*?)\\*\\*/g, '<strong class=\"text-zinc-200\">$1</strong>');\n elements.push(<p key={i} className=\"text-xs text-zinc-400 leading-relaxed\" dangerouslySetInnerHTML={{ __html: content }} />);\n } else {\n elements.push(<div key={i} className=\"h-2\" />);\n }\n }\n\n return elements;\n };\n\n return (\n <div className=\"h-full flex flex-col bg-[#080808]\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-white/5 bg-[#0a0a0a]\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-1 rounded bg-cyan-500/10\">\n <Sparkles strokeWidth={1.5} className=\"w-3 h-3 text-cyan-400\" />\n </div>\n <span className=\"text-xs font-medium text-cyan-400\">\n AI Performance Autopilot\n </span>\n </div>\n <button\n onClick={runAutopilot}\n disabled={isLoading || !connection}\n className={cn(\n \"flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium transition-colors\",\n isLoading\n ? \"bg-cyan-600/20 text-cyan-400 cursor-wait\"\n : \"bg-cyan-600 hover:bg-cyan-500 text-white\"\n )}\n >\n {isLoading ? (\n <><Loader2 strokeWidth={1.5} className=\"w-3 h-3 animate-spin\" /> Analyzing...</>\n ) : (\n <><RefreshCw strokeWidth={1.5} className=\"w-3 h-3\" /> {report ? 'Re-analyze' : 'Run Analysis'}</>\n )}\n </button>\n </div>\n\n {/* Content */}\n <div ref={reportRef} className=\"flex-1 overflow-auto p-4\">\n {!report && !isLoading && !error && (\n <div className=\"flex flex-col items-center justify-center h-full opacity-40\">\n <Sparkles strokeWidth={1.5} className=\"w-8 h-8 mb-3\" />\n <p className=\"text-xs font-medium\">AI Performance Autopilot</p>\n <p className=\"text-xs text-zinc-500 mt-1\">\n Click "Run Analysis" to get AI-powered optimization recommendations\n </p>\n </div>\n )}\n\n {error && (\n <div className=\"bg-red-500/10 border border-red-500/20 rounded-lg p-3 text-xs text-red-400\">\n {error}\n </div>\n )}\n\n {report && (\n <div className=\"prose prose-invert prose-xs max-w-none\">\n {renderMarkdown(report)}\n </div>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useMemo, useCallback, useEffect } from 'react';\nimport { Columns3, GripVertical, ArrowRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { QueryResult } from '@/lib/types';\n\ninterface PivotTableProps {\n result: QueryResult | null;\n onLoadQuery?: (query: string) => void;\n}\n\ntype AggFunction = 'count' | 'sum' | 'avg' | 'min' | 'max';\n\nconst AGG_LABELS: Record<AggFunction, string> = {\n count: 'COUNT',\n sum: 'SUM',\n avg: 'AVG',\n min: 'MIN',\n max: 'MAX',\n};\n\nexport function aggregate(values: unknown[], fn: AggFunction): string {\n const nums = values.map(v => Number(v)).filter(n => !isNaN(n));\n\n switch (fn) {\n case 'count': return String(values.length);\n case 'sum': return nums.length ? nums.reduce((a, b) => a + b, 0).toFixed(2) : '0';\n case 'avg': return nums.length ? (nums.reduce((a, b) => a + b, 0) / nums.length).toFixed(2) : '0';\n case 'min': return nums.length ? String(Math.min(...nums)) : '-';\n case 'max': return nums.length ? String(Math.max(...nums)) : '-';\n }\n}\n\nexport function PivotTable({ result, onLoadQuery }: PivotTableProps) {\n const [rowField, setRowField] = useState<string | null>(null);\n const [colField, setColField] = useState<string | null>(null);\n const [valueField, setValueField] = useState<string | null>(null);\n const [aggFunction, setAggFunction] = useState<AggFunction>('count');\n const fields = result?.fields || [];\n const rows = useMemo(() => result?.rows || [], [result?.rows]);\n\n // Auto-detect fields on first render\n useEffect(() => {\n if (fields.length >= 2 && !rowField) {\n const strCol = fields.find(f => {\n const sample = rows[0]?.[f];\n return typeof sample === 'string';\n });\n if (strCol) setRowField(strCol);\n\n const numCol = fields.find(f => {\n const sample = rows[0]?.[f];\n return typeof sample === 'number';\n });\n if (numCol) setValueField(numCol);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fields.length]);\n\n // Compute pivot data\n const pivotData = useMemo(() => {\n if (!rowField || !rows.length) return null;\n\n // Group rows\n const groups = new Map<string, Map<string, unknown[]>>();\n const colValues = new Set<string>();\n\n for (const row of rows) {\n const rowKey = String(row[rowField] ?? 'NULL');\n const colKey = colField ? String(row[colField] ?? 'NULL') : '__all__';\n const value = valueField ? row[valueField] : 1;\n\n if (colField) colValues.add(colKey);\n\n if (!groups.has(rowKey)) groups.set(rowKey, new Map());\n const colMap = groups.get(rowKey)!;\n if (!colMap.has(colKey)) colMap.set(colKey, []);\n colMap.get(colKey)!.push(value);\n }\n\n const colKeys = colField ? Array.from(colValues).sort() : ['__all__'];\n\n // Build pivot rows\n const pivotRows: { rowKey: string; values: Map<string, string> }[] = [];\n for (const [rowKey, colMap] of groups) {\n const values = new Map<string, string>();\n for (const ck of colKeys) {\n const vals = colMap.get(ck) || [];\n values.set(ck, aggregate(vals, aggFunction));\n }\n pivotRows.push({ rowKey, values });\n }\n\n // Sort by row key\n pivotRows.sort((a, b) => a.rowKey.localeCompare(b.rowKey));\n\n return { colKeys, pivotRows };\n }, [rows, rowField, colField, valueField, aggFunction]);\n\n // Generate SQL\n const generateSQL = useCallback(() => {\n if (!rowField) return '';\n const select: string[] = [`\"${rowField}\"`];\n const groupBy: string[] = [`\"${rowField}\"`];\n\n if (colField) {\n // Use CASE WHEN for pivot columns\n const colKeys = pivotData?.colKeys || [];\n for (const ck of colKeys) {\n if (ck === '__all__') continue;\n const valExpr = valueField ? `\"${valueField}\"` : '1';\n select.push(\n `${AGG_LABELS[aggFunction]}(CASE WHEN \"${colField}\" = '${ck.replace(/'/g, \"''\")}' THEN ${valExpr} END) AS \"${ck}\"`\n );\n }\n } else {\n const valExpr = valueField ? `\"${valueField}\"` : '*';\n select.push(`${AGG_LABELS[aggFunction]}(${valExpr}) AS \"${aggFunction}_value\"`);\n }\n\n return `SELECT\\n ${select.join(',\\n ')}\\nFROM your_table\\nGROUP BY ${groupBy.join(', ')}\\nORDER BY ${groupBy.join(', ')};`;\n }, [rowField, colField, valueField, aggFunction, pivotData]);\n\n if (!result || rows.length === 0) {\n return (\n <div className=\"h-full flex flex-col items-center justify-center opacity-30\">\n <Columns3 strokeWidth={1.5} className=\"w-8 h-8 mb-3\" />\n <p className=\"text-xs font-medium\">Pivot Table</p>\n <p className=\"text-xs text-zinc-500 mt-1\">Execute a query to create pivot tables</p>\n </div>\n );\n }\n\n return (\n <div className=\"h-full flex flex-col bg-[#080808]\">\n {/* Config Bar */}\n <div className=\"flex items-center gap-3 px-4 py-2 border-b border-white/5 bg-[#0a0a0a] flex-wrap\">\n {/* Row Field */}\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-xs text-zinc-500 font-medium\">Rows:</span>\n <select\n value={rowField || ''}\n onChange={e => setRowField(e.target.value || null)}\n className=\"bg-[#111] border border-white/10 rounded px-2 py-1 text-xs text-zinc-300 outline-none\"\n >\n <option value=\"\">Select...</option>\n {fields.map(f => <option key={f} value={f}>{f}</option>)}\n </select>\n </div>\n\n {/* Column Field */}\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-xs text-zinc-500 font-medium\">Columns:</span>\n <select\n value={colField || ''}\n onChange={e => setColField(e.target.value || null)}\n className=\"bg-[#111] border border-white/10 rounded px-2 py-1 text-xs text-zinc-300 outline-none\"\n >\n <option value=\"\">None</option>\n {fields.filter(f => f !== rowField).map(f => <option key={f} value={f}>{f}</option>)}\n </select>\n </div>\n\n {/* Value Field */}\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-xs text-zinc-500 font-medium\">Values:</span>\n <select\n value={valueField || ''}\n onChange={e => setValueField(e.target.value || null)}\n className=\"bg-[#111] border border-white/10 rounded px-2 py-1 text-xs text-zinc-300 outline-none\"\n >\n <option value=\"\">Count</option>\n {fields.filter(f => f !== rowField && f !== colField).map(f => <option key={f} value={f}>{f}</option>)}\n </select>\n </div>\n\n {/* Aggregation */}\n <div className=\"flex items-center gap-1\">\n {(Object.keys(AGG_LABELS) as AggFunction[]).map(fn => (\n <button\n key={fn}\n onClick={() => setAggFunction(fn)}\n className={cn(\n \"px-1.5 py-0.5 rounded text-xs font-medium transition-colors\",\n aggFunction === fn\n ? \"bg-blue-500/20 text-blue-400 border border-blue-500/20\"\n : \"text-zinc-600 hover:text-zinc-400\"\n )}\n >\n {AGG_LABELS[fn]}\n </button>\n ))}\n </div>\n\n {/* Generate SQL Button */}\n {onLoadQuery && rowField && (\n <button\n onClick={() => {\n const sql = generateSQL();\n if (sql) onLoadQuery(sql);\n }}\n className=\"ml-auto flex items-center gap-1 px-2 py-1 rounded text-xs font-medium text-zinc-500 hover:text-blue-400 hover:bg-blue-500/10 transition-colors\"\n >\n <ArrowRight strokeWidth={1.5} className=\"w-3 h-3\" /> Generate SQL\n </button>\n )}\n </div>\n\n {/* Pivot Result */}\n <div className=\"flex-1 overflow-auto\">\n {pivotData && pivotData.pivotRows.length > 0 ? (\n <table className=\"w-full text-xs font-mono\">\n <thead className=\"sticky top-0 z-10 bg-[#0d0d0d]\">\n <tr>\n <th className=\"text-left px-3 py-2 text-zinc-500 border-b border-r border-white/5 font-mediumr\">\n {rowField}\n </th>\n {pivotData.colKeys.map(ck => (\n <th key={ck} className=\"text-right px-3 py-2 text-zinc-500 border-b border-r border-white/5 font-medium\">\n {ck === '__all__' ? `${AGG_LABELS[aggFunction]}(${valueField || '*'})` : ck}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {pivotData.pivotRows.map((row, i) => (\n <tr key={i} className=\"hover:bg-blue-500/[0.03] border-b border-white/5\">\n <td className=\"px-3 py-1.5 text-zinc-300 border-r border-white/5 font-medium\">\n {row.rowKey}\n </td>\n {pivotData.colKeys.map(ck => (\n <td key={ck} className=\"px-3 py-1.5 text-right text-amber-500/90 border-r border-white/5\">\n {row.values.get(ck) || '0'}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n ) : (\n <div className=\"flex flex-col items-center justify-center h-full opacity-30\">\n <GripVertical strokeWidth={1.5} className=\"w-6 h-6 mb-2\" />\n <p className=\"text-xs\">Select row and value fields to build pivot</p>\n </div>\n )}\n </div>\n\n {/* Status */}\n {pivotData && (\n <div className=\"px-4 py-1.5 border-t border-white/5 bg-[#0a0a0a] text-xs text-zinc-500 font-mono\">\n {pivotData.pivotRows.length} groups • {pivotData.colKeys.length} columns • {AGG_LABELS[aggFunction]} aggregation\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState } from 'react';\nimport { FileText, Loader2, Search, Sparkles, Download } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { TableSchema } from '@/lib/types';\n\ninterface DatabaseDocsProps {\n schema: TableSchema[];\n schemaContext: string;\n databaseType?: string;\n}\n\nexport function DatabaseDocs({ schema, schemaContext, databaseType }: DatabaseDocsProps) {\n const [search, setSearch] = useState('');\n const [aiDocs, setAiDocs] = useState('');\n const [isAiLoading, setIsAiLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const filteredSchema = schema.filter(t =>\n t.name.toLowerCase().includes(search.toLowerCase()) ||\n t.columns?.some(c => c.name.toLowerCase().includes(search.toLowerCase()))\n );\n\n const generateAiDocs = async () => {\n setIsAiLoading(true);\n setError(null);\n setAiDocs('');\n\n try {\n let filteredSchemaStr = '';\n if (schemaContext) {\n try {\n const tables = JSON.parse(schemaContext);\n filteredSchemaStr = tables.slice(0, 50).map((t: { name: string; rowCount?: number; columns?: { name: string; type: string; isPrimary?: boolean; isNullable?: boolean }[] }) => {\n const cols = t.columns?.map(c =>\n `${c.name} (${c.type}${c.isPrimary ? ', PK' : ''}${c.isNullable === false ? ', NOT NULL' : ''})`\n ).join(', ') || '';\n return `Table: ${t.name} (${t.rowCount || 0} rows)\\nColumns: ${cols}`;\n }).join('\\n\\n');\n } catch {\n filteredSchemaStr = schemaContext.substring(0, 5000);\n }\n }\n\n const response = await fetch('/api/ai/describe-schema', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n schemaContext: filteredSchemaStr,\n databaseType,\n mode: 'full',\n }),\n });\n\n if (!response.ok) {\n const err = await response.json();\n throw new Error(err.error || 'Documentation generation failed');\n }\n\n const reader = response.body?.getReader();\n if (!reader) throw new Error('No reader');\n\n let full = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n full += new TextDecoder().decode(value);\n setAiDocs(full);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsAiLoading(false);\n }\n };\n\n const exportMarkdown = () => {\n let md = `# Database Documentation\\n\\n`;\n md += `**Type:** ${databaseType || 'Unknown'}\\n`;\n md += `**Tables:** ${schema.length}\\n\\n`;\n\n if (aiDocs) {\n md += `## AI Analysis\\n\\n${aiDocs}\\n\\n---\\n\\n`;\n }\n\n md += `## Table Reference\\n\\n`;\n\n for (const table of schema) {\n md += `### ${table.name}\\n\\n`;\n if (table.rowCount !== undefined) md += `Rows: ${table.rowCount.toLocaleString()}\\n\\n`;\n\n if (table.columns && table.columns.length > 0) {\n md += `| Column | Type | Primary | Nullable |\\n|--------|------|---------|----------|\\n`;\n for (const col of table.columns) {\n md += `| ${col.name} | ${col.type} | ${col.isPrimary ? 'Yes' : ''} | ${col.nullable !== false ? 'Yes' : 'No'} |\\n`;\n }\n md += '\\n';\n }\n }\n\n const blob = new Blob([md], { type: 'text/markdown' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = 'database-docs.md';\n a.click();\n URL.revokeObjectURL(url);\n };\n\n // Simple markdown rendering for AI docs\n const renderMarkdown = (text: string) => {\n return text.split('\\n').map((line, i) => {\n if (line.startsWith('## ')) return <h2 key={i} className=\"text-xs font-medium text-zinc-200 mt-4 mb-2\">{line.slice(3)}</h2>;\n if (line.startsWith('### ')) return <h3 key={i} className=\"text-xs font-medium text-zinc-300 mt-3 mb-1\">{line.slice(4)}</h3>;\n if (line.startsWith('- ')) {\n const content = line.slice(2).replace(/\\*\\*(.*?)\\*\\*/g, '<strong class=\"text-zinc-200\">$1</strong>');\n return <li key={i} className=\"text-xs text-zinc-400 ml-4 leading-relaxed\" dangerouslySetInnerHTML={{ __html: content }} />;\n }\n if (line.match(/^\\d+\\.\\s/)) {\n const content = line.replace(/\\*\\*(.*?)\\*\\*/g, '<strong class=\"text-zinc-200\">$1</strong>');\n return <li key={i} className=\"text-xs text-zinc-400 ml-4 leading-relaxed list-decimal\" dangerouslySetInnerHTML={{ __html: content }} />;\n }\n if (line.trim()) {\n const content = line.replace(/\\*\\*(.*?)\\*\\*/g, '<strong class=\"text-zinc-200\">$1</strong>');\n return <p key={i} className=\"text-xs text-zinc-400 leading-relaxed\" dangerouslySetInnerHTML={{ __html: content }} />;\n }\n return <div key={i} className=\"h-1.5\" />;\n });\n };\n\n return (\n <div className=\"h-full flex flex-col bg-[#080808]\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-white/5 bg-[#0a0a0a]\">\n <div className=\"flex items-center gap-2\">\n <div className=\"p-1 rounded bg-teal-500/10\">\n <FileText strokeWidth={1.5} className=\"w-3 h-3 text-teal-400\" />\n </div>\n <span className=\"text-xs font-medium text-teal-400\">\n Database Docs\n </span>\n <span className=\"text-[0.625rem] text-zinc-500 font-mono\">{schema.length} tables</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <button\n onClick={generateAiDocs}\n disabled={isAiLoading}\n className={cn(\n \"flex items-center gap-1 px-2.5 py-1 rounded-lg text-xs font-medium transition-colors\",\n isAiLoading\n ? \"bg-teal-600/20 text-teal-400 cursor-wait\"\n : \"bg-teal-600 hover:bg-teal-500 text-white\"\n )}\n >\n {isAiLoading ? <Loader2 strokeWidth={1.5} className=\"w-3 h-3 animate-spin\" /> : <Sparkles strokeWidth={1.5} className=\"w-3 h-3\" />}\n {aiDocs ? 'Regenerate' : 'AI Describe'}\n </button>\n <button\n onClick={exportMarkdown}\n className=\"flex items-center gap-1 px-2.5 py-1 rounded-lg bg-white/5 text-zinc-400 text-xs font-medium hover:bg-white/10 transition-colors\"\n >\n <Download strokeWidth={1.5} className=\"w-3 h-3\" /> Export MD\n </button>\n </div>\n </div>\n\n {/* Search */}\n <div className=\"px-4 py-2 border-b border-white/5 bg-[#0a0a0a]\">\n <div className=\"relative\">\n <Search strokeWidth={1.5} className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-zinc-500\" />\n <input\n value={search}\n onChange={e => setSearch(e.target.value)}\n placeholder=\"Search tables or columns...\"\n className=\"w-full bg-[#111] border border-white/10 rounded-lg pl-7 pr-3 py-1.5 text-xs text-zinc-200 placeholder:text-zinc-600 outline-none focus:border-teal-500/30\"\n />\n </div>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-auto p-4 space-y-3\">\n {error && (\n <div className=\"bg-red-500/10 border border-red-500/20 rounded-lg p-3 text-xs text-red-400\">\n {error}\n </div>\n )}\n\n {/* AI Documentation Section */}\n {(aiDocs || isAiLoading) && (\n <div className=\"bg-teal-500/5 border border-teal-500/10 rounded-lg p-4 mb-4\">\n <div className=\"flex items-center gap-2 mb-3\">\n <Sparkles strokeWidth={1.5} className=\"w-3 h-3 text-teal-400\" />\n <span className=\"text-xs font-medium text-teal-400\">\n AI-Generated Documentation\n </span>\n {isAiLoading && <Loader2 strokeWidth={1.5} className=\"w-3 h-3 animate-spin text-teal-400\" />}\n </div>\n {aiDocs && (\n <div className=\"prose prose-invert prose-xs max-w-none\">\n {renderMarkdown(aiDocs)}\n </div>\n )}\n </div>\n )}\n\n {/* Table Reference */}\n <h3 className=\"text-xs font-medium text-zinc-400\">Table Reference</h3>\n {filteredSchema.map(table => (\n <div key={table.name} className=\"bg-[#0a0a0a] border border-white/5 rounded-lg overflow-hidden\">\n <div className=\"px-3 py-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-medium text-zinc-200\">{table.name}</span>\n {table.rowCount !== undefined && (\n <span className=\"text-xs text-zinc-500 font-mono\">{table.rowCount.toLocaleString()} rows</span>\n )}\n </div>\n <span className=\"text-xs text-zinc-600\">{table.columns?.length || 0} columns</span>\n </div>\n {table.columns && table.columns.length > 0 && (\n <div className=\"border-t border-white/5\">\n <table className=\"w-full text-xs\">\n <thead>\n <tr className=\"text-zinc-500\">\n <th className=\"text-left px-3 py-1 font-normal\">Column</th>\n <th className=\"text-left px-3 py-1 font-normal\">Type</th>\n <th className=\"text-left px-3 py-1 font-normal\">PK</th>\n <th className=\"text-left px-3 py-1 font-normal\">Nullable</th>\n </tr>\n </thead>\n <tbody>\n {table.columns.map(col => (\n <tr key={col.name} className=\"border-t border-white/[0.03] hover:bg-white/[0.02]\">\n <td className=\"px-3 py-1 text-zinc-300 font-mono\">{col.name}</td>\n <td className=\"px-3 py-1 text-zinc-500 font-mono\">{col.type}</td>\n <td className=\"px-3 py-1\">\n {col.isPrimary && <span className=\"text-amber-400 text-[0.625rem] font-medium\">PK</span>}\n </td>\n <td className=\"px-3 py-1 text-zinc-600\">{col.nullable !== false ? 'Yes' : 'No'}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useEffect, useMemo } from 'react';\nimport { storage } from '@/lib/storage';\nimport { QueryHistoryItem } from '@/lib/types';\nimport { \n CheckCircle2, AlertCircle, \n RotateCcw, Trash2, Search, Download,\n ArrowUpDown, Hash,\n Database, History as HistoryIcon, X\n} from 'lucide-react';\nimport { Button } from './ui/button';\nimport { Input } from './ui/input';\nimport { cn } from '@/lib/utils';\nimport { format } from 'date-fns';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\n\ninterface QueryHistoryProps {\n onSelectQuery: (query: string) => void;\n activeConnectionId?: string;\n refreshTrigger?: number;\n}\n\ntype SortField = 'executedAt' | 'executionTime' | 'rowCount';\ntype SortOrder = 'asc' | 'desc';\n\nexport function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }: QueryHistoryProps) {\n const [history, setHistory] = useState<QueryHistoryItem[]>([]);\n const [search, setSearch] = useState('');\n const [filterStatus, setFilterStatus] = useState<'all' | 'success' | 'error'>('all');\n const [isGlobal, setIsGlobal] = useState(false);\n const [sortField, setSortField] = useState<SortField>('executedAt');\n const [sortOrder, setSortOrder] = useState<SortOrder>('desc');\n\n // Refresh history when refreshTrigger changes (replaces key-based re-mount)\n useEffect(() => {\n setHistory(storage.getHistory());\n }, [refreshTrigger]);\n\n const filteredHistory = useMemo(() => {\n return history.filter(item => {\n const matchesSearch = item.query.toLowerCase().includes(search.toLowerCase()) || \n item.connectionName?.toLowerCase().includes(search.toLowerCase()) ||\n item.tabName?.toLowerCase().includes(search.toLowerCase());\n const matchesStatus = filterStatus === 'all' || item.status === filterStatus;\n const matchesConnection = isGlobal || !activeConnectionId || item.connectionId === activeConnectionId;\n return matchesSearch && matchesStatus && matchesConnection;\n }).sort((a, b) => {\n let valA: number = 0;\n let valB: number = 0;\n \n if (sortField === 'executedAt') {\n valA = a.executedAt ? new Date(a.executedAt).getTime() : 0;\n valB = b.executedAt ? new Date(b.executedAt).getTime() : 0;\n } else {\n valA = (a[sortField] as number) || 0;\n valB = (b[sortField] as number) || 0;\n }\n\n if (sortOrder === 'asc') return valA > valB ? 1 : -1;\n return valA < valB ? 1 : -1;\n });\n }, [history, search, filterStatus, isGlobal, activeConnectionId, sortField, sortOrder]);\n\n const handleClearHistory = () => {\n if (confirm('Are you sure you want to clear all history?')) {\n storage.clearHistory();\n setHistory([]);\n }\n };\n\n const handleSort = (field: SortField) => {\n if (sortField === field) {\n setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc');\n } else {\n setSortField(field);\n setSortOrder('desc');\n }\n };\n\n const exportHistory = (format: 'csv' | 'json') => {\n let content = '';\n let mimeType = '';\n const fileName = `query_history_${new Date().getTime()}.${format}`;\n\n if (format === 'csv') {\n const headers = ['Executed At', 'Status', 'Connection', 'Tab', 'Execution Time (ms)', 'Rows', 'Query', 'Error'];\n const rows = filteredHistory.map(item => [\n item.executedAt,\n item.status,\n item.connectionName || item.connectionId,\n item.tabName || '',\n item.executionTime,\n item.rowCount || 0,\n `\"${item.query.replace(/\"/g, '\"\"')}\"`,\n `\"${(item.errorMessage || '').replace(/\"/g, '\"\"')}\"`\n ].join(','));\n content = [headers.join(','), ...rows].join('\\n');\n mimeType = 'text/csv';\n } else {\n content = JSON.stringify(filteredHistory, null, 2);\n mimeType = 'application/json';\n }\n\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n link.click();\n URL.revokeObjectURL(url);\n };\n\n return (\n <div className=\"h-full flex flex-col bg-[#080808]\">\n <div className=\"p-4 border-b border-white/5 bg-[#0a0a0a]/50 backdrop-blur-sm sticky top-0 z-10 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 rounded-lg bg-emerald-500/10 border border-emerald-500/20\">\n <HistoryIcon strokeWidth={1.5} className=\"w-3.5 h-3.5 text-emerald-400\" />\n </div>\n <div>\n <h3 className=\"text-xs font-medium text-zinc-100 flex items-center gap-2\">\n Query History\n </h3>\n <p className=\"text-xs text-zinc-500 font-medium\">\n Showing {filteredHistory.length} executions\n </p>\n </div>\n </div>\n \n <div className=\"flex items-center gap-2\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"h-8 text-xs font-medium text-zinc-400 hover:text-white gap-2\">\n <Download strokeWidth={1.5} className=\"w-3 h-3\" /> Export\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"bg-[#0d0d0d] border-white/10 text-zinc-300\">\n <DropdownMenuItem onClick={() => exportHistory('csv')} className=\"text-xs cursor-pointer\">\n Export as CSV\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => exportHistory('json')} className=\"text-xs cursor-pointer\">\n Export as JSON\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <Button \n variant=\"ghost\" \n size=\"sm\" \n onClick={handleClearHistory} \n className=\"h-8 text-xs font-medium text-red-400/70 hover:text-red-400 hover:bg-red-400/10\"\n >\n <Trash2 strokeWidth={1.5} className=\"w-3 h-3 mr-2\" /> Clear\n </Button>\n </div>\n </div>\n \n <div className=\"flex flex-wrap items-center gap-3\">\n <div className=\"relative flex-1 min-w-[240px]\">\n <Search strokeWidth={1.5} className=\"absolute left-3 top-1/2 -translate-y-1/2 w-3 h-3 text-zinc-500\" />\n <Input \n placeholder=\"Search by query, connection or tab...\" \n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-9 h-9 bg-white/5 border-white/10 text-xs focus:ring-emerald-500/20 rounded-lg\"\n />\n {search && (\n <button \n onClick={() => setSearch('')}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-zinc-500 hover:text-white\"\n >\n <X strokeWidth={1.5} className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n \n <div className=\"flex items-center gap-2 bg-white/5 rounded-lg p-1 border border-white/10\">\n <button\n onClick={() => setIsGlobal(false)}\n className={cn(\n \"px-3 py-1.5 text-xs font-medium rounded-md transition-all\",\n !isGlobal ? \"bg-emerald-600 text-white shadow-lg shadow-emerald-600/20\" : \"text-zinc-500 hover:text-zinc-300\"\n )}\n >\n Active Conn\n </button>\n <button\n onClick={() => setIsGlobal(true)}\n className={cn(\n \"px-3 py-1.5 text-xs font-medium rounded-md transition-all\",\n isGlobal ? \"bg-emerald-600 text-white shadow-lg shadow-emerald-600/20\" : \"text-zinc-500 hover:text-zinc-300\"\n )}\n >\n All Connections\n </button>\n </div>\n\n <div className=\"flex bg-white/5 rounded-lg p-1 border border-white/10\">\n {(['all', 'success', 'error'] as const).map((status) => (\n <button\n key={status}\n onClick={() => setFilterStatus(status)}\n className={cn(\n \"px-3 py-1.5 text-xs font-medium rounded-md transition-all\",\n filterStatus === status ? \"bg-white/10 text-white\" : \"text-zinc-500 hover:text-zinc-300\"\n )}\n >\n {status}\n </button>\n ))}\n </div>\n </div>\n </div>\n\n <div className=\"flex-1 overflow-auto custom-scrollbar\">\n {filteredHistory.length === 0 ? (\n <div className=\"h-full flex flex-col items-center justify-center opacity-20 p-8 text-center\">\n <HistoryIcon strokeWidth={1.5} className=\"w-16 h-16 mb-4 text-zinc-600\" />\n <p className=\"text-xs font-medium\">No history items found</p>\n <p className=\"text-xs text-zinc-500 mt-1r\">Run some queries to see them here</p>\n </div>\n ) : (\n <div className=\"min-w-[800px]\">\n <table className=\"w-full text-left border-collapse\">\n <thead>\n <tr className=\"bg-white/[0.02] border-b border-white/5 text-xs font-medium text-zinc-500\">\n <th className=\"px-4 py-3 w-10 text-center\">Status</th>\n <th className=\"px-4 py-3 cursor-pointer hover:text-zinc-300 transition-colors group\" onClick={() => handleSort('executedAt')}>\n <div className=\"flex items-center gap-2\">\n Executed At\n <ArrowUpDown className={cn(\"w-3 h-3 transition-opacity\", sortField === 'executedAt' ? \"opacity-100 text-emerald-500\" : \"opacity-0 group-hover:opacity-100\")} />\n </div>\n </th>\n <th className=\"px-4 py-3\">Source</th>\n <th className=\"px-4 py-3\">SQL Query</th>\n <th className=\"px-4 py-3 cursor-pointer hover:text-zinc-300 transition-colors group\" onClick={() => handleSort('executionTime')}>\n <div className=\"flex items-center gap-2\">\n Duration\n <ArrowUpDown className={cn(\"w-3 h-3 transition-opacity\", sortField === 'executionTime' ? \"opacity-100 text-emerald-500\" : \"opacity-0 group-hover:opacity-100\")} />\n </div>\n </th>\n <th className=\"px-4 py-3 cursor-pointer hover:text-zinc-300 transition-colors group\" onClick={() => handleSort('rowCount')}>\n <div className=\"flex items-center gap-2\">\n Rows\n <ArrowUpDown className={cn(\"w-3 h-3 transition-opacity\", sortField === 'rowCount' ? \"opacity-100 text-emerald-500\" : \"opacity-0 group-hover:opacity-100\")} />\n </div>\n </th>\n <th className=\"px-4 py-3 w-20\"></th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-white/5\">\n {filteredHistory.map((item) => (\n <tr \n key={item.id}\n className=\"hover:bg-white/[0.03] transition-colors group text-xs border-b border-white/5\"\n >\n <td className=\"px-4 py-4 text-center\">\n <div className=\"flex justify-center\">\n {item.status === 'success' ? (\n <div className=\"w-5 h-5 rounded-full bg-emerald-500/10 flex items-center justify-center border border-emerald-500/20\">\n <CheckCircle2 strokeWidth={1.5} className=\"w-3 h-3 text-emerald-500\" />\n </div>\n ) : (\n <div className=\"w-5 h-5 rounded-full bg-red-500/10 flex items-center justify-center border border-red-500/20\">\n <AlertCircle strokeWidth={1.5} className=\"w-3 h-3 text-red-500\" />\n </div>\n )}\n </div>\n </td>\n <td className=\"px-4 py-4 whitespace-nowrap\">\n <div className=\"flex flex-col\">\n <span className=\"text-zinc-200 font-medium\">\n {item.executedAt ? format(new Date(item.executedAt), 'MMM d, HH:mm:ss') : '-'}\n </span>\n <span className=\"text-xs text-zinc-500 font-mono mt-0.5\">\n {item.executedAt ? format(new Date(item.executedAt), 'yyyy') : ''}\n </span>\n </div>\n </td>\n <td className=\"px-4 py-4 whitespace-nowrap\">\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-1.5 text-zinc-300\">\n <Database strokeWidth={1.5} className=\"w-3 h-3 text-blue-400\" />\n <span className=\"font-medium\">{item.connectionName || 'Unknown'}</span>\n </div>\n <div className=\"flex items-center gap-1.5 text-zinc-500 text-xs\">\n <Hash strokeWidth={1.5} className=\"w-2.5 h-2.5\" />\n <span>{item.tabName || 'Default Tab'}</span>\n </div>\n </div>\n </td>\n <td className=\"px-4 py-4 max-w-md\">\n <div className=\"bg-[#050505] border border-white/5 rounded-md p-2 relative group-hover:border-white/10 transition-colors\">\n <pre className=\"text-xs font-mono text-zinc-400 line-clamp-2 break-all whitespace-pre-wrap leading-relaxed\">\n {item.query}\n </pre>\n {item.errorMessage && (\n <div className=\"mt-2 pt-2 border-t border-red-500/10 text-xs text-red-400/80 font-mono italic\">\n {item.errorMessage}\n </div>\n )}\n </div>\n </td>\n <td className=\"px-4 py-4 whitespace-nowrap\">\n <span className={cn(\n \"px-2 py-0.5 rounded text-xs font-mono font-medium\",\n item.executionTime > 500 ? \"text-amber-400 bg-amber-400/10\" : \"text-zinc-400 bg-white/5\"\n )}>\n {item.executionTime}ms\n </span>\n </td>\n <td className=\"px-4 py-4 whitespace-nowrap\">\n <span className=\"text-zinc-400 font-mono text-xs\">\n {item.rowCount != null ? item.rowCount.toLocaleString() : '-'}\n </span>\n </td>\n <td className=\"px-4 py-4 text-right\">\n <Button \n variant=\"ghost\" \n size=\"sm\" \n className=\"h-8 w-8 p-0 hover:bg-emerald-500/10 hover:text-emerald-400\"\n onClick={() => onSelectQuery(item.query)}\n title=\"Restore Query\"\n >\n <RotateCcw className=\"w-3 h-3\" />\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useEffect } from 'react';\nimport { storage } from '@/lib/storage';\nimport { SavedQuery } from '@/lib/types';\nimport { \n Bookmark, Search, Trash2, Edit3, \n Tag, Calendar\n} from 'lucide-react';\nimport { Button } from './ui/button';\nimport { Input } from './ui/input';\nimport { format } from 'date-fns';\n\ninterface SavedQueriesProps {\n onSelectQuery: (query: string) => void;\n connectionType?: string;\n refreshTrigger?: number;\n}\n\nexport function SavedQueries({ onSelectQuery, connectionType, refreshTrigger }: SavedQueriesProps) {\n const [queries, setQueries] = useState<SavedQuery[]>([]);\n const [search, setSearch] = useState('');\n\n // Refresh queries when refreshTrigger changes (replaces key-based re-mount)\n useEffect(() => {\n setQueries(storage.getSavedQueries());\n }, [refreshTrigger]);\n\n const filteredQueries = queries.filter(q => {\n const matchesSearch = q.name.toLowerCase().includes(search.toLowerCase()) || \n q.query.toLowerCase().includes(search.toLowerCase());\n const matchesType = !connectionType || q.connectionType === connectionType;\n return matchesSearch && matchesType;\n });\n\n const handleDelete = (id: string, e: React.MouseEvent) => {\n e.stopPropagation();\n if (confirm('Are you sure you want to delete this saved query?')) {\n storage.deleteSavedQuery(id);\n setQueries(storage.getSavedQueries());\n }\n };\n\n return (\n <div className=\"h-full flex flex-col bg-[#0a0a0a]\">\n <div className=\"p-4 border-b border-white/5 flex flex-col gap-4\">\n <h3 className=\"text-xs font-medium text-zinc-400 flex items-center gap-2\">\n <Bookmark strokeWidth={1.5} className=\"w-3.5 h-3.5\" /> Saved Queries\n </h3>\n \n <div className=\"relative\">\n <Search strokeWidth={1.5} className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-zinc-500\" />\n <Input \n placeholder=\"Search saved queries...\" \n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-8 h-8 bg-white/5 border-white/10 text-xs focus:ring-blue-500/20\"\n />\n </div>\n </div>\n\n <div className=\"flex-1 overflow-y-auto custom-scrollbar\">\n {filteredQueries.length === 0 ? (\n <div className=\"h-full flex flex-col items-center justify-center opacity-20 p-8 text-center\">\n <Bookmark strokeWidth={1.5} className=\"w-12 h-12 mb-4\" />\n <p className=\"text-xs italic\">No saved queries found</p>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-px bg-white/5\">\n {filteredQueries.map((q) => (\n <div \n key={q.id}\n className=\"bg-[#0a0a0a] p-4 hover:bg-white/[0.02] transition-colors group cursor-pointer\"\n onClick={() => onSelectQuery(q.query)}\n >\n <div className=\"flex items-start justify-between mb-2\">\n <div>\n <h4 className=\"text-xs font-medium text-blue-400 mb-1 group-hover:text-blue-300 transition-colors\">\n {q.name}\n </h4>\n {q.description && (\n <p className=\"text-xs text-zinc-500 line-clamp-1\">{q.description}</p>\n )}\n </div>\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <Button variant=\"ghost\" size=\"icon\" className=\"h-6 w-6 text-zinc-500 hover:text-white\">\n <Edit3 strokeWidth={1.5} className=\"w-3 h-3\" />\n </Button>\n <Button \n variant=\"ghost\" \n size=\"icon\" \n className=\"h-6 w-6 text-zinc-500 hover:text-red-400\"\n onClick={(e) => handleDelete(q.id, e)}\n >\n <Trash2 strokeWidth={1.5} className=\"w-3 h-3\" />\n </Button>\n </div>\n </div>\n\n <div className=\"bg-[#050505] border border-white/5 rounded-md p-2 mb-3\">\n <pre className=\"text-xs font-mono text-zinc-400 line-clamp-3\">\n {q.query}\n </pre>\n </div>\n\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"px-1.5 py-0.5 rounded bg-blue-500/10 border border-blue-500/20 text-[0.625rem] font-medium text-blue-400er\">\n {q.connectionType}\n </span>\n {q.tags?.map(tag => (\n <span key={tag} className=\"flex items-center gap-1 text-[0.625rem] text-zinc-500\">\n <Tag strokeWidth={1.5} className=\"w-2.5 h-2.5\" /> {tag}\n </span>\n ))}\n </div>\n <span className=\"text-[0.625rem] text-zinc-600 flex items-center gap-1 font-mono\">\n <Calendar className=\"w-2.5 h-2.5\" /> {format(q.updatedAt, 'MMM d, yyyy')}\n </span>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport type { DatabaseConnection } from '@/lib/types';\nimport { storage } from '@/lib/storage';\n\n/**\n * Returns all connections: user connections from localStorage + managed seed connections from server.\n * Use this instead of storage.getConnections() in components that need the full list.\n *\n * This is a lightweight alternative to useConnectionManager — it only fetches and merges,\n * without active connection state, schema loading, or health checks.\n */\nexport function useAllConnections() {\n const [connections, setConnections] = useState<DatabaseConnection[]>([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let cancelled = false;\n\n async function load() {\n const userConns = storage.getConnections();\n\n try {\n const res = await fetch('/api/connections/managed');\n if (res.ok) {\n const { connections: managedConns } = await res.json();\n if (managedConns?.length > 0 && !cancelled) {\n const merged: DatabaseConnection[] = [];\n const addedIds = new Set<string>();\n\n // Managed connections first\n for (const mc of managedConns) {\n merged.push({ ...mc, createdAt: new Date(mc.createdAt) });\n addedIds.add(mc.id);\n if (mc.seedId) addedIds.add(`seed:${mc.seedId}`);\n }\n\n // User connections (skip duplicates)\n for (const uc of userConns) {\n if (addedIds.has(uc.id)) continue;\n if (uc.seedId && managedConns.some((mc: { seedId: string }) => mc.seedId === uc.seedId)) continue;\n merged.push(uc);\n }\n\n setConnections(merged);\n setLoading(false);\n return;\n }\n }\n } catch {\n // Managed connections optional\n }\n\n if (!cancelled) {\n setConnections(userConns);\n setLoading(false);\n }\n }\n\n load();\n return () => { cancelled = true; };\n }, []);\n\n return { connections, loading };\n}\n","import type { TableSchema, ColumnSchema, IndexSchema, ForeignKeySchema } from '@/lib/types';\nimport type { SchemaDiff, TableDiff, ColumnDiff, IndexDiff, ForeignKeyDiff } from './types';\n\nfunction diffColumns(sourceCols: ColumnSchema[], targetCols: ColumnSchema[]): ColumnDiff[] {\n const diffs: ColumnDiff[] = [];\n const sourceMap = new Map(sourceCols.map(c => [c.name, c]));\n const targetMap = new Map(targetCols.map(c => [c.name, c]));\n\n // Added columns (in target but not in source)\n for (const [name, col] of targetMap) {\n if (!sourceMap.has(name)) {\n diffs.push({\n action: 'added',\n columnName: name,\n targetType: col.type,\n targetNullable: col.nullable,\n targetDefault: col.defaultValue,\n targetIsPrimary: col.isPrimary,\n changes: [`Added column \"${name}\" (${col.type})`],\n });\n }\n }\n\n // Removed columns (in source but not in target)\n for (const [name, col] of sourceMap) {\n if (!targetMap.has(name)) {\n diffs.push({\n action: 'removed',\n columnName: name,\n sourceType: col.type,\n sourceNullable: col.nullable,\n sourceDefault: col.defaultValue,\n sourceIsPrimary: col.isPrimary,\n changes: [`Removed column \"${name}\" (${col.type})`],\n });\n }\n }\n\n // Modified columns (in both, check for differences)\n for (const [name, sourceCol] of sourceMap) {\n const targetCol = targetMap.get(name);\n if (!targetCol) continue;\n\n const changes: string[] = [];\n\n if (sourceCol.type.toLowerCase() !== targetCol.type.toLowerCase()) {\n changes.push(`Type changed: ${sourceCol.type} → ${targetCol.type}`);\n }\n if (sourceCol.nullable !== targetCol.nullable) {\n changes.push(`Nullable changed: ${sourceCol.nullable} → ${targetCol.nullable}`);\n }\n if ((sourceCol.defaultValue || '') !== (targetCol.defaultValue || '')) {\n changes.push(`Default changed: ${sourceCol.defaultValue || 'none'} → ${targetCol.defaultValue || 'none'}`);\n }\n if (sourceCol.isPrimary !== targetCol.isPrimary) {\n changes.push(`Primary key changed: ${sourceCol.isPrimary} → ${targetCol.isPrimary}`);\n }\n\n if (changes.length > 0) {\n diffs.push({\n action: 'modified',\n columnName: name,\n sourceType: sourceCol.type,\n targetType: targetCol.type,\n sourceNullable: sourceCol.nullable,\n targetNullable: targetCol.nullable,\n sourceDefault: sourceCol.defaultValue,\n targetDefault: targetCol.defaultValue,\n sourceIsPrimary: sourceCol.isPrimary,\n targetIsPrimary: targetCol.isPrimary,\n changes,\n });\n }\n }\n\n return diffs;\n}\n\nfunction diffIndexes(sourceIndexes: IndexSchema[], targetIndexes: IndexSchema[]): IndexDiff[] {\n const diffs: IndexDiff[] = [];\n\n const sourceMap = new Map<string, IndexSchema>();\n sourceIndexes.forEach(idx => {\n const key = idx.name || idx.columns.sort().join(',');\n sourceMap.set(key, idx);\n });\n\n const targetMap = new Map<string, IndexSchema>();\n targetIndexes.forEach(idx => {\n const key = idx.name || idx.columns.sort().join(',');\n targetMap.set(key, idx);\n });\n\n for (const [key, idx] of targetMap) {\n if (!sourceMap.has(key)) {\n diffs.push({\n action: 'added',\n indexName: idx.name || key,\n targetColumns: idx.columns,\n targetUnique: idx.unique,\n changes: [`Added index \"${idx.name || key}\" on (${idx.columns.join(', ')})`],\n });\n }\n }\n\n for (const [key, idx] of sourceMap) {\n if (!targetMap.has(key)) {\n diffs.push({\n action: 'removed',\n indexName: idx.name || key,\n sourceColumns: idx.columns,\n sourceUnique: idx.unique,\n changes: [`Removed index \"${idx.name || key}\"`],\n });\n }\n }\n\n for (const [key, sourceIdx] of sourceMap) {\n const targetIdx = targetMap.get(key);\n if (!targetIdx) continue;\n\n const changes: string[] = [];\n const sourceColStr = sourceIdx.columns.sort().join(',');\n const targetColStr = targetIdx.columns.sort().join(',');\n\n if (sourceColStr !== targetColStr) {\n changes.push(`Columns changed: (${sourceIdx.columns.join(', ')}) → (${targetIdx.columns.join(', ')})`);\n }\n if (sourceIdx.unique !== targetIdx.unique) {\n changes.push(`Unique changed: ${sourceIdx.unique} → ${targetIdx.unique}`);\n }\n\n if (changes.length > 0) {\n diffs.push({\n action: 'modified',\n indexName: sourceIdx.name || key,\n sourceColumns: sourceIdx.columns,\n targetColumns: targetIdx.columns,\n sourceUnique: sourceIdx.unique,\n targetUnique: targetIdx.unique,\n changes,\n });\n }\n }\n\n return diffs;\n}\n\nfunction diffForeignKeys(sourceFKs: ForeignKeySchema[], targetFKs: ForeignKeySchema[]): ForeignKeyDiff[] {\n const diffs: ForeignKeyDiff[] = [];\n\n const makeKey = (fk: ForeignKeySchema) => `${fk.columnName}→${fk.referencedTable}.${fk.referencedColumn}`;\n\n const sourceMap = new Map(sourceFKs.map(fk => [makeKey(fk), fk]));\n const targetMap = new Map(targetFKs.map(fk => [makeKey(fk), fk]));\n\n for (const [key, fk] of targetMap) {\n if (!sourceMap.has(key)) {\n diffs.push({\n action: 'added',\n columnName: fk.columnName,\n targetReferencedTable: fk.referencedTable,\n targetReferencedColumn: fk.referencedColumn,\n changes: [`Added FK: ${fk.columnName} → ${fk.referencedTable}(${fk.referencedColumn})`],\n });\n }\n }\n\n for (const [key, fk] of sourceMap) {\n if (!targetMap.has(key)) {\n diffs.push({\n action: 'removed',\n columnName: fk.columnName,\n sourceReferencedTable: fk.referencedTable,\n sourceReferencedColumn: fk.referencedColumn,\n changes: [`Removed FK: ${fk.columnName} → ${fk.referencedTable}(${fk.referencedColumn})`],\n });\n }\n }\n\n return diffs;\n}\n\nexport function diffSchemas(source: TableSchema[], target: TableSchema[]): SchemaDiff {\n const sourceMap = new Map(source.map(t => [t.name, t]));\n const targetMap = new Map(target.map(t => [t.name, t]));\n\n const tables: TableDiff[] = [];\n let added = 0, removed = 0, modified = 0;\n\n // Added tables\n for (const [name, table] of targetMap) {\n if (!sourceMap.has(name)) {\n tables.push({\n action: 'added',\n tableName: name,\n columns: table.columns.map(c => ({\n action: 'added' as const,\n columnName: c.name,\n targetType: c.type,\n targetNullable: c.nullable,\n targetDefault: c.defaultValue,\n targetIsPrimary: c.isPrimary,\n changes: [`Added column \"${c.name}\" (${c.type})`],\n })),\n indexes: table.indexes.map(idx => ({\n action: 'added' as const,\n indexName: idx.name,\n targetColumns: idx.columns,\n targetUnique: idx.unique,\n changes: [`Added index \"${idx.name}\"`],\n })),\n foreignKeys: (table.foreignKeys || []).map(fk => ({\n action: 'added' as const,\n columnName: fk.columnName,\n targetReferencedTable: fk.referencedTable,\n targetReferencedColumn: fk.referencedColumn,\n changes: [`Added FK: ${fk.columnName} → ${fk.referencedTable}(${fk.referencedColumn})`],\n })),\n });\n added++;\n }\n }\n\n // Removed tables\n for (const [name, table] of sourceMap) {\n if (!targetMap.has(name)) {\n tables.push({\n action: 'removed',\n tableName: name,\n columns: table.columns.map(c => ({\n action: 'removed' as const,\n columnName: c.name,\n sourceType: c.type,\n sourceNullable: c.nullable,\n sourceDefault: c.defaultValue,\n sourceIsPrimary: c.isPrimary,\n changes: [`Removed column \"${c.name}\"`],\n })),\n indexes: [],\n foreignKeys: [],\n });\n removed++;\n }\n }\n\n // Modified tables\n for (const [name, sourceTable] of sourceMap) {\n const targetTable = targetMap.get(name);\n if (!targetTable) continue;\n\n const columns = diffColumns(sourceTable.columns, targetTable.columns);\n const indexes = diffIndexes(sourceTable.indexes, targetTable.indexes);\n const foreignKeys = diffForeignKeys(sourceTable.foreignKeys || [], targetTable.foreignKeys || []);\n\n if (columns.length > 0 || indexes.length > 0 || foreignKeys.length > 0) {\n tables.push({\n action: 'modified',\n tableName: name,\n columns,\n indexes,\n foreignKeys,\n });\n modified++;\n }\n }\n\n return {\n tables,\n summary: { added, removed, modified },\n hasChanges: tables.length > 0,\n };\n}\n","import type { DatabaseType } from '@/lib/types';\nimport type { SchemaDiff, TableDiff, ColumnDiff } from './types';\n\nfunction escapeIdentifier(name: string, dialect: DatabaseType): string {\n switch (dialect) {\n case 'mysql': return `\\`${name}\\``;\n case 'mssql': return `[${name.replace(/\\]/g, ']]')}]`;\n case 'oracle':\n case 'postgres':\n case 'sqlite':\n default: return `\"${name}\"`;\n }\n}\n\nfunction generateColumnDef(col: ColumnDiff, dialect: DatabaseType): string {\n const type = col.targetType || col.sourceType || 'TEXT';\n const nullable = col.targetNullable === false ? ' NOT NULL' : '';\n const defaultVal = col.targetDefault ? ` DEFAULT ${col.targetDefault}` : '';\n return `${escapeIdentifier(col.columnName, dialect)} ${type}${nullable}${defaultVal}`;\n}\n\nfunction generateCreateTable(table: TableDiff, dialect: DatabaseType): string {\n const lines: string[] = [];\n const id = escapeIdentifier(table.tableName, dialect);\n\n const colDefs = table.columns\n .filter(c => c.action === 'added')\n .map(c => ` ${generateColumnDef(c, dialect)}`);\n\n // Add primary key constraint\n const pkCols = table.columns.filter(c => c.targetIsPrimary).map(c => escapeIdentifier(c.columnName, dialect));\n\n lines.push(`CREATE TABLE ${id} (`);\n lines.push(colDefs.join(',\\n'));\n if (pkCols.length > 0) {\n lines.push(`, PRIMARY KEY (${pkCols.join(', ')})`);\n }\n lines.push(');');\n\n // Indexes\n table.indexes.filter(i => i.action === 'added').forEach(idx => {\n const unique = idx.targetUnique ? 'UNIQUE ' : '';\n const cols = (idx.targetColumns || []).map(c => escapeIdentifier(c, dialect)).join(', ');\n lines.push(`CREATE ${unique}INDEX ${escapeIdentifier(idx.indexName, dialect)} ON ${id} (${cols});`);\n });\n\n // Foreign keys\n table.foreignKeys.filter(fk => fk.action === 'added').forEach(fk => {\n lines.push(`ALTER TABLE ${id} ADD CONSTRAINT ${escapeIdentifier(`fk_${table.tableName}_${fk.columnName}`, dialect)} FOREIGN KEY (${escapeIdentifier(fk.columnName, dialect)}) REFERENCES ${escapeIdentifier(fk.targetReferencedTable || '', dialect)}(${escapeIdentifier(fk.targetReferencedColumn || '', dialect)});`);\n });\n\n return lines.join('\\n');\n}\n\nfunction generateDropTable(table: TableDiff, dialect: DatabaseType): string {\n return `DROP TABLE IF EXISTS ${escapeIdentifier(table.tableName, dialect)};`;\n}\n\nfunction generateAlterTable(table: TableDiff, dialect: DatabaseType): string {\n const lines: string[] = [];\n const id = escapeIdentifier(table.tableName, dialect);\n\n lines.push(`-- Alter table: ${table.tableName}`);\n\n // Added columns\n table.columns.filter(c => c.action === 'added').forEach(col => {\n lines.push(`ALTER TABLE ${id} ADD COLUMN ${generateColumnDef(col, dialect)};`);\n });\n\n // Removed columns\n table.columns.filter(c => c.action === 'removed').forEach(col => {\n if (dialect === 'sqlite') {\n lines.push(`-- SQLite: Cannot drop column \"${col.columnName}\" directly. Requires table recreation.`);\n } else {\n lines.push(`ALTER TABLE ${id} DROP COLUMN ${escapeIdentifier(col.columnName, dialect)};`);\n }\n });\n\n // Modified columns\n table.columns.filter(c => c.action === 'modified').forEach(col => {\n if (dialect === 'sqlite') {\n lines.push(`-- SQLite: Cannot alter column \"${col.columnName}\" type directly. Requires table recreation.`);\n } else if (dialect === 'mysql') {\n const type = col.targetType || col.sourceType || 'TEXT';\n const nullable = col.targetNullable === false ? ' NOT NULL' : ' NULL';\n const defaultVal = col.targetDefault ? ` DEFAULT ${col.targetDefault}` : '';\n lines.push(`ALTER TABLE ${id} MODIFY COLUMN ${escapeIdentifier(col.columnName, dialect)} ${type}${nullable}${defaultVal};`);\n } else if (dialect === 'oracle') {\n const type = col.targetType || col.sourceType || 'VARCHAR2(255)';\n const nullable = col.targetNullable === false ? ' NOT NULL' : ' NULL';\n const defaultVal = col.targetDefault ? ` DEFAULT ${col.targetDefault}` : '';\n lines.push(`ALTER TABLE ${id} MODIFY (${escapeIdentifier(col.columnName, dialect)} ${type}${defaultVal}${nullable});`);\n } else if (dialect === 'mssql') {\n const type = col.targetType || col.sourceType || 'NVARCHAR(MAX)';\n const nullable = col.targetNullable === false ? ' NOT NULL' : ' NULL';\n lines.push(`ALTER TABLE ${id} ALTER COLUMN ${escapeIdentifier(col.columnName, dialect)} ${type}${nullable};`);\n if (col.sourceDefault !== col.targetDefault && col.targetDefault) {\n lines.push(`ALTER TABLE ${id} ADD DEFAULT ${col.targetDefault} FOR ${escapeIdentifier(col.columnName, dialect)};`);\n }\n } else {\n // PostgreSQL\n if (col.sourceType !== col.targetType) {\n lines.push(`ALTER TABLE ${id} ALTER COLUMN ${escapeIdentifier(col.columnName, dialect)} TYPE ${col.targetType};`);\n }\n if (col.sourceNullable !== col.targetNullable) {\n if (col.targetNullable) {\n lines.push(`ALTER TABLE ${id} ALTER COLUMN ${escapeIdentifier(col.columnName, dialect)} DROP NOT NULL;`);\n } else {\n lines.push(`ALTER TABLE ${id} ALTER COLUMN ${escapeIdentifier(col.columnName, dialect)} SET NOT NULL;`);\n }\n }\n if (col.sourceDefault !== col.targetDefault) {\n if (col.targetDefault) {\n lines.push(`ALTER TABLE ${id} ALTER COLUMN ${escapeIdentifier(col.columnName, dialect)} SET DEFAULT ${col.targetDefault};`);\n } else {\n lines.push(`ALTER TABLE ${id} ALTER COLUMN ${escapeIdentifier(col.columnName, dialect)} DROP DEFAULT;`);\n }\n }\n }\n });\n\n // Added indexes\n table.indexes.filter(i => i.action === 'added').forEach(idx => {\n const unique = idx.targetUnique ? 'UNIQUE ' : '';\n const cols = (idx.targetColumns || []).map(c => escapeIdentifier(c, dialect)).join(', ');\n lines.push(`CREATE ${unique}INDEX ${escapeIdentifier(idx.indexName, dialect)} ON ${id} (${cols});`);\n });\n\n // Removed indexes\n table.indexes.filter(i => i.action === 'removed').forEach(idx => {\n if (dialect === 'mysql') {\n lines.push(`DROP INDEX ${escapeIdentifier(idx.indexName, dialect)} ON ${id};`);\n } else {\n lines.push(`DROP INDEX IF EXISTS ${escapeIdentifier(idx.indexName, dialect)};`);\n }\n });\n\n // Added foreign keys\n table.foreignKeys.filter(fk => fk.action === 'added').forEach(fk => {\n const constraintName = escapeIdentifier(`fk_${table.tableName}_${fk.columnName}`, dialect);\n lines.push(`ALTER TABLE ${id} ADD CONSTRAINT ${constraintName} FOREIGN KEY (${escapeIdentifier(fk.columnName, dialect)}) REFERENCES ${escapeIdentifier(fk.targetReferencedTable || '', dialect)}(${escapeIdentifier(fk.targetReferencedColumn || '', dialect)});`);\n });\n\n // Removed foreign keys\n table.foreignKeys.filter(fk => fk.action === 'removed').forEach(fk => {\n const constraintName = escapeIdentifier(`fk_${table.tableName}_${fk.columnName}`, dialect);\n if (dialect === 'mysql') {\n lines.push(`ALTER TABLE ${id} DROP FOREIGN KEY ${constraintName};`);\n } else if (dialect === 'sqlite') {\n lines.push(`-- SQLite: Cannot drop foreign key directly. Requires table recreation.`);\n } else {\n lines.push(`ALTER TABLE ${id} DROP CONSTRAINT IF EXISTS ${constraintName};`);\n }\n });\n\n return lines.join('\\n');\n}\n\nexport function generateMigrationSQL(diff: SchemaDiff, dialect: DatabaseType): string {\n if (!diff.hasChanges) {\n return '-- No schema changes detected.';\n }\n\n const sections: string[] = [];\n sections.push(`-- Migration generated at ${new Date().toISOString()}`);\n sections.push(`-- Dialect: ${dialect}`);\n sections.push(`-- Changes: ${diff.summary.added} added, ${diff.summary.removed} removed, ${diff.summary.modified} modified`);\n sections.push('');\n\n if (dialect !== 'sqlite') {\n sections.push('BEGIN;');\n sections.push('');\n }\n\n // Drop tables first (reverse dependency order)\n const droppedTables = diff.tables.filter(t => t.action === 'removed');\n if (droppedTables.length > 0) {\n sections.push('-- Drop removed tables');\n droppedTables.forEach(t => sections.push(generateDropTable(t, dialect)));\n sections.push('');\n }\n\n // Create new tables\n const addedTables = diff.tables.filter(t => t.action === 'added');\n if (addedTables.length > 0) {\n sections.push('-- Create new tables');\n addedTables.forEach(t => {\n sections.push(generateCreateTable(t, dialect));\n sections.push('');\n });\n }\n\n // Alter existing tables\n const modifiedTables = diff.tables.filter(t => t.action === 'modified');\n if (modifiedTables.length > 0) {\n sections.push('-- Modify existing tables');\n modifiedTables.forEach(t => {\n sections.push(generateAlterTable(t, dialect));\n sections.push('');\n });\n }\n\n if (dialect !== 'sqlite') {\n sections.push('COMMIT;');\n }\n\n return sections.join('\\n');\n}\n","'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport { Badge } from '@/components/ui/badge';\nimport { cn } from '@/lib/utils';\nimport type { SchemaSnapshot } from '@/lib/types';\n\ninterface SnapshotTimelineProps {\n snapshots: SchemaSnapshot[];\n onCompare: (sourceId: string, targetId: string) => void;\n onDelete: (id: string) => void;\n}\n\nexport function SnapshotTimeline({ snapshots, onCompare, onDelete }: SnapshotTimelineProps) {\n const [selected, setSelected] = useState<string[]>([]);\n\n const handleClick = (id: string) => {\n setSelected(prev => {\n if (prev.includes(id)) {\n return prev.filter(s => s !== id);\n }\n if (prev.length >= 2) {\n return [prev[1], id];\n }\n return [...prev, id];\n });\n };\n\n const canCompare = selected.length === 2;\n\n useEffect(() => {\n if (canCompare) {\n onCompare(selected[0], selected[1]);\n }\n }, [selected, canCompare, onCompare]);\n\n if (snapshots.length === 0) {\n return (\n <div className=\"flex items-center justify-center py-4 text-zinc-600 text-xs\">\n No snapshots taken yet. Take a snapshot to start tracking schema changes.\n </div>\n );\n }\n\n const sorted = [...snapshots].sort((a, b) =>\n new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()\n );\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between px-2\">\n <span className=\"text-xs text-zinc-500 font-medium\">Timeline</span>\n {canCompare && (\n <span className=\"text-xs text-blue-400\">Comparing 2 snapshots</span>\n )}\n </div>\n\n {/* Horizontal timeline */}\n <div className=\"relative flex items-center overflow-x-auto pb-2 px-2 gap-0\">\n {/* Timeline line */}\n <div className=\"absolute top-[18px] left-4 right-4 h-[2px] bg-white/10\" />\n\n {sorted.map((snapshot, idx) => {\n const isSelected = selected.includes(snapshot.id);\n const date = new Date(snapshot.createdAt);\n\n return (\n <div\n key={snapshot.id}\n className=\"relative flex flex-col items-center min-w-[100px] cursor-pointer group\"\n onClick={() => handleClick(snapshot.id)}\n >\n {/* Dot */}\n <div className={cn(\n \"w-3.5 h-3.5 rounded-full border-2 z-10 transition-all\",\n isSelected\n ? \"bg-blue-500 border-blue-400 scale-125\"\n : \"bg-[#0d0d0d] border-white/20 hover:border-white/40\"\n )} />\n\n {/* Connector */}\n {idx < sorted.length - 1 && (\n <div className=\"absolute top-[7px] left-[50%] w-full h-[2px] bg-white/10\" />\n )}\n\n {/* Label */}\n <div className={cn(\n \"mt-2 text-center transition-colors\",\n isSelected ? \"text-blue-400\" : \"text-zinc-500 group-hover:text-zinc-300\"\n )}>\n <div className=\"text-xs font-medium truncate max-w-[90px]\">\n {snapshot.label || snapshot.connectionName}\n </div>\n <div className=\"text-[0.625rem] text-zinc-600\">\n {date.toLocaleDateString()} {date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </div>\n <Badge variant=\"secondary\" className=\"text-[0.625rem] mt-1\">\n {snapshot.schema.length} tables\n </Badge>\n </div>\n\n {/* Delete button */}\n <button\n onClick={(e) => { e.stopPropagation(); onDelete(snapshot.id); }}\n className=\"absolute -top-2 -right-1 p-0.5 text-zinc-600 hover:text-red-400 opacity-0 group-hover:opacity-100 transition-opacity\"\n >\n <Trash2 strokeWidth={1.5} className=\"w-2.5 h-2.5\" />\n </button>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React, { useState, useMemo, useCallback } from 'react';\nimport {\n GitCompare,\n Plus,\n Minus,\n Edit3,\n Camera,\n FileCode,\n ChevronRight,\n ChevronDown,\n Clock,\n Database,\n AlertTriangle,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { Badge } from '@/components/ui/badge';\nimport { cn } from '@/lib/utils';\nimport type { TableSchema, SchemaSnapshot, DatabaseType, DatabaseConnection } from '@/lib/types';\nimport { storage } from '@/lib/storage';\nimport { useAllConnections } from '@/hooks/use-all-connections';\nimport { diffSchemas } from '@/lib/schema-diff/diff-engine';\nimport { generateMigrationSQL } from '@/lib/schema-diff/migration-generator';\nimport type { SchemaDiff as SchemaDiffType, TableDiff } from '@/lib/schema-diff/types';\nimport { SnapshotTimeline } from '@/components/SnapshotTimeline';\n\ninterface SchemaDiffProps {\n schema: TableSchema[];\n connection: DatabaseConnection | null;\n}\n\nexport function SchemaDiff({ schema, connection }: SchemaDiffProps) {\n const [snapshots, setSnapshots] = useState<SchemaSnapshot[]>(() =>\n storage.getSchemaSnapshots()\n );\n const [sourceId, setSourceId] = useState<string>('current');\n const [targetId, setTargetId] = useState<string>('');\n const [selectedTable, setSelectedTable] = useState<string | null>(null);\n const [showMigration, setShowMigration] = useState(false);\n const [snapshotLabel, setSnapshotLabel] = useState('');\n const [showLabelInput, setShowLabelInput] = useState(false);\n\n // Take snapshot of current schema\n const takeSnapshot = useCallback(() => {\n if (!connection) return;\n const snapshot: SchemaSnapshot = {\n id: Date.now().toString(),\n connectionId: connection.id,\n connectionName: connection.name,\n databaseType: connection.type,\n schema: JSON.parse(JSON.stringify(schema)),\n createdAt: new Date(),\n label: snapshotLabel.trim() || undefined,\n };\n storage.saveSchemaSnapshot(snapshot);\n setSnapshots(storage.getSchemaSnapshots());\n setSnapshotLabel('');\n setShowLabelInput(false);\n }, [schema, connection, snapshotLabel]);\n\n // Delete snapshot\n const deleteSnapshot = useCallback((id: string) => {\n storage.deleteSchemaSnapshot(id);\n setSnapshots(storage.getSchemaSnapshots());\n if (sourceId === id) setSourceId('current');\n if (targetId === id) setTargetId('');\n }, [sourceId, targetId]);\n\n // Compute diff\n const diff = useMemo<SchemaDiffType | null>(() => {\n if (!targetId) return null;\n\n const sourceSchema = sourceId === 'current'\n ? schema\n : snapshots.find(s => s.id === sourceId)?.schema || [];\n\n const targetSchema = targetId === 'current'\n ? schema\n : snapshots.find(s => s.id === targetId)?.schema || [];\n\n if (sourceId === targetId) return null;\n\n return diffSchemas(sourceSchema, targetSchema);\n }, [sourceId, targetId, schema, snapshots]);\n\n // Generate migration SQL\n const migrationSQL = useMemo(() => {\n if (!diff || !diff.hasChanges) return '';\n const dialect = connection?.type || 'postgres';\n return generateMigrationSQL(diff, dialect as DatabaseType);\n }, [diff, connection]);\n\n // Get all connections for cross-connection comparison\n const { connections: allConnections } = useAllConnections();\n const [fetchingRemote, setFetchingRemote] = useState(false);\n\n // Fetch schema from a remote connection\n const fetchRemoteSchema = useCallback(async (connId: string) => {\n const conn = allConnections.find(c => c.id === connId);\n if (!conn) return;\n\n setFetchingRemote(true);\n try {\n const res = await fetch('/api/db/schema-snapshot', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(\n conn.managed && conn.seedId\n ? { connectionId: `seed:${conn.seedId}` }\n : { connection: conn }\n ),\n });\n const data = await res.json();\n if (!res.ok) throw new Error(data.error);\n\n // Auto-save as snapshot\n const snapshot: SchemaSnapshot = {\n id: `remote-${Date.now()}`,\n connectionId: conn.id,\n connectionName: conn.name,\n databaseType: conn.type,\n schema: data.schema,\n createdAt: new Date(),\n label: `Live: ${conn.name}`,\n };\n storage.saveSchemaSnapshot(snapshot);\n setSnapshots(storage.getSchemaSnapshots());\n setTargetId(snapshot.id);\n } catch (err) {\n console.error('Failed to fetch remote schema:', err);\n } finally {\n setFetchingRemote(false);\n }\n }, [allConnections]);\n\n const getActionBadge = (action: string) => {\n switch (action) {\n case 'added': return <Badge className=\"bg-green-500/20 text-green-400 border-green-500/30 text-xs\"><Plus strokeWidth={1.5} className=\"w-2.5 h-2.5 mr-0.5\" />Added</Badge>;\n case 'removed': return <Badge className=\"bg-red-500/20 text-red-400 border-red-500/30 text-xs\"><Minus className=\"w-2.5 h-2.5 mr-0.5\" />Removed</Badge>;\n case 'modified': return <Badge className=\"bg-yellow-500/20 text-yellow-400 border-yellow-500/30 text-xs\"><Edit3 strokeWidth={1.5} className=\"w-2.5 h-2.5 mr-0.5\" />Modified</Badge>;\n default: return null;\n }\n };\n\n const formatSnapshotLabel = (s: SchemaSnapshot) => {\n const date = new Date(s.createdAt).toLocaleString();\n return `${s.label || s.connectionName} (${date})`;\n };\n\n return (\n <div className=\"h-full flex flex-col bg-[#080808]\">\n {/* Header */}\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-white/5 bg-[#0a0a0a] flex-wrap\">\n <GitCompare strokeWidth={1.5} className=\"w-3.5 h-3.5 text-rose-400\" />\n <span className=\"text-xs font-medium text-zinc-400r\">Schema Diff</span>\n\n <div className=\"h-4 w-px bg-white/10\" />\n\n {/* Source selector */}\n <div className=\"flex items-center gap-1\">\n <span className=\"text-xs text-zinc-600\">Source</span>\n <Select value={sourceId} onValueChange={setSourceId}>\n <SelectTrigger className=\"h-7 w-[180px] text-xs bg-white/5 border-white/10\">\n <SelectValue placeholder=\"Select source\" />\n </SelectTrigger>\n <SelectContent className=\"bg-[#111] border-white/10\">\n <SelectItem value=\"current\" className=\"text-xs\">\n <div className=\"flex items-center gap-1\">\n <Database strokeWidth={1.5} className=\"w-3 h-3\" /> Current Schema\n </div>\n </SelectItem>\n {snapshots.map(s => (\n <SelectItem key={s.id} value={s.id} className=\"text-xs\">\n <div className=\"flex items-center gap-1\">\n <Clock strokeWidth={1.5} className=\"w-3 h-3\" /> {formatSnapshotLabel(s)}\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <span className=\"text-zinc-600 text-xs\">vs</span>\n\n {/* Target selector */}\n <div className=\"flex items-center gap-1\">\n <span className=\"text-xs text-zinc-600\">Target</span>\n <Select value={targetId} onValueChange={(v) => {\n if (v.startsWith('conn:')) {\n fetchRemoteSchema(v.replace('conn:', ''));\n } else {\n setTargetId(v);\n }\n }}>\n <SelectTrigger className=\"h-7 w-[180px] text-xs bg-white/5 border-white/10\">\n <SelectValue placeholder=\"Select target\" />\n </SelectTrigger>\n <SelectContent className=\"bg-[#111] border-white/10\">\n <SelectItem value=\"current\" className=\"text-xs\">\n <div className=\"flex items-center gap-1\">\n <Database strokeWidth={1.5} className=\"w-3 h-3\" /> Current Schema\n </div>\n </SelectItem>\n {snapshots.map(s => (\n <SelectItem key={s.id} value={s.id} className=\"text-xs\">\n <div className=\"flex items-center gap-1\">\n <Clock strokeWidth={1.5} className=\"w-3 h-3\" /> {formatSnapshotLabel(s)}\n </div>\n </SelectItem>\n ))}\n {allConnections.filter(c => c.id !== connection?.id).length > 0 && (\n <>\n <div className=\"px-2 py-1 text-[0.625rem] text-zinc-600 border-t border-white/5 mt-1\">\n Fetch from connection\n </div>\n {allConnections.filter(c => c.id !== connection?.id).map(c => (\n <SelectItem key={`conn:${c.id}`} value={`conn:${c.id}`} className=\"text-xs\">\n <div className=\"flex items-center gap-1\">\n <Database strokeWidth={1.5} className=\"w-3 h-3 text-blue-400\" /> {c.name}\n {c.environment === 'production' && (\n <AlertTriangle strokeWidth={1.5} className=\"w-3 h-3 text-red-400\" />\n )}\n </div>\n </SelectItem>\n ))}\n </>\n )}\n </SelectContent>\n </Select>\n {fetchingRemote && <span className=\"text-xs text-zinc-500 animate-pulse\">Fetching...</span>}\n </div>\n\n <div className=\"flex-1\" />\n\n {/* Snapshot controls */}\n {showLabelInput ? (\n <div className=\"flex items-center gap-1\">\n <input\n type=\"text\"\n placeholder=\"Label (optional)...\"\n value={snapshotLabel}\n onChange={(e) => setSnapshotLabel(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && takeSnapshot()}\n className=\"h-7 px-2 text-xs bg-white/5 border border-white/10 rounded text-zinc-300 focus:outline-none focus:border-blue-500 w-32\"\n autoFocus\n />\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs text-blue-400\" onClick={takeSnapshot}>\n Save\n </Button>\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs text-zinc-500\" onClick={() => setShowLabelInput(false)}>\n Cancel\n </Button>\n </div>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs font-medium text-zinc-500 hover:text-white gap-1\"\n onClick={() => setShowLabelInput(true)}\n disabled={!connection}\n >\n <Camera className=\"w-3 h-3\" /> Snapshot\n </Button>\n )}\n\n {diff?.hasChanges && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs font-medium text-zinc-500 hover:text-white gap-1\"\n onClick={() => setShowMigration(!showMigration)}\n >\n <FileCode className=\"w-3 h-3\" /> {showMigration ? 'Diff View' : 'SQL Migration'}\n </Button>\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-hidden flex\">\n {!targetId ? (\n <div className=\"flex-1 flex flex-col items-center justify-center text-zinc-600 gap-3\">\n <GitCompare strokeWidth={1.5} className=\"w-10 h-10 opacity-30\" />\n <p className=\"text-xs\">Select source and target to compare schemas</p>\n <p className=\"text-xs text-zinc-700\">Take a snapshot first, then compare with the current schema</p>\n\n {/* Snapshot Timeline */}\n {snapshots.length > 0 && (\n <div className=\"mt-4 w-full max-w-2xl px-4\">\n <SnapshotTimeline\n snapshots={snapshots}\n onCompare={(sourceId, targetId) => {\n setSourceId(sourceId);\n setTargetId(targetId);\n }}\n onDelete={deleteSnapshot}\n />\n </div>\n )}\n </div>\n ) : showMigration && migrationSQL ? (\n <div className=\"flex-1 overflow-auto p-4\">\n <pre className=\"text-xs font-mono text-zinc-300 bg-[#0d0d0d] border border-white/10 rounded-lg p-4 overflow-auto whitespace-pre-wrap\">\n {migrationSQL}\n </pre>\n </div>\n ) : diff && diff.hasChanges ? (\n <>\n {/* Table List */}\n <div className=\"w-64 border-r border-white/5 overflow-auto\">\n <div className=\"p-2 border-b border-white/5\">\n <div className=\"text-xs text-zinc-500 px-2 mb-1\">\n {diff.summary.added} added, {diff.summary.removed} removed, {diff.summary.modified} modified\n </div>\n </div>\n {diff.tables.map(table => (\n <button\n key={table.tableName}\n onClick={() => setSelectedTable(table.tableName)}\n className={cn(\n \"w-full text-left px-3 py-2 text-xs flex items-center gap-2 hover:bg-white/5 transition-colors\",\n selectedTable === table.tableName && \"bg-white/10\"\n )}\n >\n {selectedTable === table.tableName ? (\n <ChevronDown strokeWidth={1.5} className=\"w-3 h-3 text-zinc-500\" />\n ) : (\n <ChevronRight strokeWidth={1.5} className=\"w-3 h-3 text-zinc-500\" />\n )}\n <span className=\"text-zinc-300\">{table.tableName}</span>\n <span className=\"ml-auto\">{getActionBadge(table.action)}</span>\n </button>\n ))}\n </div>\n\n {/* Table Detail */}\n <div className=\"flex-1 overflow-auto p-4\">\n {selectedTable ? (\n <TableDiffDetail diff={diff.tables.find(t => t.tableName === selectedTable)!} />\n ) : (\n <div className=\"h-full flex items-center justify-center text-zinc-600 text-xs\">\n Select a table to view diff details\n </div>\n )}\n </div>\n </>\n ) : diff && !diff.hasChanges ? (\n <div className=\"flex-1 flex items-center justify-center text-zinc-600 gap-2\">\n <span className=\"text-xs\">No differences found between source and target</span>\n </div>\n ) : (\n <div className=\"flex-1 flex items-center justify-center text-zinc-600 gap-2\">\n <AlertTriangle strokeWidth={1.5} className=\"w-3.5 h-3.5\" />\n <span className=\"text-xs\">Cannot compare same schema with itself</span>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction TableDiffDetail({ diff }: { diff: TableDiff }) {\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center gap-2\">\n <Database strokeWidth={1.5} className=\"w-3.5 h-3.5 text-zinc-400\" />\n <h3 className=\"text-xs font-medium text-zinc-200\">{diff.tableName}</h3>\n <Badge className={cn(\n \"text-xs\",\n diff.action === 'added' && \"bg-green-500/20 text-green-400\",\n diff.action === 'removed' && \"bg-red-500/20 text-red-400\",\n diff.action === 'modified' && \"bg-yellow-500/20 text-yellow-400\",\n )}>\n {diff.action}\n </Badge>\n </div>\n\n {/* Columns */}\n {diff.columns.length > 0 && (\n <div>\n <h4 className=\"text-xs text-zinc-500 mb-2 font-medium\">Columns</h4>\n <div className=\"space-y-1\">\n {diff.columns.map((col, i) => (\n <div key={i} className={cn(\n \"px-3 py-2 rounded text-xs flex items-center gap-2\",\n col.action === 'added' && \"bg-green-500/5 border border-green-500/10\",\n col.action === 'removed' && \"bg-red-500/5 border border-red-500/10\",\n col.action === 'modified' && \"bg-yellow-500/5 border border-yellow-500/10\",\n )}>\n <span className=\"font-mono text-zinc-300 min-w-[120px]\">{col.columnName}</span>\n {col.action === 'modified' && (\n <div className=\"flex flex-col gap-0.5\">\n {col.changes.map((change, j) => (\n <span key={j} className=\"text-xs text-zinc-500\">{change}</span>\n ))}\n </div>\n )}\n {col.action === 'added' && (\n <span className=\"text-xs text-green-400 font-mono\">{col.targetType}</span>\n )}\n {col.action === 'removed' && (\n <span className=\"text-xs text-red-400 font-mono\">{col.sourceType}</span>\n )}\n <span className=\"ml-auto\">{getActionIcon(col.action)}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Indexes */}\n {diff.indexes.length > 0 && (\n <div>\n <h4 className=\"text-xs text-zinc-500 mb-2 font-medium\">Indexes</h4>\n <div className=\"space-y-1\">\n {diff.indexes.map((idx, i) => (\n <div key={i} className={cn(\n \"px-3 py-2 rounded text-xs flex items-center gap-2\",\n idx.action === 'added' && \"bg-green-500/5 border border-green-500/10\",\n idx.action === 'removed' && \"bg-red-500/5 border border-red-500/10\",\n idx.action === 'modified' && \"bg-yellow-500/5 border border-yellow-500/10\",\n )}>\n <span className=\"font-mono text-zinc-300\">{idx.indexName}</span>\n {idx.changes.map((change, j) => (\n <span key={j} className=\"text-xs text-zinc-500\">{change}</span>\n ))}\n <span className=\"ml-auto\">{getActionIcon(idx.action)}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Foreign Keys */}\n {diff.foreignKeys.length > 0 && (\n <div>\n <h4 className=\"text-xs text-zinc-500 mb-2 font-medium\">Foreign Keys</h4>\n <div className=\"space-y-1\">\n {diff.foreignKeys.map((fk, i) => (\n <div key={i} className={cn(\n \"px-3 py-2 rounded text-xs flex items-center gap-2\",\n fk.action === 'added' && \"bg-green-500/5 border border-green-500/10\",\n fk.action === 'removed' && \"bg-red-500/5 border border-red-500/10\",\n )}>\n <span className=\"font-mono text-zinc-300\">{fk.columnName}</span>\n {fk.changes.map((change, j) => (\n <span key={j} className=\"text-xs text-zinc-500\">{change}</span>\n ))}\n <span className=\"ml-auto\">{getActionIcon(fk.action)}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction getActionIcon(action: string) {\n switch (action) {\n case 'added': return <Plus strokeWidth={1.5} className=\"w-3 h-3 text-green-400\" />;\n case 'removed': return <Minus className=\"w-3 h-3 text-red-400\" />;\n case 'modified': return <Edit3 strokeWidth={1.5} className=\"w-3 h-3 text-yellow-400\" />;\n default: return null;\n }\n}\n","'use client';\n\nimport React from 'react';\nimport type { DatabaseConnection, QueryTab, TableSchema, QueryResult } from '@/lib/types';\nimport type { ProviderMetadata } from '@/hooks/use-provider-metadata';\nimport type { MaskingConfig } from '@/lib/data-masking';\nimport type { CellChange } from '@/components/ResultsGrid';\nimport { ResultsGrid } from '@/components/ResultsGrid';\nimport { NL2SQLPanel } from '@/components/NL2SQLPanel';\nimport { AIAutopilotPanel } from '@/components/AIAutopilotPanel';\nimport { PivotTable } from '@/components/PivotTable';\nimport { DatabaseDocs } from '@/components/DatabaseDocs';\nimport { VisualExplain, type ExplainPlanResult } from '@/components/VisualExplain';\nimport { QueryHistory } from '@/components/QueryHistory';\nimport { SavedQueries } from '@/components/SavedQueries';\nimport { DataCharts } from '@/components/DataCharts';\nimport { SchemaDiff } from '@/components/SchemaDiff';\nimport { cn } from '@/lib/utils';\nimport {\n BarChart3, Bookmark, Clock, Columns3, Download,\n FileText, GitCompare, LayoutDashboard, LayoutGrid,\n Sparkles, Terminal, Zap,\n} from 'lucide-react';\nimport {\n DropdownMenu, DropdownMenuContent,\n DropdownMenuItem, DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { Button } from '@/components/ui/button';\nimport { storage } from '@/lib/storage';\n\nexport type BottomPanelMode = 'results' | 'explain' | 'history' | 'saved' | 'charts' | 'nl2sql' | 'autopilot' | 'pivot' | 'docs' | 'schemadiff' | 'dashboard';\n\n// Lazy-loaded chart dashboard\nfunction ChartDashboardLazy({ result }: { result: QueryResult | null }) {\n const [savedCharts, setSavedCharts] = React.useState<{ id: string; name: string; chartType: string; xAxis: string; yAxis: string[] }[]>([]);\n React.useEffect(() => {\n const charts = storage.getSavedCharts();\n if (charts.length > 0) setSavedCharts(charts);\n }, []);\n\n if (savedCharts.length === 0) {\n return (\n <div className=\"h-full flex flex-col items-center justify-center bg-[#080808] text-zinc-500 gap-2\">\n <LayoutDashboard strokeWidth={1.5} className=\"w-10 h-10 opacity-30\" />\n <p className=\"text-xs\">No saved charts yet</p>\n <p className=\"text-xs text-zinc-600\">Save charts from the Charts tab to display them here</p>\n </div>\n );\n }\n\n return (\n <div className=\"h-full overflow-auto bg-[#080808] p-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {savedCharts.map(chart => (\n <div key={chart.id} className=\"bg-[#0d0d0d] border border-white/10 rounded-lg p-3\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-xs font-medium text-zinc-300\">{chart.name}</span>\n <span className=\"text-xs text-zinc-600\">{chart.chartType}</span>\n </div>\n <div className=\"text-xs text-zinc-500\">\n {chart.xAxis && <span>X: {chart.xAxis}</span>}\n {chart.yAxis?.length > 0 && <span className=\"ml-2\">Y: {chart.yAxis.join(', ')}</span>}\n </div>\n {result ? (\n <div className=\"mt-2 h-[160px]\">\n <DataCharts result={result} />\n </div>\n ) : (\n <div className=\"mt-2 h-[100px] flex items-center justify-center text-zinc-600 text-xs\">\n Execute a query to see chart\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n}\n\ninterface BottomPanelProps {\n mode: BottomPanelMode;\n onSetMode: (mode: BottomPanelMode) => void;\n currentTab: QueryTab;\n schema: TableSchema[];\n schemaContext: string;\n activeConnection: DatabaseConnection | null;\n metadata: ProviderMetadata | null;\n historyKey: number;\n savedKey: number;\n isNL2SQLOpen: boolean;\n onSetIsNL2SQLOpen: (open: boolean) => void;\n // Masking\n maskingEnabled: boolean;\n onToggleMasking: (() => void) | undefined;\n userRole: string | undefined;\n maskingConfig: MaskingConfig;\n // Editing\n editingEnabled: boolean;\n pendingChanges: CellChange[];\n onCellChange: (change: CellChange) => void;\n onApplyChanges: () => void;\n onDiscardChanges: () => void;\n // Actions\n onExecuteQuery: (query: string) => void;\n onLoadQuery: (query: string) => void;\n onLoadMore: (() => void) | undefined;\n isLoadingMore: boolean | undefined;\n onExportResults: (format: 'csv' | 'json' | 'sql-insert' | 'sql-ddl') => void;\n}\n\nexport function BottomPanel({\n mode,\n onSetMode,\n currentTab,\n schema,\n schemaContext,\n activeConnection,\n metadata,\n historyKey,\n savedKey,\n isNL2SQLOpen,\n onSetIsNL2SQLOpen,\n maskingEnabled,\n onToggleMasking,\n userRole,\n maskingConfig,\n editingEnabled,\n pendingChanges,\n onCellChange,\n onApplyChanges,\n onDiscardChanges,\n onExecuteQuery,\n onLoadQuery,\n onLoadMore,\n isLoadingMore,\n onExportResults,\n}: BottomPanelProps) {\n const tabs: { key: BottomPanelMode; label: string; icon: React.ReactNode; activeClass: string }[] = [\n { key: 'results', label: 'Results', icon: <LayoutGrid strokeWidth={1.5} className=\"w-3 h-3\" />, activeClass: 'text-blue-400 border-blue-500 bg-white/5' },\n { key: 'explain', label: 'Explain', icon: <Zap strokeWidth={1.5} className=\"w-3 h-3\" />, activeClass: 'text-amber-400 border-amber-500 bg-white/5' },\n { key: 'history', label: 'History', icon: <Clock strokeWidth={1.5} className=\"w-3 h-3\" />, activeClass: 'text-emerald-400 border-emerald-500 bg-white/5' },\n { key: 'saved', label: 'Saved', icon: <Bookmark strokeWidth={1.5} className=\"w-3 h-3\" />, activeClass: 'text-purple-400 border-purple-500 bg-white/5' },\n { key: 'charts', label: 'Charts', icon: <BarChart3 strokeWidth={1.5} className=\"w-3 h-3\" />, activeClass: 'text-cyan-400 border-cyan-500 bg-white/5' },\n { key: 'nl2sql', label: 'NL2SQL', icon: <Sparkles strokeWidth={1.5} className=\"w-3 h-3\" />, activeClass: 'text-violet-400 border-violet-500 bg-white/5' },\n { key: 'autopilot', label: 'Autopilot', icon: <Zap strokeWidth={1.5} className=\"w-3 h-3\" />, activeClass: 'text-cyan-400 border-cyan-500 bg-white/5' },\n { key: 'pivot', label: 'Pivot', icon: <Columns3 strokeWidth={1.5} className=\"w-3 h-3\" />, activeClass: 'text-orange-400 border-orange-500 bg-white/5' },\n { key: 'docs', label: 'Docs', icon: <FileText strokeWidth={1.5} className=\"w-3 h-3\" />, activeClass: 'text-teal-400 border-teal-500 bg-white/5' },\n { key: 'schemadiff', label: 'Diff', icon: <GitCompare strokeWidth={1.5} className=\"w-3 h-3\" />, activeClass: 'text-rose-400 border-rose-500 bg-white/5' },\n { key: 'dashboard', label: 'Dashboard', icon: <LayoutDashboard strokeWidth={1.5} className=\"w-3 h-3\" />, activeClass: 'text-indigo-400 border-indigo-500 bg-white/5' },\n ];\n\n return (\n <div className=\"h-full flex flex-col bg-[#080808]\">\n <div className=\"h-9 bg-[#0a0a0a] border-b border-white/5 flex items-center justify-between px-2\">\n <div className=\"flex items-center h-full gap-1\">\n {tabs.map(tab => (\n <button\n key={tab.key}\n onClick={() => {\n onSetMode(tab.key);\n if (tab.key === 'nl2sql') onSetIsNL2SQLOpen(true);\n }}\n className={cn(\n \"h-full px-3 text-xs font-medium transition-all border-b-2 flex items-center gap-2\",\n mode === tab.key\n ? tab.activeClass\n : \"text-zinc-500 border-transparent hover:text-zinc-300\"\n )}\n >\n {tab.icon} {tab.label}\n </button>\n ))}\n </div>\n\n {currentTab.result && mode === 'results' && (\n <div className=\"flex items-center gap-1\">\n <span className=\"text-xs font-mono text-zinc-500 mr-2\">\n {currentTab.result.rowCount} rows • {currentTab.result.executionTime}ms\n </span>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs font-medium text-zinc-500 hover:text-white gap-2\">\n <Download strokeWidth={1.5} className=\"w-3 h-3\" /> Export\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"bg-[#0d0d0d] border-white/10 text-zinc-300\">\n <DropdownMenuItem onClick={() => onExportResults('csv')} className=\"text-xs cursor-pointer\">\n Export as CSV\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => onExportResults('json')} className=\"text-xs cursor-pointer\">\n Export as JSON\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => onExportResults('sql-insert')} className=\"text-xs cursor-pointer\">\n Export as SQL INSERT\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => onExportResults('sql-ddl')} className=\"text-xs cursor-pointer\">\n Export as DDL (CREATE TABLE)\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )}\n </div>\n\n <div className=\"flex-1 overflow-hidden relative\">\n {mode === 'nl2sql' ? (\n <NL2SQLPanel\n isOpen={isNL2SQLOpen}\n onClose={() => { onSetIsNL2SQLOpen(false); onSetMode('results'); }}\n onExecuteQuery={onExecuteQuery}\n onLoadQuery={(q) => { onLoadQuery(q); onSetMode('results'); }}\n schemaContext={schemaContext}\n databaseType={activeConnection?.type}\n queryLanguage={metadata?.capabilities.queryLanguage}\n />\n ) : mode === 'autopilot' ? (\n <AIAutopilotPanel\n connection={activeConnection}\n schemaContext={schemaContext}\n onExecuteQuery={onExecuteQuery}\n />\n ) : mode === 'pivot' ? (\n <PivotTable\n result={currentTab.result}\n onLoadQuery={(q) => { onLoadQuery(q); onSetMode('results'); }}\n />\n ) : mode === 'docs' ? (\n <DatabaseDocs\n schema={schema}\n schemaContext={schemaContext}\n databaseType={activeConnection?.type}\n />\n ) : mode === 'history' ? (\n <QueryHistory\n refreshTrigger={historyKey}\n activeConnectionId={activeConnection?.id}\n onSelectQuery={(q) => { onLoadQuery(q); onSetMode('results'); }}\n />\n ) : mode === 'saved' ? (\n <SavedQueries\n refreshTrigger={savedKey}\n connectionType={activeConnection?.type}\n onSelectQuery={(q) => { onLoadQuery(q); onSetMode('results'); }}\n />\n ) : mode === 'charts' ? (\n <DataCharts result={currentTab.result} />\n ) : mode === 'schemadiff' ? (\n <SchemaDiff schema={schema} connection={activeConnection} />\n ) : mode === 'dashboard' ? (\n <ChartDashboardLazy result={currentTab.result} />\n ) : currentTab.result ? (\n mode === 'explain' ? (\n <VisualExplain\n plan={currentTab.explainPlan as ExplainPlanResult[] | null | undefined}\n query={currentTab.query}\n schemaContext={schemaContext}\n databaseType={activeConnection?.type}\n onLoadQuery={(q) => { onLoadQuery(q); onSetMode('results'); }}\n />\n ) : (\n <ResultsGrid\n result={currentTab.result}\n onLoadMore={onLoadMore}\n isLoadingMore={isLoadingMore}\n maskingEnabled={maskingEnabled}\n onToggleMasking={onToggleMasking}\n userRole={userRole}\n maskingConfig={maskingConfig}\n editingEnabled={editingEnabled}\n pendingChanges={pendingChanges}\n onCellChange={onCellChange}\n onApplyChanges={onApplyChanges}\n onDiscardChanges={onDiscardChanges}\n />\n )\n ) : (\n <div className=\"h-full flex flex-col items-center justify-center opacity-20 bg-[#0a0a0a]\">\n <Terminal strokeWidth={1.5} className=\"w-12 h-12 mb-4\" />\n <p className=\"text-xs font-medium\">Execute a query or check history</p>\n <p className=\"text-xs mt-2\">Ready to query</p>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useCallback } from \"react\";\nimport { toast as sonnerToast } from \"sonner\";\n\ninterface ToastParams {\n title: string;\n description?: string;\n variant?: \"default\" | \"destructive\";\n}\n\nexport function useToast() {\n const toast = useCallback(({ title, description, variant }: ToastParams) => {\n if (variant === \"destructive\") {\n sonnerToast.error(title, { description });\n } else {\n sonnerToast.success(title, { description });\n }\n }, []);\n\n return { toast };\n}\n","'use client';\n\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport type { DatabaseConnection, TableSchema, QueryTab } from '@/lib/types';\nimport type { ProviderMetadata } from '@/hooks/use-provider-metadata';\nimport { generateTableQuery, generateSelectQuery } from '@/lib/query-generators';\n\nconst DEFAULT_TAB: QueryTab = {\n id: 'default',\n name: 'Query 1',\n query: '',\n result: null,\n isExecuting: false,\n type: 'sql'\n};\n\nconst WORKSPACE_STORAGE_PREFIX = 'libredb_workspace_tabs_v1';\n\ninterface PersistedTabState {\n id: string;\n name: string;\n query: string;\n type: QueryTab['type'];\n}\n\ninterface PersistedWorkspaceState {\n activeTabId: string;\n tabs: PersistedTabState[];\n}\n\ninterface UseTabManagerParams {\n activeConnection: DatabaseConnection | null;\n metadata: ProviderMetadata | null;\n schema: TableSchema[];\n persistWorkspace?: boolean;\n}\n\nexport function useTabManager({\n activeConnection,\n metadata,\n schema,\n persistWorkspace,\n}: UseTabManagerParams) {\n const [tabs, setTabs] = useState<QueryTab[]>([DEFAULT_TAB]);\n const [activeTabId, setActiveTabId] = useState<string>('default');\n const [editingTabId, setEditingTabId] = useState<string | null>(null);\n const [editingTabName, setEditingTabName] = useState('');\n const [isWorkspaceHydrated, setIsWorkspaceHydrated] = useState(false);\n\n const workspaceKey = useMemo(\n () => `${WORKSPACE_STORAGE_PREFIX}:${activeConnection?.id ?? 'default'}`,\n [activeConnection?.id]\n );\n const shouldPersistWorkspace = persistWorkspace ?? process.env.NODE_ENV !== 'test';\n\n const currentTab = tabs.find(t => t.id === activeTabId) || tabs[0];\n\n // LOAD EFFECT — restore tabs from localStorage on connection switch\n useEffect(() => {\n setIsWorkspaceHydrated(false);\n if (!shouldPersistWorkspace) return;\n\n const storage = typeof globalThis !== 'undefined' && 'localStorage' in globalThis\n ? globalThis.localStorage\n : null;\n if (!storage) return;\n\n try {\n const raw = storage.getItem(workspaceKey);\n if (!raw) {\n setTabs([DEFAULT_TAB]);\n setActiveTabId(DEFAULT_TAB.id);\n return;\n }\n\n const parsed = JSON.parse(raw) as PersistedWorkspaceState;\n if (!parsed || !Array.isArray(parsed.tabs) || parsed.tabs.length === 0) {\n setTabs([DEFAULT_TAB]);\n setActiveTabId(DEFAULT_TAB.id);\n return;\n }\n\n const restoredTabs: QueryTab[] = parsed.tabs.map(tab => ({\n id: tab.id,\n name: tab.name,\n query: tab.query,\n type: tab.type,\n result: null,\n isExecuting: false,\n }));\n\n const hasActiveTab = restoredTabs.some(tab => tab.id === parsed.activeTabId);\n setTabs(restoredTabs);\n setActiveTabId(hasActiveTab ? parsed.activeTabId : restoredTabs[0].id);\n } catch (error) {\n console.error('[useTabManager] Failed to restore workspace tabs:', error);\n setTabs([DEFAULT_TAB]);\n setActiveTabId(DEFAULT_TAB.id);\n }\n // NOTE: hydration flag stays false — set by ready effect below.\n }, [workspaceKey, shouldPersistWorkspace]);\n\n // READY EFFECT — fires after load's setTabs commits (next render)\n useEffect(() => {\n if (!shouldPersistWorkspace || isWorkspaceHydrated) return;\n setIsWorkspaceHydrated(true);\n }, [tabs, activeTabId, shouldPersistWorkspace, isWorkspaceHydrated]);\n\n // SAVE EFFECT — debounced write to localStorage (500ms)\n useEffect(() => {\n if (!shouldPersistWorkspace) return;\n const storage = typeof globalThis !== 'undefined' && 'localStorage' in globalThis\n ? globalThis.localStorage\n : null;\n if (!isWorkspaceHydrated || !storage) return;\n\n const timer = setTimeout(() => {\n const serialized: PersistedWorkspaceState = {\n activeTabId,\n tabs: tabs.map(tab => ({\n id: tab.id,\n name: tab.name,\n query: tab.query,\n type: tab.type,\n })),\n };\n storage.setItem(workspaceKey, JSON.stringify(serialized));\n }, 500);\n\n return () => clearTimeout(timer);\n }, [tabs, activeTabId, workspaceKey, shouldPersistWorkspace, isWorkspaceHydrated]);\n\n const updateTabById = useCallback((tabId: string, updates: Partial<QueryTab>) => {\n setTabs(prev => prev.map(t => t.id === tabId ? { ...t, ...updates } : t));\n }, []);\n\n const updateCurrentTab = useCallback((updates: Partial<QueryTab>) => {\n updateTabById(activeTabId, updates);\n }, [activeTabId, updateTabById]);\n\n const addTab = useCallback(() => {\n const newId = Math.random().toString(36).substring(7);\n const queryLanguage = metadata?.capabilities.queryLanguage;\n setTabs(prev => [...prev, {\n id: newId,\n name: `Query ${prev.length + 1}`,\n query: '',\n result: null,\n isExecuting: false,\n type: queryLanguage === 'json' ? 'mongodb' : 'sql'\n }]);\n setActiveTabId(newId);\n }, [activeConnection, metadata]);\n\n const closeTab = useCallback((id: string, e: React.MouseEvent) => {\n e.stopPropagation();\n setTabs(prev => {\n if (prev.length === 1) return prev;\n const newTabs = prev.filter(t => t.id !== id);\n if (activeTabId === id && newTabs.length > 0) {\n setActiveTabId(newTabs[newTabs.length - 1].id);\n }\n return newTabs;\n });\n }, [activeTabId]);\n\n // handleTableClick takes executeQuery as callback param to avoid circular dependency\n const handleTableClick = useCallback((\n tableName: string,\n executeQueryFn: (query: string, tabId: string) => void\n ) => {\n const capabilities = metadata?.capabilities;\n const newQuery = capabilities\n ? generateTableQuery(tableName, capabilities)\n : `SELECT * FROM ${tableName} LIMIT 50;`;\n\n const newId = Math.random().toString(36).substring(7);\n const newTab: QueryTab = {\n id: newId,\n name: tableName,\n query: newQuery,\n result: null,\n isExecuting: false,\n type: capabilities?.queryLanguage === 'json' ? 'mongodb' : 'sql'\n };\n setTabs(prev => [...prev, newTab]);\n setActiveTabId(newId);\n setTimeout(() => executeQueryFn(newQuery, newId), 100);\n }, [metadata]);\n\n const handleGenerateSelect = useCallback((tableName: string) => {\n const capabilities = metadata?.capabilities;\n const table = schema.find(t => t.name === tableName);\n const columns = table?.columns || [];\n\n const newQuery = capabilities\n ? generateSelectQuery(tableName, columns, capabilities)\n : `SELECT\\n${columns.map(c => ` ${c.name}`).join(',\\n') || ' *'}\\nFROM ${tableName}\\nWHERE 1=1\\nLIMIT 100;`;\n\n const tabType: 'sql' | 'mongodb' | 'redis' = capabilities?.queryLanguage === 'json' ? 'mongodb' : 'sql';\n\n const newId = Math.random().toString(36).substring(7);\n setTabs(prev => [...prev, {\n id: newId,\n name: `Query: ${tableName}`,\n query: newQuery,\n result: null,\n isExecuting: false,\n type: tabType\n }]);\n setActiveTabId(newId);\n }, [metadata, schema]);\n\n return {\n tabs,\n setTabs,\n activeTabId,\n setActiveTabId,\n currentTab,\n editingTabId,\n setEditingTabId,\n editingTabName,\n setEditingTabName,\n addTab,\n closeTab,\n updateCurrentTab,\n updateTabById,\n handleTableClick,\n handleGenerateSelect,\n };\n}\n","'use client';\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport type { DatabaseConnection, TableSchema } from '@/lib/types';\nimport type { WorkspaceConnection } from '@/workspace/types';\n\ninterface UseConnectionAdapterParams {\n connections: WorkspaceConnection[];\n onSchemaFetch: (connectionId: string) => Promise<TableSchema[]>;\n}\n\nexport function useConnectionAdapter({\n connections: externalConnections,\n onSchemaFetch,\n}: UseConnectionAdapterParams) {\n const connections: DatabaseConnection[] = useMemo(\n () =>\n externalConnections.map((c) => ({\n id: c.id,\n name: c.name,\n type: c.type,\n createdAt: new Date(),\n managed: true,\n })),\n [externalConnections]\n );\n\n const [activeConnection, setActiveConnection] = useState<DatabaseConnection | null>(\n connections[0] ?? null\n );\n const [schema, setSchema] = useState<TableSchema[]>([]);\n const [isLoadingSchema, setIsLoadingSchema] = useState(false);\n\n useEffect(() => {\n if (connections.length === 0) {\n setActiveConnection(null);\n return;\n }\n if (activeConnection && connections.some((c) => c.id === activeConnection.id)) {\n return;\n }\n setActiveConnection(connections[0]);\n }, [connections]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const fetchSchema = useCallback(\n async (conn: DatabaseConnection) => {\n setIsLoadingSchema(true);\n try {\n const result = await onSchemaFetch(conn.id);\n setSchema(result);\n } catch {\n setSchema([]);\n } finally {\n setIsLoadingSchema(false);\n }\n },\n [onSchemaFetch]\n );\n\n const tableNames = useMemo(() => schema.map((s) => s.name), [schema]);\n const schemaContext = useMemo(() => JSON.stringify(schema), [schema]);\n\n return {\n connections,\n setConnections: (() => {}) as React.Dispatch<React.SetStateAction<DatabaseConnection[]>>,\n activeConnection,\n setActiveConnection: setActiveConnection as (conn: DatabaseConnection | null) => void,\n schema,\n setSchema,\n isLoadingSchema,\n connectionPulse: null as 'healthy' | 'degraded' | 'error' | null,\n fetchSchema,\n tableNames,\n schemaContext,\n };\n}\n","'use client';\n\nimport { useState, useCallback, useRef, type Dispatch, type SetStateAction } from 'react';\nimport type { DatabaseConnection, QueryTab } from '@/lib/types';\nimport type { WorkspaceQueryResult, WorkspaceFeatures } from '@/workspace/types';\nimport type { BottomPanelMode } from '@/components/studio/BottomPanel';\nimport { useToast } from '@/hooks/use-toast';\nimport { isDangerousQuery } from '@/components/QuerySafetyDialog';\n\ninterface UseQueryAdapterParams {\n activeConnection: DatabaseConnection | null;\n onQueryExecute: (connectionId: string, sql: string, options?: {\n limit?: number;\n offset?: number;\n unlimited?: boolean;\n }) => Promise<WorkspaceQueryResult>;\n tabs: QueryTab[];\n activeTabId: string;\n currentTab: QueryTab;\n setTabs: Dispatch<SetStateAction<QueryTab[]>>;\n fetchSchema: (conn: DatabaseConnection) => Promise<void>;\n features: Partial<WorkspaceFeatures>;\n}\n\nexport function useQueryAdapter({\n activeConnection,\n onQueryExecute,\n tabs,\n activeTabId,\n currentTab,\n setTabs,\n fetchSchema: _fetchSchema,\n features: _features,\n}: UseQueryAdapterParams) {\n // Reserved for future use (schema refresh after DDL, feature gating)\n void _fetchSchema;\n void _features;\n const cancelledRef = useRef(false);\n\n const [safetyCheckQuery, setSafetyCheckQuery] = useState<string | null>(null);\n const [unlimitedWarningOpen, setUnlimitedWarningOpen] = useState(false);\n const [pendingUnlimitedQuery, setPendingUnlimitedQuery] = useState<{\n query: string;\n tabId: string;\n } | null>(null);\n const [historyKey, setHistoryKey] = useState(0);\n const [bottomPanelMode, setBottomPanelMode] = useState<BottomPanelMode>('results');\n\n const { toast } = useToast();\n\n const executeQuery = useCallback(async (\n overrideQuery?: string,\n tabId?: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _isExplain: boolean = false,\n ) => {\n const targetTabId = tabId || activeTabId;\n const tabToExec = tabs.find(t => t.id === targetTabId) || currentTab;\n\n const queryToExecute = overrideQuery || tabToExec.query;\n\n if (!activeConnection) {\n toast({ title: 'No Connection', description: 'Select a connection first.', variant: 'destructive' });\n return;\n }\n\n if (!queryToExecute || queryToExecute.trim() === '') {\n toast({ title: 'Empty Query', description: 'Enter a query to execute.', variant: 'destructive' });\n return;\n }\n\n // Safety check for dangerous queries (skip for force-execute via forceExecuteQuery)\n if (isDangerousQuery(queryToExecute)) {\n setSafetyCheckQuery(queryToExecute);\n return;\n }\n\n cancelledRef.current = false;\n\n // Set tab executing state\n setTabs(prev => prev.map(t => t.id === targetTabId ? {\n ...t,\n isExecuting: true,\n } : t));\n setBottomPanelMode('results');\n\n const startTime = Date.now();\n\n try {\n const result = await onQueryExecute(activeConnection.id, queryToExecute);\n\n // Check if cancelled while awaiting\n if (cancelledRef.current) return;\n\n const executionTime = result.executionTime || (Date.now() - startTime);\n\n setTabs(prev => prev.map(t => {\n if (t.id !== targetTabId) return t;\n\n return {\n ...t,\n result: {\n rows: result.rows,\n fields: result.fields,\n rowCount: result.rowCount,\n executionTime,\n pagination: result.pagination,\n },\n allRows: result.rows,\n currentOffset: result.rows.length,\n isExecuting: false,\n isLoadingMore: false,\n };\n }));\n\n setHistoryKey(prev => prev + 1);\n } catch (error) {\n // Skip updates if cancelled\n if (cancelledRef.current) return;\n\n setTabs(prev => prev.map(t => t.id === targetTabId ? {\n ...t,\n isExecuting: false,\n isLoadingMore: false,\n } : t));\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n toast({ title: 'Query Error', description: errorMessage, variant: 'destructive' });\n }\n }, [activeConnection, tabs, currentTab, activeTabId, toast, onQueryExecute, setTabs]);\n\n // Force execute (bypass safety check)\n const forceExecuteQuery = useCallback((query: string) => {\n setSafetyCheckQuery(null);\n\n if (!activeConnection) {\n toast({ title: 'No Connection', description: 'Select a connection first.', variant: 'destructive' });\n return;\n }\n\n if (!query || query.trim() === '') {\n toast({ title: 'Empty Query', description: 'Enter a query to execute.', variant: 'destructive' });\n return;\n }\n\n cancelledRef.current = false;\n\n setTabs(prev => prev.map(t => t.id === activeTabId ? {\n ...t,\n isExecuting: true,\n } : t));\n setBottomPanelMode('results');\n\n const startTime = Date.now();\n\n onQueryExecute(activeConnection.id, query)\n .then((result) => {\n if (cancelledRef.current) return;\n\n const executionTime = result.executionTime || (Date.now() - startTime);\n\n setTabs(prev => prev.map(t => {\n if (t.id !== activeTabId) return t;\n\n return {\n ...t,\n result: {\n rows: result.rows,\n fields: result.fields,\n rowCount: result.rowCount,\n executionTime,\n pagination: result.pagination,\n },\n allRows: result.rows,\n currentOffset: result.rows.length,\n isExecuting: false,\n isLoadingMore: false,\n };\n }));\n\n setHistoryKey(prev => prev + 1);\n })\n .catch((error) => {\n if (cancelledRef.current) return;\n\n setTabs(prev => prev.map(t => t.id === activeTabId ? {\n ...t,\n isExecuting: false,\n isLoadingMore: false,\n } : t));\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n toast({ title: 'Query Error', description: errorMessage, variant: 'destructive' });\n });\n }, [activeConnection, activeTabId, toast, onQueryExecute, setTabs]);\n\n // Cancel running query (best-effort via ref flag)\n const cancelQuery = useCallback(() => {\n cancelledRef.current = true;\n\n setTabs(prev => prev.map(t => t.isExecuting ? {\n ...t,\n isExecuting: false,\n isLoadingMore: false,\n } : t));\n\n toast({ title: 'Query Cancelled', description: 'Query execution was cancelled.' });\n }, [setTabs, toast]);\n\n // Load More handler\n const handleLoadMore = useCallback(() => {\n if (!currentTab.result?.pagination?.hasMore) return;\n if (!activeConnection) return;\n\n const currentOffset = currentTab.currentOffset || currentTab.result.rows.length;\n\n setTabs(prev => prev.map(t => t.id === currentTab.id ? {\n ...t,\n isLoadingMore: true,\n } : t));\n\n onQueryExecute(activeConnection.id, currentTab.query, {\n limit: 500,\n offset: currentOffset,\n })\n .then((result) => {\n if (cancelledRef.current) return;\n\n setTabs(prev => prev.map(t => {\n if (t.id !== currentTab.id) return t;\n\n const existingRows = t.allRows || t.result?.rows || [];\n const newAllRows = [...existingRows, ...result.rows];\n\n return {\n ...t,\n result: {\n rows: newAllRows,\n fields: result.fields,\n rowCount: newAllRows.length,\n executionTime: t.result?.executionTime || 0,\n pagination: result.pagination,\n },\n allRows: newAllRows,\n currentOffset: currentOffset + result.rows.length,\n isExecuting: false,\n isLoadingMore: false,\n };\n }));\n })\n .catch((error) => {\n if (cancelledRef.current) return;\n\n setTabs(prev => prev.map(t => t.id === currentTab.id ? {\n ...t,\n isExecuting: false,\n isLoadingMore: false,\n } : t));\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n toast({ title: 'Load More Error', description: errorMessage, variant: 'destructive' });\n });\n }, [currentTab, activeConnection, onQueryExecute, setTabs, toast]);\n\n // Unlimited query handler\n const handleUnlimitedQuery = useCallback(() => {\n if (!pendingUnlimitedQuery) return;\n if (!activeConnection) return;\n\n const { query, tabId } = pendingUnlimitedQuery;\n\n cancelledRef.current = false;\n\n setTabs(prev => prev.map(t => t.id === tabId ? {\n ...t,\n isExecuting: true,\n } : t));\n\n onQueryExecute(activeConnection.id, query, { unlimited: true })\n .then((result) => {\n if (cancelledRef.current) return;\n\n setTabs(prev => prev.map(t => {\n if (t.id !== tabId) return t;\n\n return {\n ...t,\n result: {\n rows: result.rows,\n fields: result.fields,\n rowCount: result.rowCount,\n executionTime: result.executionTime,\n pagination: result.pagination,\n },\n allRows: result.rows,\n currentOffset: result.rows.length,\n isExecuting: false,\n isLoadingMore: false,\n };\n }));\n\n setHistoryKey(prev => prev + 1);\n })\n .catch((error) => {\n if (cancelledRef.current) return;\n\n setTabs(prev => prev.map(t => t.id === tabId ? {\n ...t,\n isExecuting: false,\n isLoadingMore: false,\n } : t));\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n toast({ title: 'Query Error', description: errorMessage, variant: 'destructive' });\n });\n\n setUnlimitedWarningOpen(false);\n setPendingUnlimitedQuery(null);\n }, [pendingUnlimitedQuery, activeConnection, onQueryExecute, setTabs, toast]);\n\n return {\n executeQuery,\n forceExecuteQuery,\n cancelQuery,\n handleLoadMore,\n handleUnlimitedQuery,\n safetyCheckQuery,\n setSafetyCheckQuery,\n unlimitedWarningOpen,\n setUnlimitedWarningOpen,\n pendingUnlimitedQuery,\n setPendingUnlimitedQuery,\n historyKey,\n bottomPanelMode,\n setBottomPanelMode,\n };\n}\n","// src/workspace/types.ts\nimport type { DatabaseType, TableSchema, SavedQuery } from '@/lib/types';\n\n// === Connection (platform → studio) ===\n\nexport interface WorkspaceConnection {\n id: string;\n name: string;\n type: DatabaseType;\n}\n\n// === User (platform → studio) ===\n\nexport interface WorkspaceUser {\n id: string;\n name?: string;\n role?: string;\n}\n\n// === Query result (studio ← platform) ===\n\nexport interface WorkspaceQueryResult {\n rows: Record<string, unknown>[];\n fields: string[];\n columns?: { name: string; type?: string }[];\n rowCount: number;\n executionTime: number;\n pagination?: {\n limit: number;\n offset: number;\n hasMore: boolean;\n totalReturned: number;\n wasLimited: boolean;\n };\n}\n\n// === Feature flags ===\n\nexport interface WorkspaceFeatures {\n ai?: boolean;\n charts?: boolean;\n codeGenerator?: boolean;\n testDataGenerator?: boolean;\n schemaDiagram?: boolean;\n dataImport?: boolean;\n inlineEditing?: boolean;\n transactions?: boolean;\n connectionManagement?: boolean;\n dataMasking?: boolean;\n}\n\nexport const DEFAULT_WORKSPACE_FEATURES: Required<WorkspaceFeatures> = {\n ai: false,\n charts: true,\n codeGenerator: true,\n testDataGenerator: true,\n schemaDiagram: true,\n dataImport: true,\n inlineEditing: false,\n transactions: false,\n connectionManagement: false,\n dataMasking: false,\n};\n\n// === Saved query input ===\n\nexport interface SavedQueryInput {\n name: string;\n query: string;\n description?: string;\n connectionType?: string;\n tags?: string[];\n}\n\n// === Main props ===\n\nexport interface StudioWorkspaceProps {\n connections: WorkspaceConnection[];\n currentUser?: WorkspaceUser;\n\n onQueryExecute: (connectionId: string, sql: string, options?: {\n limit?: number;\n offset?: number;\n unlimited?: boolean;\n }) => Promise<WorkspaceQueryResult>;\n onSchemaFetch: (connectionId: string) => Promise<TableSchema[]>;\n\n onTestConnection?: (config: {\n type: DatabaseType;\n host: string;\n port: number;\n database: string;\n username: string;\n password: string;\n sslEnabled?: boolean;\n }) => Promise<{ success: boolean; message: string }>;\n onSaveQuery?: (query: SavedQueryInput) => Promise<void>;\n onLoadSavedQueries?: () => Promise<SavedQuery[]>;\n\n features?: WorkspaceFeatures;\n className?: string;\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { GripVerticalIcon } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction ResizablePanelGroup({\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) {\n return (\n <ResizablePrimitive.PanelGroup\n data-slot=\"resizable-panel-group\"\n className={cn(\n \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ResizablePanel({\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.Panel>) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {\n withHandle?: boolean\n}) {\n return (\n <ResizablePrimitive.PanelResizeHandle\n data-slot=\"resizable-handle\"\n className={cn(\n \"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border\">\n <GripVerticalIcon className=\"size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.PanelResizeHandle>\n )\n}\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants } from \"@/components/ui/button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-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 AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n return (\n <AlertDialogPrimitive.Action\n className={cn(buttonVariants(), className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","'use client';\n\nimport React, { useState, useEffect, useRef, useMemo, useCallback } from 'react';\nimport { Sidebar, ConnectionsList } from '@/components/sidebar';\n// MobileNav excluded in embedded mode — platform provides its own navigation\nimport { SchemaExplorer } from '@/components/schema-explorer';\nimport { QueryEditor, QueryEditorRef } from '@/components/QueryEditor';\nimport { DataImportModal } from '@/components/DataImportModal';\nimport { QuerySafetyDialog } from '@/components/QuerySafetyDialog';\nimport { DataProfiler } from '@/components/DataProfiler';\nimport { CodeGenerator } from '@/components/CodeGenerator';\nimport { TestDataGenerator } from '@/components/TestDataGenerator';\nimport { SchemaDiagram } from '@/components/SchemaDiagram';\nimport { SaveQueryModal } from '@/components/SaveQueryModal';\nimport {\n StudioTabBar,\n QueryToolbar,\n BottomPanel,\n} from '@/components/studio/index';\nimport type { DatabaseConnection } from '@/lib/types';\nimport type { MaskingConfig } from '@/lib/data-masking';\nimport { useToast } from '@/hooks/use-toast';\nimport { useTabManager } from '@/hooks/use-tab-manager';\nimport { useConnectionAdapter } from '@/workspace/hooks/use-connection-adapter';\nimport { useQueryAdapter } from '@/workspace/hooks/use-query-adapter';\nimport {\n type StudioWorkspaceProps,\n DEFAULT_WORKSPACE_FEATURES,\n} from '@/workspace/types';\nimport { cn } from '@/lib/utils';\n\n/**\n * Scoped CSS for studio's dark theme.\n * When embedded in a host app that uses different CSS variable formats\n * (e.g. OKLCH instead of hex), studio injects its own scoped styles\n * to ensure correct rendering. Uses data-studio-workspace attribute\n * for high-specificity scoping without affecting the host app.\n */\nconst STUDIO_SCOPED_CSS = `\n[data-studio-workspace] {\n /* Dark theme — monochrome (black/white/gray) */\n --background: #09090b;\n --foreground: #fafafa;\n --card: #09090b;\n --card-foreground: #fafafa;\n --popover: #09090b;\n --popover-foreground: #fafafa;\n --primary: #fafafa;\n --primary-foreground: #09090b;\n --secondary: #27272a;\n --secondary-foreground: #fafafa;\n --muted: #27272a;\n --muted-foreground: #a1a1aa;\n --accent: #27272a;\n --accent-foreground: #fafafa;\n --destructive: #dc2626;\n --destructive-foreground: #fafafa;\n --border: #27272a;\n --input: #27272a;\n --ring: #d4d4d8;\n --radius: 0.5rem;\n --chart-1: #e4e4e7;\n --chart-2: #a1a1aa;\n --chart-3: #71717a;\n --chart-4: #52525b;\n --chart-5: #3f3f46;\n\n /* Font — Geist (inherited from host or fallback to system) */\n font-family: var(--font-geist-sans, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif);\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-feature-settings: \"rlig\" 1, \"calt\" 1;\n letter-spacing: -0.011em;\n}\n[data-studio-workspace] *,\n[data-studio-workspace] *::before,\n[data-studio-workspace] *::after {\n font-family: inherit;\n}\n[data-studio-workspace] code,\n[data-studio-workspace] pre,\n[data-studio-workspace] kbd,\n[data-studio-workspace] .font-mono {\n font-family: var(--font-geist-mono, ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace);\n}\n`;\n\nfunction useStudioTheme() {\n useEffect(() => {\n const id = 'studio-workspace-theme';\n if (document.getElementById(id)) return;\n const style = document.createElement('style');\n style.id = id;\n style.textContent = STUDIO_SCOPED_CSS;\n document.head.appendChild(style);\n return () => {\n document.getElementById(id)?.remove();\n };\n }, []);\n}\nimport { AlertTriangle, Database } from 'lucide-react';\nimport { ResizablePanelGroup, ResizablePanel, ResizableHandle } from '@/components/ui/resizable';\nimport { AnimatePresence } from 'framer-motion';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogTitle,\n} from '@/components/ui/alert-dialog';\n\n// No-op masking config for embedded mode (masking disabled)\nconst NOOP_MASKING_CONFIG: MaskingConfig = {\n enabled: false,\n patterns: [],\n roleSettings: {\n admin: { canToggle: false, canReveal: false },\n user: { canToggle: false, canReveal: false },\n },\n};\n\nexport function StudioWorkspace({\n connections: externalConnections,\n currentUser,\n onQueryExecute,\n onSchemaFetch,\n onSaveQuery: onSaveQueryProp,\n // onLoadSavedQueries — reserved for future saved-queries panel integration\n features: featuresProp,\n className,\n}: StudioWorkspaceProps) {\n const queryEditorRef = useRef<QueryEditorRef>(null);\n const { toast } = useToast();\n\n // Merge feature flags with defaults\n const features = useMemo(\n () => ({ ...DEFAULT_WORKSPACE_FEATURES, ...featuresProp }),\n [featuresProp],\n );\n\n // 1. Connection Adapter (platform-managed connections)\n const conn = useConnectionAdapter({\n connections: externalConnections,\n onSchemaFetch,\n });\n\n // 2. Tab Manager (pure UI state, reused as-is)\n const tabMgr = useTabManager({\n activeConnection: conn.activeConnection,\n metadata: null,\n schema: conn.schema,\n });\n\n // 3. Query Adapter (platform-delegated execution)\n const queryExec = useQueryAdapter({\n activeConnection: conn.activeConnection,\n onQueryExecute,\n tabs: tabMgr.tabs,\n activeTabId: tabMgr.activeTabId,\n currentTab: tabMgr.currentTab,\n setTabs: tabMgr.setTabs,\n fetchSchema: conn.fetchSchema,\n features,\n });\n\n // === Inject scoped dark theme CSS ===\n useStudioTheme();\n\n // === Connection change effect ===\n useEffect(() => {\n if (conn.activeConnection) {\n conn.fetchSchema(conn.activeConnection);\n } else {\n conn.setSchema([]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [conn.activeConnection]);\n\n // === Modal / overlay state ===\n const [showDiagram, setShowDiagram] = useState(false);\n const [isSaveQueryModalOpen, setIsSaveQueryModalOpen] = useState(false);\n const [savedKey, setSavedKey] = useState(0);\n const [activeMobileTab, setActiveMobileTab] = useState<'database' | 'schema' | 'editor'>('editor');\n const [isImportModalOpen, setIsImportModalOpen] = useState(false);\n const [isNL2SQLOpen, setIsNL2SQLOpen] = useState(false);\n const [profilerTable, setProfilerTable] = useState<string | null>(null);\n const [codeGenTable, setCodeGenTable] = useState<string | null>(null);\n const [testDataTable, setTestDataTable] = useState<string | null>(null);\n\n // === Save query handler ===\n const handleSaveQuery = useCallback(async (name: string, description: string, tags: string[]) => {\n if (!conn.activeConnection) return;\n\n if (onSaveQueryProp) {\n try {\n await onSaveQueryProp({\n name,\n query: tabMgr.currentTab.query,\n description,\n connectionType: conn.activeConnection.type,\n tags,\n });\n setSavedKey(prev => prev + 1);\n toast({ title: 'Query Saved', description: `\"${name}\" has been added to your saved queries.` });\n } catch (error) {\n const msg = error instanceof Error ? error.message : 'Failed to save query';\n toast({ title: 'Save Failed', description: msg, variant: 'destructive' });\n }\n }\n }, [conn.activeConnection, tabMgr.currentTab.query, onSaveQueryProp, toast]);\n\n // === Export results (simplified, no masking) ===\n const exportResults = useCallback((format: 'csv' | 'json' | 'sql-insert' | 'sql-ddl') => {\n if (!tabMgr.currentTab.result) return;\n const data = tabMgr.currentTab.result.rows;\n let content = '';\n let mimeType = 'text/plain';\n let ext: string = format;\n\n if (format === 'csv') {\n const headers = Object.keys(data[0] || {}).join(',');\n const rows = data.map(row => Object.values(row).map(val => `\"${val}\"`).join(',')).join('\\n');\n content = `${headers}\\n${rows}`;\n mimeType = 'text/csv';\n ext = 'csv';\n } else if (format === 'json') {\n content = JSON.stringify(data, null, 2);\n mimeType = 'application/json';\n ext = 'json';\n } else if (format === 'sql-insert') {\n const tableName = tabMgr.currentTab.name.replace(/^Query[: ]*/, '') || 'table_name';\n const columns = Object.keys(data[0] || {});\n const lines = data.map(row => {\n const values = columns.map(col => {\n const val = row[col];\n if (val === null || val === undefined) return 'NULL';\n if (typeof val === 'number' || typeof val === 'boolean') return String(val);\n return `'${String(val).replace(/'/g, \"''\")}'`;\n });\n return `INSERT INTO ${tableName} (${columns.join(', ')}) VALUES (${values.join(', ')});`;\n });\n content = lines.join('\\n');\n mimeType = 'text/sql';\n ext = 'sql';\n } else if (format === 'sql-ddl') {\n const tableName = tabMgr.currentTab.name.replace(/^Query[: ]*/, '') || 'table_name';\n const columns = Object.keys(data[0] || {});\n const colDefs = columns.map(col => {\n const sampleVal = data[0]?.[col];\n let sqlType = 'TEXT';\n if (typeof sampleVal === 'number') {\n sqlType = Number.isInteger(sampleVal) ? 'INTEGER' : 'NUMERIC';\n } else if (typeof sampleVal === 'boolean') {\n sqlType = 'BOOLEAN';\n } else if (sampleVal instanceof Date) {\n sqlType = 'TIMESTAMP';\n }\n return ` ${col} ${sqlType}`;\n });\n content = `CREATE TABLE ${tableName} (\\n${colDefs.join(',\\n')}\\n);`;\n mimeType = 'text/sql';\n ext = 'sql';\n }\n\n const fileName = `query_result_export.${ext}`;\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n link.click();\n URL.revokeObjectURL(url);\n }, [tabMgr.currentTab]);\n\n // === Table click handler ===\n const onTableClick = useCallback((tableName: string) => {\n tabMgr.handleTableClick(tableName, queryExec.executeQuery);\n }, [tabMgr, queryExec.executeQuery]);\n\n // === No-op callbacks for disabled features ===\n const noop = useCallback(() => {}, []);\n\n return (\n <div\n data-studio-workspace=\"\"\n className={cn('dark flex h-full w-full bg-[#050505] text-zinc-100 overflow-hidden font-sans select-none', className)}\n >\n <ResizablePanelGroup id=\"workspace-main\" direction=\"horizontal\" className=\"h-full\">\n <ResizablePanel defaultSize={22} minSize={15} maxSize={35} className=\"hidden md:block\">\n <Sidebar\n connections={conn.connections}\n activeConnection={conn.activeConnection}\n schema={conn.schema}\n isLoadingSchema={conn.isLoadingSchema}\n onSelectConnection={conn.setActiveConnection}\n onDeleteConnection={noop}\n onEditConnection={noop}\n onAddConnection={noop}\n onTableClick={onTableClick}\n onGenerateSelect={tabMgr.handleGenerateSelect}\n onCreateTableClick={undefined}\n onShowDiagram={features.schemaDiagram ? () => setShowDiagram(true) : undefined}\n isAdmin={false}\n onOpenMaintenance={noop}\n databaseType={conn.activeConnection?.type}\n metadata={null}\n onProfileTable={features.codeGenerator ? (name: string) => setProfilerTable(name) : undefined}\n onGenerateCode={features.codeGenerator ? (name: string) => setCodeGenTable(name) : undefined}\n onGenerateTestData={features.testDataGenerator ? (name: string) => setTestDataTable(name) : undefined}\n />\n </ResizablePanel>\n <ResizableHandle className=\"hidden md:flex w-1 bg-transparent hover:bg-blue-500/30 transition-colors\" />\n <ResizablePanel defaultSize={78}>\n <div className=\"flex-1 flex flex-col min-w-0 h-full bg-[#0a0a0a]\">\n {/* No desktop/mobile headers — platform provides its own */}\n\n <StudioTabBar\n tabs={tabMgr.tabs}\n activeTabId={tabMgr.activeTabId}\n editingTabId={tabMgr.editingTabId}\n editingTabName={tabMgr.editingTabName}\n onSetActiveTabId={tabMgr.setActiveTabId}\n onSetEditingTabId={tabMgr.setEditingTabId}\n onSetEditingTabName={tabMgr.setEditingTabName}\n onSetTabs={tabMgr.setTabs}\n onCloseTab={tabMgr.closeTab}\n onAddTab={tabMgr.addTab}\n />\n\n <main className=\"flex-1 overflow-hidden relative\">\n {/* Schema Diagram overlay */}\n {features.schemaDiagram && (\n <AnimatePresence>\n {showDiagram && (\n <SchemaDiagram schema={conn.schema} onClose={() => setShowDiagram(false)} />\n )}\n </AnimatePresence>\n )}\n\n {/* Mobile: Database Tab */}\n {activeMobileTab === 'database' && (\n <div className=\"md:hidden h-full bg-[#080808] overflow-auto p-4\">\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-xs font-medium text-zinc-300\">Connections</h2>\n </div>\n <ConnectionsList\n connections={conn.connections}\n activeConnection={conn.activeConnection}\n onSelectConnection={(c: DatabaseConnection) => {\n conn.setActiveConnection(c);\n setActiveMobileTab('editor');\n }}\n onDeleteConnection={noop}\n onAddConnection={noop}\n />\n </div>\n )}\n\n {/* Mobile: Schema Tab */}\n {activeMobileTab === 'schema' && (\n <div className=\"md:hidden h-full bg-[#080808] overflow-auto p-4\">\n {conn.activeConnection ? (\n <SchemaExplorer\n schema={conn.schema}\n isLoadingSchema={conn.isLoadingSchema}\n onTableClick={(tableName: string) => {\n onTableClick(tableName);\n setActiveMobileTab('editor');\n }}\n onGenerateSelect={(tableName: string) => {\n tabMgr.handleGenerateSelect(tableName);\n setActiveMobileTab('editor');\n }}\n onCreateTableClick={undefined}\n isAdmin={false}\n onOpenMaintenance={noop}\n databaseType={conn.activeConnection?.type}\n metadata={null}\n onProfileTable={features.codeGenerator ? (name: string) => setProfilerTable(name) : undefined}\n onGenerateCode={features.codeGenerator ? (name: string) => setCodeGenTable(name) : undefined}\n onGenerateTestData={features.testDataGenerator ? (name: string) => setTestDataTable(name) : undefined}\n />\n ) : (\n <div className=\"flex flex-col items-center justify-center h-full text-zinc-500\">\n <Database strokeWidth={1.5} className=\"w-12 h-12 mb-4 opacity-30\" />\n <p className=\"text-xs\">Select a connection first</p>\n </div>\n )}\n </div>\n )}\n\n {/* Desktop & Mobile Editor Tab */}\n <div className={cn(\n 'h-full',\n activeMobileTab !== 'editor' && 'hidden md:block',\n )}>\n <div className=\"h-full\">\n <ResizablePanelGroup id=\"workspace-editor\" direction=\"vertical\">\n <ResizablePanel defaultSize={40} minSize={20}>\n <div className=\"h-full flex flex-col\">\n <QueryToolbar\n activeConnection={conn.activeConnection}\n metadata={null}\n isExecuting={tabMgr.currentTab.isExecuting}\n playgroundMode={false}\n transactionActive={false}\n editingEnabled={false}\n onSaveQuery={onSaveQueryProp ? () => setIsSaveQueryModalOpen(true) : noop}\n onExecuteQuery={() => queryExec.executeQuery()}\n onCancelQuery={queryExec.cancelQuery}\n onBeginTransaction={noop}\n onCommitTransaction={noop}\n onRollbackTransaction={noop}\n onTogglePlayground={noop}\n onToggleEditing={noop}\n onImport={features.dataImport ? () => setIsImportModalOpen(true) : noop}\n />\n\n <div className=\"flex-1 relative\">\n <QueryEditor\n ref={queryEditorRef}\n value={tabMgr.currentTab.query}\n onContentChange={(val) => tabMgr.updateTabById(tabMgr.currentTab.id, { query: val })}\n language={tabMgr.currentTab.type === 'mongodb' ? 'json' : 'sql'}\n tables={conn.tableNames}\n databaseType={conn.activeConnection?.type}\n schemaContext={conn.schemaContext}\n capabilities={undefined}\n />\n </div>\n </div>\n </ResizablePanel>\n <ResizableHandle className=\"h-1 bg-white/5 hover:bg-blue-500/20\" />\n <ResizablePanel defaultSize={60} minSize={20}>\n <BottomPanel\n mode={queryExec.bottomPanelMode}\n onSetMode={queryExec.setBottomPanelMode}\n currentTab={tabMgr.currentTab}\n schema={conn.schema}\n schemaContext={conn.schemaContext}\n activeConnection={conn.activeConnection}\n metadata={null}\n historyKey={queryExec.historyKey}\n savedKey={savedKey}\n isNL2SQLOpen={features.ai ? isNL2SQLOpen : false}\n onSetIsNL2SQLOpen={features.ai ? setIsNL2SQLOpen : noop}\n maskingEnabled={false}\n onToggleMasking={undefined}\n userRole={currentUser?.role}\n maskingConfig={NOOP_MASKING_CONFIG}\n editingEnabled={false}\n pendingChanges={[]}\n onCellChange={noop as never}\n onApplyChanges={noop}\n onDiscardChanges={noop}\n onExecuteQuery={(q) => queryExec.executeQuery(q)}\n onLoadQuery={(q) => tabMgr.updateCurrentTab({ query: q })}\n onLoadMore={\n tabMgr.currentTab.result?.pagination?.hasMore\n ? queryExec.handleLoadMore\n : undefined\n }\n isLoadingMore={tabMgr.currentTab.isLoadingMore}\n onExportResults={exportResults}\n />\n </ResizablePanel>\n </ResizablePanelGroup>\n </div>\n </div>\n </main>\n </div>\n </ResizablePanel>\n </ResizablePanelGroup>\n\n {/* Modals — only render those that are feature-enabled */}\n\n {onSaveQueryProp && (\n <SaveQueryModal\n isOpen={isSaveQueryModalOpen}\n onClose={() => setIsSaveQueryModalOpen(false)}\n onSave={handleSaveQuery}\n defaultQuery={tabMgr.currentTab.query}\n />\n )}\n\n {features.dataImport && (\n <DataImportModal\n isOpen={isImportModalOpen}\n onClose={() => setIsImportModalOpen(false)}\n onImport={(sql) => queryExec.executeQuery(sql)}\n tables={conn.schema}\n databaseType={conn.activeConnection?.type}\n />\n )}\n\n {/* Safety dialog — stub AI analysis to prevent internal fetch */}\n <QuerySafetyDialog\n isOpen={!!queryExec.safetyCheckQuery}\n query={queryExec.safetyCheckQuery || ''}\n schemaContext={conn.schemaContext}\n databaseType={conn.activeConnection?.type}\n onClose={() => queryExec.setSafetyCheckQuery(null)}\n onProceed={() => {\n if (queryExec.safetyCheckQuery) queryExec.forceExecuteQuery(queryExec.safetyCheckQuery);\n }}\n onAnalyzeSafety={async () => ({\n riskLevel: 'high' as const,\n summary: 'Potentially dangerous query detected',\n warnings: [{\n type: 'destructive',\n severity: 'high',\n message: 'This query may modify or delete data',\n detail: 'Review carefully before proceeding.',\n }],\n affectedRows: 'unknown',\n cascadeEffects: 'unknown',\n recommendation: 'Review this query carefully before proceeding.',\n })}\n />\n\n {/* Data Profiler */}\n {features.codeGenerator && (\n <DataProfiler\n isOpen={!!profilerTable}\n onClose={() => setProfilerTable(null)}\n tableName={profilerTable || ''}\n tableSchema={conn.schema.find(t => t.name === profilerTable) || null}\n connection={conn.activeConnection}\n schemaContext={conn.schemaContext}\n databaseType={conn.activeConnection?.type}\n />\n )}\n\n {/* Code Generator */}\n {features.codeGenerator && (\n <CodeGenerator\n isOpen={!!codeGenTable}\n onClose={() => setCodeGenTable(null)}\n tableName={codeGenTable || ''}\n tableSchema={conn.schema.find(t => t.name === codeGenTable) || null}\n databaseType={conn.activeConnection?.type}\n />\n )}\n\n {/* Test Data Generator */}\n {features.testDataGenerator && (\n <TestDataGenerator\n isOpen={!!testDataTable}\n onClose={() => setTestDataTable(null)}\n tableName={testDataTable || ''}\n tableSchema={conn.schema.find(t => t.name === testDataTable) || null}\n databaseType={conn.activeConnection?.type}\n queryLanguage={undefined}\n onExecuteQuery={(q) => queryExec.executeQuery(q)}\n />\n )}\n\n {/* Unlimited Query Warning */}\n <AlertDialog open={queryExec.unlimitedWarningOpen} onOpenChange={queryExec.setUnlimitedWarningOpen}>\n <AlertDialogContent className=\"bg-[#111] border-white/5 max-w-sm p-0 gap-0 overflow-hidden\">\n <div className=\"px-6 pt-6 pb-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-10 h-10 rounded-xl bg-gradient-to-br from-amber-500/20 to-red-500/10 flex items-center justify-center shrink-0\">\n <AlertTriangle strokeWidth={1.5} className=\"w-5 h-5 text-amber-400\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <AlertDialogTitle className=\"text-xs font-medium text-zinc-100 mb-1\">\n Load all results?\n </AlertDialogTitle>\n <AlertDialogDescription className=\"text-xs text-zinc-500 leading-relaxed\">\n This may slow down your browser. Max <span className=\"text-zinc-400\">100K</span> rows will be loaded.\n </AlertDialogDescription>\n </div>\n </div>\n </div>\n <div className=\"px-6 pb-6 flex gap-2\">\n <AlertDialogCancel className=\"flex-1 h-9 bg-white/5 border-0 text-zinc-400 text-xs font-medium hover:bg-white/10 hover:text-zinc-200\">\n Cancel\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={queryExec.handleUnlimitedQuery}\n className=\"flex-1 h-9 bg-amber-600 border-0 text-white text-xs font-medium hover:bg-amber-500\"\n >\n Load All\n </AlertDialogAction>\n </div>\n </AlertDialogContent>\n </AlertDialog>\n\n {/* Mobile Navigation — hidden in embedded mode, platform provides its own */}\n </div>\n );\n}\n"]}
|