@libredb/studio 0.9.7 → 0.9.12
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-34YQUUCM.mjs +319 -0
- package/dist/chunk-34YQUUCM.mjs.map +1 -0
- package/dist/chunk-4LVB3K53.mjs +37 -0
- package/dist/chunk-4LVB3K53.mjs.map +1 -0
- package/dist/chunk-6DRZXXNT.mjs +100 -0
- package/dist/chunk-6DRZXXNT.mjs.map +1 -0
- package/dist/chunk-CZVV3JJB.mjs +160 -0
- package/dist/chunk-CZVV3JJB.mjs.map +1 -0
- package/dist/chunk-D4WVWWWF.js +332 -0
- package/dist/chunk-D4WVWWWF.js.map +1 -0
- package/dist/chunk-DY3KXE44.mjs +3 -0
- package/dist/chunk-DY3KXE44.mjs.map +1 -0
- package/dist/chunk-DZ2UB3C6.mjs +6679 -0
- package/dist/chunk-DZ2UB3C6.mjs.map +1 -0
- package/dist/chunk-FYSE52VB.js +242 -0
- package/dist/chunk-FYSE52VB.js.map +1 -0
- package/dist/chunk-G4WYE6TI.js +4 -0
- package/dist/chunk-G4WYE6TI.js.map +1 -0
- package/dist/chunk-JOGLIOFO.js +1310 -0
- package/dist/chunk-JOGLIOFO.js.map +1 -0
- package/dist/chunk-JZO5KRZN.js +165 -0
- package/dist/chunk-JZO5KRZN.js.map +1 -0
- package/dist/chunk-KV356UXJ.js +253 -0
- package/dist/chunk-KV356UXJ.js.map +1 -0
- package/dist/chunk-PPODO6HX.mjs +237 -0
- package/dist/chunk-PPODO6HX.mjs.map +1 -0
- package/dist/chunk-PTIRB2JO.js +258 -0
- package/dist/chunk-PTIRB2JO.js.map +1 -0
- package/dist/chunk-Q6LRDBK7.js +42 -0
- package/dist/chunk-Q6LRDBK7.js.map +1 -0
- package/dist/chunk-QJP5FZRY.mjs +255 -0
- package/dist/chunk-QJP5FZRY.mjs.map +1 -0
- package/dist/chunk-R3POCJK6.mjs +248 -0
- package/dist/chunk-R3POCJK6.mjs.map +1 -0
- package/dist/chunk-RBVDMLFV.js +6747 -0
- package/dist/chunk-RBVDMLFV.js.map +1 -0
- package/dist/chunk-RCQB4FCE.js +186 -0
- package/dist/chunk-RCQB4FCE.js.map +1 -0
- package/dist/chunk-SR5DRGBX.mjs +174 -0
- package/dist/chunk-SR5DRGBX.mjs.map +1 -0
- package/dist/chunk-VLCRUZX7.js +102 -0
- package/dist/chunk-VLCRUZX7.js.map +1 -0
- package/dist/chunk-VWVRUCQO.mjs +1289 -0
- package/dist/chunk-VWVRUCQO.mjs.map +1 -0
- package/dist/components.d.mts +273 -0
- package/dist/components.d.ts +273 -0
- package/dist/components.js +59 -0
- package/dist/components.js.map +1 -0
- package/dist/components.mjs +6 -0
- package/dist/components.mjs.map +1 -0
- package/dist/custom-BNDOYC5P.js +134 -0
- package/dist/custom-BNDOYC5P.js.map +1 -0
- package/dist/custom-S2EKFMP3.mjs +132 -0
- package/dist/custom-S2EKFMP3.mjs.map +1 -0
- package/dist/gemini-4ASHNK4H.js +81 -0
- package/dist/gemini-4ASHNK4H.js.map +1 -0
- package/dist/gemini-C5RBLQEJ.mjs +79 -0
- package/dist/gemini-C5RBLQEJ.mjs.map +1 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +10 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mongodb-XMZEZA4A.mjs +748 -0
- package/dist/mongodb-XMZEZA4A.mjs.map +1 -0
- package/dist/mongodb-YQJJTLX3.js +750 -0
- package/dist/mongodb-YQJJTLX3.js.map +1 -0
- package/dist/mssql-PMOU4D36.js +916 -0
- package/dist/mssql-PMOU4D36.js.map +1 -0
- package/{src/lib/db/providers/sql/mssql.ts → dist/mssql-ZH5VP2C5.mjs} +268 -423
- package/dist/mssql-ZH5VP2C5.mjs.map +1 -0
- package/{src/lib/db/providers/sql/mysql.ts → dist/mysql-I3WJQXN2.mjs} +277 -428
- package/dist/mysql-I3WJQXN2.mjs.map +1 -0
- package/dist/mysql-Y3MSA5QY.js +833 -0
- package/dist/mysql-Y3MSA5QY.js.map +1 -0
- package/dist/ollama-26BYLVEV.mjs +115 -0
- package/dist/ollama-26BYLVEV.mjs.map +1 -0
- package/dist/ollama-HVWAGKQC.js +117 -0
- package/dist/ollama-HVWAGKQC.js.map +1 -0
- package/dist/openai-4U56KPG7.mjs +111 -0
- package/dist/openai-4U56KPG7.mjs.map +1 -0
- package/dist/openai-AK3R37BS.js +113 -0
- package/dist/openai-AK3R37BS.js.map +1 -0
- package/dist/oracle-L6VEAVXO.js +917 -0
- package/dist/oracle-L6VEAVXO.js.map +1 -0
- package/{src/lib/db/providers/sql/oracle.ts → dist/oracle-P2G7T4P4.mjs} +321 -454
- package/dist/oracle-P2G7T4P4.mjs.map +1 -0
- package/{src/lib/db/providers/sql/postgres.ts → dist/postgres-O5KOQUVP.mjs} +261 -471
- package/dist/postgres-O5KOQUVP.mjs.map +1 -0
- package/dist/postgres-RLCWNFFX.js +971 -0
- package/dist/postgres-RLCWNFFX.js.map +1 -0
- package/dist/providers.d.mts +149 -0
- package/dist/providers.d.ts +149 -0
- package/dist/providers.js +44 -0
- package/dist/providers.js.map +1 -0
- package/dist/providers.mjs +7 -0
- package/dist/providers.mjs.map +1 -0
- package/dist/redis-4WMQOVLX.mjs +435 -0
- package/dist/redis-4WMQOVLX.mjs.map +1 -0
- package/dist/redis-QVQ6YU62.js +441 -0
- package/dist/redis-QVQ6YU62.js.map +1 -0
- package/dist/sqlite-4I2P2OGQ.js +554 -0
- package/dist/sqlite-4I2P2OGQ.js.map +1 -0
- package/dist/sqlite-OA4YJX5S.mjs +531 -0
- package/dist/sqlite-OA4YJX5S.mjs.map +1 -0
- package/dist/types-BJvJfxSY.d.mts +141 -0
- package/dist/types-BJvJfxSY.d.ts +141 -0
- package/dist/types-ClAg_v5k.d.mts +343 -0
- package/dist/types-Der_X8E8.d.ts +343 -0
- package/dist/types.d.mts +2 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +3 -0
- package/dist/types.mjs.map +1 -0
- package/dist/workspace.d.mts +80 -0
- package/dist/workspace.d.ts +80 -0
- package/dist/workspace.js +4182 -0
- package/dist/workspace.js.map +1 -0
- package/dist/workspace.mjs +4155 -0
- package/dist/workspace.mjs.map +1 -0
- package/package.json +60 -5
- package/.claude/settings.local.json +0 -127
- package/.cursorrules +0 -426
- package/.devin/wiki.json +0 -143
- package/.dockerignore +0 -80
- package/.env.example +0 -159
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -49
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -29
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -57
- package/.github/workflows/ci.yml +0 -185
- package/.github/workflows/codeql.yml +0 -57
- package/.github/workflows/docker-build-push.yml +0 -118
- package/.github/workflows/helm-release.yml +0 -113
- package/CLAUDE.md +0 -265
- package/CODE_OF_CONDUCT.md +0 -124
- package/CONTRIBUTING.md +0 -154
- package/Dockerfile +0 -73
- package/SECURITY.md +0 -107
- package/artifacthub-repo.yml +0 -4
- package/bun.lock +0 -1714
- package/bunfig.toml +0 -3
- package/charts/libredb-studio/.helmignore +0 -11
- package/charts/libredb-studio/Chart.lock +0 -6
- package/charts/libredb-studio/Chart.yaml +0 -50
- package/charts/libredb-studio/README.md +0 -206
- package/charts/libredb-studio/templates/NOTES.txt +0 -59
- package/charts/libredb-studio/templates/_helpers.tpl +0 -135
- package/charts/libredb-studio/templates/configmap.yaml +0 -37
- package/charts/libredb-studio/templates/deployment.yaml +0 -184
- package/charts/libredb-studio/templates/hpa.yaml +0 -32
- package/charts/libredb-studio/templates/ingress.yaml +0 -41
- package/charts/libredb-studio/templates/networkpolicy.yaml +0 -50
- package/charts/libredb-studio/templates/pdb.yaml +0 -18
- package/charts/libredb-studio/templates/pvc.yaml +0 -23
- package/charts/libredb-studio/templates/secret.yaml +0 -30
- package/charts/libredb-studio/templates/seed-configmap.yaml +0 -11
- package/charts/libredb-studio/templates/service.yaml +0 -22
- package/charts/libredb-studio/templates/serviceaccount.yaml +0 -13
- package/charts/libredb-studio/values.schema.json +0 -246
- package/charts/libredb-studio/values.yaml +0 -286
- package/components.json +0 -22
- package/conductor/code_styleguides/typescript.md +0 -43
- package/conductor/product-guidelines.md +0 -43
- package/conductor/product.md +0 -3
- package/conductor/setup_state.json +0 -1
- package/conductor/tech-stack.md +0 -39
- package/conductor/tracks/enhance_postgres_monitoring_20251227/metadata.json +0 -8
- package/conductor/tracks/enhance_postgres_monitoring_20251227/plan.md +0 -44
- package/conductor/tracks/enhance_postgres_monitoring_20251227/spec.md +0 -31
- package/conductor/tracks.md +0 -8
- package/conductor/workflow.md +0 -333
- package/database-compose.yml +0 -55
- package/docker/postgres-init/01-extensions.sql +0 -10
- package/docker/postgres-init/02-sample-data.sql +0 -585
- package/docker/postgres.yml +0 -68
- package/docker-compose.yml +0 -38
- package/docs/AI_PLAN.md +0 -74
- package/docs/API_DOCS.md +0 -875
- package/docs/ARCHITECTURE.md +0 -218
- package/docs/DATABASE_PROVIDERS.md +0 -358
- package/docs/FEATURES.md +0 -116
- package/docs/HELM_CHART.md +0 -252
- package/docs/LOGIN_PAGE.md +0 -178
- package/docs/MONACO_EDITOR_PERFORMANCE.md +0 -315
- package/docs/OIDC_ARCH.md +0 -681
- package/docs/OIDC_SETUP.md +0 -322
- package/docs/POSTGRES_METRICS.md +0 -516
- package/docs/QUERY_OPTIMIZATION.md +0 -370
- package/docs/SEED_CONNECTIONS.md +0 -468
- package/docs/SQL_ALIAS_COMPLETION.md +0 -190
- package/docs/STORAGE_ARCHITECTURE.md +0 -565
- package/docs/STORAGE_QUICK_SETUP.md +0 -419
- package/docs/TECHNICAL_PLAN.md +0 -36
- package/docs/THEMING.md +0 -345
- package/docs/adding-a-new-database-provider.md +0 -642
- package/docs/backlogs/000-PLATFORM_DATA_SYNC_DATABASE.md +0 -360
- package/docs/backlogs/001-INLINE_DATA_EDITING.md +0 -118
- package/docs/backlogs/002-DATA_IMPORT.md +0 -215
- package/docs/backlogs/003-QUERY_TIME_MACHINE.md +0 -183
- package/docs/backlogs/004-AI_DATA_STORYTELLER.md +0 -292
- package/docs/backlogs/005-QUERY_PLAYGROUND.md +0 -352
- package/docs/backlogs/006-DATA_MASKING.md +0 -418
- package/docs/enterprise-features.md +0 -718
- package/docs/kubernetes-helm-chart-artifacthub-plan.md +0 -803
- package/docs/medium-koyeb-article-en.md +0 -215
- package/docs/plans/test-plans.md +0 -445
- package/docs/releases/RELEASE.V0.3.0.md +0 -22
- package/docs/releases/RELEASE.V0.4.0.md +0 -154
- package/docs/releases/RELEASE.V0.5.0.md +0 -252
- package/docs/releases/RELEASE_v0.5.6.md +0 -145
- package/docs/releases/RELEASE_v0.6.1.md +0 -303
- package/docs/releases/RELEASE_v0.6.7.md +0 -292
- package/docs/releases/RELEASE_v0.7.0.md +0 -332
- package/docs/releases/RELEASE_v0.8.0.md +0 -521
- package/docs/sampledb/titanic.sql +0 -1379
- package/docs/superpowers/plans/2026-03-25-seed-connections.md +0 -1362
- package/docs/superpowers/specs/2026-03-25-seed-connections-design.md +0 -590
- package/e2e/admin-dashboard.spec.ts +0 -64
- package/e2e/connection-management.spec.ts +0 -58
- package/e2e/export.spec.ts +0 -34
- package/e2e/login.spec.ts +0 -85
- package/e2e/query-execution.spec.ts +0 -35
- package/e2e/tab-management.spec.ts +0 -64
- package/eslint.config.mjs +0 -28
- package/fly.toml +0 -43
- package/next.config.ts +0 -32
- package/playwright.config.ts +0 -34
- package/postcss.config.mjs +0 -7
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/file.svg +0 -1
- package/public/globe.svg +0 -1
- package/public/logo.svg +0 -32
- package/public/next.svg +0 -1
- package/public/screenshots/code-generator.png +0 -0
- package/public/screenshots/connection-modal.png +0 -0
- package/public/screenshots/data-profiler.png +0 -0
- package/public/screenshots/erd-diagram.png +0 -0
- package/public/screenshots/hero-editor.png +0 -0
- package/public/screenshots/nl2sql.png +0 -0
- package/public/vercel.svg +0 -1
- package/public/window.svg +0 -1
- package/render.yaml +0 -58
- package/scripts/merge-lcov.mjs +0 -239
- package/sonar-project.properties +0 -16
- package/src/app/admin/error.tsx +0 -46
- package/src/app/admin/page.tsx +0 -10
- package/src/app/api/admin/audit/route.ts +0 -52
- package/src/app/api/admin/fleet-health/route.ts +0 -81
- package/src/app/api/ai/autopilot/route.ts +0 -105
- package/src/app/api/ai/chat/route.ts +0 -132
- package/src/app/api/ai/describe-schema/route.ts +0 -52
- package/src/app/api/ai/explain/route.ts +0 -86
- package/src/app/api/ai/impact/route.ts +0 -97
- package/src/app/api/ai/index-advisor/route.ts +0 -98
- package/src/app/api/ai/nl2sql/route.ts +0 -87
- package/src/app/api/ai/query-safety/route.ts +0 -87
- package/src/app/api/auth/login/route.ts +0 -62
- package/src/app/api/auth/logout/route.ts +0 -25
- package/src/app/api/auth/me/route.ts +0 -10
- package/src/app/api/auth/oidc/callback/route.ts +0 -82
- package/src/app/api/auth/oidc/login/route.ts +0 -43
- package/src/app/api/connections/managed/route.ts +0 -35
- package/src/app/api/db/cancel/route.ts +0 -42
- package/src/app/api/db/disconnect/route.ts +0 -28
- package/src/app/api/db/health/route.ts +0 -49
- package/src/app/api/db/maintenance/route.ts +0 -72
- package/src/app/api/db/monitoring/route.ts +0 -62
- package/src/app/api/db/multi-query/route.ts +0 -116
- package/src/app/api/db/pool-stats/route.ts +0 -37
- package/src/app/api/db/profile/route.ts +0 -144
- package/src/app/api/db/provider-meta/route.ts +0 -49
- package/src/app/api/db/query/route.ts +0 -50
- package/src/app/api/db/schema/route.ts +0 -47
- package/src/app/api/db/schema-snapshot/route.ts +0 -42
- package/src/app/api/db/test-connection/route.ts +0 -55
- package/src/app/api/db/transaction/route.ts +0 -111
- package/src/app/api/storage/[collection]/route.ts +0 -67
- package/src/app/api/storage/config/route.ts +0 -17
- package/src/app/api/storage/migrate/route.ts +0 -45
- package/src/app/api/storage/route.ts +0 -32
- package/src/app/error.tsx +0 -49
- package/src/app/global-error.tsx +0 -55
- package/src/app/globals.css +0 -146
- package/src/app/icon.svg +0 -42
- package/src/app/layout.tsx +0 -34
- package/src/app/login/login-form.tsx +0 -301
- package/src/app/login/page.tsx +0 -11
- package/src/app/monitoring/page.tsx +0 -8
- package/src/app/not-found.tsx +0 -29
- package/src/app/page.tsx +0 -5
- package/src/components/AIAutopilotPanel.tsx +0 -238
- package/src/components/CodeGenerator.tsx +0 -271
- package/src/components/CommandPalette.tsx +0 -227
- package/src/components/ConnectionModal.tsx +0 -759
- package/src/components/CreateTableModal.tsx +0 -281
- package/src/components/DataCharts.tsx +0 -962
- package/src/components/DataImportModal.tsx +0 -582
- package/src/components/DataProfiler.tsx +0 -335
- package/src/components/DatabaseDocs.tsx +0 -251
- package/src/components/MaskingSettings.tsx +0 -414
- package/src/components/MobileNav.tsx +0 -50
- package/src/components/NL2SQLPanel.tsx +0 -281
- package/src/components/PivotTable.tsx +0 -257
- package/src/components/QueryEditor.tsx +0 -760
- package/src/components/QueryHistory.tsx +0 -344
- package/src/components/QuerySafetyDialog.tsx +0 -290
- package/src/components/ResultsGrid.tsx +0 -644
- package/src/components/SaveQueryModal.tsx +0 -104
- package/src/components/SavedQueries.tsx +0 -128
- package/src/components/SchemaDiagram.tsx +0 -473
- package/src/components/SchemaDiff.tsx +0 -473
- package/src/components/SnapshotTimeline.tsx +0 -116
- package/src/components/Studio.tsx +0 -639
- package/src/components/TestDataGenerator.tsx +0 -261
- package/src/components/VisualExplain.tsx +0 -820
- package/src/components/admin/AdminDashboard.tsx +0 -163
- package/src/components/admin/tabs/AuditTab.tsx +0 -531
- package/src/components/admin/tabs/MonitoringEmbed.tsx +0 -11
- package/src/components/admin/tabs/OperationsTab.tsx +0 -646
- package/src/components/admin/tabs/OverviewTab.tsx +0 -1328
- package/src/components/admin/tabs/SecurityTab.tsx +0 -284
- package/src/components/community-section.tsx +0 -92
- package/src/components/icons/db-icons.tsx +0 -84
- package/src/components/libredb-logo.tsx +0 -61
- package/src/components/monitoring/MonitoringDashboard.tsx +0 -345
- package/src/components/monitoring/tabs/MetricChart.tsx +0 -82
- package/src/components/monitoring/tabs/OverviewTab.tsx +0 -263
- package/src/components/monitoring/tabs/PerformanceTab.tsx +0 -254
- package/src/components/monitoring/tabs/PoolTab.tsx +0 -174
- package/src/components/monitoring/tabs/QueriesTab.tsx +0 -287
- package/src/components/monitoring/tabs/SessionsTab.tsx +0 -316
- package/src/components/monitoring/tabs/StorageTab.tsx +0 -335
- package/src/components/monitoring/tabs/TablesTab.tsx +0 -300
- package/src/components/results-grid/ResultCard.tsx +0 -111
- package/src/components/results-grid/RowDetailSheet.tsx +0 -178
- package/src/components/results-grid/StatsBar.tsx +0 -201
- package/src/components/results-grid/index.ts +0 -1
- package/src/components/results-grid/utils.ts +0 -23
- package/src/components/schema-explorer/ColumnList.tsx +0 -53
- package/src/components/schema-explorer/SchemaExplorer.tsx +0 -182
- package/src/components/schema-explorer/TableItem.tsx +0 -210
- package/src/components/schema-explorer/index.ts +0 -1
- package/src/components/sidebar/ConnectionItem.tsx +0 -105
- package/src/components/sidebar/ConnectionsList.tsx +0 -62
- package/src/components/sidebar/Sidebar.tsx +0 -130
- package/src/components/sidebar/index.ts +0 -2
- package/src/components/studio/BottomPanel.tsx +0 -286
- package/src/components/studio/QueryToolbar.tsx +0 -180
- package/src/components/studio/StudioDesktopHeader.tsx +0 -114
- package/src/components/studio/StudioMobileHeader.tsx +0 -340
- package/src/components/studio/StudioTabBar.tsx +0 -82
- package/src/components/studio/index.ts +0 -5
- package/src/components/ui/accordion.tsx +0 -66
- package/src/components/ui/alert-dialog.tsx +0 -157
- package/src/components/ui/alert.tsx +0 -66
- package/src/components/ui/aspect-ratio.tsx +0 -11
- package/src/components/ui/avatar.tsx +0 -53
- package/src/components/ui/badge.tsx +0 -46
- package/src/components/ui/breadcrumb.tsx +0 -109
- package/src/components/ui/button-group.tsx +0 -83
- package/src/components/ui/button.tsx +0 -60
- package/src/components/ui/calendar.tsx +0 -216
- package/src/components/ui/card.tsx +0 -92
- package/src/components/ui/carousel.tsx +0 -241
- package/src/components/ui/chart.tsx +0 -357
- package/src/components/ui/checkbox.tsx +0 -32
- package/src/components/ui/collapsible.tsx +0 -33
- package/src/components/ui/command.tsx +0 -184
- package/src/components/ui/context-menu.tsx +0 -252
- package/src/components/ui/dialog.tsx +0 -143
- package/src/components/ui/drawer.tsx +0 -135
- package/src/components/ui/dropdown-menu.tsx +0 -257
- package/src/components/ui/empty.tsx +0 -104
- package/src/components/ui/field.tsx +0 -248
- package/src/components/ui/form.tsx +0 -167
- package/src/components/ui/hover-card.tsx +0 -44
- package/src/components/ui/input-group.tsx +0 -170
- package/src/components/ui/input-otp.tsx +0 -77
- package/src/components/ui/input.tsx +0 -21
- package/src/components/ui/item.tsx +0 -193
- package/src/components/ui/kbd.tsx +0 -28
- package/src/components/ui/label.tsx +0 -24
- package/src/components/ui/menubar.tsx +0 -276
- package/src/components/ui/navigation-menu.tsx +0 -168
- package/src/components/ui/pagination.tsx +0 -127
- package/src/components/ui/popover.tsx +0 -48
- package/src/components/ui/progress.tsx +0 -31
- package/src/components/ui/radio-group.tsx +0 -45
- package/src/components/ui/resizable.tsx +0 -56
- package/src/components/ui/scroll-area.tsx +0 -58
- package/src/components/ui/select.tsx +0 -187
- package/src/components/ui/separator.tsx +0 -28
- package/src/components/ui/sheet.tsx +0 -139
- package/src/components/ui/sidebar.tsx +0 -726
- package/src/components/ui/skeleton.tsx +0 -13
- package/src/components/ui/slider.tsx +0 -63
- package/src/components/ui/sonner.tsx +0 -40
- package/src/components/ui/spinner.tsx +0 -16
- package/src/components/ui/switch.tsx +0 -31
- package/src/components/ui/table.tsx +0 -116
- package/src/components/ui/tabs.tsx +0 -66
- package/src/components/ui/textarea.tsx +0 -18
- package/src/components/ui/toggle-group.tsx +0 -83
- package/src/components/ui/toggle.tsx +0 -47
- package/src/components/ui/tooltip.tsx +0 -61
- package/src/exports/components.ts +0 -15
- package/src/exports/index.ts +0 -4
- package/src/exports/providers.ts +0 -4
- package/src/exports/types.ts +0 -26
- package/src/hooks/use-ai-chat.ts +0 -182
- package/src/hooks/use-all-connections.ts +0 -66
- package/src/hooks/use-api-call.ts +0 -71
- package/src/hooks/use-auth.ts +0 -51
- package/src/hooks/use-connection-form.ts +0 -349
- package/src/hooks/use-connection-manager.ts +0 -169
- package/src/hooks/use-connection-payload.ts +0 -15
- package/src/hooks/use-inline-editing.ts +0 -109
- package/src/hooks/use-mobile.ts +0 -20
- package/src/hooks/use-monitoring-data.ts +0 -270
- package/src/hooks/use-provider-metadata.ts +0 -62
- package/src/hooks/use-query-execution.ts +0 -478
- package/src/hooks/use-storage-sync.ts +0 -259
- package/src/hooks/use-tab-manager.ts +0 -231
- package/src/hooks/use-toast.ts +0 -20
- package/src/hooks/use-transaction-control.ts +0 -64
- package/src/lib/api/error-codes.ts +0 -30
- package/src/lib/api/errors.ts +0 -236
- package/src/lib/api/with-error-handler.ts +0 -41
- package/src/lib/audit.ts +0 -105
- package/src/lib/auth.ts +0 -87
- package/src/lib/connection-string-parser.ts +0 -172
- package/src/lib/data-masking.ts +0 -385
- package/src/lib/db/base-provider.ts +0 -325
- package/src/lib/db/errors.ts +0 -317
- package/src/lib/db/factory.ts +0 -324
- package/src/lib/db/index.ts +0 -123
- package/src/lib/db/providers/document/index.ts +0 -6
- package/src/lib/db/providers/document/mongodb.ts +0 -992
- package/src/lib/db/providers/keyvalue/redis.ts +0 -554
- package/src/lib/db/providers/sql/index.ts +0 -11
- package/src/lib/db/providers/sql/sql-base.ts +0 -174
- package/src/lib/db/providers/sql/sqlite.ts +0 -721
- package/src/lib/db/types.ts +0 -437
- package/src/lib/db/utils/pool-manager.ts +0 -287
- package/src/lib/db/utils/query-limiter.ts +0 -239
- package/src/lib/db-ui-config.ts +0 -86
- package/src/lib/editor/mongodb-completions.ts +0 -172
- package/src/lib/editor/sql-completions.ts +0 -280
- package/src/lib/llm/base-provider.ts +0 -117
- package/src/lib/llm/factory.ts +0 -102
- package/src/lib/llm/index.ts +0 -90
- package/src/lib/llm/providers/custom.ts +0 -181
- package/src/lib/llm/providers/gemini.ts +0 -126
- package/src/lib/llm/providers/ollama.ts +0 -154
- package/src/lib/llm/providers/openai.ts +0 -146
- package/src/lib/llm/types.ts +0 -173
- package/src/lib/llm/utils/config.ts +0 -187
- package/src/lib/llm/utils/retry.ts +0 -119
- package/src/lib/llm/utils/streaming.ts +0 -202
- package/src/lib/logger.ts +0 -127
- package/src/lib/monitoring-thresholds.ts +0 -44
- package/src/lib/oidc.ts +0 -262
- package/src/lib/query-generators.ts +0 -61
- package/src/lib/schema-diff/diff-engine.ts +0 -273
- package/src/lib/schema-diff/migration-generator.ts +0 -208
- package/src/lib/schema-diff/types.ts +0 -55
- package/src/lib/seed/config-loader.ts +0 -79
- package/src/lib/seed/connection-filter.ts +0 -49
- package/src/lib/seed/credential-resolver.ts +0 -62
- package/src/lib/seed/index.ts +0 -40
- package/src/lib/seed/resolve-connection.ts +0 -57
- package/src/lib/seed/types.ts +0 -69
- package/src/lib/sql/alias-extractor.ts +0 -267
- package/src/lib/sql/index.ts +0 -8
- package/src/lib/sql/statement-splitter.ts +0 -167
- package/src/lib/sql/types.ts +0 -40
- package/src/lib/ssh/tunnel.ts +0 -142
- package/src/lib/storage/factory.ts +0 -84
- package/src/lib/storage/index.ts +0 -14
- package/src/lib/storage/local-storage.ts +0 -99
- package/src/lib/storage/providers/postgres.ts +0 -225
- package/src/lib/storage/providers/sqlite.ts +0 -153
- package/src/lib/storage/storage-facade.ts +0 -272
- package/src/lib/storage/types.ts +0 -75
- package/src/lib/time-series-buffer.ts +0 -58
- package/src/lib/types.ts +0 -173
- package/src/lib/utils.ts +0 -6
- package/src/proxy.ts +0 -104
- package/src/types/db-drivers.d.ts +0 -23
- package/src/types/html2canvas.d.ts +0 -9
- package/tests/api/admin/audit.test.ts +0 -178
- package/tests/api/admin/fleet-health.test.ts +0 -183
- package/tests/api/ai/autopilot.test.ts +0 -174
- package/tests/api/ai/chat.test.ts +0 -250
- package/tests/api/ai/describe-schema.test.ts +0 -266
- package/tests/api/ai/explain.test.ts +0 -199
- package/tests/api/ai/impact.test.ts +0 -168
- package/tests/api/ai/index-advisor.test.ts +0 -171
- package/tests/api/ai/nl2sql.test.ts +0 -202
- package/tests/api/ai/query-safety.test.ts +0 -196
- package/tests/api/auth/login.test.ts +0 -170
- package/tests/api/auth/logout.test.ts +0 -140
- package/tests/api/auth/me.test.ts +0 -73
- package/tests/api/auth/oidc-callback.test.ts +0 -215
- package/tests/api/auth/oidc-login.test.ts +0 -127
- package/tests/api/db/cancel.test.ts +0 -198
- package/tests/api/db/disconnect.test.ts +0 -124
- package/tests/api/db/health.test.ts +0 -222
- package/tests/api/db/maintenance.test.ts +0 -263
- package/tests/api/db/monitoring.test.ts +0 -221
- package/tests/api/db/multi-query.test.ts +0 -316
- package/tests/api/db/pool-stats.test.ts +0 -135
- package/tests/api/db/profile.test.ts +0 -330
- package/tests/api/db/provider-meta.test.ts +0 -193
- package/tests/api/db/query.test.ts +0 -314
- package/tests/api/db/schema-snapshot.test.ts +0 -170
- package/tests/api/db/schema.test.ts +0 -191
- package/tests/api/db/test-connection.test.ts +0 -185
- package/tests/api/db/transaction.test.ts +0 -314
- package/tests/api/proxy.test.ts +0 -191
- package/tests/api/seed/managed-route.test.ts +0 -113
- package/tests/api/storage/config.test.ts +0 -42
- package/tests/api/storage/storage-routes.test.ts +0 -309
- package/tests/components/AIAutopilotPanel.test.tsx +0 -756
- package/tests/components/AdminPage.test.tsx +0 -33
- package/tests/components/CodeGenerator.test.tsx +0 -182
- package/tests/components/CommandPalette.test.tsx +0 -428
- package/tests/components/CommunitySection.test.tsx +0 -91
- package/tests/components/ConnectionModal.mobile.test.tsx +0 -284
- package/tests/components/ConnectionModal.test.tsx +0 -570
- package/tests/components/CreateTableModal.test.tsx +0 -383
- package/tests/components/DataCharts.test.tsx +0 -739
- package/tests/components/DataImportModal.test.tsx +0 -751
- package/tests/components/DataProfiler.test.tsx +0 -589
- package/tests/components/DatabaseDocs.test.tsx +0 -353
- package/tests/components/LoginPage.test.tsx +0 -163
- package/tests/components/LoginPageOIDC.test.tsx +0 -92
- package/tests/components/MaskingSettings.test.tsx +0 -498
- package/tests/components/MobileNav.test.tsx +0 -30
- package/tests/components/MonitoringPage.test.tsx +0 -32
- package/tests/components/NL2SQLPanel.test.tsx +0 -621
- package/tests/components/Page.test.tsx +0 -33
- package/tests/components/PivotTable.test.tsx +0 -350
- package/tests/components/QueryEditor.test.tsx +0 -1730
- package/tests/components/QueryHistory.test.tsx +0 -572
- package/tests/components/QuerySafetyDialog.test.tsx +0 -586
- package/tests/components/ResultsGrid.test.tsx +0 -804
- package/tests/components/RootLayout.test.tsx +0 -83
- package/tests/components/SaveQueryModal.test.tsx +0 -25
- package/tests/components/SavedQueries.test.tsx +0 -43
- package/tests/components/SchemaDiagram.test.tsx +0 -1034
- package/tests/components/SchemaDiff.test.tsx +0 -906
- package/tests/components/SnapshotTimeline.test.tsx +0 -174
- package/tests/components/Studio.test.tsx +0 -1030
- package/tests/components/TestDataGenerator.test.tsx +0 -291
- package/tests/components/VisualExplain.test.tsx +0 -704
- package/tests/components/admin/AdminDashboard.test.tsx +0 -205
- package/tests/components/admin/AuditTab.test.tsx +0 -220
- package/tests/components/admin/MonitoringEmbed.test.tsx +0 -58
- package/tests/components/admin/OperationsTab.test.tsx +0 -975
- package/tests/components/admin/OverviewTab.test.tsx +0 -254
- package/tests/components/admin/SecurityTab.test.tsx +0 -467
- package/tests/components/monitoring/MetricChart.test.tsx +0 -111
- package/tests/components/monitoring/MonitoringDashboard.test.tsx +0 -259
- package/tests/components/monitoring/OverviewTab.test.tsx +0 -78
- package/tests/components/monitoring/PerformanceTab.test.tsx +0 -87
- package/tests/components/monitoring/PoolTab.test.tsx +0 -42
- package/tests/components/monitoring/QueriesTab.test.tsx +0 -80
- package/tests/components/monitoring/SessionsTab.test.tsx +0 -154
- package/tests/components/monitoring/StorageTab.test.tsx +0 -127
- package/tests/components/monitoring/TablesTab.test.tsx +0 -153
- package/tests/components/results-grid/ResultCard.test.tsx +0 -105
- package/tests/components/results-grid/RowDetailSheet.test.tsx +0 -308
- package/tests/components/results-grid/StatsBar.test.tsx +0 -162
- package/tests/components/schema-explorer/ColumnList.test.tsx +0 -151
- package/tests/components/schema-explorer/SchemaExplorer.test.tsx +0 -461
- package/tests/components/schema-explorer/TableItem.test.tsx +0 -415
- package/tests/components/sidebar/ConnectionItem.test.tsx +0 -201
- package/tests/components/sidebar/ConnectionsList.test.tsx +0 -176
- package/tests/components/sidebar/Sidebar.test.tsx +0 -187
- package/tests/components/studio/BottomPanel.test.tsx +0 -383
- package/tests/components/studio/QueryToolbar.test.tsx +0 -321
- package/tests/components/studio/StudioDesktopHeader.test.tsx +0 -377
- package/tests/components/studio/StudioMobileHeader.test.tsx +0 -198
- package/tests/components/studio/StudioTabBar.test.tsx +0 -331
- package/tests/fixtures/connections.ts +0 -96
- package/tests/fixtures/masking-configs.ts +0 -86
- package/tests/fixtures/query-results.ts +0 -71
- package/tests/fixtures/schemas.ts +0 -64
- package/tests/fixtures/seed-connections/invalid-config.yaml +0 -7
- package/tests/fixtures/seed-connections/minimal-config.yaml +0 -8
- package/tests/fixtures/seed-connections/mixed-credentials.yaml +0 -23
- package/tests/fixtures/seed-connections/multi-role-config.yaml +0 -30
- package/tests/fixtures/seed-connections/valid-config.json +0 -15
- package/tests/fixtures/seed-connections/valid-config.yaml +0 -51
- package/tests/helpers/mock-fetch.ts +0 -59
- package/tests/helpers/mock-monaco.ts +0 -112
- package/tests/helpers/mock-navigation.ts +0 -28
- package/tests/helpers/mock-next.ts +0 -80
- package/tests/helpers/mock-provider.ts +0 -133
- package/tests/helpers/mock-sonner.ts +0 -29
- package/tests/helpers/render-with-providers.tsx +0 -19
- package/tests/hooks/use-ai-chat.test.ts +0 -600
- package/tests/hooks/use-auth.test.ts +0 -371
- package/tests/hooks/use-connection-form.test.ts +0 -743
- package/tests/hooks/use-connection-manager.test.ts +0 -466
- package/tests/hooks/use-inline-editing.test.ts +0 -321
- package/tests/hooks/use-mobile.test.ts +0 -177
- package/tests/hooks/use-monitoring-data.test.ts +0 -819
- package/tests/hooks/use-provider-metadata.test.ts +0 -228
- package/tests/hooks/use-query-execution.test.ts +0 -1212
- package/tests/hooks/use-tab-manager.test.ts +0 -756
- package/tests/hooks/use-toast.test.ts +0 -74
- package/tests/hooks/use-transaction-control.test.ts +0 -211
- package/tests/integration/db/mongodb-provider.test.ts +0 -698
- package/tests/integration/db/mssql-provider.test.ts +0 -840
- package/tests/integration/db/mysql-provider.test.ts +0 -872
- package/tests/integration/db/oracle-provider.test.ts +0 -843
- package/tests/integration/db/postgres-provider.test.ts +0 -1382
- package/tests/integration/db/redis-provider.test.ts +0 -526
- package/tests/integration/db/sqlite-provider.test.ts +0 -480
- package/tests/integration/seed/seed-pipeline.test.ts +0 -102
- package/tests/isolated/factory-singleton.test.ts +0 -150
- package/tests/isolated/use-storage-sync.test.ts +0 -389
- package/tests/run-components.sh +0 -196
- package/tests/setup-dom.ts +0 -58
- package/tests/setup.ts +0 -40
- package/tests/unit/api-errors.test.ts +0 -210
- package/tests/unit/code-generator-functions.test.ts +0 -271
- package/tests/unit/components/column-list.test.tsx +0 -190
- package/tests/unit/components/data-import-modal.test.tsx +0 -441
- package/tests/unit/components/studio-mobile-header.test.tsx +0 -327
- package/tests/unit/data-charts-functions.test.ts +0 -496
- package/tests/unit/data-import-functions.test.ts +0 -320
- package/tests/unit/data-import-utils.test.ts +0 -125
- package/tests/unit/db/base-provider.test.ts +0 -517
- package/tests/unit/db/errors.test.ts +0 -403
- package/tests/unit/db/factory.test.ts +0 -436
- package/tests/unit/db/pool-manager.test.ts +0 -440
- package/tests/unit/db/query-limiter.test.ts +0 -387
- package/tests/unit/db/sql-base.test.ts +0 -438
- package/tests/unit/lib/api/error-codes.test.ts +0 -39
- package/tests/unit/lib/audit.test.ts +0 -326
- package/tests/unit/lib/auth.test.ts +0 -146
- package/tests/unit/lib/connection-string-parser.test.ts +0 -424
- package/tests/unit/lib/data-masking.test.ts +0 -583
- package/tests/unit/lib/db-icons.test.tsx +0 -41
- package/tests/unit/lib/monitoring-thresholds.test.ts +0 -133
- package/tests/unit/lib/oidc.test.ts +0 -509
- package/tests/unit/lib/query-generators.test.ts +0 -127
- package/tests/unit/lib/storage/factory.test.ts +0 -71
- package/tests/unit/lib/storage/local-storage.test.ts +0 -114
- package/tests/unit/lib/storage/providers/postgres.test.ts +0 -312
- package/tests/unit/lib/storage/providers/sqlite.test.ts +0 -232
- package/tests/unit/lib/storage/storage-facade-extended.test.ts +0 -331
- package/tests/unit/lib/storage/storage-facade.test.ts +0 -184
- package/tests/unit/lib/storage.test.ts +0 -317
- package/tests/unit/lib/time-series-buffer.test.ts +0 -212
- package/tests/unit/lib/utils.test.ts +0 -24
- package/tests/unit/llm/base-provider.test.ts +0 -238
- package/tests/unit/llm/config.test.ts +0 -262
- package/tests/unit/llm/custom-provider.test.ts +0 -281
- package/tests/unit/llm/gemini-provider.test.ts +0 -248
- package/tests/unit/llm/llm-factory.test.ts +0 -155
- package/tests/unit/llm/ollama-provider.test.ts +0 -288
- package/tests/unit/llm/openai-provider.test.ts +0 -324
- package/tests/unit/llm/retry.test.ts +0 -180
- package/tests/unit/llm/streaming.test.ts +0 -355
- package/tests/unit/logger.test.ts +0 -198
- package/tests/unit/mongodb-completions.test.ts +0 -516
- package/tests/unit/pivot-table-functions.test.ts +0 -76
- package/tests/unit/query-cancelled-error.test.ts +0 -81
- package/tests/unit/schema-diff/diff-engine.test.ts +0 -367
- package/tests/unit/schema-diff/migration-generator.test.ts +0 -513
- package/tests/unit/seed/config-loader.test.ts +0 -73
- package/tests/unit/seed/connection-filter.test.ts +0 -91
- package/tests/unit/seed/credential-resolver.test.ts +0 -85
- package/tests/unit/seed/index.test.ts +0 -72
- package/tests/unit/seed/resolve-connection.test.ts +0 -74
- package/tests/unit/seed/types.test.ts +0 -129
- package/tests/unit/sql/alias-extractor.test.ts +0 -444
- package/tests/unit/sql/statement-splitter.test.ts +0 -348
- package/tests/unit/sql-completions.test.ts +0 -463
- package/tests/unit/ssh-tunnel.test.ts +0 -465
- package/tsconfig.json +0 -42
|
@@ -0,0 +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":["React","ConnectionItem","jsxs","motion","cn","jsx","getDBIcon","ENVIRONMENT_LABELS","Lock","Button","Pencil","Trash2","Zap","Layers","Plus","ScrollArea","SchemaExplorer","useState","useRef","useCallback","_a","useMemo","Dialog","DialogContent","DialogHeader","DialogTitle","Upload","Check","ArrowRight","FileSpreadsheet","FileJson","AlertTriangle","FileText","X","Table2","Input","__spreadProps","__spreadValues","Fragment","Loader2","__objRest","Bookmark","DialogDescription","Label","Tag","DialogFooter","Hash","FlaskConical","Terminal","Save","Square","Play","Copy","Sparkles","RefreshCw","useEffect","Columns3","GripVertical","Download","Search","storage","format","HistoryIcon","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuItem","ArrowUpDown","CheckCircle2","AlertCircle","Database","RotateCcw","Edit3","Calendar","cva","Slot","Minus","GitCompare","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Clock","Camera","FileCode","sourceId","targetId","ChevronDown","ChevronRight","LayoutDashboard","DataCharts","LayoutGrid","BarChart3","NL2SQLPanel","VisualExplain","ResultsGrid","sonnerToast","isDangerousQuery","_b","ResizablePrimitive","GripVerticalIcon","AlertDialogPrimitive","buttonVariants","AnimatePresence","SchemaDiagram","QueryEditor","QuerySafetyDialog","DataProfiler","CodeGenerator","TestDataGenerator"],"mappings":"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","file":"workspace.js","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"]}
|