@libredb/studio 0.9.12 → 0.9.19
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/README.md +18 -4
- package/dist/{chunk-VWVRUCQO.mjs → chunk-CPF7XWV5.mjs} +77 -77
- package/dist/chunk-CPF7XWV5.mjs.map +1 -0
- package/dist/{chunk-DZ2UB3C6.mjs → chunk-G3S66G64.mjs} +259 -265
- package/dist/chunk-G3S66G64.mjs.map +1 -0
- package/dist/{chunk-JOGLIOFO.js → chunk-HGPD6PWV.js} +129 -129
- package/dist/chunk-HGPD6PWV.js.map +1 -0
- package/dist/{chunk-RBVDMLFV.js → chunk-Y52UIFEX.js} +259 -265
- package/dist/chunk-Y52UIFEX.js.map +1 -0
- package/dist/components.js +14 -14
- package/dist/components.mjs +2 -2
- package/dist/index.js +14 -14
- package/dist/index.mjs +2 -2
- package/dist/workspace.js +350 -358
- package/dist/workspace.js.map +1 -1
- package/dist/workspace.mjs +220 -228
- package/dist/workspace.mjs.map +1 -1
- package/package.json +10 -5
- package/dist/chunk-DZ2UB3C6.mjs.map +0 -1
- package/dist/chunk-JOGLIOFO.js.map +0 -1
- package/dist/chunk-RBVDMLFV.js.map +0 -1
- package/dist/chunk-VWVRUCQO.mjs.map +0 -1
package/dist/workspace.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkY52UIFEX_js = require('./chunk-Y52UIFEX.js');
|
|
4
4
|
require('./chunk-VLCRUZX7.js');
|
|
5
5
|
var chunkQ6LRDBK7_js = require('./chunk-Q6LRDBK7.js');
|
|
6
6
|
var React = require('react');
|
|
@@ -50,8 +50,8 @@ var ConnectionItem = React__default.default.memo(function ConnectionItem2({
|
|
|
50
50
|
framerMotion.motion.div,
|
|
51
51
|
{
|
|
52
52
|
initial: false,
|
|
53
|
-
className:
|
|
54
|
-
"group flex items-center gap-2.5 px-3 py-2 rounded-lg cursor-pointer transition-all duration-200 text-
|
|
53
|
+
className: chunkY52UIFEX_js.cn(
|
|
54
|
+
"group flex items-center gap-2.5 px-3 py-2 rounded-lg cursor-pointer transition-all duration-200 text-xs relative overflow-hidden",
|
|
55
55
|
isActive ? "bg-blue-600/10 text-blue-400" : "hover:bg-accent/50 text-muted-foreground hover:text-foreground"
|
|
56
56
|
),
|
|
57
57
|
onClick: () => onSelect(conn),
|
|
@@ -67,24 +67,24 @@ var ConnectionItem = React__default.default.memo(function ConnectionItem2({
|
|
|
67
67
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
68
68
|
"div",
|
|
69
69
|
{
|
|
70
|
-
className:
|
|
70
|
+
className: chunkY52UIFEX_js.cn(
|
|
71
71
|
"p-1 rounded transition-colors",
|
|
72
72
|
isActive ? "bg-blue-500/20" : "bg-muted group-hover:bg-accent"
|
|
73
73
|
),
|
|
74
|
-
children: React__default.default.createElement(
|
|
74
|
+
children: React__default.default.createElement(chunkY52UIFEX_js.getDBIcon(conn.type), { className: "w-3 h-3" })
|
|
75
75
|
}
|
|
76
76
|
),
|
|
77
77
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
78
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate block font-medium text-
|
|
78
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate block font-medium text-xs", children: conn.name }),
|
|
79
79
|
conn.environment && conn.environment !== "other" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
80
80
|
"span",
|
|
81
81
|
{
|
|
82
|
-
className: "text-
|
|
82
|
+
className: "text-[0.5rem] font-medium px-1.5 py-0.5 rounded-sm shrink-0",
|
|
83
83
|
style: {
|
|
84
84
|
color: conn.color || "#6b7280",
|
|
85
85
|
backgroundColor: `${conn.color || "#6b7280"}15`
|
|
86
86
|
},
|
|
87
|
-
children:
|
|
87
|
+
children: chunkY52UIFEX_js.ENVIRONMENT_LABELS[conn.environment]
|
|
88
88
|
}
|
|
89
89
|
)
|
|
90
90
|
] }) }),
|
|
@@ -93,35 +93,31 @@ var ConnectionItem = React__default.default.memo(function ConnectionItem2({
|
|
|
93
93
|
"div",
|
|
94
94
|
{
|
|
95
95
|
"data-testid": `managed-lock-${conn.seedId || conn.id}`,
|
|
96
|
-
className: "
|
|
96
|
+
className: "flex items-center justify-center text-amber-500/60",
|
|
97
97
|
title: "Managed by administrator",
|
|
98
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Lock, { className: "w-3 h-3" })
|
|
98
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Lock, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
99
99
|
}
|
|
100
100
|
),
|
|
101
101
|
!conn.managed && onEdit && /* @__PURE__ */ jsxRuntime.jsx(
|
|
102
|
-
|
|
102
|
+
"button",
|
|
103
103
|
{
|
|
104
|
-
|
|
105
|
-
size: "icon",
|
|
106
|
-
className: "w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity hover:bg-blue-500/20 hover:text-blue-400",
|
|
104
|
+
className: "p-1 rounded opacity-0 group-hover:opacity-100 transition-opacity hover:bg-blue-500/20 hover:text-blue-400",
|
|
107
105
|
onClick: (e) => {
|
|
108
106
|
e.stopPropagation();
|
|
109
107
|
onEdit(conn);
|
|
110
108
|
},
|
|
111
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "w-3 h-3" })
|
|
109
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
112
110
|
}
|
|
113
111
|
),
|
|
114
112
|
!conn.managed && /* @__PURE__ */ jsxRuntime.jsx(
|
|
115
|
-
|
|
113
|
+
"button",
|
|
116
114
|
{
|
|
117
|
-
|
|
118
|
-
size: "icon",
|
|
119
|
-
className: "w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity hover:bg-red-500/20 hover:text-red-400",
|
|
115
|
+
className: "p-1 rounded opacity-0 group-hover:opacity-100 transition-opacity hover:bg-red-500/20 hover:text-red-400",
|
|
120
116
|
onClick: (e) => {
|
|
121
117
|
e.stopPropagation();
|
|
122
118
|
onDelete(conn.id);
|
|
123
119
|
},
|
|
124
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "w-3 h-3" })
|
|
120
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
125
121
|
}
|
|
126
122
|
)
|
|
127
123
|
] })
|
|
@@ -139,13 +135,13 @@ function ConnectionsList({
|
|
|
139
135
|
}) {
|
|
140
136
|
return /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
|
|
141
137
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-3 mb-2 flex items-center justify-between", children: [
|
|
142
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-
|
|
138
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-muted-foreground", children: "Connections" }),
|
|
143
139
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-[1px] flex-1 bg-border/30 ml-3" })
|
|
144
140
|
] }),
|
|
145
141
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: connections.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-3 py-6 text-center border border-dashed border-border/50 rounded-lg mx-2", children: [
|
|
146
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-
|
|
142
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mb-3 leading-relaxed", children: "No database connections established yet." }),
|
|
147
143
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
148
|
-
|
|
144
|
+
chunkY52UIFEX_js.Button,
|
|
149
145
|
{
|
|
150
146
|
variant: "outline",
|
|
151
147
|
size: "sm",
|
|
@@ -191,34 +187,30 @@ function Sidebar({
|
|
|
191
187
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full h-full border-r border-border flex-col bg-background select-none", children: [
|
|
192
188
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-14 px-4 flex items-center justify-between border-b border-border", children: [
|
|
193
189
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
194
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-
|
|
195
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-
|
|
190
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-5 h-5 bg-blue-600 rounded flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Zap, { strokeWidth: 1.5, className: "w-3 h-3 text-white fill-current" }) }),
|
|
191
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-xs tracking-tight bg-gradient-to-r from-foreground to-muted-foreground bg-clip-text text-transparent", children: "LibreDB Studio" })
|
|
196
192
|
] }),
|
|
197
193
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
198
194
|
activeConnection && /* @__PURE__ */ jsxRuntime.jsx(
|
|
199
|
-
|
|
195
|
+
"button",
|
|
200
196
|
{
|
|
201
|
-
|
|
202
|
-
size: "icon",
|
|
203
|
-
className: "h-8 w-8 hover:bg-accent text-muted-foreground hover:text-foreground transition-colors",
|
|
197
|
+
className: "p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground transition-colors",
|
|
204
198
|
onClick: onShowDiagram,
|
|
205
199
|
title: "Show ERD Diagram",
|
|
206
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Layers, { className: "w-
|
|
200
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Layers, { strokeWidth: 1.5, className: "w-3.5 h-3.5" })
|
|
207
201
|
}
|
|
208
202
|
),
|
|
209
203
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
210
|
-
|
|
204
|
+
"button",
|
|
211
205
|
{
|
|
212
|
-
|
|
213
|
-
size: "icon",
|
|
214
|
-
className: "h-8 w-8 hover:bg-accent text-muted-foreground hover:text-foreground transition-colors",
|
|
206
|
+
className: "p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground transition-colors",
|
|
215
207
|
onClick: onAddConnection,
|
|
216
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "w-
|
|
208
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { strokeWidth: 1.5, className: "w-3.5 h-3.5" })
|
|
217
209
|
}
|
|
218
210
|
)
|
|
219
211
|
] })
|
|
220
212
|
] }),
|
|
221
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
213
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.ScrollArea, { className: "flex-1 min-h-0 px-2 py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
222
214
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
223
215
|
ConnectionsList,
|
|
224
216
|
{
|
|
@@ -231,7 +223,7 @@ function Sidebar({
|
|
|
231
223
|
}
|
|
232
224
|
),
|
|
233
225
|
activeConnection && /* @__PURE__ */ jsxRuntime.jsx(
|
|
234
|
-
|
|
226
|
+
chunkY52UIFEX_js.SchemaExplorer,
|
|
235
227
|
{
|
|
236
228
|
schema,
|
|
237
229
|
isLoadingSchema,
|
|
@@ -434,24 +426,24 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
434
426
|
handleClose();
|
|
435
427
|
}, 200);
|
|
436
428
|
};
|
|
437
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
438
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
439
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Upload, { className: "w-5 h-5 text-blue-400" }),
|
|
429
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.Dialog, { open: isOpen, onOpenChange: handleClose, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.DialogContent, { className: "bg-[#0a0a0a] border-white/10 text-zinc-100 max-w-2xl max-h-[85vh] overflow-hidden flex flex-col", children: [
|
|
430
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.DialogTitle, { className: "flex items-center gap-2", children: [
|
|
431
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Upload, { strokeWidth: 1.5, className: "w-5 h-5 text-blue-400" }),
|
|
440
432
|
"Import Data",
|
|
441
433
|
fileName && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-500 font-normal ml-2", children: fileName })
|
|
442
434
|
] }) }),
|
|
443
435
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2 px-1 py-2", children: ["upload", "preview", "configure", "ready"].map((s, idx) => /* @__PURE__ */ jsxRuntime.jsxs(React__default.default.Fragment, { children: [
|
|
444
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className:
|
|
445
|
-
"flex items-center gap-1.5 text-xs font-
|
|
436
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkY52UIFEX_js.cn(
|
|
437
|
+
"flex items-center gap-1.5 text-xs font-mediumr",
|
|
446
438
|
step === s ? "text-blue-400" : idx < ["upload", "preview", "configure", "ready"].indexOf(step) ? "text-emerald-400" : "text-zinc-600"
|
|
447
439
|
), children: [
|
|
448
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className:
|
|
449
|
-
"w-5 h-5 rounded-full flex items-center justify-center text-
|
|
440
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkY52UIFEX_js.cn(
|
|
441
|
+
"w-5 h-5 rounded-full flex items-center justify-center text-[0.625rem]",
|
|
450
442
|
step === s ? "bg-blue-500/20 border border-blue-500/40" : idx < ["upload", "preview", "configure", "ready"].indexOf(step) ? "bg-emerald-500/20 border border-emerald-500/40" : "bg-white/5 border border-white/10"
|
|
451
|
-
), children: idx < ["upload", "preview", "configure", "ready"].indexOf(step) ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "w-3 h-3" }) : idx + 1 }),
|
|
443
|
+
), children: idx < ["upload", "preview", "configure", "ready"].indexOf(step) ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { strokeWidth: 1.5, className: "w-3 h-3" }) : idx + 1 }),
|
|
452
444
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden sm:inline", children: s === "upload" ? "Upload" : s === "preview" ? "Preview" : s === "configure" ? "Configure" : "Import" })
|
|
453
445
|
] }),
|
|
454
|
-
idx < 3 && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { className: "w-3 h-3 text-zinc-700" })
|
|
446
|
+
idx < 3 && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { strokeWidth: 1.5, className: "w-3 h-3 text-zinc-700" })
|
|
455
447
|
] }, s)) }),
|
|
456
448
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 overflow-auto min-h-0", children: [
|
|
457
449
|
step === "upload" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4", children: [
|
|
@@ -466,16 +458,16 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
466
458
|
},
|
|
467
459
|
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",
|
|
468
460
|
children: [
|
|
469
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Upload, { className: "w-10 h-10 text-zinc-600 mx-auto mb-4" }),
|
|
470
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-
|
|
461
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Upload, { strokeWidth: 1.5, className: "w-10 h-10 text-zinc-600 mx-auto mb-4" }),
|
|
462
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-zinc-400 mb-1", children: "Drop a file here or click to browse" }),
|
|
471
463
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-zinc-600", children: "Supports CSV and JSON files" }),
|
|
472
464
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-4 mt-4", children: [
|
|
473
465
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-zinc-500", children: [
|
|
474
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileSpreadsheet, { className: "w-
|
|
466
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileSpreadsheet, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }),
|
|
475
467
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: "CSV" })
|
|
476
468
|
] }),
|
|
477
469
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-zinc-500", children: [
|
|
478
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileJson, { className: "w-
|
|
470
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileJson, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }),
|
|
479
471
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: "JSON" })
|
|
480
472
|
] })
|
|
481
473
|
] })
|
|
@@ -497,16 +489,16 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
497
489
|
}
|
|
498
490
|
),
|
|
499
491
|
error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 p-3 rounded-lg bg-red-500/10 border border-red-500/20 flex items-center gap-2", children: [
|
|
500
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "w-
|
|
492
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-red-400 shrink-0" }),
|
|
501
493
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-red-400", children: error })
|
|
502
494
|
] })
|
|
503
495
|
] }),
|
|
504
496
|
step === "preview" && parsedData && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4 space-y-4", children: [
|
|
505
497
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
506
498
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
507
|
-
fileType === "json" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileJson, { className: "w-5 h-5 text-amber-400" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "w-5 h-5 text-emerald-400" }),
|
|
499
|
+
fileType === "json" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileJson, { strokeWidth: 1.5, className: "w-5 h-5 text-amber-400" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { strokeWidth: 1.5, className: "w-5 h-5 text-emerald-400" }),
|
|
508
500
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
509
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-
|
|
501
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium", children: fileName }),
|
|
510
502
|
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-zinc-500", children: [
|
|
511
503
|
parsedData.totalRows,
|
|
512
504
|
" rows, ",
|
|
@@ -516,7 +508,7 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
516
508
|
] })
|
|
517
509
|
] }),
|
|
518
510
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
519
|
-
|
|
511
|
+
chunkY52UIFEX_js.Button,
|
|
520
512
|
{
|
|
521
513
|
variant: "ghost",
|
|
522
514
|
size: "sm",
|
|
@@ -525,7 +517,7 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
525
517
|
resetState();
|
|
526
518
|
},
|
|
527
519
|
children: [
|
|
528
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "w-3 h-3 mr-1" }),
|
|
520
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { strokeWidth: 1.5, className: "w-3 h-3 mr-1" }),
|
|
529
521
|
" Reset"
|
|
530
522
|
]
|
|
531
523
|
}
|
|
@@ -533,7 +525,7 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
533
525
|
] }),
|
|
534
526
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border border-white/5 rounded-lg overflow-auto max-h-60", children: [
|
|
535
527
|
/* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full text-xs", children: [
|
|
536
|
-
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { className: "bg-[#0d0d0d]", children: parsedData.headers.map((h) => /* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-3 py-2 text-left text-xs uppercase
|
|
528
|
+
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { className: "bg-[#0d0d0d]", children: parsedData.headers.map((h) => /* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-3 py-2 text-left text-xs uppercase text-zinc-500 font-mono border-b border-white/5 whitespace-nowrap", children: h }, h)) }) }),
|
|
537
529
|
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: parsedData.rows.slice(0, 10).map((row, idx) => /* @__PURE__ */ jsxRuntime.jsx("tr", { className: "border-b border-white/5 hover:bg-white/[0.02]", children: row.map((cell, cidx) => /* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-3 py-1.5 text-zinc-300 font-mono whitespace-nowrap max-w-[200px] truncate", children: cell || /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-zinc-600 italic", children: "NULL" }) }, cidx)) }, idx)) })
|
|
538
530
|
] }),
|
|
539
531
|
parsedData.totalRows > 10 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center py-2 text-xs text-zinc-600 bg-[#0d0d0d]", children: [
|
|
@@ -543,14 +535,14 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
543
535
|
] })
|
|
544
536
|
] }),
|
|
545
537
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
546
|
-
|
|
538
|
+
chunkY52UIFEX_js.Button,
|
|
547
539
|
{
|
|
548
540
|
size: "sm",
|
|
549
541
|
className: "bg-blue-600 hover:bg-blue-500 h-8 text-xs gap-1",
|
|
550
542
|
onClick: () => setStep("configure"),
|
|
551
543
|
children: [
|
|
552
544
|
"Configure Import ",
|
|
553
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { className: "w-3 h-3" })
|
|
545
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
554
546
|
]
|
|
555
547
|
}
|
|
556
548
|
) })
|
|
@@ -562,13 +554,13 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
562
554
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
563
555
|
"button",
|
|
564
556
|
{
|
|
565
|
-
className:
|
|
557
|
+
className: chunkY52UIFEX_js.cn(
|
|
566
558
|
"flex-1 px-3 py-2 rounded-lg border text-xs text-left transition-all",
|
|
567
559
|
!createNewTable ? "border-blue-500/40 bg-blue-500/10 text-blue-400" : "border-white/10 text-zinc-500 hover:bg-white/5"
|
|
568
560
|
),
|
|
569
561
|
onClick: () => setCreateNewTable(false),
|
|
570
562
|
children: [
|
|
571
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Table2, { className: "w-
|
|
563
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Table2, { strokeWidth: 1.5, className: "w-3.5 h-3.5 mb-1" }),
|
|
572
564
|
"Existing Table"
|
|
573
565
|
]
|
|
574
566
|
}
|
|
@@ -576,13 +568,13 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
576
568
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
577
569
|
"button",
|
|
578
570
|
{
|
|
579
|
-
className:
|
|
571
|
+
className: chunkY52UIFEX_js.cn(
|
|
580
572
|
"flex-1 px-3 py-2 rounded-lg border text-xs text-left transition-all",
|
|
581
573
|
createNewTable ? "border-emerald-500/40 bg-emerald-500/10 text-emerald-400" : "border-white/10 text-zinc-500 hover:bg-white/5"
|
|
582
574
|
),
|
|
583
575
|
onClick: () => setCreateNewTable(true),
|
|
584
576
|
children: [
|
|
585
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileSpreadsheet, { className: "w-
|
|
577
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileSpreadsheet, { strokeWidth: 1.5, className: "w-3.5 h-3.5 mb-1" }),
|
|
586
578
|
"New Table"
|
|
587
579
|
]
|
|
588
580
|
}
|
|
@@ -592,12 +584,12 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
592
584
|
createNewTable ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
593
585
|
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-xs text-zinc-400", children: "New Table Name" }),
|
|
594
586
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
595
|
-
|
|
587
|
+
chunkY52UIFEX_js.Input,
|
|
596
588
|
{
|
|
597
589
|
value: newTableName,
|
|
598
590
|
onChange: (e) => setNewTableName(e.target.value),
|
|
599
591
|
placeholder: "imported_data",
|
|
600
|
-
className: "mt-1 bg-[#111] border-white/10 text-
|
|
592
|
+
className: "mt-1 bg-[#111] border-white/10 text-xs h-9"
|
|
601
593
|
}
|
|
602
594
|
)
|
|
603
595
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
@@ -607,7 +599,7 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
607
599
|
{
|
|
608
600
|
value: targetTable,
|
|
609
601
|
onChange: (e) => setTargetTable(e.target.value),
|
|
610
|
-
className: "w-full mt-1 bg-[#111] border border-white/10 rounded-md px-3 py-2 text-
|
|
602
|
+
className: "w-full mt-1 bg-[#111] border border-white/10 rounded-md px-3 py-2 text-xs text-zinc-300 outline-none focus:border-blue-500/40",
|
|
611
603
|
children: [
|
|
612
604
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: "-- Select a table --" }),
|
|
613
605
|
tables.map((t) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: t.name, children: t.name }, t.name))
|
|
@@ -618,16 +610,16 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
618
610
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
619
611
|
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-xs text-zinc-400 font-medium", children: "Column Mapping" }),
|
|
620
612
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border border-white/5 rounded-lg overflow-hidden", children: [
|
|
621
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-[#0d0d0d] grid grid-cols-[1fr,auto,1fr] gap-2 px-3 py-1.5 text-xs
|
|
613
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-[#0d0d0d] grid grid-cols-[1fr,auto,1fr] gap-2 px-3 py-1.5 text-xs text-zinc-500 border-b border-white/5", children: [
|
|
622
614
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Source Column" }),
|
|
623
615
|
/* @__PURE__ */ jsxRuntime.jsx("span", {}),
|
|
624
616
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Target Column" })
|
|
625
617
|
] }),
|
|
626
618
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-40 overflow-auto", children: parsedData.headers.map((header) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr,auto,1fr] gap-2 items-center px-3 py-1.5 border-b border-white/5", children: [
|
|
627
619
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-300 font-mono truncate", children: header }),
|
|
628
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { className: "w-3 h-3 text-zinc-600" }),
|
|
620
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { strokeWidth: 1.5, className: "w-3 h-3 text-zinc-600" }),
|
|
629
621
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
630
|
-
|
|
622
|
+
chunkY52UIFEX_js.Input,
|
|
631
623
|
{
|
|
632
624
|
value: columnMapping[header] || "",
|
|
633
625
|
onChange: (e) => setColumnMapping((prev) => chunkQ6LRDBK7_js.__spreadProps(chunkQ6LRDBK7_js.__spreadValues({}, prev), { [header]: e.target.value })),
|
|
@@ -640,7 +632,7 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
640
632
|
] }),
|
|
641
633
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
|
|
642
634
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
643
|
-
|
|
635
|
+
chunkY52UIFEX_js.Button,
|
|
644
636
|
{
|
|
645
637
|
variant: "ghost",
|
|
646
638
|
size: "sm",
|
|
@@ -650,7 +642,7 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
650
642
|
}
|
|
651
643
|
),
|
|
652
644
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
653
|
-
|
|
645
|
+
chunkY52UIFEX_js.Button,
|
|
654
646
|
{
|
|
655
647
|
size: "sm",
|
|
656
648
|
className: "bg-blue-600 hover:bg-blue-500 h-8 text-xs gap-1",
|
|
@@ -658,7 +650,7 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
658
650
|
disabled: !createNewTable && !targetTable,
|
|
659
651
|
children: [
|
|
660
652
|
"Review SQL ",
|
|
661
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { className: "w-3 h-3" })
|
|
653
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
662
654
|
]
|
|
663
655
|
}
|
|
664
656
|
)
|
|
@@ -667,14 +659,14 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
667
659
|
step === "ready" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4 space-y-4", children: [
|
|
668
660
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
669
661
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
670
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-
|
|
662
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium", children: "Ready to Import" }),
|
|
671
663
|
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-zinc-500 mt-0.5", children: [
|
|
672
664
|
parsedData == null ? void 0 : parsedData.totalRows,
|
|
673
665
|
" rows into ",
|
|
674
666
|
createNewTable ? newTableName || "imported_data" : targetTable
|
|
675
667
|
] })
|
|
676
668
|
] }),
|
|
677
|
-
databaseType && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs
|
|
669
|
+
databaseType && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-500 bg-white/5 px-2 py-1 rounded", children: databaseType })
|
|
678
670
|
] }),
|
|
679
671
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "border border-white/5 rounded-lg bg-[#0d0d0d] overflow-auto max-h-60", children: /* @__PURE__ */ jsxRuntime.jsxs("pre", { className: "p-3 text-xs text-zinc-400 font-mono whitespace-pre-wrap", children: [
|
|
680
672
|
generatedSQL.substring(0, 3e3),
|
|
@@ -682,7 +674,7 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
682
674
|
] }) }),
|
|
683
675
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
|
|
684
676
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
685
|
-
|
|
677
|
+
chunkY52UIFEX_js.Button,
|
|
686
678
|
{
|
|
687
679
|
variant: "ghost",
|
|
688
680
|
size: "sm",
|
|
@@ -693,7 +685,7 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
693
685
|
),
|
|
694
686
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
|
|
695
687
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
696
|
-
|
|
688
|
+
chunkY52UIFEX_js.Button,
|
|
697
689
|
{
|
|
698
690
|
variant: "outline",
|
|
699
691
|
size: "sm",
|
|
@@ -705,17 +697,17 @@ function DataImportModal({ isOpen, onClose, onImport, tables, databaseType }) {
|
|
|
705
697
|
}
|
|
706
698
|
),
|
|
707
699
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
708
|
-
|
|
700
|
+
chunkY52UIFEX_js.Button,
|
|
709
701
|
{
|
|
710
702
|
size: "sm",
|
|
711
703
|
className: "bg-emerald-600 hover:bg-emerald-500 h-8 text-xs gap-1",
|
|
712
704
|
onClick: handleImport,
|
|
713
705
|
disabled: isImporting,
|
|
714
706
|
children: isImporting ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
715
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "w-3 h-3 animate-spin" }),
|
|
707
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { strokeWidth: 1.5, className: "w-3 h-3 animate-spin" }),
|
|
716
708
|
" Importing..."
|
|
717
709
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
718
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Upload, { className: "w-3 h-3" }),
|
|
710
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Upload, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
719
711
|
" Execute Import"
|
|
720
712
|
] })
|
|
721
713
|
}
|
|
@@ -732,7 +724,7 @@ function Textarea(_a) {
|
|
|
732
724
|
"textarea",
|
|
733
725
|
chunkQ6LRDBK7_js.__spreadValues({
|
|
734
726
|
"data-slot": "textarea",
|
|
735
|
-
className:
|
|
727
|
+
className: chunkY52UIFEX_js.cn(
|
|
736
728
|
"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",
|
|
737
729
|
className
|
|
738
730
|
)
|
|
@@ -752,19 +744,19 @@ function SaveQueryModal({ isOpen, onClose, onSave, defaultQuery }) {
|
|
|
752
744
|
setTagsInput("");
|
|
753
745
|
onClose();
|
|
754
746
|
};
|
|
755
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
756
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
757
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
758
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bookmark, { className: "w-5 h-5 text-blue-500" }),
|
|
747
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.Dialog, { open: isOpen, onOpenChange: onClose, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.DialogContent, { className: "bg-[#0d0d0d] border-white/10 text-zinc-300 sm:max-w-[425px]", children: [
|
|
748
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.DialogHeader, { children: [
|
|
749
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.DialogTitle, { className: "text-white flex items-center gap-2", children: [
|
|
750
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bookmark, { strokeWidth: 1.5, className: "w-5 h-5 text-blue-500" }),
|
|
759
751
|
" Save Query"
|
|
760
752
|
] }),
|
|
761
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
753
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.DialogDescription, { className: "text-zinc-500", children: "Give your query a name and description to find it easily later." })
|
|
762
754
|
] }),
|
|
763
755
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-4 py-4", children: [
|
|
764
756
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-2", children: [
|
|
765
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
757
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.Label, { htmlFor: "name", className: "text-xs font-medium text-zinc-500", children: "Name" }),
|
|
766
758
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
767
|
-
|
|
759
|
+
chunkY52UIFEX_js.Input,
|
|
768
760
|
{
|
|
769
761
|
id: "name",
|
|
770
762
|
value: name,
|
|
@@ -775,7 +767,7 @@ function SaveQueryModal({ isOpen, onClose, onSave, defaultQuery }) {
|
|
|
775
767
|
)
|
|
776
768
|
] }),
|
|
777
769
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-2", children: [
|
|
778
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
770
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.Label, { htmlFor: "description", className: "text-xs font-medium text-zinc-500", children: "Description" }),
|
|
779
771
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
780
772
|
Textarea,
|
|
781
773
|
{
|
|
@@ -788,12 +780,12 @@ function SaveQueryModal({ isOpen, onClose, onSave, defaultQuery }) {
|
|
|
788
780
|
)
|
|
789
781
|
] }),
|
|
790
782
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-2", children: [
|
|
791
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
792
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Tag, { className: "w-3 h-3" }),
|
|
783
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.Label, { htmlFor: "tags", className: "text-xs font-medium text-zinc-500 flex items-center gap-2", children: [
|
|
784
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Tag, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
793
785
|
" Tags (comma separated)"
|
|
794
786
|
] }),
|
|
795
787
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
796
|
-
|
|
788
|
+
chunkY52UIFEX_js.Input,
|
|
797
789
|
{
|
|
798
790
|
id: "tags",
|
|
799
791
|
value: tagsInput,
|
|
@@ -804,18 +796,18 @@ function SaveQueryModal({ isOpen, onClose, onSave, defaultQuery }) {
|
|
|
804
796
|
)
|
|
805
797
|
] }),
|
|
806
798
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2", children: [
|
|
807
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
799
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.Label, { className: "text-xs font-medium text-zinc-500 mb-2 block", children: "Preview" }),
|
|
808
800
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-[#050505] p-3 rounded-md border border-white/5 max-h-[100px] overflow-y-auto", children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "text-xs font-mono text-zinc-500 italic whitespace-pre-wrap break-words", children: defaultQuery }) })
|
|
809
801
|
] })
|
|
810
802
|
] }),
|
|
811
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
812
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
803
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.DialogFooter, { children: [
|
|
804
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.Button, { variant: "ghost", onClick: onClose, className: "text-zinc-400", children: "Cancel" }),
|
|
813
805
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
814
|
-
|
|
806
|
+
chunkY52UIFEX_js.Button,
|
|
815
807
|
{
|
|
816
808
|
onClick: handleSave,
|
|
817
809
|
disabled: !name,
|
|
818
|
-
className: "bg-blue-600 hover:bg-blue-500 text-white font-
|
|
810
|
+
className: "bg-blue-600 hover:bg-blue-500 text-white font-medium",
|
|
819
811
|
children: "Save Query"
|
|
820
812
|
}
|
|
821
813
|
)
|
|
@@ -843,12 +835,12 @@ function StudioTabBar({
|
|
|
843
835
|
onSetEditingTabId(tab.id);
|
|
844
836
|
onSetEditingTabName(tab.name);
|
|
845
837
|
},
|
|
846
|
-
className:
|
|
838
|
+
className: chunkY52UIFEX_js.cn(
|
|
847
839
|
"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",
|
|
848
840
|
activeTabId === tab.id ? "bg-[#141414] text-zinc-100 border-blue-500" : "text-zinc-500 hover:bg-white/5 border-transparent"
|
|
849
841
|
),
|
|
850
842
|
children: [
|
|
851
|
-
tab.type === "sql" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Hash, { className: "w-3 h-3" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileJson, { className: "w-3 h-3" }),
|
|
843
|
+
tab.type === "sql" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Hash, { strokeWidth: 1.5, className: "w-3 h-3" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileJson, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
852
844
|
editingTabId === tab.id ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
853
845
|
"input",
|
|
854
846
|
{
|
|
@@ -875,12 +867,12 @@ function StudioTabBar({
|
|
|
875
867
|
className: "text-xs font-medium bg-transparent border-b border-blue-500 outline-none w-full text-zinc-100"
|
|
876
868
|
}
|
|
877
869
|
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs truncate font-medium", children: tab.name }),
|
|
878
|
-
tabs.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.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) })
|
|
870
|
+
tabs.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { strokeWidth: 1.5, className: "w-3 h-3 ml-auto opacity-0 group-hover:opacity-100 hover:text-white shrink-0", onClick: (e) => onCloseTab(tab.id, e) })
|
|
879
871
|
]
|
|
880
872
|
},
|
|
881
873
|
tab.id
|
|
882
874
|
)),
|
|
883
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "w-
|
|
875
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-zinc-500 cursor-pointer hover:text-white mx-2", onClick: onAddTab })
|
|
884
876
|
] });
|
|
885
877
|
}
|
|
886
878
|
function QueryToolbar({
|
|
@@ -902,133 +894,133 @@ function QueryToolbar({
|
|
|
902
894
|
}) {
|
|
903
895
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
904
896
|
playgroundMode && /* @__PURE__ */ jsxRuntime.jsxs("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", children: [
|
|
905
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FlaskConical, { className: "w-3 h-3" }),
|
|
906
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-
|
|
897
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FlaskConical, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
898
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-mediumr", children: "Sandbox Mode \u2014 All changes will be auto-rolled back" })
|
|
907
899
|
] }),
|
|
908
900
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "hidden md:flex items-center justify-between px-4 py-1.5 bg-[#0a0a0a] border-b border-white/5", children: [
|
|
909
901
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
|
|
910
902
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 px-2 py-0.5 rounded bg-blue-500/5 border border-blue-500/10", children: [
|
|
911
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Terminal, { className: "w-3 h-3 text-blue-400" }),
|
|
912
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-
|
|
903
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Terminal, { strokeWidth: 1.5, className: "w-3 h-3 text-blue-400" }),
|
|
904
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-blue-400", children: "Query" })
|
|
913
905
|
] }),
|
|
914
906
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-px bg-white/5" }),
|
|
915
907
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
916
|
-
|
|
908
|
+
chunkY52UIFEX_js.Button,
|
|
917
909
|
{
|
|
918
910
|
variant: "ghost",
|
|
919
911
|
size: "sm",
|
|
920
|
-
className: "h-7 text-xs font-
|
|
912
|
+
className: "h-7 text-xs font-medium text-zinc-500 hover:text-white gap-2",
|
|
921
913
|
onClick: onSaveQuery,
|
|
922
914
|
children: [
|
|
923
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Save, { className: "w-3 h-3" }),
|
|
915
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Save, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
924
916
|
" Save"
|
|
925
917
|
]
|
|
926
918
|
}
|
|
927
919
|
)
|
|
928
920
|
] }),
|
|
929
921
|
isExecuting ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
930
|
-
|
|
922
|
+
chunkY52UIFEX_js.Button,
|
|
931
923
|
{
|
|
932
924
|
size: "sm",
|
|
933
|
-
className: "bg-red-600 hover:bg-red-500 text-white font-
|
|
925
|
+
className: "bg-red-600 hover:bg-red-500 text-white font-medium text-xs h-7 px-4 gap-2",
|
|
934
926
|
onClick: onCancelQuery,
|
|
935
927
|
children: [
|
|
936
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "w-3 h-3 fill-current" }),
|
|
928
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { strokeWidth: 1.5, className: "w-3 h-3 fill-current" }),
|
|
937
929
|
"CANCEL"
|
|
938
930
|
]
|
|
939
931
|
}
|
|
940
932
|
) : /* @__PURE__ */ jsxRuntime.jsxs(
|
|
941
|
-
|
|
933
|
+
chunkY52UIFEX_js.Button,
|
|
942
934
|
{
|
|
943
935
|
size: "sm",
|
|
944
|
-
className: "bg-blue-600 hover:bg-blue-500 text-white font-
|
|
936
|
+
className: "bg-blue-600 hover:bg-blue-500 text-white font-medium text-xs h-7 px-4 gap-2",
|
|
945
937
|
onClick: onExecuteQuery,
|
|
946
938
|
disabled: !activeConnection,
|
|
947
939
|
children: [
|
|
948
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Play, { className: "w-3 h-3 fill-current" }),
|
|
940
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Play, { strokeWidth: 1.5, className: "w-3 h-3 fill-current" }),
|
|
949
941
|
"RUN"
|
|
950
942
|
]
|
|
951
943
|
}
|
|
952
944
|
),
|
|
953
945
|
activeConnection && (metadata == null ? void 0 : metadata.capabilities.queryLanguage) === "sql" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 ml-2 pl-2 border-l border-white/10", children: [
|
|
954
946
|
transactionActive ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
955
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
947
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[0.625rem] font-medium text-amber-400 px-1.5 py-0.5 bg-amber-500/10 rounded border border-amber-500/20 mr-1", children: "TXN" }),
|
|
956
948
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
957
|
-
|
|
949
|
+
chunkY52UIFEX_js.Button,
|
|
958
950
|
{
|
|
959
951
|
size: "sm",
|
|
960
952
|
variant: "ghost",
|
|
961
|
-
className: "h-7 text-xs font-
|
|
953
|
+
className: "h-7 text-xs font-medium text-emerald-400 hover:text-emerald-300 hover:bg-emerald-500/10 gap-1",
|
|
962
954
|
onClick: onCommitTransaction,
|
|
963
955
|
children: "COMMIT"
|
|
964
956
|
}
|
|
965
957
|
),
|
|
966
958
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
967
|
-
|
|
959
|
+
chunkY52UIFEX_js.Button,
|
|
968
960
|
{
|
|
969
961
|
size: "sm",
|
|
970
962
|
variant: "ghost",
|
|
971
|
-
className: "h-7 text-xs font-
|
|
963
|
+
className: "h-7 text-xs font-medium text-red-400 hover:text-red-300 hover:bg-red-500/10 gap-1",
|
|
972
964
|
onClick: onRollbackTransaction,
|
|
973
965
|
children: "ROLLBACK"
|
|
974
966
|
}
|
|
975
967
|
)
|
|
976
968
|
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
977
|
-
|
|
969
|
+
chunkY52UIFEX_js.Button,
|
|
978
970
|
{
|
|
979
971
|
size: "sm",
|
|
980
972
|
variant: "ghost",
|
|
981
|
-
className: "h-7 text-xs font-
|
|
973
|
+
className: "h-7 text-xs font-medium text-zinc-500 hover:text-white gap-1",
|
|
982
974
|
onClick: onBeginTransaction,
|
|
983
975
|
disabled: playgroundMode,
|
|
984
976
|
children: "BEGIN"
|
|
985
977
|
}
|
|
986
978
|
),
|
|
987
979
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
988
|
-
|
|
980
|
+
chunkY52UIFEX_js.Button,
|
|
989
981
|
{
|
|
990
982
|
size: "sm",
|
|
991
983
|
variant: "ghost",
|
|
992
|
-
className:
|
|
993
|
-
"h-7 text-xs font-
|
|
984
|
+
className: chunkY52UIFEX_js.cn(
|
|
985
|
+
"h-7 text-xs font-medium gap-1",
|
|
994
986
|
playgroundMode ? "text-emerald-400 bg-emerald-500/10 hover:bg-emerald-500/20" : "text-zinc-500 hover:text-white"
|
|
995
987
|
),
|
|
996
988
|
onClick: onTogglePlayground,
|
|
997
989
|
disabled: transactionActive,
|
|
998
990
|
title: "Playground mode: queries are auto-rolled back",
|
|
999
991
|
children: [
|
|
1000
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FlaskConical, { className: "w-3 h-3" }),
|
|
992
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FlaskConical, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1001
993
|
"SANDBOX"
|
|
1002
994
|
]
|
|
1003
995
|
}
|
|
1004
996
|
),
|
|
1005
997
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1006
|
-
|
|
998
|
+
chunkY52UIFEX_js.Button,
|
|
1007
999
|
{
|
|
1008
1000
|
size: "sm",
|
|
1009
1001
|
variant: "ghost",
|
|
1010
|
-
className:
|
|
1011
|
-
"h-7 text-xs font-
|
|
1002
|
+
className: chunkY52UIFEX_js.cn(
|
|
1003
|
+
"h-7 text-xs font-medium gap-1",
|
|
1012
1004
|
editingEnabled ? "text-amber-400 bg-amber-500/10 hover:bg-amber-500/20" : "text-zinc-500 hover:text-white"
|
|
1013
1005
|
),
|
|
1014
1006
|
onClick: onToggleEditing,
|
|
1015
1007
|
title: "Enable inline data editing",
|
|
1016
1008
|
children: [
|
|
1017
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "w-3 h-3" }),
|
|
1009
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1018
1010
|
"EDIT"
|
|
1019
1011
|
]
|
|
1020
1012
|
}
|
|
1021
1013
|
),
|
|
1022
1014
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1023
|
-
|
|
1015
|
+
chunkY52UIFEX_js.Button,
|
|
1024
1016
|
{
|
|
1025
1017
|
size: "sm",
|
|
1026
1018
|
variant: "ghost",
|
|
1027
|
-
className: "h-7 text-xs font-
|
|
1019
|
+
className: "h-7 text-xs font-medium text-zinc-500 hover:text-white gap-1",
|
|
1028
1020
|
onClick: onImport,
|
|
1029
1021
|
title: "Import data from CSV/JSON",
|
|
1030
1022
|
children: [
|
|
1031
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Upload, { className: "w-3 h-3" }),
|
|
1023
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Upload, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1032
1024
|
"IMPORT"
|
|
1033
1025
|
]
|
|
1034
1026
|
}
|
|
@@ -1132,7 +1124,7 @@ function AIAutopilotPanel({ connection, schemaContext, onExecuteQuery }) {
|
|
|
1132
1124
|
const sql = codeContent.trim();
|
|
1133
1125
|
elements.push(
|
|
1134
1126
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative group my-2", children: [
|
|
1135
|
-
/* @__PURE__ */ jsxRuntime.jsx("pre", { className: "bg-[#050505] rounded-lg p-3 text-
|
|
1127
|
+
/* @__PURE__ */ jsxRuntime.jsx("pre", { className: "bg-[#050505] rounded-lg p-3 text-xs font-mono text-blue-300 overflow-x-auto whitespace-pre-wrap border border-white/5", children: sql }),
|
|
1136
1128
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute top-1.5 right-1.5 flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity", children: [
|
|
1137
1129
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1138
1130
|
"button",
|
|
@@ -1140,7 +1132,7 @@ function AIAutopilotPanel({ connection, schemaContext, onExecuteQuery }) {
|
|
|
1140
1132
|
onClick: () => copyToClipboard(sql, blockIndex),
|
|
1141
1133
|
className: "p-1 rounded bg-white/10 hover:bg-white/20 text-zinc-400",
|
|
1142
1134
|
title: "Copy",
|
|
1143
|
-
children: copiedIndex === blockIndex ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "w-3 h-3 text-emerald-400" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "w-3 h-3" })
|
|
1135
|
+
children: copiedIndex === blockIndex ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { strokeWidth: 1.5, className: "w-3 h-3 text-emerald-400" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
1144
1136
|
}
|
|
1145
1137
|
),
|
|
1146
1138
|
onExecuteQuery && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -1149,7 +1141,7 @@ function AIAutopilotPanel({ connection, schemaContext, onExecuteQuery }) {
|
|
|
1149
1141
|
onClick: () => onExecuteQuery(sql),
|
|
1150
1142
|
className: "p-1 rounded bg-blue-600/20 hover:bg-blue-600/30 text-blue-400",
|
|
1151
1143
|
title: "Execute",
|
|
1152
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Play, { className: "w-3 h-3 fill-current" })
|
|
1144
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Play, { strokeWidth: 1.5, className: "w-3 h-3 fill-current" })
|
|
1153
1145
|
}
|
|
1154
1146
|
)
|
|
1155
1147
|
] })
|
|
@@ -1167,9 +1159,9 @@ function AIAutopilotPanel({ connection, schemaContext, onExecuteQuery }) {
|
|
|
1167
1159
|
continue;
|
|
1168
1160
|
}
|
|
1169
1161
|
if (line.startsWith("## ")) {
|
|
1170
|
-
elements.push(/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-
|
|
1162
|
+
elements.push(/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-xs font-medium text-zinc-200 mt-4 mb-2", children: line.slice(3) }, i));
|
|
1171
1163
|
} else if (line.startsWith("### ")) {
|
|
1172
|
-
elements.push(/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xs font-
|
|
1164
|
+
elements.push(/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xs font-medium text-zinc-300 mt-3 mb-1", children: line.slice(4) }, i));
|
|
1173
1165
|
} else if (line.startsWith("- ")) {
|
|
1174
1166
|
const content = line.slice(2).replace(/\*\*(.*?)\*\*/g, '<strong class="text-zinc-200">$1</strong>');
|
|
1175
1167
|
elements.push(/* @__PURE__ */ jsxRuntime.jsx("li", { className: "text-xs text-zinc-400 ml-4 leading-relaxed", dangerouslySetInnerHTML: { __html: content } }, i));
|
|
@@ -1188,23 +1180,23 @@ function AIAutopilotPanel({ connection, schemaContext, onExecuteQuery }) {
|
|
|
1188
1180
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full flex flex-col bg-[#080808]", children: [
|
|
1189
1181
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-b border-white/5 bg-[#0a0a0a]", children: [
|
|
1190
1182
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1191
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-1 rounded bg-cyan-500/10", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "w-3
|
|
1192
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-
|
|
1183
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-1 rounded bg-cyan-500/10", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { strokeWidth: 1.5, className: "w-3 h-3 text-cyan-400" }) }),
|
|
1184
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-cyan-400", children: "AI Performance Autopilot" })
|
|
1193
1185
|
] }),
|
|
1194
1186
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1195
1187
|
"button",
|
|
1196
1188
|
{
|
|
1197
1189
|
onClick: runAutopilot,
|
|
1198
1190
|
disabled: isLoading || !connection,
|
|
1199
|
-
className:
|
|
1200
|
-
"flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-
|
|
1191
|
+
className: chunkY52UIFEX_js.cn(
|
|
1192
|
+
"flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium transition-colors",
|
|
1201
1193
|
isLoading ? "bg-cyan-600/20 text-cyan-400 cursor-wait" : "bg-cyan-600 hover:bg-cyan-500 text-white"
|
|
1202
1194
|
),
|
|
1203
1195
|
children: isLoading ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1204
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "w-3 h-3 animate-spin" }),
|
|
1196
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { strokeWidth: 1.5, className: "w-3 h-3 animate-spin" }),
|
|
1205
1197
|
" Analyzing..."
|
|
1206
1198
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1207
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "w-3 h-3" }),
|
|
1199
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1208
1200
|
" ",
|
|
1209
1201
|
report ? "Re-analyze" : "Run Analysis"
|
|
1210
1202
|
] })
|
|
@@ -1213,8 +1205,8 @@ function AIAutopilotPanel({ connection, schemaContext, onExecuteQuery }) {
|
|
|
1213
1205
|
] }),
|
|
1214
1206
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { ref: reportRef, className: "flex-1 overflow-auto p-4", children: [
|
|
1215
1207
|
!report && !isLoading && !error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center h-full opacity-40", children: [
|
|
1216
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "w-8 h-8 mb-3" }),
|
|
1217
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-
|
|
1208
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { strokeWidth: 1.5, className: "w-8 h-8 mb-3" }),
|
|
1209
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium", children: "AI Performance Autopilot" }),
|
|
1218
1210
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-zinc-500 mt-1", children: 'Click "Run Analysis" to get AI-powered optimization recommendations' })
|
|
1219
1211
|
] }),
|
|
1220
1212
|
error && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-red-500/10 border border-red-500/20 rounded-lg p-3 text-xs text-red-400", children: error }),
|
|
@@ -1320,21 +1312,21 @@ ORDER BY ${groupBy.join(", ")};`;
|
|
|
1320
1312
|
}, [rowField, colField, valueField, aggFunction, pivotData]);
|
|
1321
1313
|
if (!result || rows.length === 0) {
|
|
1322
1314
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full flex flex-col items-center justify-center opacity-30", children: [
|
|
1323
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Columns3, { className: "w-8 h-8 mb-3" }),
|
|
1324
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-
|
|
1315
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Columns3, { strokeWidth: 1.5, className: "w-8 h-8 mb-3" }),
|
|
1316
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium", children: "Pivot Table" }),
|
|
1325
1317
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-zinc-500 mt-1", children: "Execute a query to create pivot tables" })
|
|
1326
1318
|
] });
|
|
1327
1319
|
}
|
|
1328
1320
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full flex flex-col bg-[#080808]", children: [
|
|
1329
1321
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 px-4 py-2 border-b border-white/5 bg-[#0a0a0a] flex-wrap", children: [
|
|
1330
1322
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
1331
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-500 font-
|
|
1323
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-500 font-medium", children: "Rows:" }),
|
|
1332
1324
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1333
1325
|
"select",
|
|
1334
1326
|
{
|
|
1335
1327
|
value: rowField || "",
|
|
1336
1328
|
onChange: (e) => setRowField(e.target.value || null),
|
|
1337
|
-
className: "bg-[#111] border border-white/10 rounded px-2 py-1 text-
|
|
1329
|
+
className: "bg-[#111] border border-white/10 rounded px-2 py-1 text-xs text-zinc-300 outline-none",
|
|
1338
1330
|
children: [
|
|
1339
1331
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: "Select..." }),
|
|
1340
1332
|
fields.map((f) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: f, children: f }, f))
|
|
@@ -1343,13 +1335,13 @@ ORDER BY ${groupBy.join(", ")};`;
|
|
|
1343
1335
|
)
|
|
1344
1336
|
] }),
|
|
1345
1337
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
1346
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-500 font-
|
|
1338
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-500 font-medium", children: "Columns:" }),
|
|
1347
1339
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1348
1340
|
"select",
|
|
1349
1341
|
{
|
|
1350
1342
|
value: colField || "",
|
|
1351
1343
|
onChange: (e) => setColField(e.target.value || null),
|
|
1352
|
-
className: "bg-[#111] border border-white/10 rounded px-2 py-1 text-
|
|
1344
|
+
className: "bg-[#111] border border-white/10 rounded px-2 py-1 text-xs text-zinc-300 outline-none",
|
|
1353
1345
|
children: [
|
|
1354
1346
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: "None" }),
|
|
1355
1347
|
fields.filter((f) => f !== rowField).map((f) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: f, children: f }, f))
|
|
@@ -1358,13 +1350,13 @@ ORDER BY ${groupBy.join(", ")};`;
|
|
|
1358
1350
|
)
|
|
1359
1351
|
] }),
|
|
1360
1352
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
1361
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-500 font-
|
|
1353
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-500 font-medium", children: "Values:" }),
|
|
1362
1354
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1363
1355
|
"select",
|
|
1364
1356
|
{
|
|
1365
1357
|
value: valueField || "",
|
|
1366
1358
|
onChange: (e) => setValueField(e.target.value || null),
|
|
1367
|
-
className: "bg-[#111] border border-white/10 rounded px-2 py-1 text-
|
|
1359
|
+
className: "bg-[#111] border border-white/10 rounded px-2 py-1 text-xs text-zinc-300 outline-none",
|
|
1368
1360
|
children: [
|
|
1369
1361
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: "Count" }),
|
|
1370
1362
|
fields.filter((f) => f !== rowField && f !== colField).map((f) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: f, children: f }, f))
|
|
@@ -1376,8 +1368,8 @@ ORDER BY ${groupBy.join(", ")};`;
|
|
|
1376
1368
|
"button",
|
|
1377
1369
|
{
|
|
1378
1370
|
onClick: () => setAggFunction(fn),
|
|
1379
|
-
className:
|
|
1380
|
-
"px-1.5 py-0.5 rounded text-xs font-
|
|
1371
|
+
className: chunkY52UIFEX_js.cn(
|
|
1372
|
+
"px-1.5 py-0.5 rounded text-xs font-medium transition-colors",
|
|
1381
1373
|
aggFunction === fn ? "bg-blue-500/20 text-blue-400 border border-blue-500/20" : "text-zinc-600 hover:text-zinc-400"
|
|
1382
1374
|
),
|
|
1383
1375
|
children: AGG_LABELS[fn]
|
|
@@ -1391,25 +1383,25 @@ ORDER BY ${groupBy.join(", ")};`;
|
|
|
1391
1383
|
const sql = generateSQL();
|
|
1392
1384
|
if (sql) onLoadQuery(sql);
|
|
1393
1385
|
},
|
|
1394
|
-
className: "ml-auto flex items-center gap-1 px-2 py-1 rounded text-xs font-
|
|
1386
|
+
className: "ml-auto flex items-center gap-1 px-2 py-1 rounded text-xs font-medium text-zinc-500 hover:text-blue-400 hover:bg-blue-500/10 transition-colors",
|
|
1395
1387
|
children: [
|
|
1396
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { className: "w-3 h-3" }),
|
|
1388
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1397
1389
|
" Generate SQL"
|
|
1398
1390
|
]
|
|
1399
1391
|
}
|
|
1400
1392
|
)
|
|
1401
1393
|
] }),
|
|
1402
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-auto", children: pivotData && pivotData.pivotRows.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full text-
|
|
1394
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-auto", children: pivotData && pivotData.pivotRows.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full text-xs font-mono", children: [
|
|
1403
1395
|
/* @__PURE__ */ jsxRuntime.jsx("thead", { className: "sticky top-0 z-10 bg-[#0d0d0d]", children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
1404
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "text-left px-3 py-2 text-zinc-500 border-b border-r border-white/5 font-
|
|
1405
|
-
pivotData.colKeys.map((ck) => /* @__PURE__ */ jsxRuntime.jsx("th", { className: "text-right px-3 py-2 text-zinc-500 border-b border-r border-white/5 font-
|
|
1396
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "text-left px-3 py-2 text-zinc-500 border-b border-r border-white/5 font-mediumr", children: rowField }),
|
|
1397
|
+
pivotData.colKeys.map((ck) => /* @__PURE__ */ jsxRuntime.jsx("th", { className: "text-right px-3 py-2 text-zinc-500 border-b border-r border-white/5 font-medium", children: ck === "__all__" ? `${AGG_LABELS[aggFunction]}(${valueField || "*"})` : ck }, ck))
|
|
1406
1398
|
] }) }),
|
|
1407
1399
|
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: pivotData.pivotRows.map((row, i) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "hover:bg-blue-500/[0.03] border-b border-white/5", children: [
|
|
1408
1400
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-3 py-1.5 text-zinc-300 border-r border-white/5 font-medium", children: row.rowKey }),
|
|
1409
1401
|
pivotData.colKeys.map((ck) => /* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-3 py-1.5 text-right text-amber-500/90 border-r border-white/5", children: row.values.get(ck) || "0" }, ck))
|
|
1410
1402
|
] }, i)) })
|
|
1411
1403
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center h-full opacity-30", children: [
|
|
1412
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.GripVertical, { className: "w-6 h-6 mb-2" }),
|
|
1404
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.GripVertical, { strokeWidth: 1.5, className: "w-6 h-6 mb-2" }),
|
|
1413
1405
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs", children: "Select row and value fields to build pivot" })
|
|
1414
1406
|
] }) }),
|
|
1415
1407
|
pivotData && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-4 py-1.5 border-t border-white/5 bg-[#0a0a0a] text-xs text-zinc-500 font-mono", children: [
|
|
@@ -1532,8 +1524,8 @@ ${aiDocs}
|
|
|
1532
1524
|
};
|
|
1533
1525
|
const renderMarkdown = (text) => {
|
|
1534
1526
|
return text.split("\n").map((line, i) => {
|
|
1535
|
-
if (line.startsWith("## ")) return /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-
|
|
1536
|
-
if (line.startsWith("### ")) return /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xs font-
|
|
1527
|
+
if (line.startsWith("## ")) return /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-xs font-medium text-zinc-200 mt-4 mb-2", children: line.slice(3) }, i);
|
|
1528
|
+
if (line.startsWith("### ")) return /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xs font-medium text-zinc-300 mt-3 mb-1", children: line.slice(4) }, i);
|
|
1537
1529
|
if (line.startsWith("- ")) {
|
|
1538
1530
|
const content = line.slice(2).replace(/\*\*(.*?)\*\*/g, '<strong class="text-zinc-200">$1</strong>');
|
|
1539
1531
|
return /* @__PURE__ */ jsxRuntime.jsx("li", { className: "text-xs text-zinc-400 ml-4 leading-relaxed", dangerouslySetInnerHTML: { __html: content } }, i);
|
|
@@ -1552,9 +1544,9 @@ ${aiDocs}
|
|
|
1552
1544
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full flex flex-col bg-[#080808]", children: [
|
|
1553
1545
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-b border-white/5 bg-[#0a0a0a]", children: [
|
|
1554
1546
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1555
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-1 rounded bg-teal-500/10", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "w-3
|
|
1556
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-
|
|
1557
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
1547
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-1 rounded bg-teal-500/10", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { strokeWidth: 1.5, className: "w-3 h-3 text-teal-400" }) }),
|
|
1548
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-teal-400", children: "Database Docs" }),
|
|
1549
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[0.625rem] text-zinc-500 font-mono", children: [
|
|
1558
1550
|
schema.length,
|
|
1559
1551
|
" tables"
|
|
1560
1552
|
] })
|
|
@@ -1565,12 +1557,12 @@ ${aiDocs}
|
|
|
1565
1557
|
{
|
|
1566
1558
|
onClick: generateAiDocs,
|
|
1567
1559
|
disabled: isAiLoading,
|
|
1568
|
-
className:
|
|
1569
|
-
"flex items-center gap-1 px-2.5 py-1 rounded-lg text-xs font-
|
|
1560
|
+
className: chunkY52UIFEX_js.cn(
|
|
1561
|
+
"flex items-center gap-1 px-2.5 py-1 rounded-lg text-xs font-medium transition-colors",
|
|
1570
1562
|
isAiLoading ? "bg-teal-600/20 text-teal-400 cursor-wait" : "bg-teal-600 hover:bg-teal-500 text-white"
|
|
1571
1563
|
),
|
|
1572
1564
|
children: [
|
|
1573
|
-
isAiLoading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "w-3 h-3 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "w-3 h-3" }),
|
|
1565
|
+
isAiLoading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { strokeWidth: 1.5, className: "w-3 h-3 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1574
1566
|
aiDocs ? "Regenerate" : "AI Describe"
|
|
1575
1567
|
]
|
|
1576
1568
|
}
|
|
@@ -1579,9 +1571,9 @@ ${aiDocs}
|
|
|
1579
1571
|
"button",
|
|
1580
1572
|
{
|
|
1581
1573
|
onClick: exportMarkdown,
|
|
1582
|
-
className: "flex items-center gap-1 px-2.5 py-1 rounded-lg bg-white/5 text-zinc-400 text-xs font-
|
|
1574
|
+
className: "flex items-center gap-1 px-2.5 py-1 rounded-lg bg-white/5 text-zinc-400 text-xs font-medium hover:bg-white/10 transition-colors",
|
|
1583
1575
|
children: [
|
|
1584
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { className: "w-3 h-3" }),
|
|
1576
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1585
1577
|
" Export MD"
|
|
1586
1578
|
]
|
|
1587
1579
|
}
|
|
@@ -1589,7 +1581,7 @@ ${aiDocs}
|
|
|
1589
1581
|
] })
|
|
1590
1582
|
] }),
|
|
1591
1583
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-2 border-b border-white/5 bg-[#0a0a0a]", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
1592
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-zinc-500" }),
|
|
1584
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { strokeWidth: 1.5, className: "absolute left-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-zinc-500" }),
|
|
1593
1585
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1594
1586
|
"input",
|
|
1595
1587
|
{
|
|
@@ -1604,19 +1596,19 @@ ${aiDocs}
|
|
|
1604
1596
|
error && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-red-500/10 border border-red-500/20 rounded-lg p-3 text-xs text-red-400", children: error }),
|
|
1605
1597
|
(aiDocs || isAiLoading) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-teal-500/5 border border-teal-500/10 rounded-lg p-4 mb-4", children: [
|
|
1606
1598
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 mb-3", children: [
|
|
1607
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "w-3
|
|
1608
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-
|
|
1609
|
-
isAiLoading && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "w-3 h-3 animate-spin text-teal-400" })
|
|
1599
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { strokeWidth: 1.5, className: "w-3 h-3 text-teal-400" }),
|
|
1600
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-teal-400", children: "AI-Generated Documentation" }),
|
|
1601
|
+
isAiLoading && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { strokeWidth: 1.5, className: "w-3 h-3 animate-spin text-teal-400" })
|
|
1610
1602
|
] }),
|
|
1611
1603
|
aiDocs && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "prose prose-invert prose-xs max-w-none", children: renderMarkdown(aiDocs) })
|
|
1612
1604
|
] }),
|
|
1613
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xs font-
|
|
1605
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xs font-medium text-zinc-400", children: "Table Reference" }),
|
|
1614
1606
|
filteredSchema.map((table) => {
|
|
1615
1607
|
var _a;
|
|
1616
1608
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-[#0a0a0a] border border-white/5 rounded-lg overflow-hidden", children: [
|
|
1617
1609
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-3 py-2 flex items-center justify-between", children: [
|
|
1618
1610
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1619
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-
|
|
1611
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-zinc-200", children: table.name }),
|
|
1620
1612
|
table.rowCount !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-zinc-500 font-mono", children: [
|
|
1621
1613
|
table.rowCount.toLocaleString(),
|
|
1622
1614
|
" rows"
|
|
@@ -1627,7 +1619,7 @@ ${aiDocs}
|
|
|
1627
1619
|
" columns"
|
|
1628
1620
|
] })
|
|
1629
1621
|
] }),
|
|
1630
|
-
table.columns && table.columns.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t border-white/5", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full text-
|
|
1622
|
+
table.columns && table.columns.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t border-white/5", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full text-xs", children: [
|
|
1631
1623
|
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "text-zinc-500", children: [
|
|
1632
1624
|
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "text-left px-3 py-1 font-normal", children: "Column" }),
|
|
1633
1625
|
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "text-left px-3 py-1 font-normal", children: "Type" }),
|
|
@@ -1637,7 +1629,7 @@ ${aiDocs}
|
|
|
1637
1629
|
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: table.columns.map((col) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-t border-white/[0.03] hover:bg-white/[0.02]", children: [
|
|
1638
1630
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-3 py-1 text-zinc-300 font-mono", children: col.name }),
|
|
1639
1631
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-3 py-1 text-zinc-500 font-mono", children: col.type }),
|
|
1640
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-3 py-1", children: col.isPrimary && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-amber-400 text-
|
|
1632
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-3 py-1", children: col.isPrimary && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-amber-400 text-[0.625rem] font-medium", children: "PK" }) }),
|
|
1641
1633
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-3 py-1 text-zinc-600", children: col.nullable !== false ? "Yes" : "No" })
|
|
1642
1634
|
] }, col.name)) })
|
|
1643
1635
|
] }) })
|
|
@@ -1654,7 +1646,7 @@ function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }) {
|
|
|
1654
1646
|
const [sortField, setSortField] = React.useState("executedAt");
|
|
1655
1647
|
const [sortOrder, setSortOrder] = React.useState("desc");
|
|
1656
1648
|
React.useEffect(() => {
|
|
1657
|
-
setHistory(
|
|
1649
|
+
setHistory(chunkY52UIFEX_js.storage.getHistory());
|
|
1658
1650
|
}, [refreshTrigger]);
|
|
1659
1651
|
const filteredHistory = React.useMemo(() => {
|
|
1660
1652
|
return history.filter((item) => {
|
|
@@ -1679,7 +1671,7 @@ function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }) {
|
|
|
1679
1671
|
}, [history, search, filterStatus, isGlobal, activeConnectionId, sortField, sortOrder]);
|
|
1680
1672
|
const handleClearHistory = () => {
|
|
1681
1673
|
if (confirm("Are you sure you want to clear all history?")) {
|
|
1682
|
-
|
|
1674
|
+
chunkY52UIFEX_js.storage.clearHistory();
|
|
1683
1675
|
setHistory([]);
|
|
1684
1676
|
}
|
|
1685
1677
|
};
|
|
@@ -1725,9 +1717,9 @@ function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }) {
|
|
|
1725
1717
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4 border-b border-white/5 bg-[#0a0a0a]/50 backdrop-blur-sm sticky top-0 z-10 space-y-4", children: [
|
|
1726
1718
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
1727
1719
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
1728
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 rounded-lg bg-emerald-500/10 border border-emerald-500/20", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.History, { className: "w-
|
|
1720
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 rounded-lg bg-emerald-500/10 border border-emerald-500/20", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.History, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-emerald-400" }) }),
|
|
1729
1721
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1730
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-
|
|
1722
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xs font-medium text-zinc-100 flex items-center gap-2", children: "Query History" }),
|
|
1731
1723
|
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-zinc-500 font-medium", children: [
|
|
1732
1724
|
"Showing ",
|
|
1733
1725
|
filteredHistory.length,
|
|
@@ -1736,25 +1728,25 @@ function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }) {
|
|
|
1736
1728
|
] })
|
|
1737
1729
|
] }),
|
|
1738
1730
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1739
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1740
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1741
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { className: "w-3
|
|
1731
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.DropdownMenu, { children: [
|
|
1732
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.Button, { variant: "ghost", size: "sm", className: "h-8 text-xs font-medium text-zinc-400 hover:text-white gap-2", children: [
|
|
1733
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1742
1734
|
" Export"
|
|
1743
1735
|
] }) }),
|
|
1744
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1745
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1746
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1736
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.DropdownMenuContent, { align: "end", className: "bg-[#0d0d0d] border-white/10 text-zinc-300", children: [
|
|
1737
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.DropdownMenuItem, { onClick: () => exportHistory("csv"), className: "text-xs cursor-pointer", children: "Export as CSV" }),
|
|
1738
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.DropdownMenuItem, { onClick: () => exportHistory("json"), className: "text-xs cursor-pointer", children: "Export as JSON" })
|
|
1747
1739
|
] })
|
|
1748
1740
|
] }),
|
|
1749
1741
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1750
|
-
|
|
1742
|
+
chunkY52UIFEX_js.Button,
|
|
1751
1743
|
{
|
|
1752
1744
|
variant: "ghost",
|
|
1753
1745
|
size: "sm",
|
|
1754
1746
|
onClick: handleClearHistory,
|
|
1755
|
-
className: "h-8 text-xs font-
|
|
1747
|
+
className: "h-8 text-xs font-medium text-red-400/70 hover:text-red-400 hover:bg-red-400/10",
|
|
1756
1748
|
children: [
|
|
1757
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "w-3
|
|
1749
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { strokeWidth: 1.5, className: "w-3 h-3 mr-2" }),
|
|
1758
1750
|
" Clear"
|
|
1759
1751
|
]
|
|
1760
1752
|
}
|
|
@@ -1763,9 +1755,9 @@ function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }) {
|
|
|
1763
1755
|
] }),
|
|
1764
1756
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
|
|
1765
1757
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex-1 min-w-[240px]", children: [
|
|
1766
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-3
|
|
1758
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { strokeWidth: 1.5, className: "absolute left-3 top-1/2 -translate-y-1/2 w-3 h-3 text-zinc-500" }),
|
|
1767
1759
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1768
|
-
|
|
1760
|
+
chunkY52UIFEX_js.Input,
|
|
1769
1761
|
{
|
|
1770
1762
|
placeholder: "Search by query, connection or tab...",
|
|
1771
1763
|
value: search,
|
|
@@ -1778,7 +1770,7 @@ function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }) {
|
|
|
1778
1770
|
{
|
|
1779
1771
|
onClick: () => setSearch(""),
|
|
1780
1772
|
className: "absolute right-3 top-1/2 -translate-y-1/2 text-zinc-500 hover:text-white",
|
|
1781
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "w-3 h-3" })
|
|
1773
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
1782
1774
|
}
|
|
1783
1775
|
)
|
|
1784
1776
|
] }),
|
|
@@ -1787,8 +1779,8 @@ function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }) {
|
|
|
1787
1779
|
"button",
|
|
1788
1780
|
{
|
|
1789
1781
|
onClick: () => setIsGlobal(false),
|
|
1790
|
-
className:
|
|
1791
|
-
"px-3 py-1.5 text-xs font-
|
|
1782
|
+
className: chunkY52UIFEX_js.cn(
|
|
1783
|
+
"px-3 py-1.5 text-xs font-medium rounded-md transition-all",
|
|
1792
1784
|
!isGlobal ? "bg-emerald-600 text-white shadow-lg shadow-emerald-600/20" : "text-zinc-500 hover:text-zinc-300"
|
|
1793
1785
|
),
|
|
1794
1786
|
children: "Active Conn"
|
|
@@ -1798,8 +1790,8 @@ function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }) {
|
|
|
1798
1790
|
"button",
|
|
1799
1791
|
{
|
|
1800
1792
|
onClick: () => setIsGlobal(true),
|
|
1801
|
-
className:
|
|
1802
|
-
"px-3 py-1.5 text-xs font-
|
|
1793
|
+
className: chunkY52UIFEX_js.cn(
|
|
1794
|
+
"px-3 py-1.5 text-xs font-medium rounded-md transition-all",
|
|
1803
1795
|
isGlobal ? "bg-emerald-600 text-white shadow-lg shadow-emerald-600/20" : "text-zinc-500 hover:text-zinc-300"
|
|
1804
1796
|
),
|
|
1805
1797
|
children: "All Connections"
|
|
@@ -1810,8 +1802,8 @@ function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }) {
|
|
|
1810
1802
|
"button",
|
|
1811
1803
|
{
|
|
1812
1804
|
onClick: () => setFilterStatus(status),
|
|
1813
|
-
className:
|
|
1814
|
-
"px-3 py-1.5 text-xs font-
|
|
1805
|
+
className: chunkY52UIFEX_js.cn(
|
|
1806
|
+
"px-3 py-1.5 text-xs font-medium rounded-md transition-all",
|
|
1815
1807
|
filterStatus === status ? "bg-white/10 text-white" : "text-zinc-500 hover:text-zinc-300"
|
|
1816
1808
|
),
|
|
1817
1809
|
children: status
|
|
@@ -1821,25 +1813,25 @@ function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }) {
|
|
|
1821
1813
|
] })
|
|
1822
1814
|
] }),
|
|
1823
1815
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-auto custom-scrollbar", children: filteredHistory.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full flex flex-col items-center justify-center opacity-20 p-8 text-center", children: [
|
|
1824
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.History, { className: "w-16 h-16 mb-4 text-zinc-600" }),
|
|
1825
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-
|
|
1826
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-zinc-500 mt-
|
|
1816
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.History, { strokeWidth: 1.5, className: "w-16 h-16 mb-4 text-zinc-600" }),
|
|
1817
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium", children: "No history items found" }),
|
|
1818
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-zinc-500 mt-1r", children: "Run some queries to see them here" })
|
|
1827
1819
|
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-[800px]", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full text-left border-collapse", children: [
|
|
1828
|
-
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "bg-white/[0.02] border-b border-white/5 text-xs font-
|
|
1820
|
+
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "bg-white/[0.02] border-b border-white/5 text-xs font-medium text-zinc-500", children: [
|
|
1829
1821
|
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-4 py-3 w-10 text-center", children: "Status" }),
|
|
1830
1822
|
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-4 py-3 cursor-pointer hover:text-zinc-300 transition-colors group", onClick: () => handleSort("executedAt"), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1831
1823
|
"Executed At",
|
|
1832
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUpDown, { className:
|
|
1824
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUpDown, { className: chunkY52UIFEX_js.cn("w-3 h-3 transition-opacity", sortField === "executedAt" ? "opacity-100 text-emerald-500" : "opacity-0 group-hover:opacity-100") })
|
|
1833
1825
|
] }) }),
|
|
1834
1826
|
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-4 py-3", children: "Source" }),
|
|
1835
1827
|
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-4 py-3", children: "SQL Query" }),
|
|
1836
1828
|
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-4 py-3 cursor-pointer hover:text-zinc-300 transition-colors group", onClick: () => handleSort("executionTime"), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1837
1829
|
"Duration",
|
|
1838
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUpDown, { className:
|
|
1830
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUpDown, { className: chunkY52UIFEX_js.cn("w-3 h-3 transition-opacity", sortField === "executionTime" ? "opacity-100 text-emerald-500" : "opacity-0 group-hover:opacity-100") })
|
|
1839
1831
|
] }) }),
|
|
1840
1832
|
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-4 py-3 cursor-pointer hover:text-zinc-300 transition-colors group", onClick: () => handleSort("rowCount"), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1841
1833
|
"Rows",
|
|
1842
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUpDown, { className:
|
|
1834
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUpDown, { className: chunkY52UIFEX_js.cn("w-3 h-3 transition-opacity", sortField === "rowCount" ? "opacity-100 text-emerald-500" : "opacity-0 group-hover:opacity-100") })
|
|
1843
1835
|
] }) }),
|
|
1844
1836
|
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-4 py-3 w-20" })
|
|
1845
1837
|
] }) }),
|
|
@@ -1848,27 +1840,27 @@ function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }) {
|
|
|
1848
1840
|
{
|
|
1849
1841
|
className: "hover:bg-white/[0.03] transition-colors group text-xs border-b border-white/5",
|
|
1850
1842
|
children: [
|
|
1851
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-4 text-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center", children: item.status === "success" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-5 h-5 rounded-full bg-emerald-500/10 flex items-center justify-center border border-emerald-500/20", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle2, { className: "w-3 h-3 text-emerald-500" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-5 h-5 rounded-full bg-red-500/10 flex items-center justify-center border border-red-500/20", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "w-3 h-3 text-red-500" }) }) }) }),
|
|
1843
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-4 text-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center", children: item.status === "success" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-5 h-5 rounded-full bg-emerald-500/10 flex items-center justify-center border border-emerald-500/20", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle2, { strokeWidth: 1.5, className: "w-3 h-3 text-emerald-500" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-5 h-5 rounded-full bg-red-500/10 flex items-center justify-center border border-red-500/20", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { strokeWidth: 1.5, className: "w-3 h-3 text-red-500" }) }) }) }),
|
|
1852
1844
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-4 whitespace-nowrap", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
|
|
1853
1845
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-zinc-200 font-medium", children: item.executedAt ? dateFns.format(new Date(item.executedAt), "MMM d, HH:mm:ss") : "-" }),
|
|
1854
1846
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-500 font-mono mt-0.5", children: item.executedAt ? dateFns.format(new Date(item.executedAt), "yyyy") : "" })
|
|
1855
1847
|
] }) }),
|
|
1856
1848
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-4 whitespace-nowrap", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
1857
1849
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-zinc-300", children: [
|
|
1858
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Database, { className: "w-3 h-3 text-blue-400" }),
|
|
1859
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-
|
|
1850
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Database, { strokeWidth: 1.5, className: "w-3 h-3 text-blue-400" }),
|
|
1851
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: item.connectionName || "Unknown" })
|
|
1860
1852
|
] }),
|
|
1861
1853
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-zinc-500 text-xs", children: [
|
|
1862
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Hash, { className: "w-2.5 h-2.5" }),
|
|
1854
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Hash, { strokeWidth: 1.5, className: "w-2.5 h-2.5" }),
|
|
1863
1855
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: item.tabName || "Default Tab" })
|
|
1864
1856
|
] })
|
|
1865
1857
|
] }) }),
|
|
1866
1858
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-4 max-w-md", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-[#050505] border border-white/5 rounded-md p-2 relative group-hover:border-white/10 transition-colors", children: [
|
|
1867
|
-
/* @__PURE__ */ jsxRuntime.jsx("pre", { className: "text-
|
|
1859
|
+
/* @__PURE__ */ jsxRuntime.jsx("pre", { className: "text-xs font-mono text-zinc-400 line-clamp-2 break-all whitespace-pre-wrap leading-relaxed", children: item.query }),
|
|
1868
1860
|
item.errorMessage && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 pt-2 border-t border-red-500/10 text-xs text-red-400/80 font-mono italic", children: item.errorMessage })
|
|
1869
1861
|
] }) }),
|
|
1870
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-4 whitespace-nowrap", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className:
|
|
1871
|
-
"px-2 py-0.5 rounded text-xs font-mono font-
|
|
1862
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-4 whitespace-nowrap", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: chunkY52UIFEX_js.cn(
|
|
1863
|
+
"px-2 py-0.5 rounded text-xs font-mono font-medium",
|
|
1872
1864
|
item.executionTime > 500 ? "text-amber-400 bg-amber-400/10" : "text-zinc-400 bg-white/5"
|
|
1873
1865
|
), children: [
|
|
1874
1866
|
item.executionTime,
|
|
@@ -1876,14 +1868,14 @@ function QueryHistory({ onSelectQuery, activeConnectionId, refreshTrigger }) {
|
|
|
1876
1868
|
] }) }),
|
|
1877
1869
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-4 whitespace-nowrap", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-zinc-400 font-mono text-xs", children: item.rowCount != null ? item.rowCount.toLocaleString() : "-" }) }),
|
|
1878
1870
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-4 text-right", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1879
|
-
|
|
1871
|
+
chunkY52UIFEX_js.Button,
|
|
1880
1872
|
{
|
|
1881
1873
|
variant: "ghost",
|
|
1882
1874
|
size: "sm",
|
|
1883
1875
|
className: "h-8 w-8 p-0 hover:bg-emerald-500/10 hover:text-emerald-400",
|
|
1884
1876
|
onClick: () => onSelectQuery(item.query),
|
|
1885
1877
|
title: "Restore Query",
|
|
1886
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { className: "w-3
|
|
1878
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { className: "w-3 h-3" })
|
|
1887
1879
|
}
|
|
1888
1880
|
) })
|
|
1889
1881
|
]
|
|
@@ -1897,7 +1889,7 @@ function SavedQueries({ onSelectQuery, connectionType, refreshTrigger }) {
|
|
|
1897
1889
|
const [queries, setQueries] = React.useState([]);
|
|
1898
1890
|
const [search, setSearch] = React.useState("");
|
|
1899
1891
|
React.useEffect(() => {
|
|
1900
|
-
setQueries(
|
|
1892
|
+
setQueries(chunkY52UIFEX_js.storage.getSavedQueries());
|
|
1901
1893
|
}, [refreshTrigger]);
|
|
1902
1894
|
const filteredQueries = queries.filter((q) => {
|
|
1903
1895
|
const matchesSearch = q.name.toLowerCase().includes(search.toLowerCase()) || q.query.toLowerCase().includes(search.toLowerCase());
|
|
@@ -1907,20 +1899,20 @@ function SavedQueries({ onSelectQuery, connectionType, refreshTrigger }) {
|
|
|
1907
1899
|
const handleDelete = (id, e) => {
|
|
1908
1900
|
e.stopPropagation();
|
|
1909
1901
|
if (confirm("Are you sure you want to delete this saved query?")) {
|
|
1910
|
-
|
|
1911
|
-
setQueries(
|
|
1902
|
+
chunkY52UIFEX_js.storage.deleteSavedQuery(id);
|
|
1903
|
+
setQueries(chunkY52UIFEX_js.storage.getSavedQueries());
|
|
1912
1904
|
}
|
|
1913
1905
|
};
|
|
1914
1906
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full flex flex-col bg-[#0a0a0a]", children: [
|
|
1915
1907
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4 border-b border-white/5 flex flex-col gap-4", children: [
|
|
1916
|
-
/* @__PURE__ */ jsxRuntime.jsxs("h3", { className: "text-
|
|
1917
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bookmark, { className: "w-
|
|
1908
|
+
/* @__PURE__ */ jsxRuntime.jsxs("h3", { className: "text-xs font-medium text-zinc-400 flex items-center gap-2", children: [
|
|
1909
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bookmark, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }),
|
|
1918
1910
|
" Saved Queries"
|
|
1919
1911
|
] }),
|
|
1920
1912
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
1921
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 w-3
|
|
1913
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { strokeWidth: 1.5, className: "absolute left-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-zinc-500" }),
|
|
1922
1914
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1923
|
-
|
|
1915
|
+
chunkY52UIFEX_js.Input,
|
|
1924
1916
|
{
|
|
1925
1917
|
placeholder: "Search saved queries...",
|
|
1926
1918
|
value: search,
|
|
@@ -1931,8 +1923,8 @@ function SavedQueries({ onSelectQuery, connectionType, refreshTrigger }) {
|
|
|
1931
1923
|
] })
|
|
1932
1924
|
] }),
|
|
1933
1925
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto custom-scrollbar", children: filteredQueries.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full flex flex-col items-center justify-center opacity-20 p-8 text-center", children: [
|
|
1934
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bookmark, { className: "w-12 h-12 mb-4" }),
|
|
1935
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-
|
|
1926
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bookmark, { strokeWidth: 1.5, className: "w-12 h-12 mb-4" }),
|
|
1927
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs italic", children: "No saved queries found" })
|
|
1936
1928
|
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-px bg-white/5", children: filteredQueries.map((q) => {
|
|
1937
1929
|
var _a;
|
|
1938
1930
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -1943,19 +1935,19 @@ function SavedQueries({ onSelectQuery, connectionType, refreshTrigger }) {
|
|
|
1943
1935
|
children: [
|
|
1944
1936
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between mb-2", children: [
|
|
1945
1937
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1946
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs font-
|
|
1938
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs font-medium text-blue-400 mb-1 group-hover:text-blue-300 transition-colors", children: q.name }),
|
|
1947
1939
|
q.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-zinc-500 line-clamp-1", children: q.description })
|
|
1948
1940
|
] }),
|
|
1949
1941
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity", children: [
|
|
1950
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1942
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.Button, { variant: "ghost", size: "icon", className: "h-6 w-6 text-zinc-500 hover:text-white", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Edit3, { strokeWidth: 1.5, className: "w-3 h-3" }) }),
|
|
1951
1943
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1952
|
-
|
|
1944
|
+
chunkY52UIFEX_js.Button,
|
|
1953
1945
|
{
|
|
1954
1946
|
variant: "ghost",
|
|
1955
1947
|
size: "icon",
|
|
1956
1948
|
className: "h-6 w-6 text-zinc-500 hover:text-red-400",
|
|
1957
1949
|
onClick: (e) => handleDelete(q.id, e),
|
|
1958
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "w-3 h-3" })
|
|
1950
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
1959
1951
|
}
|
|
1960
1952
|
)
|
|
1961
1953
|
] })
|
|
@@ -1963,14 +1955,14 @@ function SavedQueries({ onSelectQuery, connectionType, refreshTrigger }) {
|
|
|
1963
1955
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-[#050505] border border-white/5 rounded-md p-2 mb-3", children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "text-xs font-mono text-zinc-400 line-clamp-3", children: q.query }) }),
|
|
1964
1956
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
1965
1957
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1966
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-1.5 py-0.5 rounded bg-blue-500/10 border border-blue-500/20 text-
|
|
1967
|
-
(_a = q.tags) == null ? void 0 : _a.map((tag) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1 text-
|
|
1968
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Tag, { className: "w-2.5 h-2.5" }),
|
|
1958
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-1.5 py-0.5 rounded bg-blue-500/10 border border-blue-500/20 text-[0.625rem] font-medium text-blue-400er", children: q.connectionType }),
|
|
1959
|
+
(_a = q.tags) == null ? void 0 : _a.map((tag) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1 text-[0.625rem] text-zinc-500", children: [
|
|
1960
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Tag, { strokeWidth: 1.5, className: "w-2.5 h-2.5" }),
|
|
1969
1961
|
" ",
|
|
1970
1962
|
tag
|
|
1971
1963
|
] }, tag))
|
|
1972
1964
|
] }),
|
|
1973
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
1965
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[0.625rem] text-zinc-600 flex items-center gap-1 font-mono", children: [
|
|
1974
1966
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Calendar, { className: "w-2.5 h-2.5" }),
|
|
1975
1967
|
" ",
|
|
1976
1968
|
dateFns.format(q.updatedAt, "MMM d, yyyy")
|
|
@@ -2014,7 +2006,7 @@ function Badge(_a) {
|
|
|
2014
2006
|
Comp,
|
|
2015
2007
|
chunkQ6LRDBK7_js.__spreadValues({
|
|
2016
2008
|
"data-slot": "badge",
|
|
2017
|
-
className:
|
|
2009
|
+
className: chunkY52UIFEX_js.cn(badgeVariants({ variant }), className)
|
|
2018
2010
|
}, props)
|
|
2019
2011
|
);
|
|
2020
2012
|
}
|
|
@@ -2024,7 +2016,7 @@ function useAllConnections() {
|
|
|
2024
2016
|
React.useEffect(() => {
|
|
2025
2017
|
let cancelled = false;
|
|
2026
2018
|
async function load() {
|
|
2027
|
-
const userConns =
|
|
2019
|
+
const userConns = chunkY52UIFEX_js.storage.getConnections();
|
|
2028
2020
|
try {
|
|
2029
2021
|
const res = await fetch("/api/connections/managed");
|
|
2030
2022
|
if (res.ok) {
|
|
@@ -2490,7 +2482,7 @@ function SnapshotTimeline({ snapshots, onCompare, onDelete }) {
|
|
|
2490
2482
|
);
|
|
2491
2483
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
2492
2484
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-2", children: [
|
|
2493
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs
|
|
2485
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-500 font-medium", children: "Timeline" }),
|
|
2494
2486
|
canCompare && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-blue-400", children: "Comparing 2 snapshots" })
|
|
2495
2487
|
] }),
|
|
2496
2488
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex items-center overflow-x-auto pb-2 px-2 gap-0", children: [
|
|
@@ -2504,22 +2496,22 @@ function SnapshotTimeline({ snapshots, onCompare, onDelete }) {
|
|
|
2504
2496
|
className: "relative flex flex-col items-center min-w-[100px] cursor-pointer group",
|
|
2505
2497
|
onClick: () => handleClick(snapshot.id),
|
|
2506
2498
|
children: [
|
|
2507
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className:
|
|
2508
|
-
"w-
|
|
2499
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkY52UIFEX_js.cn(
|
|
2500
|
+
"w-3.5 h-3.5 rounded-full border-2 z-10 transition-all",
|
|
2509
2501
|
isSelected ? "bg-blue-500 border-blue-400 scale-125" : "bg-[#0d0d0d] border-white/20 hover:border-white/40"
|
|
2510
2502
|
) }),
|
|
2511
2503
|
idx < sorted.length - 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-[7px] left-[50%] w-full h-[2px] bg-white/10" }),
|
|
2512
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className:
|
|
2504
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkY52UIFEX_js.cn(
|
|
2513
2505
|
"mt-2 text-center transition-colors",
|
|
2514
2506
|
isSelected ? "text-blue-400" : "text-zinc-500 group-hover:text-zinc-300"
|
|
2515
2507
|
), children: [
|
|
2516
2508
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs font-medium truncate max-w-[90px]", children: snapshot.label || snapshot.connectionName }),
|
|
2517
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-
|
|
2509
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[0.625rem] text-zinc-600", children: [
|
|
2518
2510
|
date.toLocaleDateString(),
|
|
2519
2511
|
" ",
|
|
2520
2512
|
date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })
|
|
2521
2513
|
] }),
|
|
2522
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Badge, { variant: "secondary", className: "text-
|
|
2514
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Badge, { variant: "secondary", className: "text-[0.625rem] mt-1", children: [
|
|
2523
2515
|
snapshot.schema.length,
|
|
2524
2516
|
" tables"
|
|
2525
2517
|
] })
|
|
@@ -2532,7 +2524,7 @@ function SnapshotTimeline({ snapshots, onCompare, onDelete }) {
|
|
|
2532
2524
|
onDelete(snapshot.id);
|
|
2533
2525
|
},
|
|
2534
2526
|
className: "absolute -top-2 -right-1 p-0.5 text-zinc-600 hover:text-red-400 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
2535
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "w-2.5 h-2.5" })
|
|
2527
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { strokeWidth: 1.5, className: "w-2.5 h-2.5" })
|
|
2536
2528
|
}
|
|
2537
2529
|
)
|
|
2538
2530
|
]
|
|
@@ -2545,7 +2537,7 @@ function SnapshotTimeline({ snapshots, onCompare, onDelete }) {
|
|
|
2545
2537
|
}
|
|
2546
2538
|
function SchemaDiff({ schema, connection }) {
|
|
2547
2539
|
const [snapshots, setSnapshots] = React.useState(
|
|
2548
|
-
() =>
|
|
2540
|
+
() => chunkY52UIFEX_js.storage.getSchemaSnapshots()
|
|
2549
2541
|
);
|
|
2550
2542
|
const [sourceId, setSourceId] = React.useState("current");
|
|
2551
2543
|
const [targetId, setTargetId] = React.useState("");
|
|
@@ -2564,14 +2556,14 @@ function SchemaDiff({ schema, connection }) {
|
|
|
2564
2556
|
createdAt: /* @__PURE__ */ new Date(),
|
|
2565
2557
|
label: snapshotLabel.trim() || void 0
|
|
2566
2558
|
};
|
|
2567
|
-
|
|
2568
|
-
setSnapshots(
|
|
2559
|
+
chunkY52UIFEX_js.storage.saveSchemaSnapshot(snapshot);
|
|
2560
|
+
setSnapshots(chunkY52UIFEX_js.storage.getSchemaSnapshots());
|
|
2569
2561
|
setSnapshotLabel("");
|
|
2570
2562
|
setShowLabelInput(false);
|
|
2571
2563
|
}, [schema, connection, snapshotLabel]);
|
|
2572
2564
|
const deleteSnapshot = React.useCallback((id) => {
|
|
2573
|
-
|
|
2574
|
-
setSnapshots(
|
|
2565
|
+
chunkY52UIFEX_js.storage.deleteSchemaSnapshot(id);
|
|
2566
|
+
setSnapshots(chunkY52UIFEX_js.storage.getSchemaSnapshots());
|
|
2575
2567
|
if (sourceId === id) setSourceId("current");
|
|
2576
2568
|
if (targetId === id) setTargetId("");
|
|
2577
2569
|
}, [sourceId, targetId]);
|
|
@@ -2613,8 +2605,8 @@ function SchemaDiff({ schema, connection }) {
|
|
|
2613
2605
|
createdAt: /* @__PURE__ */ new Date(),
|
|
2614
2606
|
label: `Live: ${conn.name}`
|
|
2615
2607
|
};
|
|
2616
|
-
|
|
2617
|
-
setSnapshots(
|
|
2608
|
+
chunkY52UIFEX_js.storage.saveSchemaSnapshot(snapshot);
|
|
2609
|
+
setSnapshots(chunkY52UIFEX_js.storage.getSchemaSnapshots());
|
|
2618
2610
|
setTargetId(snapshot.id);
|
|
2619
2611
|
} catch (err) {
|
|
2620
2612
|
console.error("Failed to fetch remote schema:", err);
|
|
@@ -2626,7 +2618,7 @@ function SchemaDiff({ schema, connection }) {
|
|
|
2626
2618
|
switch (action) {
|
|
2627
2619
|
case "added":
|
|
2628
2620
|
return /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: "bg-green-500/20 text-green-400 border-green-500/30 text-xs", children: [
|
|
2629
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "w-2.5 h-2.5 mr-0.5" }),
|
|
2621
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { strokeWidth: 1.5, className: "w-2.5 h-2.5 mr-0.5" }),
|
|
2630
2622
|
"Added"
|
|
2631
2623
|
] });
|
|
2632
2624
|
case "removed":
|
|
@@ -2636,7 +2628,7 @@ function SchemaDiff({ schema, connection }) {
|
|
|
2636
2628
|
] });
|
|
2637
2629
|
case "modified":
|
|
2638
2630
|
return /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: "bg-yellow-500/20 text-yellow-400 border-yellow-500/30 text-xs", children: [
|
|
2639
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Edit3, { className: "w-2.5 h-2.5 mr-0.5" }),
|
|
2631
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Edit3, { strokeWidth: 1.5, className: "w-2.5 h-2.5 mr-0.5" }),
|
|
2640
2632
|
"Modified"
|
|
2641
2633
|
] });
|
|
2642
2634
|
default:
|
|
@@ -2649,20 +2641,20 @@ function SchemaDiff({ schema, connection }) {
|
|
|
2649
2641
|
};
|
|
2650
2642
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full flex flex-col bg-[#080808]", children: [
|
|
2651
2643
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 px-3 py-2 border-b border-white/5 bg-[#0a0a0a] flex-wrap", children: [
|
|
2652
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.GitCompare, { className: "w-
|
|
2653
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-
|
|
2644
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.GitCompare, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-rose-400" }),
|
|
2645
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-zinc-400r", children: "Schema Diff" }),
|
|
2654
2646
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-px bg-white/10" }),
|
|
2655
2647
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
2656
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-600
|
|
2657
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2658
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2659
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2660
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2661
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Database, { className: "w-3 h-3" }),
|
|
2648
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-600", children: "Source" }),
|
|
2649
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.Select, { value: sourceId, onValueChange: setSourceId, children: [
|
|
2650
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.SelectTrigger, { className: "h-7 w-[180px] text-xs bg-white/5 border-white/10", children: /* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.SelectValue, { placeholder: "Select source" }) }),
|
|
2651
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.SelectContent, { className: "bg-[#111] border-white/10", children: [
|
|
2652
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.SelectItem, { value: "current", className: "text-xs", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
2653
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Database, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
2662
2654
|
" Current Schema"
|
|
2663
2655
|
] }) }),
|
|
2664
|
-
snapshots.map((s) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2665
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "w-3 h-3" }),
|
|
2656
|
+
snapshots.map((s) => /* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.SelectItem, { value: s.id, className: "text-xs", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
2657
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
2666
2658
|
" ",
|
|
2667
2659
|
formatSnapshotLabel(s)
|
|
2668
2660
|
] }) }, s.id))
|
|
@@ -2671,32 +2663,32 @@ function SchemaDiff({ schema, connection }) {
|
|
|
2671
2663
|
] }),
|
|
2672
2664
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-zinc-600 text-xs", children: "vs" }),
|
|
2673
2665
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
2674
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-600
|
|
2675
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2666
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-600", children: "Target" }),
|
|
2667
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.Select, { value: targetId, onValueChange: (v) => {
|
|
2676
2668
|
if (v.startsWith("conn:")) {
|
|
2677
2669
|
fetchRemoteSchema(v.replace("conn:", ""));
|
|
2678
2670
|
} else {
|
|
2679
2671
|
setTargetId(v);
|
|
2680
2672
|
}
|
|
2681
2673
|
}, children: [
|
|
2682
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2683
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2684
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2685
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Database, { className: "w-3 h-3" }),
|
|
2674
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.SelectTrigger, { className: "h-7 w-[180px] text-xs bg-white/5 border-white/10", children: /* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.SelectValue, { placeholder: "Select target" }) }),
|
|
2675
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.SelectContent, { className: "bg-[#111] border-white/10", children: [
|
|
2676
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.SelectItem, { value: "current", className: "text-xs", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
2677
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Database, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
2686
2678
|
" Current Schema"
|
|
2687
2679
|
] }) }),
|
|
2688
|
-
snapshots.map((s) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2689
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "w-3 h-3" }),
|
|
2680
|
+
snapshots.map((s) => /* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.SelectItem, { value: s.id, className: "text-xs", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
2681
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
2690
2682
|
" ",
|
|
2691
2683
|
formatSnapshotLabel(s)
|
|
2692
2684
|
] }) }, s.id)),
|
|
2693
2685
|
allConnections.filter((c) => c.id !== (connection == null ? void 0 : connection.id)).length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2694
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 py-1 text-
|
|
2695
|
-
allConnections.filter((c) => c.id !== (connection == null ? void 0 : connection.id)).map((c) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2696
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Database, { className: "w-3 h-3 text-blue-400" }),
|
|
2686
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 py-1 text-[0.625rem] text-zinc-600 border-t border-white/5 mt-1", children: "Fetch from connection" }),
|
|
2687
|
+
allConnections.filter((c) => c.id !== (connection == null ? void 0 : connection.id)).map((c) => /* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.SelectItem, { value: `conn:${c.id}`, className: "text-xs", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
2688
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Database, { strokeWidth: 1.5, className: "w-3 h-3 text-blue-400" }),
|
|
2697
2689
|
" ",
|
|
2698
2690
|
c.name,
|
|
2699
|
-
c.environment === "production" && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "w-3 h-3 text-red-400" })
|
|
2691
|
+
c.environment === "production" && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { strokeWidth: 1.5, className: "w-3 h-3 text-red-400" })
|
|
2700
2692
|
] }) }, `conn:${c.id}`))
|
|
2701
2693
|
] })
|
|
2702
2694
|
] })
|
|
@@ -2717,14 +2709,14 @@ function SchemaDiff({ schema, connection }) {
|
|
|
2717
2709
|
autoFocus: true
|
|
2718
2710
|
}
|
|
2719
2711
|
),
|
|
2720
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2721
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2712
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.Button, { variant: "ghost", size: "sm", className: "h-7 text-xs text-blue-400", onClick: takeSnapshot, children: "Save" }),
|
|
2713
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.Button, { variant: "ghost", size: "sm", className: "h-7 text-xs text-zinc-500", onClick: () => setShowLabelInput(false), children: "Cancel" })
|
|
2722
2714
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2723
|
-
|
|
2715
|
+
chunkY52UIFEX_js.Button,
|
|
2724
2716
|
{
|
|
2725
2717
|
variant: "ghost",
|
|
2726
2718
|
size: "sm",
|
|
2727
|
-
className: "h-7 text-xs font-
|
|
2719
|
+
className: "h-7 text-xs font-medium text-zinc-500 hover:text-white gap-1",
|
|
2728
2720
|
onClick: () => setShowLabelInput(true),
|
|
2729
2721
|
disabled: !connection,
|
|
2730
2722
|
children: [
|
|
@@ -2734,11 +2726,11 @@ function SchemaDiff({ schema, connection }) {
|
|
|
2734
2726
|
}
|
|
2735
2727
|
),
|
|
2736
2728
|
(diff == null ? void 0 : diff.hasChanges) && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2737
|
-
|
|
2729
|
+
chunkY52UIFEX_js.Button,
|
|
2738
2730
|
{
|
|
2739
2731
|
variant: "ghost",
|
|
2740
2732
|
size: "sm",
|
|
2741
|
-
className: "h-7 text-xs font-
|
|
2733
|
+
className: "h-7 text-xs font-medium text-zinc-500 hover:text-white gap-1",
|
|
2742
2734
|
onClick: () => setShowMigration(!showMigration),
|
|
2743
2735
|
children: [
|
|
2744
2736
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileCode, { className: "w-3 h-3" }),
|
|
@@ -2749,8 +2741,8 @@ function SchemaDiff({ schema, connection }) {
|
|
|
2749
2741
|
)
|
|
2750
2742
|
] }),
|
|
2751
2743
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-hidden flex", children: !targetId ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 flex flex-col items-center justify-center text-zinc-600 gap-3", children: [
|
|
2752
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.GitCompare, { className: "w-10 h-10 opacity-30" }),
|
|
2753
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-
|
|
2744
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.GitCompare, { strokeWidth: 1.5, className: "w-10 h-10 opacity-30" }),
|
|
2745
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs", children: "Select source and target to compare schemas" }),
|
|
2754
2746
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-zinc-700", children: "Take a snapshot first, then compare with the current schema" }),
|
|
2755
2747
|
snapshots.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 w-full max-w-2xl px-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2756
2748
|
SnapshotTimeline,
|
|
@@ -2765,7 +2757,7 @@ function SchemaDiff({ schema, connection }) {
|
|
|
2765
2757
|
) })
|
|
2766
2758
|
] }) : showMigration && migrationSQL ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-auto p-4", children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "text-xs font-mono text-zinc-300 bg-[#0d0d0d] border border-white/10 rounded-lg p-4 overflow-auto whitespace-pre-wrap", children: migrationSQL }) }) : diff && diff.hasChanges ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2767
2759
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-64 border-r border-white/5 overflow-auto", children: [
|
|
2768
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 border-b border-white/5", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-zinc-500
|
|
2760
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 border-b border-white/5", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-zinc-500 px-2 mb-1", children: [
|
|
2769
2761
|
diff.summary.added,
|
|
2770
2762
|
" added, ",
|
|
2771
2763
|
diff.summary.removed,
|
|
@@ -2777,12 +2769,12 @@ function SchemaDiff({ schema, connection }) {
|
|
|
2777
2769
|
"button",
|
|
2778
2770
|
{
|
|
2779
2771
|
onClick: () => setSelectedTable(table.tableName),
|
|
2780
|
-
className:
|
|
2772
|
+
className: chunkY52UIFEX_js.cn(
|
|
2781
2773
|
"w-full text-left px-3 py-2 text-xs flex items-center gap-2 hover:bg-white/5 transition-colors",
|
|
2782
2774
|
selectedTable === table.tableName && "bg-white/10"
|
|
2783
2775
|
),
|
|
2784
2776
|
children: [
|
|
2785
|
-
selectedTable === table.tableName ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "w-3 h-3 text-zinc-500" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "w-3 h-3 text-zinc-500" }),
|
|
2777
|
+
selectedTable === table.tableName ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { strokeWidth: 1.5, className: "w-3 h-3 text-zinc-500" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { strokeWidth: 1.5, className: "w-3 h-3 text-zinc-500" }),
|
|
2786
2778
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-zinc-300", children: table.tableName }),
|
|
2787
2779
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto", children: getActionBadge(table.action) })
|
|
2788
2780
|
]
|
|
@@ -2790,19 +2782,19 @@ function SchemaDiff({ schema, connection }) {
|
|
|
2790
2782
|
table.tableName
|
|
2791
2783
|
))
|
|
2792
2784
|
] }),
|
|
2793
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-auto p-4", children: selectedTable ? /* @__PURE__ */ jsxRuntime.jsx(TableDiffDetail, { diff: diff.tables.find((t) => t.tableName === selectedTable) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full flex items-center justify-center text-zinc-600 text-
|
|
2794
|
-
] }) : diff && !diff.hasChanges ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 flex items-center justify-center text-zinc-600 gap-2", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
2795
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "w-
|
|
2796
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
2785
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-auto p-4", children: selectedTable ? /* @__PURE__ */ jsxRuntime.jsx(TableDiffDetail, { diff: diff.tables.find((t) => t.tableName === selectedTable) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full flex items-center justify-center text-zinc-600 text-xs", children: "Select a table to view diff details" }) })
|
|
2786
|
+
] }) : diff && !diff.hasChanges ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 flex items-center justify-center text-zinc-600 gap-2", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: "No differences found between source and target" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 flex items-center justify-center text-zinc-600 gap-2", children: [
|
|
2787
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }),
|
|
2788
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: "Cannot compare same schema with itself" })
|
|
2797
2789
|
] }) })
|
|
2798
2790
|
] });
|
|
2799
2791
|
}
|
|
2800
2792
|
function TableDiffDetail({ diff }) {
|
|
2801
2793
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
2802
2794
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
2803
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Database, { className: "w-
|
|
2804
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-
|
|
2805
|
-
/* @__PURE__ */ jsxRuntime.jsx(Badge, { className:
|
|
2795
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Database, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-zinc-400" }),
|
|
2796
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xs font-medium text-zinc-200", children: diff.tableName }),
|
|
2797
|
+
/* @__PURE__ */ jsxRuntime.jsx(Badge, { className: chunkY52UIFEX_js.cn(
|
|
2806
2798
|
"text-xs",
|
|
2807
2799
|
diff.action === "added" && "bg-green-500/20 text-green-400",
|
|
2808
2800
|
diff.action === "removed" && "bg-red-500/20 text-red-400",
|
|
@@ -2810,8 +2802,8 @@ function TableDiffDetail({ diff }) {
|
|
|
2810
2802
|
), children: diff.action })
|
|
2811
2803
|
] }),
|
|
2812
2804
|
diff.columns.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2813
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs
|
|
2814
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1", children: diff.columns.map((col, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className:
|
|
2805
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs text-zinc-500 mb-2 font-medium", children: "Columns" }),
|
|
2806
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1", children: diff.columns.map((col, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkY52UIFEX_js.cn(
|
|
2815
2807
|
"px-3 py-2 rounded text-xs flex items-center gap-2",
|
|
2816
2808
|
col.action === "added" && "bg-green-500/5 border border-green-500/10",
|
|
2817
2809
|
col.action === "removed" && "bg-red-500/5 border border-red-500/10",
|
|
@@ -2825,8 +2817,8 @@ function TableDiffDetail({ diff }) {
|
|
|
2825
2817
|
] }, i)) })
|
|
2826
2818
|
] }),
|
|
2827
2819
|
diff.indexes.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2828
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs
|
|
2829
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1", children: diff.indexes.map((idx, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className:
|
|
2820
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs text-zinc-500 mb-2 font-medium", children: "Indexes" }),
|
|
2821
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1", children: diff.indexes.map((idx, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkY52UIFEX_js.cn(
|
|
2830
2822
|
"px-3 py-2 rounded text-xs flex items-center gap-2",
|
|
2831
2823
|
idx.action === "added" && "bg-green-500/5 border border-green-500/10",
|
|
2832
2824
|
idx.action === "removed" && "bg-red-500/5 border border-red-500/10",
|
|
@@ -2838,8 +2830,8 @@ function TableDiffDetail({ diff }) {
|
|
|
2838
2830
|
] }, i)) })
|
|
2839
2831
|
] }),
|
|
2840
2832
|
diff.foreignKeys.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2841
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs
|
|
2842
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1", children: diff.foreignKeys.map((fk, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className:
|
|
2833
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs text-zinc-500 mb-2 font-medium", children: "Foreign Keys" }),
|
|
2834
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1", children: diff.foreignKeys.map((fk, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkY52UIFEX_js.cn(
|
|
2843
2835
|
"px-3 py-2 rounded text-xs flex items-center gap-2",
|
|
2844
2836
|
fk.action === "added" && "bg-green-500/5 border border-green-500/10",
|
|
2845
2837
|
fk.action === "removed" && "bg-red-500/5 border border-red-500/10"
|
|
@@ -2854,11 +2846,11 @@ function TableDiffDetail({ diff }) {
|
|
|
2854
2846
|
function getActionIcon(action) {
|
|
2855
2847
|
switch (action) {
|
|
2856
2848
|
case "added":
|
|
2857
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "w-3 h-3 text-green-400" });
|
|
2849
|
+
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { strokeWidth: 1.5, className: "w-3 h-3 text-green-400" });
|
|
2858
2850
|
case "removed":
|
|
2859
2851
|
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minus, { className: "w-3 h-3 text-red-400" });
|
|
2860
2852
|
case "modified":
|
|
2861
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Edit3, { className: "w-3 h-3 text-yellow-400" });
|
|
2853
|
+
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Edit3, { strokeWidth: 1.5, className: "w-3 h-3 text-yellow-400" });
|
|
2862
2854
|
default:
|
|
2863
2855
|
return null;
|
|
2864
2856
|
}
|
|
@@ -2866,13 +2858,13 @@ function getActionIcon(action) {
|
|
|
2866
2858
|
function ChartDashboardLazy({ result }) {
|
|
2867
2859
|
const [savedCharts, setSavedCharts] = React__default.default.useState([]);
|
|
2868
2860
|
React__default.default.useEffect(() => {
|
|
2869
|
-
const charts =
|
|
2861
|
+
const charts = chunkY52UIFEX_js.storage.getSavedCharts();
|
|
2870
2862
|
if (charts.length > 0) setSavedCharts(charts);
|
|
2871
2863
|
}, []);
|
|
2872
2864
|
if (savedCharts.length === 0) {
|
|
2873
2865
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full flex flex-col items-center justify-center bg-[#080808] text-zinc-500 gap-2", children: [
|
|
2874
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.LayoutDashboard, { className: "w-10 h-10 opacity-30" }),
|
|
2875
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-
|
|
2866
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.LayoutDashboard, { strokeWidth: 1.5, className: "w-10 h-10 opacity-30" }),
|
|
2867
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs", children: "No saved charts yet" }),
|
|
2876
2868
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-zinc-600", children: "Save charts from the Charts tab to display them here" })
|
|
2877
2869
|
] });
|
|
2878
2870
|
}
|
|
@@ -2880,8 +2872,8 @@ function ChartDashboardLazy({ result }) {
|
|
|
2880
2872
|
var _a;
|
|
2881
2873
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-[#0d0d0d] border border-white/10 rounded-lg p-3", children: [
|
|
2882
2874
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between mb-2", children: [
|
|
2883
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-
|
|
2884
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-600
|
|
2875
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-zinc-300", children: chart.name }),
|
|
2876
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-600", children: chart.chartType })
|
|
2885
2877
|
] }),
|
|
2886
2878
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-zinc-500", children: [
|
|
2887
2879
|
chart.xAxis && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
@@ -2893,7 +2885,7 @@ function ChartDashboardLazy({ result }) {
|
|
|
2893
2885
|
chart.yAxis.join(", ")
|
|
2894
2886
|
] })
|
|
2895
2887
|
] }),
|
|
2896
|
-
result ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 h-[160px]", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2888
|
+
result ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 h-[160px]", children: /* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.DataCharts, { result }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 h-[100px] flex items-center justify-center text-zinc-600 text-xs", children: "Execute a query to see chart" })
|
|
2897
2889
|
] }, chart.id);
|
|
2898
2890
|
}) }) });
|
|
2899
2891
|
}
|
|
@@ -2925,17 +2917,17 @@ function BottomPanel({
|
|
|
2925
2917
|
onExportResults
|
|
2926
2918
|
}) {
|
|
2927
2919
|
const tabs = [
|
|
2928
|
-
{ key: "results", label: "Results", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.LayoutGrid, { className: "w-3 h-3" }), activeClass: "text-blue-400 border-blue-500 bg-white/5" },
|
|
2929
|
-
{ key: "explain", label: "Explain", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Zap, { className: "w-3 h-3" }), activeClass: "text-amber-400 border-amber-500 bg-white/5" },
|
|
2930
|
-
{ key: "history", label: "History", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "w-3 h-3" }), activeClass: "text-emerald-400 border-emerald-500 bg-white/5" },
|
|
2931
|
-
{ key: "saved", label: "Saved", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bookmark, { className: "w-3 h-3" }), activeClass: "text-purple-400 border-purple-500 bg-white/5" },
|
|
2932
|
-
{ key: "charts", label: "Charts", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.BarChart3, { className: "w-3 h-3" }), activeClass: "text-cyan-400 border-cyan-500 bg-white/5" },
|
|
2933
|
-
{ key: "nl2sql", label: "NL2SQL", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "w-3 h-3" }), activeClass: "text-violet-400 border-violet-500 bg-white/5" },
|
|
2934
|
-
{ key: "autopilot", label: "Autopilot", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Zap, { className: "w-3 h-3" }), activeClass: "text-cyan-400 border-cyan-500 bg-white/5" },
|
|
2935
|
-
{ key: "pivot", label: "Pivot", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Columns3, { className: "w-3 h-3" }), activeClass: "text-orange-400 border-orange-500 bg-white/5" },
|
|
2936
|
-
{ key: "docs", label: "Docs", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "w-3 h-3" }), activeClass: "text-teal-400 border-teal-500 bg-white/5" },
|
|
2937
|
-
{ key: "schemadiff", label: "Diff", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.GitCompare, { className: "w-3 h-3" }), activeClass: "text-rose-400 border-rose-500 bg-white/5" },
|
|
2938
|
-
{ key: "dashboard", label: "Dashboard", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.LayoutDashboard, { className: "w-3 h-3" }), activeClass: "text-indigo-400 border-indigo-500 bg-white/5" }
|
|
2920
|
+
{ key: "results", label: "Results", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.LayoutGrid, { strokeWidth: 1.5, className: "w-3 h-3" }), activeClass: "text-blue-400 border-blue-500 bg-white/5" },
|
|
2921
|
+
{ key: "explain", label: "Explain", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Zap, { strokeWidth: 1.5, className: "w-3 h-3" }), activeClass: "text-amber-400 border-amber-500 bg-white/5" },
|
|
2922
|
+
{ key: "history", label: "History", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { strokeWidth: 1.5, className: "w-3 h-3" }), activeClass: "text-emerald-400 border-emerald-500 bg-white/5" },
|
|
2923
|
+
{ key: "saved", label: "Saved", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bookmark, { strokeWidth: 1.5, className: "w-3 h-3" }), activeClass: "text-purple-400 border-purple-500 bg-white/5" },
|
|
2924
|
+
{ key: "charts", label: "Charts", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.BarChart3, { strokeWidth: 1.5, className: "w-3 h-3" }), activeClass: "text-cyan-400 border-cyan-500 bg-white/5" },
|
|
2925
|
+
{ key: "nl2sql", label: "NL2SQL", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { strokeWidth: 1.5, className: "w-3 h-3" }), activeClass: "text-violet-400 border-violet-500 bg-white/5" },
|
|
2926
|
+
{ key: "autopilot", label: "Autopilot", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Zap, { strokeWidth: 1.5, className: "w-3 h-3" }), activeClass: "text-cyan-400 border-cyan-500 bg-white/5" },
|
|
2927
|
+
{ key: "pivot", label: "Pivot", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Columns3, { strokeWidth: 1.5, className: "w-3 h-3" }), activeClass: "text-orange-400 border-orange-500 bg-white/5" },
|
|
2928
|
+
{ key: "docs", label: "Docs", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { strokeWidth: 1.5, className: "w-3 h-3" }), activeClass: "text-teal-400 border-teal-500 bg-white/5" },
|
|
2929
|
+
{ key: "schemadiff", label: "Diff", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.GitCompare, { strokeWidth: 1.5, className: "w-3 h-3" }), activeClass: "text-rose-400 border-rose-500 bg-white/5" },
|
|
2930
|
+
{ key: "dashboard", label: "Dashboard", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.LayoutDashboard, { strokeWidth: 1.5, className: "w-3 h-3" }), activeClass: "text-indigo-400 border-indigo-500 bg-white/5" }
|
|
2939
2931
|
];
|
|
2940
2932
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full flex flex-col bg-[#080808]", children: [
|
|
2941
2933
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-9 bg-[#0a0a0a] border-b border-white/5 flex items-center justify-between px-2", children: [
|
|
@@ -2946,8 +2938,8 @@ function BottomPanel({
|
|
|
2946
2938
|
onSetMode(tab.key);
|
|
2947
2939
|
if (tab.key === "nl2sql") onSetIsNL2SQLOpen(true);
|
|
2948
2940
|
},
|
|
2949
|
-
className:
|
|
2950
|
-
"h-full px-3 text-xs font-
|
|
2941
|
+
className: chunkY52UIFEX_js.cn(
|
|
2942
|
+
"h-full px-3 text-xs font-medium transition-all border-b-2 flex items-center gap-2",
|
|
2951
2943
|
mode === tab.key ? tab.activeClass : "text-zinc-500 border-transparent hover:text-zinc-300"
|
|
2952
2944
|
),
|
|
2953
2945
|
children: [
|
|
@@ -2965,22 +2957,22 @@ function BottomPanel({
|
|
|
2965
2957
|
currentTab.result.executionTime,
|
|
2966
2958
|
"ms"
|
|
2967
2959
|
] }),
|
|
2968
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2969
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2970
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { className: "w-3 h-3" }),
|
|
2960
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.DropdownMenu, { children: [
|
|
2961
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.Button, { variant: "ghost", size: "sm", className: "h-7 text-xs font-medium text-zinc-500 hover:text-white gap-2", children: [
|
|
2962
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
2971
2963
|
" Export"
|
|
2972
2964
|
] }) }),
|
|
2973
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2974
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2975
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2976
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2977
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2965
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkY52UIFEX_js.DropdownMenuContent, { align: "end", className: "bg-[#0d0d0d] border-white/10 text-zinc-300", children: [
|
|
2966
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.DropdownMenuItem, { onClick: () => onExportResults("csv"), className: "text-xs cursor-pointer", children: "Export as CSV" }),
|
|
2967
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.DropdownMenuItem, { onClick: () => onExportResults("json"), className: "text-xs cursor-pointer", children: "Export as JSON" }),
|
|
2968
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.DropdownMenuItem, { onClick: () => onExportResults("sql-insert"), className: "text-xs cursor-pointer", children: "Export as SQL INSERT" }),
|
|
2969
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.DropdownMenuItem, { onClick: () => onExportResults("sql-ddl"), className: "text-xs cursor-pointer", children: "Export as DDL (CREATE TABLE)" })
|
|
2978
2970
|
] })
|
|
2979
2971
|
] })
|
|
2980
2972
|
] })
|
|
2981
2973
|
] }),
|
|
2982
2974
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-hidden relative", children: mode === "nl2sql" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2983
|
-
|
|
2975
|
+
chunkY52UIFEX_js.NL2SQLPanel,
|
|
2984
2976
|
{
|
|
2985
2977
|
isOpen: isNL2SQLOpen,
|
|
2986
2978
|
onClose: () => {
|
|
@@ -3039,8 +3031,8 @@ function BottomPanel({
|
|
|
3039
3031
|
onSetMode("results");
|
|
3040
3032
|
}
|
|
3041
3033
|
}
|
|
3042
|
-
) : mode === "charts" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
3043
|
-
|
|
3034
|
+
) : mode === "charts" ? /* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.DataCharts, { result: currentTab.result }) : mode === "schemadiff" ? /* @__PURE__ */ jsxRuntime.jsx(SchemaDiff, { schema, connection: activeConnection }) : mode === "dashboard" ? /* @__PURE__ */ jsxRuntime.jsx(ChartDashboardLazy, { result: currentTab.result }) : currentTab.result ? mode === "explain" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
3035
|
+
chunkY52UIFEX_js.VisualExplain,
|
|
3044
3036
|
{
|
|
3045
3037
|
plan: currentTab.explainPlan,
|
|
3046
3038
|
query: currentTab.query,
|
|
@@ -3052,7 +3044,7 @@ function BottomPanel({
|
|
|
3052
3044
|
}
|
|
3053
3045
|
}
|
|
3054
3046
|
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
3055
|
-
|
|
3047
|
+
chunkY52UIFEX_js.ResultsGrid,
|
|
3056
3048
|
{
|
|
3057
3049
|
result: currentTab.result,
|
|
3058
3050
|
onLoadMore,
|
|
@@ -3068,9 +3060,9 @@ function BottomPanel({
|
|
|
3068
3060
|
onDiscardChanges
|
|
3069
3061
|
}
|
|
3070
3062
|
) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full flex flex-col items-center justify-center opacity-20 bg-[#0a0a0a]", children: [
|
|
3071
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Terminal, { className: "w-12 h-12 mb-4" }),
|
|
3072
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-
|
|
3073
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs
|
|
3063
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Terminal, { strokeWidth: 1.5, className: "w-12 h-12 mb-4" }),
|
|
3064
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium", children: "Execute a query or check history" }),
|
|
3065
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs mt-2", children: "Ready to query" })
|
|
3074
3066
|
] }) })
|
|
3075
3067
|
] });
|
|
3076
3068
|
}
|
|
@@ -3344,7 +3336,7 @@ function useQueryAdapter({
|
|
|
3344
3336
|
toast({ title: "Empty Query", description: "Enter a query to execute.", variant: "destructive" });
|
|
3345
3337
|
return;
|
|
3346
3338
|
}
|
|
3347
|
-
if (
|
|
3339
|
+
if (chunkY52UIFEX_js.isDangerousQuery(queryToExecute)) {
|
|
3348
3340
|
setSafetyCheckQuery(queryToExecute);
|
|
3349
3341
|
return;
|
|
3350
3342
|
}
|
|
@@ -3561,7 +3553,7 @@ function ResizablePanelGroup(_a) {
|
|
|
3561
3553
|
ResizablePrimitive__namespace.PanelGroup,
|
|
3562
3554
|
chunkQ6LRDBK7_js.__spreadValues({
|
|
3563
3555
|
"data-slot": "resizable-panel-group",
|
|
3564
|
-
className:
|
|
3556
|
+
className: chunkY52UIFEX_js.cn(
|
|
3565
3557
|
"flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
|
|
3566
3558
|
className
|
|
3567
3559
|
)
|
|
@@ -3584,7 +3576,7 @@ function ResizableHandle(_a) {
|
|
|
3584
3576
|
ResizablePrimitive__namespace.PanelResizeHandle,
|
|
3585
3577
|
chunkQ6LRDBK7_js.__spreadProps(chunkQ6LRDBK7_js.__spreadValues({
|
|
3586
3578
|
"data-slot": "resizable-handle",
|
|
3587
|
-
className:
|
|
3579
|
+
className: chunkY52UIFEX_js.cn(
|
|
3588
3580
|
"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",
|
|
3589
3581
|
className
|
|
3590
3582
|
)
|
|
@@ -3611,7 +3603,7 @@ function AlertDialogOverlay(_a) {
|
|
|
3611
3603
|
AlertDialogPrimitive__namespace.Overlay,
|
|
3612
3604
|
chunkQ6LRDBK7_js.__spreadValues({
|
|
3613
3605
|
"data-slot": "alert-dialog-overlay",
|
|
3614
|
-
className:
|
|
3606
|
+
className: chunkY52UIFEX_js.cn(
|
|
3615
3607
|
"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",
|
|
3616
3608
|
className
|
|
3617
3609
|
)
|
|
@@ -3630,7 +3622,7 @@ function AlertDialogContent(_a) {
|
|
|
3630
3622
|
AlertDialogPrimitive__namespace.Content,
|
|
3631
3623
|
chunkQ6LRDBK7_js.__spreadValues({
|
|
3632
3624
|
"data-slot": "alert-dialog-content",
|
|
3633
|
-
className:
|
|
3625
|
+
className: chunkY52UIFEX_js.cn(
|
|
3634
3626
|
"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",
|
|
3635
3627
|
className
|
|
3636
3628
|
)
|
|
@@ -3648,7 +3640,7 @@ function AlertDialogTitle(_a) {
|
|
|
3648
3640
|
AlertDialogPrimitive__namespace.Title,
|
|
3649
3641
|
chunkQ6LRDBK7_js.__spreadValues({
|
|
3650
3642
|
"data-slot": "alert-dialog-title",
|
|
3651
|
-
className:
|
|
3643
|
+
className: chunkY52UIFEX_js.cn("text-lg font-semibold", className)
|
|
3652
3644
|
}, props)
|
|
3653
3645
|
);
|
|
3654
3646
|
}
|
|
@@ -3662,7 +3654,7 @@ function AlertDialogDescription(_a) {
|
|
|
3662
3654
|
AlertDialogPrimitive__namespace.Description,
|
|
3663
3655
|
chunkQ6LRDBK7_js.__spreadValues({
|
|
3664
3656
|
"data-slot": "alert-dialog-description",
|
|
3665
|
-
className:
|
|
3657
|
+
className: chunkY52UIFEX_js.cn("text-muted-foreground text-sm", className)
|
|
3666
3658
|
}, props)
|
|
3667
3659
|
);
|
|
3668
3660
|
}
|
|
@@ -3675,7 +3667,7 @@ function AlertDialogAction(_a) {
|
|
|
3675
3667
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3676
3668
|
AlertDialogPrimitive__namespace.Action,
|
|
3677
3669
|
chunkQ6LRDBK7_js.__spreadValues({
|
|
3678
|
-
className:
|
|
3670
|
+
className: chunkY52UIFEX_js.cn(chunkY52UIFEX_js.buttonVariants(), className)
|
|
3679
3671
|
}, props)
|
|
3680
3672
|
);
|
|
3681
3673
|
}
|
|
@@ -3688,7 +3680,7 @@ function AlertDialogCancel(_a) {
|
|
|
3688
3680
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3689
3681
|
AlertDialogPrimitive__namespace.Cancel,
|
|
3690
3682
|
chunkQ6LRDBK7_js.__spreadValues({
|
|
3691
|
-
className:
|
|
3683
|
+
className: chunkY52UIFEX_js.cn(chunkY52UIFEX_js.buttonVariants({ variant: "outline" }), className)
|
|
3692
3684
|
}, props)
|
|
3693
3685
|
);
|
|
3694
3686
|
}
|
|
@@ -3906,7 +3898,7 @@ ${colDefs.join(",\n")}
|
|
|
3906
3898
|
"div",
|
|
3907
3899
|
{
|
|
3908
3900
|
"data-studio-workspace": "",
|
|
3909
|
-
className:
|
|
3901
|
+
className: chunkY52UIFEX_js.cn("dark flex h-full w-full bg-[#050505] text-zinc-100 overflow-hidden font-sans select-none", className),
|
|
3910
3902
|
children: [
|
|
3911
3903
|
/* @__PURE__ */ jsxRuntime.jsxs(ResizablePanelGroup, { id: "workspace-main", direction: "horizontal", className: "h-full", children: [
|
|
3912
3904
|
/* @__PURE__ */ jsxRuntime.jsx(ResizablePanel, { defaultSize: 22, minSize: 15, maxSize: 35, className: "hidden md:block", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3951,9 +3943,9 @@ ${colDefs.join(",\n")}
|
|
|
3951
3943
|
}
|
|
3952
3944
|
),
|
|
3953
3945
|
/* @__PURE__ */ jsxRuntime.jsxs("main", { className: "flex-1 overflow-hidden relative", children: [
|
|
3954
|
-
features.schemaDiagram && /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: showDiagram && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3946
|
+
features.schemaDiagram && /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: showDiagram && /* @__PURE__ */ jsxRuntime.jsx(chunkY52UIFEX_js.SchemaDiagram, { schema: conn.schema, onClose: () => setShowDiagram(false) }) }),
|
|
3955
3947
|
activeMobileTab === "database" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "md:hidden h-full bg-[#080808] overflow-auto p-4", children: [
|
|
3956
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4 flex items-center justify-between", children: /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-
|
|
3948
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4 flex items-center justify-between", children: /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-xs font-medium text-zinc-300", children: "Connections" }) }),
|
|
3957
3949
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3958
3950
|
ConnectionsList,
|
|
3959
3951
|
{
|
|
@@ -3969,7 +3961,7 @@ ${colDefs.join(",\n")}
|
|
|
3969
3961
|
)
|
|
3970
3962
|
] }),
|
|
3971
3963
|
activeMobileTab === "schema" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "md:hidden h-full bg-[#080808] overflow-auto p-4", children: conn.activeConnection ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
3972
|
-
|
|
3964
|
+
chunkY52UIFEX_js.SchemaExplorer,
|
|
3973
3965
|
{
|
|
3974
3966
|
schema: conn.schema,
|
|
3975
3967
|
isLoadingSchema: conn.isLoadingSchema,
|
|
@@ -3991,10 +3983,10 @@ ${colDefs.join(",\n")}
|
|
|
3991
3983
|
onGenerateTestData: features.testDataGenerator ? (name) => setTestDataTable(name) : void 0
|
|
3992
3984
|
}
|
|
3993
3985
|
) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center h-full text-zinc-500", children: [
|
|
3994
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Database, { className: "w-12 h-12 mb-4 opacity-30" }),
|
|
3995
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-
|
|
3986
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Database, { strokeWidth: 1.5, className: "w-12 h-12 mb-4 opacity-30" }),
|
|
3987
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs", children: "Select a connection first" })
|
|
3996
3988
|
] }) }),
|
|
3997
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className:
|
|
3989
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkY52UIFEX_js.cn(
|
|
3998
3990
|
"h-full",
|
|
3999
3991
|
activeMobileTab !== "editor" && "hidden md:block"
|
|
4000
3992
|
), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full", children: /* @__PURE__ */ jsxRuntime.jsxs(ResizablePanelGroup, { id: "workspace-editor", direction: "vertical", children: [
|
|
@@ -4020,7 +4012,7 @@ ${colDefs.join(",\n")}
|
|
|
4020
4012
|
}
|
|
4021
4013
|
),
|
|
4022
4014
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 relative", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4023
|
-
|
|
4015
|
+
chunkY52UIFEX_js.QueryEditor,
|
|
4024
4016
|
{
|
|
4025
4017
|
ref: queryEditorRef,
|
|
4026
4018
|
value: tabMgr.currentTab.query,
|
|
@@ -4088,7 +4080,7 @@ ${colDefs.join(",\n")}
|
|
|
4088
4080
|
}
|
|
4089
4081
|
),
|
|
4090
4082
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4091
|
-
|
|
4083
|
+
chunkY52UIFEX_js.QuerySafetyDialog,
|
|
4092
4084
|
{
|
|
4093
4085
|
isOpen: !!queryExec.safetyCheckQuery,
|
|
4094
4086
|
query: queryExec.safetyCheckQuery || "",
|
|
@@ -4114,7 +4106,7 @@ ${colDefs.join(",\n")}
|
|
|
4114
4106
|
}
|
|
4115
4107
|
),
|
|
4116
4108
|
features.codeGenerator && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4117
|
-
|
|
4109
|
+
chunkY52UIFEX_js.DataProfiler,
|
|
4118
4110
|
{
|
|
4119
4111
|
isOpen: !!profilerTable,
|
|
4120
4112
|
onClose: () => setProfilerTable(null),
|
|
@@ -4126,7 +4118,7 @@ ${colDefs.join(",\n")}
|
|
|
4126
4118
|
}
|
|
4127
4119
|
),
|
|
4128
4120
|
features.codeGenerator && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4129
|
-
|
|
4121
|
+
chunkY52UIFEX_js.CodeGenerator,
|
|
4130
4122
|
{
|
|
4131
4123
|
isOpen: !!codeGenTable,
|
|
4132
4124
|
onClose: () => setCodeGenTable(null),
|
|
@@ -4136,7 +4128,7 @@ ${colDefs.join(",\n")}
|
|
|
4136
4128
|
}
|
|
4137
4129
|
),
|
|
4138
4130
|
features.testDataGenerator && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4139
|
-
|
|
4131
|
+
chunkY52UIFEX_js.TestDataGenerator,
|
|
4140
4132
|
{
|
|
4141
4133
|
isOpen: !!testDataTable,
|
|
4142
4134
|
onClose: () => setTestDataTable(null),
|
|
@@ -4149,10 +4141,10 @@ ${colDefs.join(",\n")}
|
|
|
4149
4141
|
),
|
|
4150
4142
|
/* @__PURE__ */ jsxRuntime.jsx(AlertDialog, { open: queryExec.unlimitedWarningOpen, onOpenChange: queryExec.setUnlimitedWarningOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(AlertDialogContent, { className: "bg-[#111] border-white/5 max-w-sm p-0 gap-0 overflow-hidden", children: [
|
|
4151
4143
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-6 pt-6 pb-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
|
|
4152
|
-
/* @__PURE__ */ jsxRuntime.jsx("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", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "w-5 h-5 text-amber-400" }) }),
|
|
4144
|
+
/* @__PURE__ */ jsxRuntime.jsx("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", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { strokeWidth: 1.5, className: "w-5 h-5 text-amber-400" }) }),
|
|
4153
4145
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
4154
|
-
/* @__PURE__ */ jsxRuntime.jsx(AlertDialogTitle, { className: "text-
|
|
4155
|
-
/* @__PURE__ */ jsxRuntime.jsxs(AlertDialogDescription, { className: "text-
|
|
4146
|
+
/* @__PURE__ */ jsxRuntime.jsx(AlertDialogTitle, { className: "text-xs font-medium text-zinc-100 mb-1", children: "Load all results?" }),
|
|
4147
|
+
/* @__PURE__ */ jsxRuntime.jsxs(AlertDialogDescription, { className: "text-xs text-zinc-500 leading-relaxed", children: [
|
|
4156
4148
|
"This may slow down your browser. Max ",
|
|
4157
4149
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-zinc-400", children: "100K" }),
|
|
4158
4150
|
" rows will be loaded."
|
|
@@ -4160,12 +4152,12 @@ ${colDefs.join(",\n")}
|
|
|
4160
4152
|
] })
|
|
4161
4153
|
] }) }),
|
|
4162
4154
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-6 pb-6 flex gap-2", children: [
|
|
4163
|
-
/* @__PURE__ */ jsxRuntime.jsx(AlertDialogCancel, { className: "flex-1 h-9 bg-white/5 border-0 text-zinc-400 text-
|
|
4155
|
+
/* @__PURE__ */ jsxRuntime.jsx(AlertDialogCancel, { className: "flex-1 h-9 bg-white/5 border-0 text-zinc-400 text-xs font-medium hover:bg-white/10 hover:text-zinc-200", children: "Cancel" }),
|
|
4164
4156
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4165
4157
|
AlertDialogAction,
|
|
4166
4158
|
{
|
|
4167
4159
|
onClick: queryExec.handleUnlimitedQuery,
|
|
4168
|
-
className: "flex-1 h-9 bg-amber-600 border-0 text-white text-
|
|
4160
|
+
className: "flex-1 h-9 bg-amber-600 border-0 text-white text-xs font-medium hover:bg-amber-500",
|
|
4169
4161
|
children: "Load All"
|
|
4170
4162
|
}
|
|
4171
4163
|
)
|