@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
|
@@ -1194,10 +1194,10 @@ var QueryEditor = forwardRef(({
|
|
|
1194
1194
|
{
|
|
1195
1195
|
variant: "ghost",
|
|
1196
1196
|
size: "sm",
|
|
1197
|
-
className: "h-7 text-xs font-
|
|
1197
|
+
className: "h-7 text-xs font-medium text-white bg-blue-600 hover:bg-blue-500 hover:text-white gap-2 shadow-[0_0_10px_rgba(37,99,235,0.3)] animate-in fade-in zoom-in duration-200",
|
|
1198
1198
|
onClick: handleExecute,
|
|
1199
1199
|
children: [
|
|
1200
|
-
/* @__PURE__ */ jsx(Play, { className: "w-3 h-3 fill-current" }),
|
|
1200
|
+
/* @__PURE__ */ jsx(Play, { strokeWidth: 1.5, className: "w-3 h-3 fill-current" }),
|
|
1201
1201
|
" Run Sel"
|
|
1202
1202
|
]
|
|
1203
1203
|
}
|
|
@@ -1207,11 +1207,11 @@ var QueryEditor = forwardRef(({
|
|
|
1207
1207
|
{
|
|
1208
1208
|
variant: "ghost",
|
|
1209
1209
|
size: "sm",
|
|
1210
|
-
className: "h-7 text-xs font-
|
|
1210
|
+
className: "h-7 text-xs font-medium text-zinc-500 hover:text-white gap-2",
|
|
1211
1211
|
onClick: handleFormat,
|
|
1212
1212
|
title: language === "json" ? "Format JSON (Shift+Alt+F)" : "Format SQL (Shift+Alt+F)",
|
|
1213
1213
|
children: [
|
|
1214
|
-
/* @__PURE__ */ jsx(AlignLeft, { className: "w-3 h-3" }),
|
|
1214
|
+
/* @__PURE__ */ jsx(AlignLeft, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1215
1215
|
" Format"
|
|
1216
1216
|
]
|
|
1217
1217
|
}
|
|
@@ -1221,10 +1221,10 @@ var QueryEditor = forwardRef(({
|
|
|
1221
1221
|
{
|
|
1222
1222
|
variant: "ghost",
|
|
1223
1223
|
size: "sm",
|
|
1224
|
-
className: "h-7 text-xs font-
|
|
1224
|
+
className: "h-7 text-xs font-medium text-zinc-500 hover:text-white gap-2",
|
|
1225
1225
|
onClick: handleCopy,
|
|
1226
1226
|
children: [
|
|
1227
|
-
/* @__PURE__ */ jsx(Copy, { className: "w-3 h-3" }),
|
|
1227
|
+
/* @__PURE__ */ jsx(Copy, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1228
1228
|
" ",
|
|
1229
1229
|
hasSelection ? "Copy Sel" : "Copy"
|
|
1230
1230
|
]
|
|
@@ -1235,10 +1235,10 @@ var QueryEditor = forwardRef(({
|
|
|
1235
1235
|
{
|
|
1236
1236
|
variant: "ghost",
|
|
1237
1237
|
size: "sm",
|
|
1238
|
-
className: "h-7 text-xs font-
|
|
1238
|
+
className: "h-7 text-xs font-medium text-zinc-500 hover:text-red-400 gap-2",
|
|
1239
1239
|
onClick: handleClear,
|
|
1240
1240
|
children: [
|
|
1241
|
-
/* @__PURE__ */ jsx(Trash2, { className: "w-3 h-3" }),
|
|
1241
|
+
/* @__PURE__ */ jsx(Trash2, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1242
1242
|
" Clear"
|
|
1243
1243
|
]
|
|
1244
1244
|
}
|
|
@@ -1250,13 +1250,13 @@ var QueryEditor = forwardRef(({
|
|
|
1250
1250
|
variant: "ghost",
|
|
1251
1251
|
size: "sm",
|
|
1252
1252
|
className: cn(
|
|
1253
|
-
"h-7 text-xs font-
|
|
1253
|
+
"h-7 text-xs font-medium gap-2",
|
|
1254
1254
|
showLineNumbers ? "text-zinc-300" : "text-zinc-500 hover:text-white"
|
|
1255
1255
|
),
|
|
1256
1256
|
onClick: () => setShowLineNumbers(!showLineNumbers),
|
|
1257
1257
|
title: showLineNumbers ? "Hide line numbers" : "Show line numbers",
|
|
1258
1258
|
children: [
|
|
1259
|
-
/* @__PURE__ */ jsx(Hash, { className: "w-3 h-3" }),
|
|
1259
|
+
/* @__PURE__ */ jsx(Hash, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1260
1260
|
" Lines"
|
|
1261
1261
|
]
|
|
1262
1262
|
}
|
|
@@ -1267,7 +1267,7 @@ var QueryEditor = forwardRef(({
|
|
|
1267
1267
|
variant: "ghost",
|
|
1268
1268
|
size: "sm",
|
|
1269
1269
|
className: cn(
|
|
1270
|
-
"h-7 text-xs font-
|
|
1270
|
+
"h-7 text-xs font-medium gap-2",
|
|
1271
1271
|
showAi ? "text-white bg-blue-600 hover:bg-blue-500 hover:text-white shadow-[0_0_10px_rgba(37,99,235,0.4)]" : "text-zinc-500 hover:text-blue-400"
|
|
1272
1272
|
),
|
|
1273
1273
|
onClick: () => setShowAi(!showAi),
|
|
@@ -1284,15 +1284,15 @@ var QueryEditor = forwardRef(({
|
|
|
1284
1284
|
{
|
|
1285
1285
|
variant: "ghost",
|
|
1286
1286
|
size: "sm",
|
|
1287
|
-
className: "h-7 text-xs font-
|
|
1287
|
+
className: "h-7 text-xs font-medium text-amber-500 hover:text-amber-400 gap-2",
|
|
1288
1288
|
onClick: onExplain,
|
|
1289
1289
|
children: [
|
|
1290
|
-
/* @__PURE__ */ jsx(Zap, { className: "w-3 h-3" }),
|
|
1290
|
+
/* @__PURE__ */ jsx(Zap, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
1291
1291
|
" Explain"
|
|
1292
1292
|
]
|
|
1293
1293
|
}
|
|
1294
1294
|
),
|
|
1295
|
-
/* @__PURE__ */ jsx("kbd", { className: "px-1.5 py-0.5 rounded bg-zinc-900 border border-white/5 text-
|
|
1295
|
+
/* @__PURE__ */ jsx("kbd", { className: "px-1.5 py-0.5 rounded bg-zinc-900 border border-white/5 text-[0.5625rem] text-zinc-600 font-mono", children: "\u2318+Enter" })
|
|
1296
1296
|
] })
|
|
1297
1297
|
] }),
|
|
1298
1298
|
/* @__PURE__ */ jsx(AnimatePresence, { children: showAi && /* @__PURE__ */ jsx(
|
|
@@ -1310,8 +1310,8 @@ var QueryEditor = forwardRef(({
|
|
|
1310
1310
|
children: [
|
|
1311
1311
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-3 py-1.5 border-b border-white/5 mb-1.5", children: [
|
|
1312
1312
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1313
|
-
/* @__PURE__ */ jsx("div", { className: "p-1 rounded-md bg-blue-500/10", children: /* @__PURE__ */ jsx(Sparkles, { className: "w-3
|
|
1314
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
1313
|
+
/* @__PURE__ */ jsx("div", { className: "p-1 rounded-md bg-blue-500/10", children: /* @__PURE__ */ jsx(Sparkles, { strokeWidth: 1.5, className: "w-3 h-3 text-blue-400" }) }),
|
|
1314
|
+
/* @__PURE__ */ jsx("span", { className: "text-[0.625rem] font-black text-blue-400", children: "Expert DBA Mode" })
|
|
1315
1315
|
] }),
|
|
1316
1316
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1317
1317
|
aiConversationHistory.length > 0 && /* @__PURE__ */ jsxs(
|
|
@@ -1319,7 +1319,7 @@ var QueryEditor = forwardRef(({
|
|
|
1319
1319
|
{
|
|
1320
1320
|
type: "button",
|
|
1321
1321
|
onClick: () => setAiConversationHistory([]),
|
|
1322
|
-
className: "text-
|
|
1322
|
+
className: "text-[0.625rem] text-zinc-500 hover:text-zinc-300 font-medium px-1.5 py-0.5 rounded bg-white/5 hover:bg-white/10 transition-colors",
|
|
1323
1323
|
title: "Clear conversation history",
|
|
1324
1324
|
children: [
|
|
1325
1325
|
aiConversationHistory.length / 2,
|
|
@@ -1327,7 +1327,7 @@ var QueryEditor = forwardRef(({
|
|
|
1327
1327
|
]
|
|
1328
1328
|
}
|
|
1329
1329
|
),
|
|
1330
|
-
/* @__PURE__ */ jsxs("span", { className: "text-
|
|
1330
|
+
/* @__PURE__ */ jsxs("span", { className: "text-[0.625rem] text-zinc-500 font-medium", children: [
|
|
1331
1331
|
"Context: ",
|
|
1332
1332
|
tables.length,
|
|
1333
1333
|
" tables"
|
|
@@ -1343,10 +1343,10 @@ var QueryEditor = forwardRef(({
|
|
|
1343
1343
|
exit: { height: 0, opacity: 0 },
|
|
1344
1344
|
className: "px-3 pb-2",
|
|
1345
1345
|
children: /* @__PURE__ */ jsxs("div", { className: "bg-red-500/10 border border-red-500/20 rounded-lg p-2.5 flex items-start gap-2.5", children: [
|
|
1346
|
-
/* @__PURE__ */ jsx("div", { className: "p-1 rounded bg-red-500/20 mt-0.5", children: /* @__PURE__ */ jsx(X, { className: "w-3 h-3 text-red-400" }) }),
|
|
1346
|
+
/* @__PURE__ */ jsx("div", { className: "p-1 rounded bg-red-500/20 mt-0.5", children: /* @__PURE__ */ jsx(X, { strokeWidth: 1.5, className: "w-3 h-3 text-red-400" }) }),
|
|
1347
1347
|
/* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
|
|
1348
|
-
/* @__PURE__ */ jsx("p", { className: "text-
|
|
1349
|
-
/* @__PURE__ */ jsx("p", { className: "text-
|
|
1348
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-red-400 mb-0.5", children: "AI Error" }),
|
|
1349
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-red-300/90 leading-relaxed", children: aiError })
|
|
1350
1350
|
] }),
|
|
1351
1351
|
/* @__PURE__ */ jsx(
|
|
1352
1352
|
"button",
|
|
@@ -1354,7 +1354,7 @@ var QueryEditor = forwardRef(({
|
|
|
1354
1354
|
type: "button",
|
|
1355
1355
|
onClick: () => setAiError(null),
|
|
1356
1356
|
className: "text-red-400/50 hover:text-red-400 transition-colors",
|
|
1357
|
-
children: /* @__PURE__ */ jsx(X, { className: "w-3
|
|
1357
|
+
children: /* @__PURE__ */ jsx(X, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
1358
1358
|
}
|
|
1359
1359
|
)
|
|
1360
1360
|
] })
|
|
@@ -1368,7 +1368,7 @@ var QueryEditor = forwardRef(({
|
|
|
1368
1368
|
value: aiPrompt,
|
|
1369
1369
|
onChange: (e) => setAiPrompt(e.target.value),
|
|
1370
1370
|
placeholder: "Describe the data you need in plain English... (e.g. 'Show me the revenue growth per month')",
|
|
1371
|
-
className: "bg-transparent border-none outline-none text-
|
|
1371
|
+
className: "bg-transparent border-none outline-none text-xs text-zinc-100 w-full h-12 placeholder:text-zinc-600 font-medium"
|
|
1372
1372
|
}
|
|
1373
1373
|
),
|
|
1374
1374
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
@@ -1378,7 +1378,7 @@ var QueryEditor = forwardRef(({
|
|
|
1378
1378
|
type: "button",
|
|
1379
1379
|
onClick: () => setShowAi(false),
|
|
1380
1380
|
className: "p-2.5 rounded-xl hover:bg-white/5 text-zinc-500 transition-colors",
|
|
1381
|
-
children: /* @__PURE__ */ jsx(X, { className: "w-
|
|
1381
|
+
children: /* @__PURE__ */ jsx(X, { strokeWidth: 1.5, className: "w-3.5 h-3.5" })
|
|
1382
1382
|
}
|
|
1383
1383
|
),
|
|
1384
1384
|
/* @__PURE__ */ jsx(
|
|
@@ -1386,13 +1386,13 @@ var QueryEditor = forwardRef(({
|
|
|
1386
1386
|
{
|
|
1387
1387
|
type: "submit",
|
|
1388
1388
|
disabled: isAiLoading || !aiPrompt.trim(),
|
|
1389
|
-
className: "bg-blue-600 hover:bg-blue-500 disabled:opacity-50 disabled:hover:bg-blue-600 px-4 py-2 rounded-xl text-white text-
|
|
1389
|
+
className: "bg-blue-600 hover:bg-blue-500 disabled:opacity-50 disabled:hover:bg-blue-600 px-4 py-2 rounded-xl text-white text-[0.625rem] font-medium transition-all shadow-lg shadow-blue-600/30 flex items-center gap-2",
|
|
1390
1390
|
children: isAiLoading ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1391
|
-
/* @__PURE__ */ jsx(Loader2, { className: "w-3
|
|
1391
|
+
/* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-3 h-3 animate-spin" }),
|
|
1392
1392
|
/* @__PURE__ */ jsx("span", { children: "Thinking..." })
|
|
1393
1393
|
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1394
1394
|
/* @__PURE__ */ jsx("span", { children: "Generate" }),
|
|
1395
|
-
/* @__PURE__ */ jsx(Send, { className: "w-3
|
|
1395
|
+
/* @__PURE__ */ jsx(Send, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
1396
1396
|
] })
|
|
1397
1397
|
}
|
|
1398
1398
|
)
|
|
@@ -1412,7 +1412,7 @@ var QueryEditor = forwardRef(({
|
|
|
1412
1412
|
value,
|
|
1413
1413
|
beforeMount: handleBeforeMount,
|
|
1414
1414
|
onChange: handleEditorChange,
|
|
1415
|
-
loading: /* @__PURE__ */ jsx("div", { className: "h-full w-full bg-[#050505] flex items-center justify-center", children: /* @__PURE__ */ jsx(Loader2, { className: "w-6 h-6 animate-spin text-zinc-800" }) }),
|
|
1415
|
+
loading: /* @__PURE__ */ jsx("div", { className: "h-full w-full bg-[#050505] flex items-center justify-center", children: /* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-6 h-6 animate-spin text-zinc-800" }) }),
|
|
1416
1416
|
onMount: (editor, monaco2) => {
|
|
1417
1417
|
editorRef.current = editor;
|
|
1418
1418
|
editor.onDidBlurEditorText(() => {
|
|
@@ -2046,10 +2046,10 @@ function ResultCard({
|
|
|
2046
2046
|
children: [
|
|
2047
2047
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-3", children: [
|
|
2048
2048
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [
|
|
2049
|
-
/* @__PURE__ */ jsx("div", { className: "w-8 h-8 rounded-lg bg-blue-500/10 flex items-center justify-center shrink-0", children: /* @__PURE__ */ jsx(Hash, { className: "w-
|
|
2049
|
+
/* @__PURE__ */ jsx("div", { className: "w-8 h-8 rounded-lg bg-blue-500/10 flex items-center justify-center shrink-0", children: /* @__PURE__ */ jsx(Hash, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-blue-400" }) }),
|
|
2050
2050
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
2051
2051
|
/* @__PURE__ */ jsx("p", { className: cn(
|
|
2052
|
-
"text-
|
|
2052
|
+
"text-xs font-medium truncate",
|
|
2053
2053
|
maskingActive && (sensitiveColumns == null ? void 0 : sensitiveColumns.has(primaryColumn)) ? "text-zinc-500 italic" : "text-zinc-100"
|
|
2054
2054
|
), children: displayPrimary }),
|
|
2055
2055
|
idValue != null && /* @__PURE__ */ jsxs("p", { className: "text-xs text-zinc-500 font-mono", children: [
|
|
@@ -2058,7 +2058,7 @@ function ResultCard({
|
|
|
2058
2058
|
] })
|
|
2059
2059
|
] })
|
|
2060
2060
|
] }),
|
|
2061
|
-
/* @__PURE__ */ jsx(ChevronRight, { className: "w-
|
|
2061
|
+
/* @__PURE__ */ jsx(ChevronRight, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-zinc-600" })
|
|
2062
2062
|
] }),
|
|
2063
2063
|
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
2064
2064
|
previewFields.map((field) => {
|
|
@@ -2069,7 +2069,7 @@ function ResultCard({
|
|
|
2069
2069
|
return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-xs", children: [
|
|
2070
2070
|
/* @__PURE__ */ jsxs("span", { className: "text-zinc-500 truncate mr-2", children: [
|
|
2071
2071
|
field,
|
|
2072
|
-
isMasked && /* @__PURE__ */ jsx(Lock, { className: "w-2.5 h-2.5 inline ml-1 text-purple-400" })
|
|
2072
|
+
isMasked && /* @__PURE__ */ jsx(Lock, { strokeWidth: 1.5, className: "w-2.5 h-2.5 inline ml-1 text-purple-400" })
|
|
2073
2073
|
] }),
|
|
2074
2074
|
/* @__PURE__ */ jsx("span", { className: cn("truncate max-w-[60%] text-right font-mono", className), children: displayValue })
|
|
2075
2075
|
] }, field);
|
|
@@ -2280,7 +2280,7 @@ function RowDetailSheet({
|
|
|
2280
2280
|
return /* @__PURE__ */ jsx(Sheet, { open: isOpen, onOpenChange: onClose, children: /* @__PURE__ */ jsxs(SheetContent, { side: "bottom", className: "h-[85vh] bg-[#0a0a0a] border-t border-white/10 rounded-t-3xl", children: [
|
|
2281
2281
|
/* @__PURE__ */ jsx(SheetHeader, { className: "pb-4 border-b border-white/5", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
2282
2282
|
/* @__PURE__ */ jsxs(SheetTitle, { className: "text-zinc-100 flex items-center gap-2", children: [
|
|
2283
|
-
/* @__PURE__ */ jsx("div", { className: "w-8 h-8 rounded-lg bg-blue-500/10 flex items-center justify-center", children: /* @__PURE__ */ jsx(FileJson, { className: "w-
|
|
2283
|
+
/* @__PURE__ */ jsx("div", { className: "w-8 h-8 rounded-lg bg-blue-500/10 flex items-center justify-center", children: /* @__PURE__ */ jsx(FileJson, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-blue-400" }) }),
|
|
2284
2284
|
"Row #",
|
|
2285
2285
|
rowIndex + 1
|
|
2286
2286
|
] }),
|
|
@@ -2292,10 +2292,10 @@ function RowDetailSheet({
|
|
|
2292
2292
|
className: "h-8 text-xs border-white/10 hover:bg-white/5",
|
|
2293
2293
|
onClick: copyAllAsJson,
|
|
2294
2294
|
children: copiedField === "__all__" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2295
|
-
/* @__PURE__ */ jsx(Check, { className: "w-3 h-3 mr-1 text-emerald-400" }),
|
|
2295
|
+
/* @__PURE__ */ jsx(Check, { strokeWidth: 1.5, className: "w-3 h-3 mr-1 text-emerald-400" }),
|
|
2296
2296
|
" Copied"
|
|
2297
2297
|
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2298
|
-
/* @__PURE__ */ jsx(Copy, { className: "w-3 h-3 mr-1" }),
|
|
2298
|
+
/* @__PURE__ */ jsx(Copy, { strokeWidth: 1.5, className: "w-3 h-3 mr-1" }),
|
|
2299
2299
|
" Copy JSON"
|
|
2300
2300
|
] })
|
|
2301
2301
|
}
|
|
@@ -2310,12 +2310,12 @@ function RowDetailSheet({
|
|
|
2310
2310
|
className: "group p-3 rounded-lg hover:bg-white/5 transition-colors",
|
|
2311
2311
|
children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4", children: [
|
|
2312
2312
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
2313
|
-
/* @__PURE__ */ jsxs("p", { className: "text-xs
|
|
2313
|
+
/* @__PURE__ */ jsxs("p", { className: "text-xs text-zinc-500 mb-1 font-mono flex items-center gap-1", children: [
|
|
2314
2314
|
field,
|
|
2315
|
-
isMasked && /* @__PURE__ */ jsx(Lock, { className: "w-2.5 h-2.5 text-purple-400" })
|
|
2315
|
+
isMasked && /* @__PURE__ */ jsx(Lock, { strokeWidth: 1.5, className: "w-2.5 h-2.5 text-purple-400" })
|
|
2316
2316
|
] }),
|
|
2317
2317
|
/* @__PURE__ */ jsx("p", { className: cn(
|
|
2318
|
-
"font-mono text-
|
|
2318
|
+
"font-mono text-xs break-all",
|
|
2319
2319
|
isMasked ? "text-zinc-500 italic" : formatCellValue(row[field]).className,
|
|
2320
2320
|
isLongValue && "text-xs"
|
|
2321
2321
|
), children: text })
|
|
@@ -2339,7 +2339,7 @@ function RowDetailSheet({
|
|
|
2339
2339
|
size: "sm",
|
|
2340
2340
|
className: "h-7 w-7 p-0 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
2341
2341
|
onClick: () => copyValue(field, row[field]),
|
|
2342
|
-
children: copiedField === field ? /* @__PURE__ */ jsx(Check, { className: "w-3.5 h-3.5 text-emerald-400" }) : /* @__PURE__ */ jsx(Copy, { className: "w-3.5 h-3.5 text-zinc-500" })
|
|
2342
|
+
children: copiedField === field ? /* @__PURE__ */ jsx(Check, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-emerald-400" }) : /* @__PURE__ */ jsx(Copy, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-zinc-500" })
|
|
2343
2343
|
}
|
|
2344
2344
|
)
|
|
2345
2345
|
] })
|
|
@@ -2386,14 +2386,14 @@ function StatsBar({
|
|
|
2386
2386
|
onClick: onClearFilters,
|
|
2387
2387
|
title: "Clear all filters",
|
|
2388
2388
|
children: [
|
|
2389
|
-
/* @__PURE__ */ jsx(Filter, { className: "w-3 h-3" }),
|
|
2389
|
+
/* @__PURE__ */ jsx(Filter, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
2390
2390
|
activeFilterCount,
|
|
2391
2391
|
" filter",
|
|
2392
2392
|
activeFilterCount > 1 ? "s" : "",
|
|
2393
2393
|
" \u2022 ",
|
|
2394
2394
|
filteredRowCount,
|
|
2395
2395
|
" shown",
|
|
2396
|
-
/* @__PURE__ */ jsx(X, { className: "w-3 h-3" })
|
|
2396
|
+
/* @__PURE__ */ jsx(X, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
2397
2397
|
]
|
|
2398
2398
|
}
|
|
2399
2399
|
),
|
|
@@ -2406,7 +2406,7 @@ function StatsBar({
|
|
|
2406
2406
|
variant: "ghost",
|
|
2407
2407
|
size: "sm",
|
|
2408
2408
|
className: cn(
|
|
2409
|
-
"h-6 px-2 text-xs font-
|
|
2409
|
+
"h-6 px-2 text-xs font-medium gap-1",
|
|
2410
2410
|
effectiveMaskingEnabled ? "text-purple-400 bg-purple-500/10" : "text-zinc-500"
|
|
2411
2411
|
),
|
|
2412
2412
|
onClick: onToggleMasking,
|
|
@@ -2416,8 +2416,8 @@ function StatsBar({
|
|
|
2416
2416
|
effectiveMaskingEnabled ? "MASKED" : "MASK"
|
|
2417
2417
|
]
|
|
2418
2418
|
}
|
|
2419
|
-
) : effectiveMaskingEnabled ? /* @__PURE__ */ jsxs("span", { className: "h-6 px-2 text-xs font-
|
|
2420
|
-
/* @__PURE__ */ jsx(Lock, { className: "w-3 h-3" }),
|
|
2419
|
+
) : effectiveMaskingEnabled ? /* @__PURE__ */ jsxs("span", { className: "h-6 px-2 text-xs font-medium text-purple-400 bg-purple-500/10 rounded flex items-center gap-1", children: [
|
|
2420
|
+
/* @__PURE__ */ jsx(Lock, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
2421
2421
|
"MASKED"
|
|
2422
2422
|
] }) : null),
|
|
2423
2423
|
editingEnabled && pendingChanges && pendingChanges.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
@@ -2433,7 +2433,7 @@ function StatsBar({
|
|
|
2433
2433
|
size: "sm",
|
|
2434
2434
|
className: "h-6 px-1.5 text-xs text-emerald-400 hover:bg-emerald-500/10",
|
|
2435
2435
|
onClick: onApplyChanges,
|
|
2436
|
-
children: /* @__PURE__ */ jsx(Save, { className: "w-3 h-3" })
|
|
2436
|
+
children: /* @__PURE__ */ jsx(Save, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
2437
2437
|
}
|
|
2438
2438
|
),
|
|
2439
2439
|
/* @__PURE__ */ jsx(
|
|
@@ -2443,7 +2443,7 @@ function StatsBar({
|
|
|
2443
2443
|
size: "sm",
|
|
2444
2444
|
className: "h-6 px-1.5 text-xs text-red-400 hover:bg-red-500/10",
|
|
2445
2445
|
onClick: onDiscardChanges,
|
|
2446
|
-
children: /* @__PURE__ */ jsx(X, { className: "w-3 h-3" })
|
|
2446
|
+
children: /* @__PURE__ */ jsx(X, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
2447
2447
|
}
|
|
2448
2448
|
)
|
|
2449
2449
|
] }),
|
|
@@ -2460,7 +2460,7 @@ function StatsBar({
|
|
|
2460
2460
|
"p-1.5 rounded transition-all",
|
|
2461
2461
|
viewMode === "card" ? "bg-blue-600 text-white" : "text-zinc-500"
|
|
2462
2462
|
),
|
|
2463
|
-
children: /* @__PURE__ */ jsx(LayoutGrid, { className: "w-
|
|
2463
|
+
children: /* @__PURE__ */ jsx(LayoutGrid, { strokeWidth: 1.5, className: "w-3.5 h-3.5" })
|
|
2464
2464
|
}
|
|
2465
2465
|
),
|
|
2466
2466
|
/* @__PURE__ */ jsx(
|
|
@@ -2471,7 +2471,7 @@ function StatsBar({
|
|
|
2471
2471
|
"p-1.5 rounded transition-all",
|
|
2472
2472
|
viewMode === "table" ? "bg-blue-600 text-white" : "text-zinc-500"
|
|
2473
2473
|
),
|
|
2474
|
-
children: /* @__PURE__ */ jsx(Table2, { className: "w-
|
|
2474
|
+
children: /* @__PURE__ */ jsx(Table2, { strokeWidth: 1.5, className: "w-3.5 h-3.5" })
|
|
2475
2475
|
}
|
|
2476
2476
|
)
|
|
2477
2477
|
] })
|
|
@@ -2489,10 +2489,10 @@ function LoadMoreFooter({ hasMore, onLoadMore, isLoadingMore }) {
|
|
|
2489
2489
|
disabled: isLoadingMore,
|
|
2490
2490
|
className: "h-8 px-4 text-xs border-white/10 hover:bg-white/5",
|
|
2491
2491
|
children: isLoadingMore ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2492
|
-
/* @__PURE__ */ jsx(Loader2, { className: "w-3 h-3 mr-2 animate-spin" }),
|
|
2492
|
+
/* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-3 h-3 mr-2 animate-spin" }),
|
|
2493
2493
|
"Loading..."
|
|
2494
2494
|
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2495
|
-
/* @__PURE__ */ jsx(ChevronDown, { className: "w-3 h-3 mr-2" }),
|
|
2495
|
+
/* @__PURE__ */ jsx(ChevronDown, { strokeWidth: 1.5, className: "w-3 h-3 mr-2" }),
|
|
2496
2496
|
"Load More (500 rows)"
|
|
2497
2497
|
] })
|
|
2498
2498
|
}
|
|
@@ -2613,8 +2613,8 @@ function ResultsGrid({
|
|
|
2613
2613
|
onClick: () => column.toggleSorting(column.getIsSorted() === "asc"),
|
|
2614
2614
|
children: [
|
|
2615
2615
|
/* @__PURE__ */ jsx("span", { className: "truncate", children: field }),
|
|
2616
|
-
isSensitive && /* @__PURE__ */ jsx("span", { title: "Masked column", children: /* @__PURE__ */ jsx(Lock, { className: "w-3 h-3 text-purple-400 shrink-0" }) }),
|
|
2617
|
-
/* @__PURE__ */ jsx("div", { className: "flex-shrink-0 opacity-0 group-hover/header:opacity-100 transition-opacity", children: column.getIsSorted() === "asc" ? /* @__PURE__ */ jsx(ArrowUp, { className: "w-3 h-3" }) : column.getIsSorted() === "desc" ? /* @__PURE__ */ jsx(ArrowDown, { className: "w-3 h-3" }) : /* @__PURE__ */ jsx(ArrowUpDown, { className: "w-3 h-3" }) })
|
|
2616
|
+
isSensitive && /* @__PURE__ */ jsx("span", { title: "Masked column", children: /* @__PURE__ */ jsx(Lock, { strokeWidth: 1.5, className: "w-3 h-3 text-purple-400 shrink-0" }) }),
|
|
2617
|
+
/* @__PURE__ */ jsx("div", { className: "flex-shrink-0 opacity-0 group-hover/header:opacity-100 transition-opacity", children: column.getIsSorted() === "asc" ? /* @__PURE__ */ jsx(ArrowUp, { className: "w-3 h-3" }) : column.getIsSorted() === "desc" ? /* @__PURE__ */ jsx(ArrowDown, { strokeWidth: 1.5, className: "w-3 h-3" }) : /* @__PURE__ */ jsx(ArrowUpDown, { strokeWidth: 1.5, className: "w-3 h-3" }) })
|
|
2618
2618
|
]
|
|
2619
2619
|
}
|
|
2620
2620
|
),
|
|
@@ -2630,7 +2630,7 @@ function ResultsGrid({
|
|
|
2630
2630
|
setActiveFilterCol(activeFilterCol === field ? null : field);
|
|
2631
2631
|
},
|
|
2632
2632
|
title: "Filter column",
|
|
2633
|
-
children: /* @__PURE__ */ jsx(Filter, { className: "w-3 h-3" })
|
|
2633
|
+
children: /* @__PURE__ */ jsx(Filter, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
2634
2634
|
}
|
|
2635
2635
|
),
|
|
2636
2636
|
activeFilterCol === field && /* @__PURE__ */ jsxs(
|
|
@@ -2654,7 +2654,7 @@ function ResultsGrid({
|
|
|
2654
2654
|
onKeyDown: (e) => {
|
|
2655
2655
|
if (e.key === "Escape" || e.key === "Enter") setActiveFilterCol(null);
|
|
2656
2656
|
},
|
|
2657
|
-
className: "w-full bg-[#050505] border border-white/10 rounded px-2 py-1 text-
|
|
2657
|
+
className: "w-full bg-[#050505] border border-white/10 rounded px-2 py-1 text-xs text-zinc-200 outline-none focus:border-blue-500/30"
|
|
2658
2658
|
}
|
|
2659
2659
|
),
|
|
2660
2660
|
hasFilter && /* @__PURE__ */ jsx(
|
|
@@ -2740,7 +2740,7 @@ function ResultsGrid({
|
|
|
2740
2740
|
const { display: display2, className: className2 } = formatCellValue(val);
|
|
2741
2741
|
return /* @__PURE__ */ jsxs("div", { className: "truncate w-full h-full flex items-center gap-1", children: [
|
|
2742
2742
|
/* @__PURE__ */ jsx("span", { className: className2, children: display2 }),
|
|
2743
|
-
/* @__PURE__ */ jsx(Lock, { className: "w-2.5 h-2.5 text-purple-400/50 shrink-0" })
|
|
2743
|
+
/* @__PURE__ */ jsx(Lock, { strokeWidth: 1.5, className: "w-2.5 h-2.5 text-purple-400/50 shrink-0" })
|
|
2744
2744
|
] });
|
|
2745
2745
|
}
|
|
2746
2746
|
const displayVal = pendingChange !== void 0 ? pendingChange.newValue : val;
|
|
@@ -2801,7 +2801,7 @@ function ResultsGrid({
|
|
|
2801
2801
|
if (!result || result.rows.length === 0) {
|
|
2802
2802
|
return /* @__PURE__ */ jsxs("div", { className: "h-full flex flex-col items-center justify-center p-8 text-center text-zinc-600 animate-in fade-in zoom-in-95 duration-500", children: [
|
|
2803
2803
|
/* @__PURE__ */ jsx("div", { className: "w-16 h-16 rounded-2xl bg-zinc-900/50 flex items-center justify-center mb-6 border border-white/5 shadow-2xl", children: /* @__PURE__ */ jsx("span", { className: "text-2xl text-zinc-500", children: "\u2205" }) }),
|
|
2804
|
-
/* @__PURE__ */ jsx("p", { className: "text-
|
|
2804
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-zinc-400", children: "Query returned no data" }),
|
|
2805
2805
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-zinc-600 mt-2 max-w-[280px] leading-relaxed", children: "The operation was successful, but the result set is currently empty." })
|
|
2806
2806
|
] });
|
|
2807
2807
|
}
|
|
@@ -2884,13 +2884,13 @@ function ResultsGrid({
|
|
|
2884
2884
|
"div",
|
|
2885
2885
|
{
|
|
2886
2886
|
className: cn(
|
|
2887
|
-
"h-10 px-4 flex items-center gap-1 border-r border-b border-white/5 text-xs uppercase font-mono
|
|
2887
|
+
"h-10 px-4 flex items-center gap-1 border-r border-b border-white/5 text-xs uppercase font-mono text-zinc-500 bg-[#0d0d0d] whitespace-nowrap",
|
|
2888
2888
|
idx === 0 && "sticky left-0 z-30 bg-[#0d0d0d] shadow-[2px_0_8px_rgba(0,0,0,0.3)]",
|
|
2889
2889
|
"min-w-[120px]"
|
|
2890
2890
|
),
|
|
2891
2891
|
children: [
|
|
2892
2892
|
field,
|
|
2893
|
-
isSensitive && /* @__PURE__ */ jsx(Lock, { className: "w-2.5 h-2.5 text-purple-400" })
|
|
2893
|
+
isSensitive && /* @__PURE__ */ jsx(Lock, { strokeWidth: 1.5, className: "w-2.5 h-2.5 text-purple-400" })
|
|
2894
2894
|
]
|
|
2895
2895
|
},
|
|
2896
2896
|
field
|
|
@@ -2955,7 +2955,7 @@ function ResultsGrid({
|
|
|
2955
2955
|
"div",
|
|
2956
2956
|
{
|
|
2957
2957
|
style: { width: header.getSize(), minWidth: header.getSize() },
|
|
2958
|
-
className: "h-10 px-4 flex items-center border-r border-b border-white/5 text-xs uppercase font-mono
|
|
2958
|
+
className: "h-10 px-4 flex items-center border-r border-b border-white/5 text-xs uppercase font-mono text-zinc-500 bg-[#0d0d0d] relative group shrink-0",
|
|
2959
2959
|
children: [
|
|
2960
2960
|
header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()),
|
|
2961
2961
|
/* @__PURE__ */ jsx(
|
|
@@ -3037,9 +3037,9 @@ var TableNode = ({ data }) => {
|
|
|
3037
3037
|
const fkColumns = new Set((table.foreignKeys || []).map((fk) => fk.columnName));
|
|
3038
3038
|
return /* @__PURE__ */ jsxs("div", { className: `bg-[#0d0d0d] border rounded-lg overflow-hidden min-w-[200px] shadow-2xl transition-all ${isHighlighted ? "border-blue-500/60 ring-1 ring-blue-500/30" : "border-white/10"}`, children: [
|
|
3039
3039
|
/* @__PURE__ */ jsxs("div", { className: "bg-blue-600/10 px-3 py-2 border-b border-white/5 flex items-center gap-2", children: [
|
|
3040
|
-
/* @__PURE__ */ jsx(Database, { className: "w-3.5 h-3.5 text-blue-400" }),
|
|
3041
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs font-
|
|
3042
|
-
/* @__PURE__ */ jsxs("span", { className: "text-
|
|
3040
|
+
/* @__PURE__ */ jsx(Database, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-blue-400" }),
|
|
3041
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-zinc-100r", children: table.name }),
|
|
3042
|
+
/* @__PURE__ */ jsxs("span", { className: "text-[0.625rem] text-zinc-600 ml-auto", children: [
|
|
3043
3043
|
((_a = table.columns) == null ? void 0 : _a.length) || 0,
|
|
3044
3044
|
" cols"
|
|
3045
3045
|
] })
|
|
@@ -3066,14 +3066,14 @@ var TableNode = ({ data }) => {
|
|
|
3066
3066
|
}
|
|
3067
3067
|
),
|
|
3068
3068
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3069
|
-
col.isPrimary ? /* @__PURE__ */ jsx(Key, { className: "w-2.5 h-2.5 text-yellow-500" }) : isFk ? /* @__PURE__ */ jsx(Link2, { className: "w-2.5 h-2.5 text-blue-400" }) : col.type.toLowerCase().includes("int") ? /* @__PURE__ */ jsx(Hash, { className: "w-2.5 h-2.5 text-zinc-500" }) : /* @__PURE__ */ jsx(Type, { className: "w-2.5 h-2.5 text-zinc-500" }),
|
|
3069
|
+
col.isPrimary ? /* @__PURE__ */ jsx(Key, { strokeWidth: 1.5, className: "w-2.5 h-2.5 text-yellow-500" }) : isFk ? /* @__PURE__ */ jsx(Link2, { strokeWidth: 1.5, className: "w-2.5 h-2.5 text-blue-400" }) : col.type.toLowerCase().includes("int") ? /* @__PURE__ */ jsx(Hash, { strokeWidth: 1.5, className: "w-2.5 h-2.5 text-zinc-500" }) : /* @__PURE__ */ jsx(Type, { strokeWidth: 1.5, className: "w-2.5 h-2.5 text-zinc-500" }),
|
|
3070
3070
|
/* @__PURE__ */ jsx("span", { className: col.isPrimary ? "text-yellow-500/90 font-medium" : isFk ? "text-blue-400/80" : "text-zinc-400", children: col.name })
|
|
3071
3071
|
] }),
|
|
3072
3072
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
3073
|
-
col.nullable === false && /* @__PURE__ */ jsx("span", { className: "text-
|
|
3074
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
3073
|
+
col.nullable === false && /* @__PURE__ */ jsx("span", { className: "text-[0.5rem] text-red-500/60", children: "NN" }),
|
|
3074
|
+
/* @__PURE__ */ jsx("span", { className: "text-[0.625rem] text-zinc-600 font-mono uppercase", children: col.type })
|
|
3075
3075
|
] }),
|
|
3076
|
-
/* @__PURE__ */ jsx("div", { className: "absolute left-full ml-2 top-0 z-50 hidden group-hover:block", children: /* @__PURE__ */ jsxs("div", { className: "bg-[#1a1a1a] border border-white/10 rounded px-2 py-1 text-
|
|
3076
|
+
/* @__PURE__ */ jsx("div", { className: "absolute left-full ml-2 top-0 z-50 hidden group-hover:block", children: /* @__PURE__ */ jsxs("div", { className: "bg-[#1a1a1a] border border-white/10 rounded px-2 py-1 text-[0.625rem] whitespace-nowrap shadow-xl", children: [
|
|
3077
3077
|
/* @__PURE__ */ jsxs("div", { className: "text-zinc-300", children: [
|
|
3078
3078
|
col.name,
|
|
3079
3079
|
": ",
|
|
@@ -3286,8 +3286,8 @@ function SchemaDiagramInner({ schema, onClose }) {
|
|
|
3286
3286
|
}, []);
|
|
3287
3287
|
if (schema.length === 0) {
|
|
3288
3288
|
return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 z-50 bg-[#050505] flex flex-col items-center justify-center", children: [
|
|
3289
|
-
/* @__PURE__ */ jsx(Loader2, { className: "w-8 h-8 text-blue-500 animate-spin mb-4" }),
|
|
3290
|
-
/* @__PURE__ */ jsx("p", { className: "text-zinc-500 text-
|
|
3289
|
+
/* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-8 h-8 text-blue-500 animate-spin mb-4" }),
|
|
3290
|
+
/* @__PURE__ */ jsx("p", { className: "text-zinc-500 text-xs", children: "Generating ERD Diagram..." })
|
|
3291
3291
|
] });
|
|
3292
3292
|
}
|
|
3293
3293
|
const hasForeignKeys = schema.some((t) => (t.foreignKeys || []).length > 0);
|
|
@@ -3327,7 +3327,7 @@ function SchemaDiagramInner({ schema, onClose }) {
|
|
|
3327
3327
|
className: "bg-[#0d0d0d] border-white/10 hover:bg-white/5 text-xs gap-1",
|
|
3328
3328
|
onClick: () => exportDiagram("png"),
|
|
3329
3329
|
children: [
|
|
3330
|
-
/* @__PURE__ */ jsx(Download, { className: "w-3 h-3" }),
|
|
3330
|
+
/* @__PURE__ */ jsx(Download, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
3331
3331
|
" PNG"
|
|
3332
3332
|
]
|
|
3333
3333
|
}
|
|
@@ -3340,7 +3340,7 @@ function SchemaDiagramInner({ schema, onClose }) {
|
|
|
3340
3340
|
className: "bg-[#0d0d0d] border-white/10 hover:bg-white/5 text-xs gap-1",
|
|
3341
3341
|
onClick: () => exportDiagram("svg"),
|
|
3342
3342
|
children: [
|
|
3343
|
-
/* @__PURE__ */ jsx(Download, { className: "w-3 h-3" }),
|
|
3343
|
+
/* @__PURE__ */ jsx(Download, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
3344
3344
|
" SVG"
|
|
3345
3345
|
]
|
|
3346
3346
|
}
|
|
@@ -3365,12 +3365,12 @@ function SchemaDiagramInner({ schema, onClose }) {
|
|
|
3365
3365
|
size: "icon",
|
|
3366
3366
|
className: "rounded-full bg-[#0d0d0d] border-white/10 hover:bg-white/5",
|
|
3367
3367
|
onClick: onClose,
|
|
3368
|
-
children: /* @__PURE__ */ jsx(X, { className: "w-
|
|
3368
|
+
children: /* @__PURE__ */ jsx(X, { strokeWidth: 1.5, className: "w-3.5 h-3.5" })
|
|
3369
3369
|
}
|
|
3370
3370
|
)
|
|
3371
3371
|
] }) }),
|
|
3372
3372
|
/* @__PURE__ */ jsx(Panel, { position: "top-left", className: "p-4", children: /* @__PURE__ */ jsxs("div", { className: "bg-[#0d0d0d]/80 backdrop-blur-md border border-white/10 p-3 rounded-xl shadow-2xl space-y-2", children: [
|
|
3373
|
-
/* @__PURE__ */ jsxs("h3", { className: "text-xs font-
|
|
3373
|
+
/* @__PURE__ */ jsxs("h3", { className: "text-xs font-medium text-white mb-1 flex items-center gap-2", children: [
|
|
3374
3374
|
/* @__PURE__ */ jsx("div", { className: "w-2 h-2 rounded-full bg-blue-500 animate-pulse" }),
|
|
3375
3375
|
"ERD Visualizer"
|
|
3376
3376
|
] }),
|
|
@@ -3385,7 +3385,7 @@ function SchemaDiagramInner({ schema, onClose }) {
|
|
|
3385
3385
|
] })
|
|
3386
3386
|
] }),
|
|
3387
3387
|
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
3388
|
-
/* @__PURE__ */ jsx(Search, { className: "absolute left-2 top-1/2 -translate-y-1/2 w-3 h-3 text-zinc-600" }),
|
|
3388
|
+
/* @__PURE__ */ jsx(Search, { strokeWidth: 1.5, className: "absolute left-2 top-1/2 -translate-y-1/2 w-3 h-3 text-zinc-600" }),
|
|
3389
3389
|
/* @__PURE__ */ jsx(
|
|
3390
3390
|
"input",
|
|
3391
3391
|
{
|
|
@@ -3397,13 +3397,13 @@ function SchemaDiagramInner({ schema, onClose }) {
|
|
|
3397
3397
|
}
|
|
3398
3398
|
)
|
|
3399
3399
|
] }),
|
|
3400
|
-
!hasForeignKeys && /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-1.5 text-
|
|
3401
|
-
/* @__PURE__ */ jsx(Info, { className: "w-3 h-3 mt-0.5 shrink-0" }),
|
|
3400
|
+
!hasForeignKeys && /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-1.5 text-[0.625rem] text-amber-500/80", children: [
|
|
3401
|
+
/* @__PURE__ */ jsx(Info, { strokeWidth: 1.5, className: "w-3 h-3 mt-0.5 shrink-0" }),
|
|
3402
3402
|
/* @__PURE__ */ jsx("span", { children: "No FK data available. Showing heuristic relationships (dashed)." })
|
|
3403
3403
|
] }),
|
|
3404
3404
|
selectedNode && /* @__PURE__ */ jsxs("div", { className: "text-xs text-blue-400 border-t border-white/5 pt-2", children: [
|
|
3405
3405
|
"Selected: ",
|
|
3406
|
-
/* @__PURE__ */ jsx("span", { className: "font-mono font-
|
|
3406
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono font-medium", children: selectedNode }),
|
|
3407
3407
|
/* @__PURE__ */ jsx("button", { onClick: () => setSelectedNode(null), className: "ml-2 text-zinc-600 hover:text-zinc-400", children: "clear" })
|
|
3408
3408
|
] })
|
|
3409
3409
|
] }) })
|
|
@@ -3744,7 +3744,7 @@ var CustomTooltip = ({ active, payload, label }) => {
|
|
|
3744
3744
|
if (!active || !payload || !payload.length) return null;
|
|
3745
3745
|
return /* @__PURE__ */ jsxs("div", { className: "bg-[#111] border border-white/10 rounded-lg px-3 py-2 shadow-xl", children: [
|
|
3746
3746
|
/* @__PURE__ */ jsx("p", { className: "text-zinc-400 text-xs mb-1", children: label }),
|
|
3747
|
-
payload.map((entry, index) => /* @__PURE__ */ jsxs("p", { className: "text-
|
|
3747
|
+
payload.map((entry, index) => /* @__PURE__ */ jsxs("p", { className: "text-xs", style: { color: entry.color }, children: [
|
|
3748
3748
|
entry.name,
|
|
3749
3749
|
": ",
|
|
3750
3750
|
/* @__PURE__ */ jsx("span", { className: "font-mono font-medium", children: formatNumber(entry.value) })
|
|
@@ -3991,30 +3991,30 @@ function DataCharts({ result }) {
|
|
|
3991
3991
|
if (!analysis.isVisualizable) {
|
|
3992
3992
|
return /* @__PURE__ */ jsxs("div", { className: "h-full flex flex-col items-center justify-center bg-[#080808] text-zinc-500", children: [
|
|
3993
3993
|
/* @__PURE__ */ jsx(TrendingUp, { className: "w-12 h-12 mb-4 opacity-30" }),
|
|
3994
|
-
/* @__PURE__ */ jsx("p", { className: "text-
|
|
3994
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-medium mb-1", children: "Cannot Visualize Data" }),
|
|
3995
3995
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-zinc-600", children: analysis.reason })
|
|
3996
3996
|
] });
|
|
3997
3997
|
}
|
|
3998
3998
|
const chartTypes = [
|
|
3999
|
-
{ type: "bar", icon: /* @__PURE__ */ jsx(BarChart3, { className: "w-
|
|
4000
|
-
{ type: "line", icon: /* @__PURE__ */ jsx(LineChart$1, { className: "w-
|
|
4001
|
-
{ type: "pie", icon: /* @__PURE__ */ jsx(PieChart$1, { className: "w-
|
|
4002
|
-
{ type: "area", icon: /* @__PURE__ */ jsx(AreaChart$1, { className: "w-
|
|
4003
|
-
{ type: "scatter", icon: /* @__PURE__ */ jsx(Circle, { className: "w-
|
|
4004
|
-
{ type: "histogram", icon: /* @__PURE__ */ jsx(BarChart2, { className: "w-
|
|
4005
|
-
{ type: "stacked-bar", icon: /* @__PURE__ */ jsx(BarChart3, { className: "w-
|
|
4006
|
-
{ type: "stacked-area", icon: /* @__PURE__ */ jsx(AreaChart$1, { className: "w-
|
|
3999
|
+
{ type: "bar", icon: /* @__PURE__ */ jsx(BarChart3, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }), label: "Bar" },
|
|
4000
|
+
{ type: "line", icon: /* @__PURE__ */ jsx(LineChart$1, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }), label: "Line" },
|
|
4001
|
+
{ type: "pie", icon: /* @__PURE__ */ jsx(PieChart$1, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }), label: "Pie" },
|
|
4002
|
+
{ type: "area", icon: /* @__PURE__ */ jsx(AreaChart$1, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }), label: "Area" },
|
|
4003
|
+
{ type: "scatter", icon: /* @__PURE__ */ jsx(Circle, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }), label: "Scatter" },
|
|
4004
|
+
{ type: "histogram", icon: /* @__PURE__ */ jsx(BarChart2, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }), label: "Histogram" },
|
|
4005
|
+
{ type: "stacked-bar", icon: /* @__PURE__ */ jsx(BarChart3, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }), label: "Stacked" },
|
|
4006
|
+
{ type: "stacked-area", icon: /* @__PURE__ */ jsx(AreaChart$1, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }), label: "Stack Area" }
|
|
4007
4007
|
];
|
|
4008
4008
|
const getFieldIcon = (type) => {
|
|
4009
4009
|
switch (type) {
|
|
4010
4010
|
case "numeric":
|
|
4011
|
-
return /* @__PURE__ */ jsx(Hash, { className: "w-3 h-3" });
|
|
4011
|
+
return /* @__PURE__ */ jsx(Hash, { strokeWidth: 1.5, className: "w-3 h-3" });
|
|
4012
4012
|
case "date":
|
|
4013
4013
|
return /* @__PURE__ */ jsx(Calendar, { className: "w-3 h-3" });
|
|
4014
4014
|
case "categorical":
|
|
4015
|
-
return /* @__PURE__ */ jsx(Type, { className: "w-3 h-3" });
|
|
4015
|
+
return /* @__PURE__ */ jsx(Type, { strokeWidth: 1.5, className: "w-3 h-3" });
|
|
4016
4016
|
default:
|
|
4017
|
-
return /* @__PURE__ */ jsx(AlertCircle, { className: "w-3 h-3" });
|
|
4017
|
+
return /* @__PURE__ */ jsx(AlertCircle, { strokeWidth: 1.5, className: "w-3 h-3" });
|
|
4018
4018
|
}
|
|
4019
4019
|
};
|
|
4020
4020
|
return /* @__PURE__ */ jsxs("div", { className: "h-full flex flex-col bg-[#080808]", children: [
|
|
@@ -4037,7 +4037,7 @@ function DataCharts({ result }) {
|
|
|
4037
4037
|
)) }),
|
|
4038
4038
|
/* @__PURE__ */ jsx("div", { className: "h-4 w-px bg-white/10 hidden sm:block" }),
|
|
4039
4039
|
chartType !== "pie" && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
4040
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-
|
|
4040
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-600r", children: "X-Axis" }),
|
|
4041
4041
|
/* @__PURE__ */ jsxs(Select, { value: xAxis, onValueChange: setXAxis, children: [
|
|
4042
4042
|
/* @__PURE__ */ jsx(SelectTrigger, { className: "h-7 w-[140px] text-xs bg-white/5 border-white/10", children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select field" }) }),
|
|
4043
4043
|
/* @__PURE__ */ jsx(SelectContent, { className: "bg-[#111] border-white/10", children: analysis.fields.map((field) => /* @__PURE__ */ jsx(SelectItem, { value: field.name, className: "text-xs", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
@@ -4047,11 +4047,11 @@ function DataCharts({ result }) {
|
|
|
4047
4047
|
] })
|
|
4048
4048
|
] }),
|
|
4049
4049
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
4050
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-
|
|
4050
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-600r", children: chartType === "pie" ? "Value" : "Y-Axis" }),
|
|
4051
4051
|
/* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
4052
4052
|
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", className: "h-7 text-xs bg-white/5 border-white/10 gap-1", children: [
|
|
4053
4053
|
yAxis.length > 0 ? yAxis.join(", ") : "Select fields",
|
|
4054
|
-
/* @__PURE__ */ jsx(Settings2, { className: "w-3 h-3 ml-1" })
|
|
4054
|
+
/* @__PURE__ */ jsx(Settings2, { strokeWidth: 1.5, className: "w-3 h-3 ml-1" })
|
|
4055
4055
|
] }) }),
|
|
4056
4056
|
/* @__PURE__ */ jsx(DropdownMenuContent, { className: "bg-[#111] border-white/10", children: analysis.numericFields.map((field) => /* @__PURE__ */ jsxs(
|
|
4057
4057
|
DropdownMenuItem,
|
|
@@ -4062,7 +4062,7 @@ function DataCharts({ result }) {
|
|
|
4062
4062
|
yAxis.includes(field) && "bg-blue-600/20 text-blue-400"
|
|
4063
4063
|
),
|
|
4064
4064
|
children: [
|
|
4065
|
-
/* @__PURE__ */ jsx(Hash, { className: "w-3 h-3 mr-2" }),
|
|
4065
|
+
/* @__PURE__ */ jsx(Hash, { strokeWidth: 1.5, className: "w-3 h-3 mr-2" }),
|
|
4066
4066
|
field,
|
|
4067
4067
|
yAxis.includes(field) && /* @__PURE__ */ jsx("span", { className: "ml-auto", children: "\u2713" })
|
|
4068
4068
|
]
|
|
@@ -4072,28 +4072,28 @@ function DataCharts({ result }) {
|
|
|
4072
4072
|
] })
|
|
4073
4073
|
] }),
|
|
4074
4074
|
chartType === "scatter" && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
4075
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-
|
|
4075
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-600r", children: "Y" }),
|
|
4076
4076
|
/* @__PURE__ */ jsxs(Select, { value: scatterY, onValueChange: setScatterY, children: [
|
|
4077
4077
|
/* @__PURE__ */ jsx(SelectTrigger, { className: "h-7 w-[120px] text-xs bg-white/5 border-white/10", children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Y field" }) }),
|
|
4078
4078
|
/* @__PURE__ */ jsx(SelectContent, { className: "bg-[#111] border-white/10", children: analysis.numericFields.filter((f) => f !== xAxis).map((field) => /* @__PURE__ */ jsx(SelectItem, { value: field, className: "text-xs", children: field }, field)) })
|
|
4079
4079
|
] })
|
|
4080
4080
|
] }),
|
|
4081
4081
|
chartType === "histogram" && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
4082
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-
|
|
4082
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-600r", children: "Buckets" }),
|
|
4083
4083
|
/* @__PURE__ */ jsxs(Select, { value: String(histogramBuckets), onValueChange: (v) => setHistogramBuckets(Number(v)), children: [
|
|
4084
4084
|
/* @__PURE__ */ jsx(SelectTrigger, { className: "h-7 w-[70px] text-xs bg-white/5 border-white/10", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
4085
4085
|
/* @__PURE__ */ jsx(SelectContent, { className: "bg-[#111] border-white/10", children: [5, 10, 20, 50].map((n) => /* @__PURE__ */ jsx(SelectItem, { value: String(n), className: "text-xs", children: n }, n)) })
|
|
4086
4086
|
] })
|
|
4087
4087
|
] }),
|
|
4088
4088
|
chartType !== "scatter" && chartType !== "histogram" && chartType !== "pie" && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
4089
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-
|
|
4089
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-600r", children: "Agg" }),
|
|
4090
4090
|
/* @__PURE__ */ jsxs(Select, { value: aggregation, onValueChange: (v) => setAggregation(v), children: [
|
|
4091
4091
|
/* @__PURE__ */ jsx(SelectTrigger, { className: "h-7 w-[80px] text-xs bg-white/5 border-white/10", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
4092
|
-
/* @__PURE__ */ jsx(SelectContent, { className: "bg-[#111] border-white/10", children: ["none", "sum", "avg", "count", "min", "max"].map((a) => /* @__PURE__ */ jsx(SelectItem, { value: a, className: "text-xs
|
|
4092
|
+
/* @__PURE__ */ jsx(SelectContent, { className: "bg-[#111] border-white/10", children: ["none", "sum", "avg", "count", "min", "max"].map((a) => /* @__PURE__ */ jsx(SelectItem, { value: a, className: "text-xs", children: a }, a)) })
|
|
4093
4093
|
] })
|
|
4094
4094
|
] }),
|
|
4095
4095
|
analysis.dateFields.length > 0 && chartType !== "scatter" && chartType !== "histogram" && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
4096
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-
|
|
4096
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-600r", children: "Group" }),
|
|
4097
4097
|
/* @__PURE__ */ jsxs(Select, { value: dateGrouping || "none", onValueChange: (v) => setDateGrouping(v === "none" ? "" : v), children: [
|
|
4098
4098
|
/* @__PURE__ */ jsx(SelectTrigger, { className: "h-7 w-[80px] text-xs bg-white/5 border-white/10", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
4099
4099
|
/* @__PURE__ */ jsxs(SelectContent, { className: "bg-[#111] border-white/10", children: [
|
|
@@ -4120,12 +4120,12 @@ function DataCharts({ result }) {
|
|
|
4120
4120
|
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", className: "h-7 text-xs text-zinc-500", onClick: () => setShowSaveDialog(false), children: "Cancel" })
|
|
4121
4121
|
] }) : /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
4122
4122
|
/* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", className: "h-7 text-xs text-zinc-500 hover:text-white gap-1", onClick: () => setShowSaveDialog(true), children: [
|
|
4123
|
-
/* @__PURE__ */ jsx(Save, { className: "w-3 h-3" }),
|
|
4123
|
+
/* @__PURE__ */ jsx(Save, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
4124
4124
|
" Save"
|
|
4125
4125
|
] }),
|
|
4126
4126
|
savedCharts.length > 0 && /* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
4127
4127
|
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", className: "h-7 text-xs text-zinc-500 hover:text-white gap-1", children: [
|
|
4128
|
-
/* @__PURE__ */ jsx(FolderOpen, { className: "w-3 h-3" }),
|
|
4128
|
+
/* @__PURE__ */ jsx(FolderOpen, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
4129
4129
|
" Saved (",
|
|
4130
4130
|
savedCharts.length,
|
|
4131
4131
|
")"
|
|
@@ -4143,13 +4143,13 @@ function DataCharts({ result }) {
|
|
|
4143
4143
|
/* @__PURE__ */ jsx("button", { onClick: (e) => {
|
|
4144
4144
|
e.stopPropagation();
|
|
4145
4145
|
deleteSavedChart(chart.id);
|
|
4146
|
-
}, className: "text-zinc-600 hover:text-red-400", children: /* @__PURE__ */ jsx(X, { className: "w-3 h-3" }) })
|
|
4146
|
+
}, className: "text-zinc-600 hover:text-red-400", children: /* @__PURE__ */ jsx(X, { strokeWidth: 1.5, className: "w-3 h-3" }) })
|
|
4147
4147
|
] }, chart.id)) })
|
|
4148
4148
|
] })
|
|
4149
4149
|
] }),
|
|
4150
4150
|
/* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
4151
|
-
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", className: "h-7 text-xs font-
|
|
4152
|
-
/* @__PURE__ */ jsx(Download, { className: "w-3 h-3" }),
|
|
4151
|
+
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", className: "h-7 text-xs font-medium text-zinc-500 hover:text-white gap-1", children: [
|
|
4152
|
+
/* @__PURE__ */ jsx(Download, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
4153
4153
|
" Export"
|
|
4154
4154
|
] }) }),
|
|
4155
4155
|
/* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", className: "bg-[#111] border-white/10", children: [
|
|
@@ -4158,7 +4158,7 @@ function DataCharts({ result }) {
|
|
|
4158
4158
|
] })
|
|
4159
4159
|
] })
|
|
4160
4160
|
] }),
|
|
4161
|
-
/* @__PURE__ */ jsx("div", { ref: chartRef, className: "flex-1 p-4 min-h-0", children: yAxis.length === 0 ? /* @__PURE__ */ jsx("div", { className: "h-full flex items-center justify-center text-zinc-600 text-
|
|
4161
|
+
/* @__PURE__ */ jsx("div", { ref: chartRef, className: "flex-1 p-4 min-h-0", children: yAxis.length === 0 ? /* @__PURE__ */ jsx("div", { className: "h-full flex items-center justify-center text-zinc-600 text-xs", children: "Select at least one numeric field for the chart" }) : /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height: "100%", children: chartType === "bar" ? /* @__PURE__ */ jsxs(BarChart, { data: chartData, margin: { top: 20, right: 30, left: 20, bottom: 60 }, children: [
|
|
4162
4162
|
/* @__PURE__ */ jsx(CartesianGrid, { strokeDasharray: "3 3", stroke: "#222" }),
|
|
4163
4163
|
/* @__PURE__ */ jsx(
|
|
4164
4164
|
XAxis,
|
|
@@ -4602,12 +4602,12 @@ function CodeGenerator({
|
|
|
4602
4602
|
return /* @__PURE__ */ jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm", children: /* @__PURE__ */ jsxs("div", { className: "bg-[#111] border border-white/10 rounded-xl shadow-2xl w-full max-w-xl mx-4 overflow-hidden", children: [
|
|
4603
4603
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-5 py-3 border-b border-white/5", children: [
|
|
4604
4604
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
4605
|
-
/* @__PURE__ */ jsx(Code, { className: "w-
|
|
4606
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
4605
|
+
/* @__PURE__ */ jsx(Code, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-purple-400" }),
|
|
4606
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-zinc-200", children: "Code Generator" }),
|
|
4607
4607
|
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-500 font-mono", children: tableName }),
|
|
4608
4608
|
databaseType && /* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-600 font-mono uppercase", children: databaseType })
|
|
4609
4609
|
] }),
|
|
4610
|
-
/* @__PURE__ */ jsx("button", { onClick: onClose, className: "p-1 rounded hover:bg-white/5 text-zinc-500", children: /* @__PURE__ */ jsx(X, { className: "w-
|
|
4610
|
+
/* @__PURE__ */ jsx("button", { onClick: onClose, className: "p-1 rounded hover:bg-white/5 text-zinc-500", children: /* @__PURE__ */ jsx(X, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }) })
|
|
4611
4611
|
] }),
|
|
4612
4612
|
/* @__PURE__ */ jsx("div", { className: "px-5 py-2 border-b border-white/5 bg-[#0a0a0a]", children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
4613
4613
|
/* @__PURE__ */ jsxs(
|
|
@@ -4617,7 +4617,7 @@ function CodeGenerator({
|
|
|
4617
4617
|
className: "flex items-center gap-2 px-3 py-1.5 rounded-lg bg-white/5 border border-white/10 text-xs text-zinc-300 hover:bg-white/10 transition-colors",
|
|
4618
4618
|
children: [
|
|
4619
4619
|
currentLang.label,
|
|
4620
|
-
/* @__PURE__ */ jsx(ChevronDown, { className: "w-3 h-3 text-zinc-500" })
|
|
4620
|
+
/* @__PURE__ */ jsx(ChevronDown, { strokeWidth: 1.5, className: "w-3 h-3 text-zinc-500" })
|
|
4621
4621
|
]
|
|
4622
4622
|
}
|
|
4623
4623
|
),
|
|
@@ -4638,14 +4638,14 @@ function CodeGenerator({
|
|
|
4638
4638
|
)) })
|
|
4639
4639
|
] }) }),
|
|
4640
4640
|
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
4641
|
-
/* @__PURE__ */ jsx("pre", { className: "p-5 text-
|
|
4641
|
+
/* @__PURE__ */ jsx("pre", { className: "p-5 text-xs font-mono text-zinc-300 overflow-auto max-h-[50vh] bg-[#050505] leading-relaxed whitespace-pre", children: code }),
|
|
4642
4642
|
/* @__PURE__ */ jsxs(
|
|
4643
4643
|
"button",
|
|
4644
4644
|
{
|
|
4645
4645
|
onClick: handleCopy,
|
|
4646
4646
|
className: "absolute top-3 right-3 flex items-center gap-1.5 px-2.5 py-1 rounded-lg bg-white/10 hover:bg-white/20 text-xs text-zinc-400 transition-colors",
|
|
4647
4647
|
children: [
|
|
4648
|
-
copied ? /* @__PURE__ */ jsx(Check, { className: "w-3 h-3 text-emerald-400" }) : /* @__PURE__ */ jsx(Copy, { className: "w-3 h-3" }),
|
|
4648
|
+
copied ? /* @__PURE__ */ jsx(Check, { strokeWidth: 1.5, className: "w-3 h-3 text-emerald-400" }) : /* @__PURE__ */ jsx(Copy, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
4649
4649
|
copied ? "Copied!" : "Copy"
|
|
4650
4650
|
]
|
|
4651
4651
|
}
|
|
@@ -4797,21 +4797,21 @@ VALUES
|
|
|
4797
4797
|
return /* @__PURE__ */ jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm", children: /* @__PURE__ */ jsxs("div", { className: "bg-[#111] border border-white/10 rounded-xl shadow-2xl w-full max-w-2xl mx-4 max-h-[85vh] flex flex-col overflow-hidden", children: [
|
|
4798
4798
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-5 py-3 border-b border-white/5", children: [
|
|
4799
4799
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
4800
|
-
/* @__PURE__ */ jsx(Wand2, { className: "w-
|
|
4801
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
4800
|
+
/* @__PURE__ */ jsx(Wand2, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-amber-400" }),
|
|
4801
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-zinc-200", children: "Test Data Generator" }),
|
|
4802
4802
|
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-500 font-mono", children: tableName })
|
|
4803
4803
|
] }),
|
|
4804
|
-
/* @__PURE__ */ jsx("button", { onClick: onClose, className: "p-1 rounded hover:bg-white/5 text-zinc-500", children: /* @__PURE__ */ jsx(X, { className: "w-
|
|
4804
|
+
/* @__PURE__ */ jsx("button", { onClick: onClose, className: "p-1 rounded hover:bg-white/5 text-zinc-500", children: /* @__PURE__ */ jsx(X, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }) })
|
|
4805
4805
|
] }),
|
|
4806
4806
|
/* @__PURE__ */ jsxs("div", { className: "px-5 py-3 border-b border-white/5 bg-[#0a0a0a] flex items-center gap-4", children: [
|
|
4807
4807
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
4808
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-
|
|
4808
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-500r font-medium", children: "Rows:" }),
|
|
4809
4809
|
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", children: [5, 10, 25, 50, 100].map((n) => /* @__PURE__ */ jsx(
|
|
4810
4810
|
"button",
|
|
4811
4811
|
{
|
|
4812
4812
|
onClick: () => setRowCount(n),
|
|
4813
4813
|
className: cn(
|
|
4814
|
-
"px-2 py-0.5 rounded text-xs font-
|
|
4814
|
+
"px-2 py-0.5 rounded text-xs font-medium transition-colors",
|
|
4815
4815
|
rowCount === n ? "bg-amber-500/20 text-amber-400 border border-amber-500/20" : "text-zinc-500 hover:text-zinc-300 hover:bg-white/5"
|
|
4816
4816
|
),
|
|
4817
4817
|
children: n
|
|
@@ -4823,10 +4823,10 @@ VALUES
|
|
|
4823
4823
|
"button",
|
|
4824
4824
|
{
|
|
4825
4825
|
onClick: () => setRefreshKey((k) => k + 1),
|
|
4826
|
-
className: "flex items-center gap-1 px-2 py-1 rounded text-xs font-
|
|
4826
|
+
className: "flex items-center gap-1 px-2 py-1 rounded text-xs font-medium text-zinc-500 hover:text-zinc-300 hover:bg-white/5 transition-colors",
|
|
4827
4827
|
title: "Regenerate random data",
|
|
4828
4828
|
children: [
|
|
4829
|
-
/* @__PURE__ */ jsx(RefreshCw, { className: "w-3 h-3" }),
|
|
4829
|
+
/* @__PURE__ */ jsx(RefreshCw, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
4830
4830
|
" Regenerate"
|
|
4831
4831
|
]
|
|
4832
4832
|
}
|
|
@@ -4848,7 +4848,7 @@ VALUES
|
|
|
4848
4848
|
},
|
|
4849
4849
|
col.name
|
|
4850
4850
|
)) }) }),
|
|
4851
|
-
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-auto relative", children: /* @__PURE__ */ jsx("pre", { className: "p-5 text-
|
|
4851
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-auto relative", children: /* @__PURE__ */ jsx("pre", { className: "p-5 text-xs font-mono text-blue-300 whitespace-pre-wrap leading-relaxed", children: generatedQuery }) }),
|
|
4852
4852
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-5 py-3 border-t border-white/5 bg-[#0a0a0a]", children: [
|
|
4853
4853
|
/* @__PURE__ */ jsxs("p", { className: "text-xs text-zinc-600", children: [
|
|
4854
4854
|
columnConfigs.filter((c) => c.faker.generator !== "autoIncrement").length,
|
|
@@ -4861,9 +4861,9 @@ VALUES
|
|
|
4861
4861
|
"button",
|
|
4862
4862
|
{
|
|
4863
4863
|
onClick: handleCopy,
|
|
4864
|
-
className: "flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-white/5 text-zinc-400 text-xs font-
|
|
4864
|
+
className: "flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-white/5 text-zinc-400 text-xs font-medium hover:bg-white/10 transition-colors",
|
|
4865
4865
|
children: [
|
|
4866
|
-
copied ? /* @__PURE__ */ jsx(Check, { className: "w-3 h-3 text-emerald-400" }) : /* @__PURE__ */ jsx(Copy, { className: "w-3 h-3" }),
|
|
4866
|
+
copied ? /* @__PURE__ */ jsx(Check, { strokeWidth: 1.5, className: "w-3 h-3 text-emerald-400" }) : /* @__PURE__ */ jsx(Copy, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
4867
4867
|
copied ? "Copied!" : "Copy"
|
|
4868
4868
|
]
|
|
4869
4869
|
}
|
|
@@ -4875,9 +4875,9 @@ VALUES
|
|
|
4875
4875
|
onExecuteQuery(generatedQuery);
|
|
4876
4876
|
onClose();
|
|
4877
4877
|
},
|
|
4878
|
-
className: "flex items-center gap-1.5 px-4 py-1.5 rounded-lg bg-amber-600 hover:bg-amber-500 text-white text-xs font-
|
|
4878
|
+
className: "flex items-center gap-1.5 px-4 py-1.5 rounded-lg bg-amber-600 hover:bg-amber-500 text-white text-xs font-medium transition-colors",
|
|
4879
4879
|
children: [
|
|
4880
|
-
/* @__PURE__ */ jsx(Play, { className: "w-3 h-3 fill-current" }),
|
|
4880
|
+
/* @__PURE__ */ jsx(Play, { strokeWidth: 1.5, className: "w-3 h-3 fill-current" }),
|
|
4881
4881
|
" Execute"
|
|
4882
4882
|
]
|
|
4883
4883
|
}
|
|
@@ -4989,15 +4989,15 @@ function analyzePlan(plan) {
|
|
|
4989
4989
|
};
|
|
4990
4990
|
}
|
|
4991
4991
|
var NodeIcon = ({ type }) => {
|
|
4992
|
-
if (type.includes("Seq Scan")) return /* @__PURE__ */ jsx(Search, { className: "w-
|
|
4993
|
-
if (type.includes("Index Scan") || type.includes("Index Only")) return /* @__PURE__ */ jsx(Target, { className: "w-
|
|
4994
|
-
if (type.includes("Scan")) return /* @__PURE__ */ jsx(Search, { className: "w-
|
|
4995
|
-
if (type.includes("Join")) return /* @__PURE__ */ jsx(Layers, { className: "w-
|
|
4996
|
-
if (type.includes("Sort")) return /* @__PURE__ */ jsx(ArrowDown, { className: "w-
|
|
4997
|
-
if (type.includes("Limit")) return /* @__PURE__ */ jsx(LayoutGrid, { className: "w-
|
|
4998
|
-
if (type.includes("Aggregate") || type.includes("Group")) return /* @__PURE__ */ jsx(Zap, { className: "w-
|
|
4999
|
-
if (type.includes("Hash")) return /* @__PURE__ */ jsx(HardDrive, { className: "w-
|
|
5000
|
-
return /* @__PURE__ */ jsx(Database, { className: "w-
|
|
4992
|
+
if (type.includes("Seq Scan")) return /* @__PURE__ */ jsx(Search, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-amber-400" });
|
|
4993
|
+
if (type.includes("Index Scan") || type.includes("Index Only")) return /* @__PURE__ */ jsx(Target, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-emerald-400" });
|
|
4994
|
+
if (type.includes("Scan")) return /* @__PURE__ */ jsx(Search, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-blue-400" });
|
|
4995
|
+
if (type.includes("Join")) return /* @__PURE__ */ jsx(Layers, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-purple-400" });
|
|
4996
|
+
if (type.includes("Sort")) return /* @__PURE__ */ jsx(ArrowDown, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-amber-400" });
|
|
4997
|
+
if (type.includes("Limit")) return /* @__PURE__ */ jsx(LayoutGrid, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-zinc-400" });
|
|
4998
|
+
if (type.includes("Aggregate") || type.includes("Group")) return /* @__PURE__ */ jsx(Zap, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-pink-400" });
|
|
4999
|
+
if (type.includes("Hash")) return /* @__PURE__ */ jsx(HardDrive, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-cyan-400" });
|
|
5000
|
+
return /* @__PURE__ */ jsx(Database, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-zinc-500" });
|
|
5001
5001
|
};
|
|
5002
5002
|
var StatusBadge = ({ status }) => {
|
|
5003
5003
|
return /* @__PURE__ */ jsx("div", { className: cn("w-2 h-2 rounded-full", status === "good" ? "bg-emerald-500" : status === "warning" ? "bg-amber-500" : "bg-red-500") });
|
|
@@ -5030,7 +5030,7 @@ var PlanNode = ({ node, depth = 0, maxTime }) => {
|
|
|
5030
5030
|
isSeqScan ? "bg-amber-500/10" : isIndexScan ? "bg-emerald-500/10" : "bg-white/5"
|
|
5031
5031
|
), children: /* @__PURE__ */ jsx(NodeIcon, { type: nodeType }) }),
|
|
5032
5032
|
/* @__PURE__ */ jsx("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5033
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
5033
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-zinc-200 truncate", children: nodeType }),
|
|
5034
5034
|
node["Relation Name"] && /* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-500 font-mono truncate", children: node["Relation Name"] })
|
|
5035
5035
|
] }) }),
|
|
5036
5036
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 text-xs font-mono", children: [
|
|
@@ -5152,16 +5152,16 @@ function AIExplainTab({
|
|
|
5152
5152
|
elements.push(
|
|
5153
5153
|
/* @__PURE__ */ jsxs("div", { className: "my-3 relative group/code", children: [
|
|
5154
5154
|
/* @__PURE__ */ jsx("pre", { className: cn(
|
|
5155
|
-
"text-
|
|
5155
|
+
"text-xs font-mono p-3 rounded-lg overflow-x-auto border",
|
|
5156
5156
|
isSql ? "bg-blue-500/5 border-blue-500/10 text-blue-300" : "bg-white/[0.02] border-white/5 text-zinc-400"
|
|
5157
5157
|
), children: content }),
|
|
5158
5158
|
isSql && onLoadQuery && /* @__PURE__ */ jsxs(
|
|
5159
5159
|
"button",
|
|
5160
5160
|
{
|
|
5161
5161
|
onClick: () => onLoadQuery(content),
|
|
5162
|
-
className: "absolute top-2 right-2 opacity-0 group-hover/code:opacity-100 transition-opacity px-2 py-1 rounded bg-blue-600 hover:bg-blue-500 text-white text-xs font-
|
|
5162
|
+
className: "absolute top-2 right-2 opacity-0 group-hover/code:opacity-100 transition-opacity px-2 py-1 rounded bg-blue-600 hover:bg-blue-500 text-white text-xs font-medium flex items-center gap-1",
|
|
5163
5163
|
children: [
|
|
5164
|
-
/* @__PURE__ */ jsx(Play, { className: "w-3 h-3" }),
|
|
5164
|
+
/* @__PURE__ */ jsx(Play, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
5165
5165
|
" Try This"
|
|
5166
5166
|
]
|
|
5167
5167
|
}
|
|
@@ -5183,15 +5183,15 @@ function AIExplainTab({
|
|
|
5183
5183
|
}
|
|
5184
5184
|
if (line.startsWith("## ")) {
|
|
5185
5185
|
elements.push(
|
|
5186
|
-
/* @__PURE__ */ jsx("h2", { className: "text-
|
|
5186
|
+
/* @__PURE__ */ jsx("h2", { className: "text-xs font-medium text-zinc-200 mt-4 mb-2 flex items-center gap-2", children: line.slice(3) }, idx)
|
|
5187
5187
|
);
|
|
5188
5188
|
} else if (line.startsWith("### ")) {
|
|
5189
5189
|
elements.push(
|
|
5190
|
-
/* @__PURE__ */ jsx("h3", { className: "text-
|
|
5190
|
+
/* @__PURE__ */ jsx("h3", { className: "text-xs font-medium text-zinc-300 mt-3 mb-1", children: line.slice(4) }, idx)
|
|
5191
5191
|
);
|
|
5192
5192
|
} else if (line.startsWith("- ")) {
|
|
5193
5193
|
elements.push(
|
|
5194
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2 text-
|
|
5194
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2 text-xs text-zinc-400 leading-relaxed ml-2 my-0.5", children: [
|
|
5195
5195
|
/* @__PURE__ */ jsx("span", { className: "text-zinc-600 mt-1 shrink-0", children: "\u2022" }),
|
|
5196
5196
|
/* @__PURE__ */ jsx("span", { children: renderInlineFormatting(line.slice(2)) })
|
|
5197
5197
|
] }, idx)
|
|
@@ -5199,8 +5199,8 @@ function AIExplainTab({
|
|
|
5199
5199
|
} else if (/^\d+\.\s/.test(line)) {
|
|
5200
5200
|
const num = (_a = line.match(/^(\d+)\./)) == null ? void 0 : _a[1];
|
|
5201
5201
|
elements.push(
|
|
5202
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2 text-
|
|
5203
|
-
/* @__PURE__ */ jsxs("span", { className: "text-blue-400 font-
|
|
5202
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2 text-xs text-zinc-400 leading-relaxed ml-2 my-0.5", children: [
|
|
5203
|
+
/* @__PURE__ */ jsxs("span", { className: "text-blue-400 font-medium mt-0 shrink-0 w-4", children: [
|
|
5204
5204
|
num,
|
|
5205
5205
|
"."
|
|
5206
5206
|
] }),
|
|
@@ -5211,7 +5211,7 @@ function AIExplainTab({
|
|
|
5211
5211
|
elements.push(/* @__PURE__ */ jsx("div", { className: "h-1" }, idx));
|
|
5212
5212
|
} else {
|
|
5213
5213
|
elements.push(
|
|
5214
|
-
/* @__PURE__ */ jsx("p", { className: "text-
|
|
5214
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-zinc-400 leading-relaxed my-0.5", children: renderInlineFormatting(line) }, idx)
|
|
5215
5215
|
);
|
|
5216
5216
|
}
|
|
5217
5217
|
});
|
|
@@ -5231,20 +5231,20 @@ function AIExplainTab({
|
|
|
5231
5231
|
};
|
|
5232
5232
|
if (!hasRun) {
|
|
5233
5233
|
return /* @__PURE__ */ jsxs("div", { className: "h-full flex flex-col items-center justify-center p-8 text-center", children: [
|
|
5234
|
-
/* @__PURE__ */ jsx("div", { className: "w-14 h-14 rounded-2xl bg-gradient-to-br from-purple-500/20 to-blue-500/10 flex items-center justify-center mb-4", children: /* @__PURE__ */ jsx(Sparkles, { className: "w-7 h-7 text-purple-400" }) }),
|
|
5235
|
-
/* @__PURE__ */ jsx("h3", { className: "text-
|
|
5236
|
-
/* @__PURE__ */ jsx("p", { className: "text-
|
|
5234
|
+
/* @__PURE__ */ jsx("div", { className: "w-14 h-14 rounded-2xl bg-gradient-to-br from-purple-500/20 to-blue-500/10 flex items-center justify-center mb-4", children: /* @__PURE__ */ jsx(Sparkles, { strokeWidth: 1.5, className: "w-7 h-7 text-purple-400" }) }),
|
|
5235
|
+
/* @__PURE__ */ jsx("h3", { className: "text-xs font-medium text-zinc-200 mb-1", children: "AI Query Analysis" }),
|
|
5236
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-zinc-500 max-w-[280px] leading-relaxed mb-4", children: "Get a plain-language explanation of your query's execution plan with concrete optimization suggestions." }),
|
|
5237
5237
|
/* @__PURE__ */ jsxs(
|
|
5238
5238
|
"button",
|
|
5239
5239
|
{
|
|
5240
5240
|
onClick: analyzeWithAI,
|
|
5241
5241
|
disabled: !query,
|
|
5242
5242
|
className: cn(
|
|
5243
|
-
"flex items-center gap-2 px-4 py-2 rounded-lg text-xs font-
|
|
5243
|
+
"flex items-center gap-2 px-4 py-2 rounded-lg text-xs font-medium transition-all",
|
|
5244
5244
|
query ? "bg-purple-600 hover:bg-purple-500 text-white shadow-lg shadow-purple-900/20" : "bg-white/5 text-zinc-600 cursor-not-allowed"
|
|
5245
5245
|
),
|
|
5246
5246
|
children: [
|
|
5247
|
-
/* @__PURE__ */ jsx(Sparkles, { className: "w-3
|
|
5247
|
+
/* @__PURE__ */ jsx(Sparkles, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
5248
5248
|
"Analyze with AI"
|
|
5249
5249
|
]
|
|
5250
5250
|
}
|
|
@@ -5255,17 +5255,17 @@ function AIExplainTab({
|
|
|
5255
5255
|
return /* @__PURE__ */ jsxs("div", { className: "h-full flex flex-col", children: [
|
|
5256
5256
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-b border-white/5 bg-[#0a0a0a]", children: [
|
|
5257
5257
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5258
|
-
/* @__PURE__ */ jsx(Sparkles, { className: "w-3
|
|
5259
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs font-
|
|
5258
|
+
/* @__PURE__ */ jsx(Sparkles, { strokeWidth: 1.5, className: "w-3 h-3 text-purple-400" }),
|
|
5259
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-purple-400r", children: "AI Analysis" })
|
|
5260
5260
|
] }),
|
|
5261
5261
|
/* @__PURE__ */ jsxs(
|
|
5262
5262
|
"button",
|
|
5263
5263
|
{
|
|
5264
5264
|
onClick: analyzeWithAI,
|
|
5265
5265
|
disabled: isLoading,
|
|
5266
|
-
className: "flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-
|
|
5266
|
+
className: "flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium text-zinc-400 hover:text-white hover:bg-white/5 transition-all",
|
|
5267
5267
|
children: [
|
|
5268
|
-
isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "w-3 h-3 animate-spin" }) : /* @__PURE__ */ jsx(Sparkles, { className: "w-3 h-3" }),
|
|
5268
|
+
isLoading ? /* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-3 h-3 animate-spin" }) : /* @__PURE__ */ jsx(Sparkles, { strokeWidth: 1.5, className: "w-3 h-3" }),
|
|
5269
5269
|
isLoading ? "Analyzing..." : "Re-analyze"
|
|
5270
5270
|
]
|
|
5271
5271
|
}
|
|
@@ -5273,16 +5273,16 @@ function AIExplainTab({
|
|
|
5273
5273
|
] }),
|
|
5274
5274
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-auto p-4", children: [
|
|
5275
5275
|
error && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 p-3 rounded-lg bg-red-500/5 border border-red-500/10 text-red-400 text-xs mb-4", children: [
|
|
5276
|
-
/* @__PURE__ */ jsx(AlertTriangle, { className: "w-
|
|
5276
|
+
/* @__PURE__ */ jsx(AlertTriangle, { strokeWidth: 1.5, className: "w-3.5 h-3.5 shrink-0" }),
|
|
5277
5277
|
error
|
|
5278
5278
|
] }),
|
|
5279
5279
|
aiResponse && /* @__PURE__ */ jsx("div", { className: "space-y-0", children: renderMarkdown(aiResponse) }),
|
|
5280
|
-
isLoading && !aiResponse && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 text-zinc-500 text-
|
|
5281
|
-
/* @__PURE__ */ jsx(Loader2, { className: "w-
|
|
5280
|
+
isLoading && !aiResponse && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 text-zinc-500 text-xs", children: [
|
|
5281
|
+
/* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-3.5 h-3.5 animate-spin text-purple-400" }),
|
|
5282
5282
|
/* @__PURE__ */ jsx("span", { children: "Analyzing execution plan..." })
|
|
5283
5283
|
] }),
|
|
5284
5284
|
isLoading && aiResponse && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mt-2 text-zinc-600 text-xs", children: [
|
|
5285
|
-
/* @__PURE__ */ jsx(Loader2, { className: "w-3 h-3 animate-spin" }),
|
|
5285
|
+
/* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-3 h-3 animate-spin" }),
|
|
5286
5286
|
/* @__PURE__ */ jsx("span", { children: "Still generating..." })
|
|
5287
5287
|
] })
|
|
5288
5288
|
] })
|
|
@@ -5297,8 +5297,8 @@ function VisualExplain({ plan, query, schemaContext, databaseType, onLoadQuery }
|
|
|
5297
5297
|
}, [plan]);
|
|
5298
5298
|
if (!plan || !Array.isArray(plan) || plan.length === 0) {
|
|
5299
5299
|
return /* @__PURE__ */ jsxs("div", { className: "h-full flex flex-col items-center justify-center text-zinc-500 bg-[#080808] p-12 text-center", children: [
|
|
5300
|
-
/* @__PURE__ */ jsx("div", { className: "w-12 h-12 rounded-xl bg-white/5 flex items-center justify-center mb-4", children: /* @__PURE__ */ jsx(Activity, { className: "w-6 h-6 text-zinc-600" }) }),
|
|
5301
|
-
/* @__PURE__ */ jsx("h3", { className: "text-
|
|
5300
|
+
/* @__PURE__ */ jsx("div", { className: "w-12 h-12 rounded-xl bg-white/5 flex items-center justify-center mb-4", children: /* @__PURE__ */ jsx(Activity, { strokeWidth: 1.5, className: "w-6 h-6 text-zinc-600" }) }),
|
|
5301
|
+
/* @__PURE__ */ jsx("h3", { className: "text-xs font-medium text-zinc-300 mb-1", children: "No execution plan" }),
|
|
5302
5302
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-zinc-600 max-w-[240px]", children: "Run a SELECT query to see its execution plan and performance insights." })
|
|
5303
5303
|
] });
|
|
5304
5304
|
}
|
|
@@ -5307,18 +5307,18 @@ function VisualExplain({ plan, query, schemaContext, databaseType, onLoadQuery }
|
|
|
5307
5307
|
/* @__PURE__ */ jsx("div", { className: "px-4 py-3 border-b border-white/5 bg-[#0a0a0a]", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
5308
5308
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-6", children: [
|
|
5309
5309
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5310
|
-
/* @__PURE__ */ jsx(Clock, { className: "w-3
|
|
5311
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
5310
|
+
/* @__PURE__ */ jsx(Clock, { strokeWidth: 1.5, className: "w-3 h-3 text-blue-400" }),
|
|
5311
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-zinc-200", children: formatTime((analysis == null ? void 0 : analysis.executionTime) || 0) }),
|
|
5312
5312
|
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-600", children: "execution" })
|
|
5313
5313
|
] }),
|
|
5314
5314
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5315
|
-
/* @__PURE__ */ jsx(TrendingUp, { className: "w-3
|
|
5316
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
5315
|
+
/* @__PURE__ */ jsx(TrendingUp, { className: "w-3 h-3 text-zinc-500" }),
|
|
5316
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-zinc-400", children: formatNumber2((analysis == null ? void 0 : analysis.totalRows) || 0) }),
|
|
5317
5317
|
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-600", children: "rows" })
|
|
5318
5318
|
] }),
|
|
5319
5319
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5320
|
-
/* @__PURE__ */ jsx(HardDrive, { className: "w-3
|
|
5321
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
5320
|
+
/* @__PURE__ */ jsx(HardDrive, { strokeWidth: 1.5, className: "w-3 h-3 text-zinc-500" }),
|
|
5321
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-zinc-400", children: formatNumber2((analysis == null ? void 0 : analysis.totalCost) || 0) }),
|
|
5322
5322
|
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-600", children: "cost" })
|
|
5323
5323
|
] })
|
|
5324
5324
|
] }),
|
|
@@ -5327,14 +5327,14 @@ function VisualExplain({ plan, query, schemaContext, databaseType, onLoadQuery }
|
|
|
5327
5327
|
{
|
|
5328
5328
|
onClick: () => setActiveTab(tab),
|
|
5329
5329
|
className: cn(
|
|
5330
|
-
"px-3 py-1 text-xs font-medium rounded-md transition-all
|
|
5330
|
+
"px-3 py-1 text-xs font-medium rounded-md transition-all",
|
|
5331
5331
|
activeTab === tab ? tab === "ai" ? "bg-purple-500/20 text-purple-300" : "bg-white/10 text-zinc-200" : "text-zinc-500 hover:text-zinc-300"
|
|
5332
5332
|
),
|
|
5333
5333
|
children: [
|
|
5334
|
-
tab === "insights" && /* @__PURE__ */ jsx(Zap, { className: "w-3 h-3 inline mr-1" }),
|
|
5335
|
-
tab === "ai" && /* @__PURE__ */ jsx(Sparkles, { className: "w-3 h-3 inline mr-1" }),
|
|
5336
|
-
tab === "tree" && /* @__PURE__ */ jsx(Layers, { className: "w-3 h-3 inline mr-1" }),
|
|
5337
|
-
tab === "raw" && /* @__PURE__ */ jsx(FileJson, { className: "w-3 h-3 inline mr-1" }),
|
|
5334
|
+
tab === "insights" && /* @__PURE__ */ jsx(Zap, { strokeWidth: 1.5, className: "w-3 h-3 inline mr-1" }),
|
|
5335
|
+
tab === "ai" && /* @__PURE__ */ jsx(Sparkles, { strokeWidth: 1.5, className: "w-3 h-3 inline mr-1" }),
|
|
5336
|
+
tab === "tree" && /* @__PURE__ */ jsx(Layers, { strokeWidth: 1.5, className: "w-3 h-3 inline mr-1" }),
|
|
5337
|
+
tab === "raw" && /* @__PURE__ */ jsx(FileJson, { strokeWidth: 1.5, className: "w-3 h-3 inline mr-1" }),
|
|
5338
5338
|
tab === "ai" ? "AI Explain" : tab
|
|
5339
5339
|
]
|
|
5340
5340
|
},
|
|
@@ -5354,7 +5354,7 @@ function VisualExplain({ plan, query, schemaContext, databaseType, onLoadQuery }
|
|
|
5354
5354
|
),
|
|
5355
5355
|
activeTab === "insights" && /* @__PURE__ */ jsxs("div", { className: "p-4 space-y-4", children: [
|
|
5356
5356
|
analysis && analysis.warnings.length > 0 && /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
5357
|
-
/* @__PURE__ */ jsx("h3", { className: "text-xs font-
|
|
5357
|
+
/* @__PURE__ */ jsx("h3", { className: "text-xs font-medium text-zinc-500r mb-2", children: "Performance Issues" }),
|
|
5358
5358
|
analysis.warnings.map((warning, idx) => /* @__PURE__ */ jsxs(
|
|
5359
5359
|
"div",
|
|
5360
5360
|
{
|
|
@@ -5366,10 +5366,10 @@ function VisualExplain({ plan, query, schemaContext, databaseType, onLoadQuery }
|
|
|
5366
5366
|
/* @__PURE__ */ jsx("div", { className: cn(
|
|
5367
5367
|
"p-1 rounded",
|
|
5368
5368
|
warning.type === "critical" ? "bg-red-500/10" : warning.type === "warning" ? "bg-amber-500/10" : "bg-blue-500/10"
|
|
5369
|
-
), children: warning.type === "critical" ? /* @__PURE__ */ jsx(AlertTriangle, { className: "w-3
|
|
5369
|
+
), children: warning.type === "critical" ? /* @__PURE__ */ jsx(AlertTriangle, { strokeWidth: 1.5, className: "w-3 h-3 text-red-400" }) : warning.type === "warning" ? /* @__PURE__ */ jsx(AlertTriangle, { strokeWidth: 1.5, className: "w-3 h-3 text-amber-400" }) : /* @__PURE__ */ jsx(Info, { strokeWidth: 1.5, className: "w-3 h-3 text-blue-400" }) }),
|
|
5370
5370
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
5371
5371
|
/* @__PURE__ */ jsx("h4", { className: cn(
|
|
5372
|
-
"text-
|
|
5372
|
+
"text-xs font-medium",
|
|
5373
5373
|
warning.type === "critical" ? "text-red-300" : warning.type === "warning" ? "text-amber-300" : "text-blue-300"
|
|
5374
5374
|
), children: warning.title }),
|
|
5375
5375
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-zinc-500 mt-0.5 leading-relaxed", children: warning.description })
|
|
@@ -5380,21 +5380,21 @@ function VisualExplain({ plan, query, schemaContext, databaseType, onLoadQuery }
|
|
|
5380
5380
|
))
|
|
5381
5381
|
] }),
|
|
5382
5382
|
analysis && analysis.warnings.length === 0 && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 p-3 rounded-lg bg-emerald-500/5 border border-emerald-500/10", children: [
|
|
5383
|
-
/* @__PURE__ */ jsx("div", { className: "p-1 rounded bg-emerald-500/10", children: /* @__PURE__ */ jsx(CheckCircle2, { className: "w-3
|
|
5383
|
+
/* @__PURE__ */ jsx("div", { className: "p-1 rounded bg-emerald-500/10", children: /* @__PURE__ */ jsx(CheckCircle2, { strokeWidth: 1.5, className: "w-3 h-3 text-emerald-400" }) }),
|
|
5384
5384
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
5385
|
-
/* @__PURE__ */ jsx("h4", { className: "text-
|
|
5385
|
+
/* @__PURE__ */ jsx("h4", { className: "text-xs font-medium text-emerald-300", children: "Query looks good" }),
|
|
5386
5386
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-zinc-500", children: "No obvious performance issues detected." })
|
|
5387
5387
|
] })
|
|
5388
5388
|
] }),
|
|
5389
5389
|
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-3 gap-2", children: analysis == null ? void 0 : analysis.insights.map((insight, idx) => /* @__PURE__ */ jsxs("div", { className: "p-3 rounded-lg bg-white/[0.02] border border-white/5", children: [
|
|
5390
5390
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-1", children: [
|
|
5391
5391
|
/* @__PURE__ */ jsx(StatusBadge, { status: insight.status }),
|
|
5392
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
5392
|
+
/* @__PURE__ */ jsx("span", { className: "text-[0.625rem] text-zinc-500r font-medium", children: insight.label })
|
|
5393
5393
|
] }),
|
|
5394
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
5394
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-zinc-200", children: insight.value })
|
|
5395
5395
|
] }, idx)) }),
|
|
5396
5396
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
5397
|
-
/* @__PURE__ */ jsx("h3", { className: "text-xs font-
|
|
5397
|
+
/* @__PURE__ */ jsx("h3", { className: "text-xs font-medium text-zinc-500r mb-2", children: "Execution Plan" }),
|
|
5398
5398
|
/* @__PURE__ */ jsx("div", { className: "rounded-lg border border-white/5 bg-white/[0.01] p-2", children: rootPlan && analysis && /* @__PURE__ */ jsx(PlanNode, { node: rootPlan, maxTime: analysis.executionTime || 1 }) })
|
|
5399
5399
|
] })
|
|
5400
5400
|
] }),
|
|
@@ -5510,9 +5510,9 @@ Columns: ${cols}`;
|
|
|
5510
5510
|
return /* @__PURE__ */ jsxs("div", { className: "h-full flex flex-col bg-[#080808]", children: [
|
|
5511
5511
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-b border-white/5 bg-[#0a0a0a]", children: [
|
|
5512
5512
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5513
|
-
/* @__PURE__ */ jsx("div", { className: "p-1 rounded bg-violet-500/10", children: /* @__PURE__ */ jsx(MessageSquare, { className: "w-3
|
|
5514
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs font-
|
|
5515
|
-
messages.length > 0 && /* @__PURE__ */ jsxs("span", { className: "text-
|
|
5513
|
+
/* @__PURE__ */ jsx("div", { className: "p-1 rounded bg-violet-500/10", children: /* @__PURE__ */ jsx(MessageSquare, { strokeWidth: 1.5, className: "w-3 h-3 text-violet-400" }) }),
|
|
5514
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-violet-400", children: "Natural Language Query" }),
|
|
5515
|
+
messages.length > 0 && /* @__PURE__ */ jsxs("span", { className: "text-[0.625rem] text-zinc-500 font-mono", children: [
|
|
5516
5516
|
messages.filter((m) => m.role === "user").length,
|
|
5517
5517
|
" questions"
|
|
5518
5518
|
] })
|
|
@@ -5524,7 +5524,7 @@ Columns: ${cols}`;
|
|
|
5524
5524
|
onClick: clearConversation,
|
|
5525
5525
|
className: "p-1.5 rounded hover:bg-white/5 text-zinc-500 hover:text-zinc-300 transition-colors",
|
|
5526
5526
|
title: "Clear conversation",
|
|
5527
|
-
children: /* @__PURE__ */ jsx(Trash2, { className: "w-3
|
|
5527
|
+
children: /* @__PURE__ */ jsx(Trash2, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
5528
5528
|
}
|
|
5529
5529
|
),
|
|
5530
5530
|
/* @__PURE__ */ jsx(
|
|
@@ -5532,15 +5532,15 @@ Columns: ${cols}`;
|
|
|
5532
5532
|
{
|
|
5533
5533
|
onClick: onClose,
|
|
5534
5534
|
className: "p-1.5 rounded hover:bg-white/5 text-zinc-500 hover:text-zinc-300 transition-colors",
|
|
5535
|
-
children: /* @__PURE__ */ jsx(X, { className: "w-3
|
|
5535
|
+
children: /* @__PURE__ */ jsx(X, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
5536
5536
|
}
|
|
5537
5537
|
)
|
|
5538
5538
|
] })
|
|
5539
5539
|
] }),
|
|
5540
5540
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-auto p-4 space-y-3", children: [
|
|
5541
5541
|
messages.length === 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center h-full opacity-40", children: [
|
|
5542
|
-
/* @__PURE__ */ jsx(Sparkles, { className: "w-8 h-8 mb-3" }),
|
|
5543
|
-
/* @__PURE__ */ jsx("p", { className: "text-
|
|
5542
|
+
/* @__PURE__ */ jsx(Sparkles, { strokeWidth: 1.5, className: "w-8 h-8 mb-3" }),
|
|
5543
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-medium", children: "Ask a question in plain English" }),
|
|
5544
5544
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-zinc-500 mt-1", children: 'e.g. "Show me the top 10 employees by salary"' })
|
|
5545
5545
|
] }),
|
|
5546
5546
|
messages.map((msg, i) => /* @__PURE__ */ jsx("div", { className: cn("flex gap-2", msg.role === "user" ? "justify-end" : "justify-start"), children: /* @__PURE__ */ jsx("div", { className: cn(
|
|
@@ -5548,15 +5548,15 @@ Columns: ${cols}`;
|
|
|
5548
5548
|
msg.role === "user" ? "bg-violet-600/20 border border-violet-500/20 text-zinc-200" : "bg-[#111] border border-white/5 text-zinc-300"
|
|
5549
5549
|
), children: msg.role === "user" ? /* @__PURE__ */ jsx("p", { children: msg.content }) : /* @__PURE__ */ jsxs("div", { children: [
|
|
5550
5550
|
msg.query && /* @__PURE__ */ jsxs("div", { className: "mb-2", children: [
|
|
5551
|
-
/* @__PURE__ */ jsx("pre", { className: "bg-[#050505] rounded p-2 text-
|
|
5551
|
+
/* @__PURE__ */ jsx("pre", { className: "bg-[#050505] rounded p-2 text-xs font-mono text-blue-300 overflow-x-auto whitespace-pre-wrap border border-white/5", children: msg.query }),
|
|
5552
5552
|
/* @__PURE__ */ jsxs("div", { className: "flex gap-1.5 mt-1.5", children: [
|
|
5553
5553
|
/* @__PURE__ */ jsxs(
|
|
5554
5554
|
"button",
|
|
5555
5555
|
{
|
|
5556
5556
|
onClick: () => onExecuteQuery(msg.query),
|
|
5557
|
-
className: "flex items-center gap-1 px-2 py-1 rounded bg-blue-600/20 border border-blue-500/20 text-blue-400 text-xs font-
|
|
5557
|
+
className: "flex items-center gap-1 px-2 py-1 rounded bg-blue-600/20 border border-blue-500/20 text-blue-400 text-xs font-medium hover:bg-blue-600/30 transition-colors",
|
|
5558
5558
|
children: [
|
|
5559
|
-
/* @__PURE__ */ jsx(Play, { className: "w-3 h-3 fill-current" }),
|
|
5559
|
+
/* @__PURE__ */ jsx(Play, { strokeWidth: 1.5, className: "w-3 h-3 fill-current" }),
|
|
5560
5560
|
" Run"
|
|
5561
5561
|
]
|
|
5562
5562
|
}
|
|
@@ -5565,16 +5565,16 @@ Columns: ${cols}`;
|
|
|
5565
5565
|
"button",
|
|
5566
5566
|
{
|
|
5567
5567
|
onClick: () => onLoadQuery(msg.query),
|
|
5568
|
-
className: "flex items-center gap-1 px-2 py-1 rounded bg-white/5 border border-white/5 text-zinc-400 text-xs font-
|
|
5568
|
+
className: "flex items-center gap-1 px-2 py-1 rounded bg-white/5 border border-white/5 text-zinc-400 text-xs font-medium hover:bg-white/10 transition-colors",
|
|
5569
5569
|
children: "Load to Editor"
|
|
5570
5570
|
}
|
|
5571
5571
|
)
|
|
5572
5572
|
] })
|
|
5573
5573
|
] }),
|
|
5574
|
-
msg.content.replace(/```[\s\S]*?```/g, "").trim() && /* @__PURE__ */ jsx("p", { className: "text-zinc-400 text-
|
|
5574
|
+
msg.content.replace(/```[\s\S]*?```/g, "").trim() && /* @__PURE__ */ jsx("p", { className: "text-zinc-400 text-xs leading-relaxed whitespace-pre-wrap", children: msg.content.replace(/```[\s\S]*?```/g, "").trim() })
|
|
5575
5575
|
] }) }) }, i)),
|
|
5576
5576
|
isLoading && /* @__PURE__ */ jsx("div", { className: "flex gap-2 justify-start", children: /* @__PURE__ */ jsxs("div", { className: "bg-[#111] border border-white/5 rounded-lg px-3 py-2 flex items-center gap-2 text-zinc-500 text-xs", children: [
|
|
5577
|
-
/* @__PURE__ */ jsx(Loader2, { className: "w-3 h-3 animate-spin" }),
|
|
5577
|
+
/* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-3 h-3 animate-spin" }),
|
|
5578
5578
|
"Generating query..."
|
|
5579
5579
|
] }) }),
|
|
5580
5580
|
error && /* @__PURE__ */ jsx("div", { className: "bg-red-500/10 border border-red-500/20 rounded-lg px-3 py-2 text-xs text-red-400", children: error }),
|
|
@@ -5597,8 +5597,8 @@ Columns: ${cols}`;
|
|
|
5597
5597
|
{
|
|
5598
5598
|
type: "submit",
|
|
5599
5599
|
disabled: isLoading || !question.trim(),
|
|
5600
|
-
className: "bg-violet-600 hover:bg-violet-500 disabled:opacity-50 px-3 py-2 rounded-lg text-white text-xs font-
|
|
5601
|
-
children: isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "w-3 h-3 animate-spin" }) : /* @__PURE__ */ jsx(Send, { className: "w-3 h-3" })
|
|
5600
|
+
className: "bg-violet-600 hover:bg-violet-500 disabled:opacity-50 px-3 py-2 rounded-lg text-white text-xs font-medium transition-colors flex items-center gap-1.5",
|
|
5601
|
+
children: isLoading ? /* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-3 h-3 animate-spin" }) : /* @__PURE__ */ jsx(Send, { strokeWidth: 1.5, className: "w-3 h-3" })
|
|
5602
5602
|
}
|
|
5603
5603
|
)
|
|
5604
5604
|
] }) })
|
|
@@ -5711,52 +5711,52 @@ ${schemaContext || ""}`;
|
|
|
5711
5711
|
return /* @__PURE__ */ jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm", children: /* @__PURE__ */ jsxs("div", { className: "bg-[#111] border border-white/10 rounded-xl shadow-2xl w-full max-w-2xl mx-4 max-h-[85vh] flex flex-col overflow-hidden", children: [
|
|
5712
5712
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-5 py-3 border-b border-white/5", children: [
|
|
5713
5713
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5714
|
-
/* @__PURE__ */ jsx(BarChart3, { className: "w-
|
|
5715
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
5714
|
+
/* @__PURE__ */ jsx(BarChart3, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-cyan-400" }),
|
|
5715
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-zinc-200", children: "Data Profiler" }),
|
|
5716
5716
|
/* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-500 font-mono", children: tableName })
|
|
5717
5717
|
] }),
|
|
5718
|
-
/* @__PURE__ */ jsx("button", { onClick: onClose, className: "p-1 rounded hover:bg-white/5 text-zinc-500", children: /* @__PURE__ */ jsx(X, { className: "w-
|
|
5718
|
+
/* @__PURE__ */ jsx("button", { onClick: onClose, className: "p-1 rounded hover:bg-white/5 text-zinc-500", children: /* @__PURE__ */ jsx(X, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }) })
|
|
5719
5719
|
] }),
|
|
5720
5720
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-auto p-5 space-y-4", children: [
|
|
5721
5721
|
isLoading && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-2 py-12 text-zinc-500", children: [
|
|
5722
|
-
/* @__PURE__ */ jsx(Loader2, { className: "w-5 h-5 animate-spin" }),
|
|
5723
|
-
/* @__PURE__ */ jsxs("span", { className: "text-
|
|
5722
|
+
/* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-5 h-5 animate-spin" }),
|
|
5723
|
+
/* @__PURE__ */ jsxs("span", { className: "text-xs", children: [
|
|
5724
5724
|
"Profiling ",
|
|
5725
5725
|
tableName,
|
|
5726
5726
|
"..."
|
|
5727
5727
|
] })
|
|
5728
5728
|
] }),
|
|
5729
5729
|
error && /* @__PURE__ */ jsxs("div", { className: "bg-red-500/10 border border-red-500/20 rounded-lg p-3 text-xs text-red-400 flex items-center gap-2", children: [
|
|
5730
|
-
/* @__PURE__ */ jsx(AlertCircle, { className: "w-
|
|
5730
|
+
/* @__PURE__ */ jsx(AlertCircle, { strokeWidth: 1.5, className: "w-3.5 h-3.5 shrink-0" }),
|
|
5731
5731
|
error
|
|
5732
5732
|
] }),
|
|
5733
5733
|
profile && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5734
5734
|
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-3 gap-3", children: [
|
|
5735
5735
|
/* @__PURE__ */ jsxs("div", { className: "bg-[#0a0a0a] rounded-lg p-3 border border-white/5", children: [
|
|
5736
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs font-
|
|
5737
|
-
/* @__PURE__ */ jsx("p", { className: "text-
|
|
5736
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-zinc-500r", children: "Total Rows" }),
|
|
5737
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-zinc-200 mt-1", children: profile.totalRows.toLocaleString() })
|
|
5738
5738
|
] }),
|
|
5739
5739
|
/* @__PURE__ */ jsxs("div", { className: "bg-[#0a0a0a] rounded-lg p-3 border border-white/5", children: [
|
|
5740
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs font-
|
|
5741
|
-
/* @__PURE__ */ jsx("p", { className: "text-
|
|
5740
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-zinc-500r", children: "Columns" }),
|
|
5741
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-zinc-200 mt-1", children: profile.columns.length })
|
|
5742
5742
|
] }),
|
|
5743
5743
|
/* @__PURE__ */ jsxs("div", { className: "bg-[#0a0a0a] rounded-lg p-3 border border-white/5", children: [
|
|
5744
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs font-
|
|
5745
|
-
/* @__PURE__ */ jsxs("p", { className: "text-
|
|
5744
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-zinc-500r", children: "Avg Null %" }),
|
|
5745
|
+
/* @__PURE__ */ jsxs("p", { className: "text-xs font-medium text-zinc-200 mt-1", children: [
|
|
5746
5746
|
profile.columns.length > 0 ? Math.round(profile.columns.reduce((sum, c) => sum + c.nullPercent, 0) / profile.columns.length) : 0,
|
|
5747
5747
|
"%"
|
|
5748
5748
|
] })
|
|
5749
5749
|
] })
|
|
5750
5750
|
] }),
|
|
5751
5751
|
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
5752
|
-
/* @__PURE__ */ jsx("h3", { className: "text-xs font-
|
|
5752
|
+
/* @__PURE__ */ jsx("h3", { className: "text-xs font-medium text-zinc-400r", children: "Column Profiles" }),
|
|
5753
5753
|
profile.columns.map((col) => /* @__PURE__ */ jsxs("div", { className: "bg-[#0a0a0a] rounded-lg p-3 border border-white/5", children: [
|
|
5754
5754
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-2", children: [
|
|
5755
5755
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5756
|
-
/* @__PURE__ */ jsx(Hash, { className: "w-3 h-3 text-blue-400" }),
|
|
5757
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs font-
|
|
5756
|
+
/* @__PURE__ */ jsx(Hash, { strokeWidth: 1.5, className: "w-3 h-3 text-blue-400" }),
|
|
5757
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-zinc-200", children: col.name }),
|
|
5758
5758
|
col.type && /* @__PURE__ */ jsx("span", { className: "text-xs text-zinc-500 font-mono", children: col.type }),
|
|
5759
|
-
sensitiveColumnNames.has(col.name) && /* @__PURE__ */ jsx("span", { title: "Sensitive column - values masked", children: /* @__PURE__ */ jsx(Lock, { className: "w-3 h-3 text-purple-400" }) })
|
|
5759
|
+
sensitiveColumnNames.has(col.name) && /* @__PURE__ */ jsx("span", { title: "Sensitive column - values masked", children: /* @__PURE__ */ jsx(Lock, { strokeWidth: 1.5, className: "w-3 h-3 text-purple-400" }) })
|
|
5760
5760
|
] }),
|
|
5761
5761
|
/* @__PURE__ */ jsxs("span", { className: "text-xs text-zinc-500", children: [
|
|
5762
5762
|
col.distinctCount.toLocaleString(),
|
|
@@ -5811,9 +5811,9 @@ ${schemaContext || ""}`;
|
|
|
5811
5811
|
] }),
|
|
5812
5812
|
(aiSummary || isAiLoading) && /* @__PURE__ */ jsxs("div", { className: "bg-cyan-500/5 border border-cyan-500/10 rounded-lg p-4", children: [
|
|
5813
5813
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
5814
|
-
/* @__PURE__ */ jsx(Sparkles, { className: "w-3.5 h-3.5 text-cyan-400" }),
|
|
5815
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs font-
|
|
5816
|
-
isAiLoading && /* @__PURE__ */ jsx(Loader2, { className: "w-3 h-3 animate-spin text-cyan-400" })
|
|
5814
|
+
/* @__PURE__ */ jsx(Sparkles, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-cyan-400" }),
|
|
5815
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-cyan-400r", children: "AI Analysis" }),
|
|
5816
|
+
isAiLoading && /* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-3 h-3 animate-spin text-cyan-400" })
|
|
5817
5817
|
] }),
|
|
5818
5818
|
aiSummary && /* @__PURE__ */ jsx("div", { className: "text-xs text-zinc-400 leading-relaxed whitespace-pre-wrap", children: aiSummary })
|
|
5819
5819
|
] })
|
|
@@ -5920,23 +5920,23 @@ function QuerySafetyDialog({
|
|
|
5920
5920
|
return /* @__PURE__ */ jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm", children: /* @__PURE__ */ jsxs("div", { className: "bg-[#111] border border-white/10 rounded-xl shadow-2xl w-full max-w-lg mx-4 overflow-hidden", children: [
|
|
5921
5921
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-5 py-3 border-b border-white/5", children: [
|
|
5922
5922
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5923
|
-
/* @__PURE__ */ jsx(ShieldAlert, { className: "w-
|
|
5924
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
5923
|
+
/* @__PURE__ */ jsx(ShieldAlert, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-amber-400" }),
|
|
5924
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-zinc-200", children: "Query Safety Check" })
|
|
5925
5925
|
] }),
|
|
5926
|
-
/* @__PURE__ */ jsx("button", { onClick: onClose, className: "p-1 rounded hover:bg-white/5 text-zinc-500", children: /* @__PURE__ */ jsx(X, { className: "w-
|
|
5926
|
+
/* @__PURE__ */ jsx("button", { onClick: onClose, className: "p-1 rounded hover:bg-white/5 text-zinc-500", children: /* @__PURE__ */ jsx(X, { strokeWidth: 1.5, className: "w-3.5 h-3.5" }) })
|
|
5927
5927
|
] }),
|
|
5928
|
-
/* @__PURE__ */ jsx("div", { className: "px-5 py-3 bg-[#0a0a0a] border-b border-white/5", children: /* @__PURE__ */ jsx("pre", { className: "text-
|
|
5928
|
+
/* @__PURE__ */ jsx("div", { className: "px-5 py-3 bg-[#0a0a0a] border-b border-white/5", children: /* @__PURE__ */ jsx("pre", { className: "text-xs font-mono text-zinc-400 whitespace-pre-wrap max-h-24 overflow-auto", children: query.length > 300 ? query.substring(0, 300) + "..." : query }) }),
|
|
5929
5929
|
/* @__PURE__ */ jsxs("div", { className: "px-5 py-4 max-h-80 overflow-auto", children: [
|
|
5930
5930
|
isAnalyzing && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-2 py-8 text-zinc-500", children: [
|
|
5931
|
-
/* @__PURE__ */ jsx(Loader2, { className: "w-5 h-5 animate-spin" }),
|
|
5932
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
5931
|
+
/* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-5 h-5 animate-spin" }),
|
|
5932
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs", children: "Analyzing query safety..." })
|
|
5933
5933
|
] }),
|
|
5934
5934
|
error && /* @__PURE__ */ jsx("div", { className: "bg-red-500/10 border border-red-500/20 rounded-lg p-3 text-xs text-red-400", children: error }),
|
|
5935
5935
|
analysis && risk && /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
5936
5936
|
/* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2 px-3 py-2 rounded-lg", risk.bg, "border", risk.border), children: [
|
|
5937
5937
|
/* @__PURE__ */ jsx(RiskIcon, { className: cn("w-5 h-5", risk.color) }),
|
|
5938
5938
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
5939
|
-
/* @__PURE__ */ jsx("span", { className: cn("text-
|
|
5939
|
+
/* @__PURE__ */ jsx("span", { className: cn("text-xs font-medium", risk.color), children: risk.label }),
|
|
5940
5940
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-zinc-400 mt-0.5", children: analysis.summary })
|
|
5941
5941
|
] })
|
|
5942
5942
|
] }),
|
|
@@ -5944,7 +5944,7 @@ function QuerySafetyDialog({
|
|
|
5944
5944
|
"px-3 py-2 rounded-lg border text-xs",
|
|
5945
5945
|
w.severity === "critical" ? "bg-red-500/5 border-red-500/20" : w.severity === "warning" ? "bg-amber-500/5 border-amber-500/20" : "bg-blue-500/5 border-blue-500/20"
|
|
5946
5946
|
), children: [
|
|
5947
|
-
/* @__PURE__ */ jsx("p", { className: "font-
|
|
5947
|
+
/* @__PURE__ */ jsx("p", { className: "font-medium text-zinc-300", children: w.message }),
|
|
5948
5948
|
/* @__PURE__ */ jsx("p", { className: "text-zinc-500 mt-0.5", children: w.detail })
|
|
5949
5949
|
] }, i)) }),
|
|
5950
5950
|
analysis.affectedRows && analysis.affectedRows !== "none" && /* @__PURE__ */ jsxs("div", { className: "text-xs", children: [
|
|
@@ -5956,7 +5956,7 @@ function QuerySafetyDialog({
|
|
|
5956
5956
|
/* @__PURE__ */ jsx("span", { className: "text-zinc-300", children: analysis.cascadeEffects })
|
|
5957
5957
|
] }),
|
|
5958
5958
|
analysis.recommendation && /* @__PURE__ */ jsxs("div", { className: "bg-[#0a0a0a] rounded-lg p-3 border border-white/5", children: [
|
|
5959
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs font-
|
|
5959
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-zinc-500r mb-1", children: "Recommendation" }),
|
|
5960
5960
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-zinc-300", children: analysis.recommendation })
|
|
5961
5961
|
] })
|
|
5962
5962
|
] }),
|
|
@@ -5967,7 +5967,7 @@ function QuerySafetyDialog({
|
|
|
5967
5967
|
"button",
|
|
5968
5968
|
{
|
|
5969
5969
|
onClick: onClose,
|
|
5970
|
-
className: "px-4 py-2 rounded-lg bg-white/5 text-zinc-400 text-xs font-
|
|
5970
|
+
className: "px-4 py-2 rounded-lg bg-white/5 text-zinc-400 text-xs font-medium hover:bg-white/10 transition-colors",
|
|
5971
5971
|
children: "Cancel"
|
|
5972
5972
|
}
|
|
5973
5973
|
),
|
|
@@ -5977,12 +5977,12 @@ function QuerySafetyDialog({
|
|
|
5977
5977
|
onClick: onProceed,
|
|
5978
5978
|
disabled: isAnalyzing,
|
|
5979
5979
|
className: cn(
|
|
5980
|
-
"px-4 py-2 rounded-lg text-white text-xs font-
|
|
5980
|
+
"px-4 py-2 rounded-lg text-white text-xs font-medium transition-colors flex items-center gap-1.5",
|
|
5981
5981
|
(analysis == null ? void 0 : analysis.riskLevel) === "critical" || (analysis == null ? void 0 : analysis.riskLevel) === "high" ? "bg-red-600 hover:bg-red-500" : "bg-blue-600 hover:bg-blue-500",
|
|
5982
5982
|
isAnalyzing && "opacity-50 cursor-not-allowed"
|
|
5983
5983
|
),
|
|
5984
5984
|
children: [
|
|
5985
|
-
/* @__PURE__ */ jsx(Play, { className: "w-3 h-3 fill-current" }),
|
|
5985
|
+
/* @__PURE__ */ jsx(Play, { strokeWidth: 1.5, className: "w-3 h-3 fill-current" }),
|
|
5986
5986
|
(analysis == null ? void 0 : analysis.riskLevel) === "critical" ? "Execute Anyway" : (analysis == null ? void 0 : analysis.riskLevel) === "high" ? "Proceed with Caution" : "Execute Query"
|
|
5987
5987
|
]
|
|
5988
5988
|
}
|
|
@@ -6090,8 +6090,8 @@ var ColumnList = React6.memo(function ColumnList2({ columns, indexes }) {
|
|
|
6090
6090
|
{
|
|
6091
6091
|
className: "flex items-center gap-2 py-1 px-2 rounded-sm group/col hover:bg-accent/20 cursor-default",
|
|
6092
6092
|
children: [
|
|
6093
|
-
column.isPrimary ? /* @__PURE__ */ jsx(Key, { className: "w-2.5 h-2.5 text-yellow-500/70" }) : /* @__PURE__ */ jsx("div", { className: "w-2.5 h-2.5 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "w-1 h-1 rounded-full bg-muted-foreground/50" }) }),
|
|
6094
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
6093
|
+
column.isPrimary ? /* @__PURE__ */ jsx(Key, { strokeWidth: 1.5, className: "w-2.5 h-2.5 text-yellow-500/70" }) : /* @__PURE__ */ jsx("div", { className: "w-2.5 h-2.5 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "w-1 h-1 rounded-full bg-muted-foreground/50" }) }),
|
|
6094
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground flex-1 truncate group-hover/col:text-foreground", children: column.name }),
|
|
6095
6095
|
/* @__PURE__ */ jsx("span", { className: "text-xs font-mono text-muted-foreground/60 uppercase group-hover/col:text-muted-foreground", children: column.type.split("(")[0] })
|
|
6096
6096
|
]
|
|
6097
6097
|
},
|
|
@@ -6099,8 +6099,8 @@ var ColumnList = React6.memo(function ColumnList2({ columns, indexes }) {
|
|
|
6099
6099
|
)),
|
|
6100
6100
|
indexes.length > 0 && /* @__PURE__ */ jsxs("div", { className: "pt-2 pb-1", children: [
|
|
6101
6101
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 px-2 mb-1", children: [
|
|
6102
|
-
/* @__PURE__ */ jsx(Hash, { className: "w-2.5 h-2.5 text-purple-500/40" }),
|
|
6103
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
6102
|
+
/* @__PURE__ */ jsx(Hash, { strokeWidth: 1.5, className: "w-2.5 h-2.5 text-purple-500/40" }),
|
|
6103
|
+
/* @__PURE__ */ jsx("span", { className: "text-[0.625rem] font-medium text-muted-foreground", children: "Indexes" })
|
|
6104
6104
|
] }),
|
|
6105
6105
|
indexes.map((idx) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 py-0.5 px-2", children: [
|
|
6106
6106
|
/* @__PURE__ */ jsx("div", { className: "w-2.5 h-2.5" }),
|
|
@@ -6115,18 +6115,18 @@ function renderMenuItems(table, labels, isAdmin, callbacks, copyToClipboard, Ite
|
|
|
6115
6115
|
var _a;
|
|
6116
6116
|
return (_a = callbacks.onTableClick) == null ? void 0 : _a.call(callbacks, table.name);
|
|
6117
6117
|
}, children: [
|
|
6118
|
-
/* @__PURE__ */ jsx(Play, { className: "w-3.5 h-3.5 mr-2 text-green-500" }),
|
|
6118
|
+
/* @__PURE__ */ jsx(Play, { strokeWidth: 1.5, className: "w-3.5 h-3.5 mr-2 text-green-500" }),
|
|
6119
6119
|
(labels == null ? void 0 : labels.selectAction) || "Select Top 100"
|
|
6120
6120
|
] }),
|
|
6121
6121
|
/* @__PURE__ */ jsxs(Item4, { onClick: () => {
|
|
6122
6122
|
var _a;
|
|
6123
6123
|
return (_a = callbacks.onGenerateSelect) == null ? void 0 : _a.call(callbacks, table.name);
|
|
6124
6124
|
}, children: [
|
|
6125
|
-
/* @__PURE__ */ jsx(Filter, { className: "w-3.5 h-3.5 mr-2 text-blue-500" }),
|
|
6125
|
+
/* @__PURE__ */ jsx(Filter, { strokeWidth: 1.5, className: "w-3.5 h-3.5 mr-2 text-blue-500" }),
|
|
6126
6126
|
(labels == null ? void 0 : labels.generateAction) || "Generate Query"
|
|
6127
6127
|
] }),
|
|
6128
6128
|
/* @__PURE__ */ jsxs(Item4, { onClick: () => copyToClipboard(table.name, `${(labels == null ? void 0 : labels.entityName) || "Table"} name`), children: [
|
|
6129
|
-
/* @__PURE__ */ jsx(Copy, { className: "w-3.5 h-3.5 mr-2 text-muted-foreground" }),
|
|
6129
|
+
/* @__PURE__ */ jsx(Copy, { strokeWidth: 1.5, className: "w-3.5 h-3.5 mr-2 text-muted-foreground" }),
|
|
6130
6130
|
"Copy Name"
|
|
6131
6131
|
] }),
|
|
6132
6132
|
/* @__PURE__ */ jsx(Separator4, {}),
|
|
@@ -6134,21 +6134,21 @@ function renderMenuItems(table, labels, isAdmin, callbacks, copyToClipboard, Ite
|
|
|
6134
6134
|
var _a;
|
|
6135
6135
|
return (_a = callbacks.onProfileTable) == null ? void 0 : _a.call(callbacks, table.name);
|
|
6136
6136
|
}, children: [
|
|
6137
|
-
/* @__PURE__ */ jsx(BarChart3, { className: "w-3.5 h-3.5 mr-2 text-cyan-500" }),
|
|
6137
|
+
/* @__PURE__ */ jsx(BarChart3, { strokeWidth: 1.5, className: "w-3.5 h-3.5 mr-2 text-cyan-500" }),
|
|
6138
6138
|
"Profile Table"
|
|
6139
6139
|
] }),
|
|
6140
6140
|
/* @__PURE__ */ jsxs(Item4, { onClick: () => {
|
|
6141
6141
|
var _a;
|
|
6142
6142
|
return (_a = callbacks.onGenerateCode) == null ? void 0 : _a.call(callbacks, table.name);
|
|
6143
6143
|
}, children: [
|
|
6144
|
-
/* @__PURE__ */ jsx(Code, { className: "w-3.5 h-3.5 mr-2 text-purple-500" }),
|
|
6144
|
+
/* @__PURE__ */ jsx(Code, { strokeWidth: 1.5, className: "w-3.5 h-3.5 mr-2 text-purple-500" }),
|
|
6145
6145
|
"Generate Code"
|
|
6146
6146
|
] }),
|
|
6147
6147
|
/* @__PURE__ */ jsxs(Item4, { onClick: () => {
|
|
6148
6148
|
var _a;
|
|
6149
6149
|
return (_a = callbacks.onGenerateTestData) == null ? void 0 : _a.call(callbacks, table.name);
|
|
6150
6150
|
}, children: [
|
|
6151
|
-
/* @__PURE__ */ jsx(Wand2, { className: "w-3.5 h-3.5 mr-2 text-amber-500" }),
|
|
6151
|
+
/* @__PURE__ */ jsx(Wand2, { strokeWidth: 1.5, className: "w-3.5 h-3.5 mr-2 text-amber-500" }),
|
|
6152
6152
|
"Generate Test Data"
|
|
6153
6153
|
] }),
|
|
6154
6154
|
isAdmin && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -6157,14 +6157,14 @@ function renderMenuItems(table, labels, isAdmin, callbacks, copyToClipboard, Ite
|
|
|
6157
6157
|
var _a;
|
|
6158
6158
|
return (_a = callbacks.onOpenMaintenance) == null ? void 0 : _a.call(callbacks, "tables", table.name);
|
|
6159
6159
|
}, children: [
|
|
6160
|
-
/* @__PURE__ */ jsx(Search, { className: "w-3.5 h-3.5 mr-2 text-amber-500" }),
|
|
6160
|
+
/* @__PURE__ */ jsx(Search, { strokeWidth: 1.5, className: "w-3.5 h-3.5 mr-2 text-amber-500" }),
|
|
6161
6161
|
(labels == null ? void 0 : labels.analyzeAction) || "Analyze Table"
|
|
6162
6162
|
] }),
|
|
6163
6163
|
/* @__PURE__ */ jsxs(Item4, { onClick: () => {
|
|
6164
6164
|
var _a;
|
|
6165
6165
|
return (_a = callbacks.onOpenMaintenance) == null ? void 0 : _a.call(callbacks, "tables", table.name);
|
|
6166
6166
|
}, children: [
|
|
6167
|
-
/* @__PURE__ */ jsx(Trash2, { className: "w-3.5 h-3.5 mr-2 text-blue-400" }),
|
|
6167
|
+
/* @__PURE__ */ jsx(Trash2, { strokeWidth: 1.5, className: "w-3.5 h-3.5 mr-2 text-blue-400" }),
|
|
6168
6168
|
(labels == null ? void 0 : labels.vacuumAction) || "Vacuum Table"
|
|
6169
6169
|
] })
|
|
6170
6170
|
] })
|
|
@@ -6205,7 +6205,7 @@ var TableItem = React6.memo(function TableItem2({
|
|
|
6205
6205
|
animate: { rotate: isExpanded ? 90 : 0 },
|
|
6206
6206
|
transition: { duration: 0.2 },
|
|
6207
6207
|
className: "shrink-0",
|
|
6208
|
-
children: /* @__PURE__ */ jsx(ChevronRight, { className: "w-3 h-3 text-muted-foreground" })
|
|
6208
|
+
children: /* @__PURE__ */ jsx(ChevronRight, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-muted-foreground" })
|
|
6209
6209
|
}
|
|
6210
6210
|
),
|
|
6211
6211
|
/* @__PURE__ */ jsx(
|
|
@@ -6221,23 +6221,21 @@ var TableItem = React6.memo(function TableItem2({
|
|
|
6221
6221
|
"span",
|
|
6222
6222
|
{
|
|
6223
6223
|
className: cn(
|
|
6224
|
-
"truncate min-w-0 flex-1 text-
|
|
6224
|
+
"truncate min-w-0 flex-1 text-xs font-medium transition-colors",
|
|
6225
6225
|
isExpanded ? "text-foreground" : "text-muted-foreground group-hover:text-foreground"
|
|
6226
6226
|
),
|
|
6227
6227
|
children: table.name
|
|
6228
6228
|
}
|
|
6229
6229
|
),
|
|
6230
6230
|
/* @__PURE__ */ jsxs("div", { className: "shrink-0 relative w-8 h-6 flex items-center justify-center", children: [
|
|
6231
|
-
table.rowCount !== void 0 && /* @__PURE__ */ jsx("span", { className: "absolute inset-0 flex items-center justify-center text-
|
|
6231
|
+
table.rowCount !== void 0 && /* @__PURE__ */ jsx("span", { className: "absolute inset-0 flex items-center justify-center text-[0.625rem] font-mono text-muted-foreground/70 whitespace-nowrap opacity-100 group-hover:opacity-0 transition-opacity pointer-events-none", children: table.rowCount >= 1e3 ? `${(table.rowCount / 1e3).toFixed(1)}k` : table.rowCount }),
|
|
6232
6232
|
/* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
6233
6233
|
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
6234
|
-
|
|
6234
|
+
"button",
|
|
6235
6235
|
{
|
|
6236
|
-
|
|
6237
|
-
size: "icon",
|
|
6238
|
-
className: "absolute inset-0 w-full h-full opacity-0 group-hover:opacity-100 [@media(hover:none)]:opacity-100 focus-within:opacity-100 transition-opacity hover:bg-accent",
|
|
6236
|
+
className: "absolute inset-0 w-full h-full opacity-0 group-hover:opacity-100 [@media(hover:none)]:opacity-100 focus-within:opacity-100 transition-opacity hover:bg-accent flex items-center justify-center",
|
|
6239
6237
|
onClick: (e) => e.stopPropagation(),
|
|
6240
|
-
children: /* @__PURE__ */ jsx(MoreVertical, { className: "w-
|
|
6238
|
+
children: /* @__PURE__ */ jsx(MoreVertical, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-muted-foreground group-hover:text-foreground" })
|
|
6241
6239
|
}
|
|
6242
6240
|
) }),
|
|
6243
6241
|
/* @__PURE__ */ jsx(DropdownMenuContent, { align: "end", className: "w-48", children: renderMenuItems(table, labels, isAdmin, callbacks, copyToClipboard, DropdownMenuItem, DropdownMenuSeparator) })
|
|
@@ -6301,61 +6299,57 @@ function SchemaExplorer({
|
|
|
6301
6299
|
if (isLoadingSchema) {
|
|
6302
6300
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center py-12 text-muted-foreground", children: [
|
|
6303
6301
|
/* @__PURE__ */ jsxs("div", { className: "relative mb-4", children: [
|
|
6304
|
-
/* @__PURE__ */ jsx(Loader2, { className: "w-8 h-8 animate-spin text-blue-500/20" }),
|
|
6305
|
-
/* @__PURE__ */ jsx(Database, { className: "w-
|
|
6302
|
+
/* @__PURE__ */ jsx(Loader2, { strokeWidth: 1.5, className: "w-8 h-8 animate-spin text-blue-500/20" }),
|
|
6303
|
+
/* @__PURE__ */ jsx(Database, { strokeWidth: 1.5, className: "w-3.5 h-3.5 absolute inset-0 m-auto text-blue-500 animate-pulse" })
|
|
6306
6304
|
] }),
|
|
6307
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs
|
|
6305
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium animate-pulse", children: "Scanning Schema..." })
|
|
6308
6306
|
] });
|
|
6309
6307
|
}
|
|
6310
6308
|
if (schema.length === 0) {
|
|
6311
6309
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center py-12 px-6 text-center", children: [
|
|
6312
|
-
/* @__PURE__ */ jsx("div", { className: "w-12 h-12 rounded-full bg-muted flex items-center justify-center mb-4 border border-border", children: /* @__PURE__ */ jsx(AlertCircle, { className: "w-6 h-6 text-muted-foreground" }) }),
|
|
6313
|
-
/* @__PURE__ */ jsx("h3", { className: "text-foreground text-
|
|
6314
|
-
/* @__PURE__ */ jsx("p", { className: "text-
|
|
6310
|
+
/* @__PURE__ */ jsx("div", { className: "w-12 h-12 rounded-full bg-muted flex items-center justify-center mb-4 border border-border", children: /* @__PURE__ */ jsx(AlertCircle, { strokeWidth: 1.5, className: "w-6 h-6 text-muted-foreground" }) }),
|
|
6311
|
+
/* @__PURE__ */ jsx("h3", { className: "text-foreground text-xs font-medium mb-1", children: "No structures found" }),
|
|
6312
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground leading-relaxed", children: "We couldn't find any tables or views in this connection." })
|
|
6315
6313
|
] });
|
|
6316
6314
|
}
|
|
6317
6315
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
6318
6316
|
/* @__PURE__ */ jsxs("div", { className: "sticky top-0 z-10 px-3 pb-3 pt-1 space-y-3 bg-background", children: [
|
|
6319
6317
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
6320
6318
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
6321
|
-
/* @__PURE__ */ jsx(Database, { className: "w-3.5 h-3.5 text-blue-500/50" }),
|
|
6322
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs font-
|
|
6319
|
+
/* @__PURE__ */ jsx(Database, { strokeWidth: 1.5, className: "w-3.5 h-3.5 text-blue-500/50" }),
|
|
6320
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-muted-foreground", children: "Explorer" })
|
|
6323
6321
|
] }),
|
|
6324
6322
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
6325
6323
|
isAdmin && /* @__PURE__ */ jsx(
|
|
6326
|
-
|
|
6324
|
+
"button",
|
|
6327
6325
|
{
|
|
6328
|
-
|
|
6329
|
-
size: "icon",
|
|
6330
|
-
className: "w-6 h-6 hover:bg-accent text-muted-foreground hover:text-amber-400 transition-colors",
|
|
6326
|
+
className: "p-1 rounded hover:bg-accent text-muted-foreground hover:text-amber-400 transition-colors",
|
|
6331
6327
|
onClick: () => onOpenMaintenance == null ? void 0 : onOpenMaintenance("global"),
|
|
6332
6328
|
title: "Database Maintenance",
|
|
6333
|
-
children: /* @__PURE__ */ jsx(Settings, { className: "w-3.5 h-3.5" })
|
|
6329
|
+
children: /* @__PURE__ */ jsx(Settings, { strokeWidth: 1.5, className: "w-3.5 h-3.5" })
|
|
6334
6330
|
}
|
|
6335
6331
|
),
|
|
6336
6332
|
(capabilities == null ? void 0 : capabilities.supportsCreateTable) !== false && /* @__PURE__ */ jsx(
|
|
6337
|
-
|
|
6333
|
+
"button",
|
|
6338
6334
|
{
|
|
6339
|
-
|
|
6340
|
-
size: "icon",
|
|
6341
|
-
className: "w-6 h-6 hover:bg-accent text-muted-foreground hover:text-blue-400 transition-colors",
|
|
6335
|
+
className: "p-1 rounded hover:bg-accent text-muted-foreground hover:text-blue-400 transition-colors",
|
|
6342
6336
|
onClick: onCreateTableClick,
|
|
6343
6337
|
title: `Create ${(labels == null ? void 0 : labels.entityName) || "Table"}`,
|
|
6344
|
-
children: /* @__PURE__ */ jsx(Plus, { className: "w-3.5 h-3.5" })
|
|
6338
|
+
children: /* @__PURE__ */ jsx(Plus, { strokeWidth: 1.5, className: "w-3.5 h-3.5" })
|
|
6345
6339
|
}
|
|
6346
6340
|
),
|
|
6347
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
6341
|
+
/* @__PURE__ */ jsx("span", { className: "text-[0.625rem] bg-blue-500/10 text-blue-400 px-1.5 py-0.5 rounded-full font-mono border border-blue-500/10", children: schema.length })
|
|
6348
6342
|
] })
|
|
6349
6343
|
] }),
|
|
6350
6344
|
/* @__PURE__ */ jsxs("div", { className: "relative group", children: [
|
|
6351
|
-
/* @__PURE__ */ jsx(Search, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground group-focus-within:text-blue-500 transition-colors" }),
|
|
6345
|
+
/* @__PURE__ */ jsx(Search, { strokeWidth: 1.5, className: "absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground group-focus-within:text-blue-500 transition-colors" }),
|
|
6352
6346
|
/* @__PURE__ */ jsx(
|
|
6353
6347
|
Input,
|
|
6354
6348
|
{
|
|
6355
6349
|
placeholder: (labels == null ? void 0 : labels.searchPlaceholder) || "Search tables or columns...",
|
|
6356
6350
|
value: searchQuery,
|
|
6357
6351
|
onChange: (e) => setSearchQuery(e.target.value),
|
|
6358
|
-
className: "h-8 pl-8 pr-8 text-
|
|
6352
|
+
className: "h-8 pl-8 pr-8 text-xs bg-muted/50 border-border focus-visible:ring-1 focus-visible:ring-blue-500/50 placeholder:text-muted-foreground/50"
|
|
6359
6353
|
}
|
|
6360
6354
|
),
|
|
6361
6355
|
searchQuery && /* @__PURE__ */ jsx(
|
|
@@ -6363,7 +6357,7 @@ function SchemaExplorer({
|
|
|
6363
6357
|
{
|
|
6364
6358
|
onClick: () => setSearchQuery(""),
|
|
6365
6359
|
className: "absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground",
|
|
6366
|
-
children: /* @__PURE__ */ jsx(Hash, { className: "w-3 h-3 rotate-45" })
|
|
6360
|
+
children: /* @__PURE__ */ jsx(Hash, { strokeWidth: 1.5, className: "w-3.5 h-3.5 rotate-45" })
|
|
6367
6361
|
}
|
|
6368
6362
|
)
|
|
6369
6363
|
] })
|
|
@@ -6675,5 +6669,5 @@ function getDBIcon(type) {
|
|
|
6675
6669
|
}
|
|
6676
6670
|
|
|
6677
6671
|
export { Button, CodeGenerator, DataCharts, DataProfiler, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, ENVIRONMENT_COLORS, ENVIRONMENT_LABELS, Input, Label4 as Label, NL2SQLPanel, QueryEditor, QuerySafetyDialog, ResultsGrid, SchemaDiagram, SchemaExplorer, ScrollArea, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, TestDataGenerator, VisualExplain, buttonVariants, cn, getDBConfig, getDBIcon, isDangerousQuery, storage };
|
|
6678
|
-
//# sourceMappingURL=chunk-
|
|
6679
|
-
//# sourceMappingURL=chunk-
|
|
6672
|
+
//# sourceMappingURL=chunk-G3S66G64.mjs.map
|
|
6673
|
+
//# sourceMappingURL=chunk-G3S66G64.mjs.map
|