db-studio 1.9.4 → 1.9.5
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 +5 -5
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/web-dist/assets/{_pathlessLayout-DhK1pVQZ.js → _pathlessLayout-beFslGvE.js} +1 -1
- package/dist/web-dist/assets/{_pathlessLayout-DhK1pVQZ.js.map → _pathlessLayout-beFslGvE.js.map} +1 -1
- package/dist/web-dist/assets/{_queryId-PHL0xcKj.js → _queryId-C4zyyS64.js} +1 -1
- package/dist/web-dist/assets/{_queryId-PHL0xcKj.js.map → _queryId-C4zyyS64.js.map} +1 -1
- package/dist/web-dist/assets/{_table-CThT7wMT.js → _table-DlrGH9zB.js} +1 -1
- package/dist/web-dist/assets/{_table-CThT7wMT.js.map → _table-DlrGH9zB.js.map} +1 -1
- package/dist/web-dist/assets/{_table-Ud147_vw.js → _table-aNWwwcm1.js} +1 -1
- package/dist/web-dist/assets/{_table-Ud147_vw.js.map → _table-aNWwwcm1.js.map} +1 -1
- package/dist/web-dist/assets/index-qlp0O2jT.js +86 -0
- package/dist/web-dist/assets/index-qlp0O2jT.js.map +1 -0
- package/dist/web-dist/assets/{queries.store-DruKauzK.js → queries.store-Cbuh20_d.js} +1 -1
- package/dist/web-dist/assets/{queries.store-DruKauzK.js.map → queries.store-Cbuh20_d.js.map} +1 -1
- package/dist/web-dist/assets/{query-runner-Db56mYGQ.js → query-runner-CRvSuMh-.js} +1 -1
- package/dist/web-dist/assets/{query-runner-Db56mYGQ.js.map → query-runner-CRvSuMh-.js.map} +1 -1
- package/dist/web-dist/assets/{runner-DAA3MnAn.js → runner-CNit1IxV.js} +1 -1
- package/dist/web-dist/assets/{runner-DAA3MnAn.js.map → runner-CNit1IxV.js.map} +1 -1
- package/dist/web-dist/index.html +1 -1
- package/package.json +1 -1
- package/dist/web-dist/assets/index-GnOMl7Md.js +0 -86
- package/dist/web-dist/assets/index-GnOMl7Md.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as t}from"./format-cell-value-DG6WpZw_.js";import{_ as u}from"./index-
|
|
1
|
+
import{p as t}from"./format-cell-value-DG6WpZw_.js";import{_ as u}from"./index-qlp0O2jT.js";var m=t()(u((o,s)=>({folders:[],queries:[],addFolder:r=>o(i=>({folders:[...i.folders,r]})),updateFolder:(r,i)=>o(e=>({folders:e.folders.map(d=>d.id===r?{...d,...i}:d)})),deleteFolder:r=>o(i=>({folders:i.folders.filter(e=>e.id!==r),queries:i.queries.filter(e=>e.folderId!==r)})),toggleFolder:r=>o(i=>({folders:i.folders.map(e=>e.id===r?{...e,isExpanded:!e.isExpanded}:e)})),toggleFavoriteFolder:r=>o(i=>({folders:i.folders.map(e=>e.id===r?{...e,isFavorite:!e.isFavorite}:e)})),addQuery:(r,i)=>{const e=Math.random().toString(36).substring(2,15),d={id:e,name:r??"Untitled Query",query:"",isFavorite:!1,isSelected:!1,folderId:i??void 0};return o(l=>({queries:[...l.queries,d]})),e},updateQuery:(r,i)=>o(e=>({queries:e.queries.map(d=>d.id===r?{...d,...i}:d)})),deleteQuery:r=>o(i=>({queries:i.queries.filter(e=>e.id!==r)})),moveQuery:(r,i)=>o(e=>({queries:e.queries.map(d=>d.id===r?{...d,folderId:i}:d)})),toggleFavorite:r=>o(i=>({queries:i.queries.map(e=>e.id===r?{...e,isFavorite:!e.isFavorite}:e)})),getQueriesByFolder:r=>s().queries.filter(i=>i.folderId===r&&!i.isFavorite).sort((i,e)=>i.name.localeCompare(e.name)),getFavoriteQueries:()=>s().queries.filter(r=>r.isFavorite).sort((r,i)=>r.name.localeCompare(i.name)),getFavoriteFolders:()=>s().folders.filter(r=>r.isFavorite),getQuery:r=>s().queries.find(i=>i.id===r),setSelectedQuery:r=>o(i=>({queries:i.queries.map(e=>e.id===r?{...e,isSelected:!0}:{...e,isSelected:!1})})),getSelectedQuery:()=>s().queries.find(r=>r.isSelected)}),{name:"dbstudio-queries"}));export{m as t};
|
package/dist/web-dist/assets/{queries.store-DruKauzK.js.map → queries.store-Cbuh20_d.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.store-
|
|
1
|
+
{"version":3,"file":"queries.store-Cbuh20_d.js","names":[],"sources":["../../src/stores/queries.store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\n\ntype Query = {\n\tid: string;\n\tname: string;\n\tdescription?: string;\n\tquery: string;\n\tisFavorite: boolean;\n\tfolderId?: string;\n\tisSelected: boolean;\n};\n\ntype QueryFolder = {\n\tid: string;\n\tname: string;\n\tisExpanded: boolean;\n\tisFavorite: boolean;\n};\n\ntype QueriesStore = {\n\tfolders: QueryFolder[];\n\tqueries: Query[];\n\n\t// folder ops\n\taddFolder: (folder: QueryFolder) => void;\n\tupdateFolder: (id: string, updates: Partial<QueryFolder>) => void;\n\tdeleteFolder: (id: string) => void;\n\ttoggleFolder: (id: string) => void;\n\ttoggleFavoriteFolder: (id: string) => void;\n\n\t// query ops\n\taddQuery: (name?: string, folderId?: string) => string;\n\tupdateQuery: (id: string, updates: Partial<Query>) => void;\n\tdeleteQuery: (id: string) => void;\n\tmoveQuery: (queryId: string, folderId?: string) => void;\n\ttoggleFavorite: (id: string) => void;\n\n\t// helpers\n\tgetQueriesByFolder: (folderId?: string) => Query[];\n\tgetFavoriteQueries: () => Query[];\n\tgetFavoriteFolders: () => QueryFolder[];\n\tgetQuery: (id: string) => Query | undefined;\n\tsetSelectedQuery: (id: string) => void;\n\tgetSelectedQuery: () => Query | undefined;\n};\n\nexport const useQueriesStore = create<QueriesStore>()(\n\tpersist(\n\t\t(set, get) => ({\n\t\t\tfolders: [],\n\t\t\tqueries: [],\n\n\t\t\taddFolder: (folder) => set((state) => ({ folders: [...state.folders, folder] })),\n\n\t\t\tupdateFolder: (id, updates) =>\n\t\t\t\tset((state) => ({\n\t\t\t\t\tfolders: state.folders.map((f) => (f.id === id ? { ...f, ...updates } : f)),\n\t\t\t\t})),\n\n\t\t\tdeleteFolder: (id) =>\n\t\t\t\tset((state) => ({\n\t\t\t\t\tfolders: state.folders.filter((f) => f.id !== id),\n\t\t\t\t\tqueries: state.queries.filter((q) => q.folderId !== id),\n\t\t\t\t})),\n\n\t\t\ttoggleFolder: (id) =>\n\t\t\t\tset((state) => ({\n\t\t\t\t\tfolders: state.folders.map((f) =>\n\t\t\t\t\t\tf.id === id ? { ...f, isExpanded: !f.isExpanded } : f,\n\t\t\t\t\t),\n\t\t\t\t})),\n\n\t\t\ttoggleFavoriteFolder: (id) =>\n\t\t\t\tset((state) => ({\n\t\t\t\t\tfolders: state.folders.map((f) =>\n\t\t\t\t\t\tf.id === id ? { ...f, isFavorite: !f.isFavorite } : f,\n\t\t\t\t\t),\n\t\t\t\t})),\n\n\t\t\taddQuery: (name?: string, folderId?: string) => {\n\t\t\t\tconst newId = Math.random().toString(36).substring(2, 15);\n\t\t\t\tconst newQuery: Query = {\n\t\t\t\t\tid: newId,\n\t\t\t\t\tname: name ?? \"Untitled Query\",\n\t\t\t\t\tquery: \"\",\n\t\t\t\t\tisFavorite: false,\n\t\t\t\t\tisSelected: false,\n\t\t\t\t\tfolderId: folderId ?? undefined,\n\t\t\t\t};\n\t\t\t\tset((state) => ({\n\t\t\t\t\tqueries: [...state.queries, newQuery],\n\t\t\t\t}));\n\t\t\t\treturn newId;\n\t\t\t},\n\n\t\t\tupdateQuery: (id, updates) =>\n\t\t\t\tset((state) => ({\n\t\t\t\t\tqueries: state.queries.map((q) => (q.id === id ? { ...q, ...updates } : q)),\n\t\t\t\t})),\n\n\t\t\tdeleteQuery: (id) =>\n\t\t\t\tset((state) => ({\n\t\t\t\t\tqueries: state.queries.filter((q) => q.id !== id),\n\t\t\t\t})),\n\n\t\t\tmoveQuery: (queryId, folderId) =>\n\t\t\t\tset((state) => ({\n\t\t\t\t\tqueries: state.queries.map((q) => (q.id === queryId ? { ...q, folderId } : q)),\n\t\t\t\t})),\n\n\t\t\ttoggleFavorite: (id) =>\n\t\t\t\tset((state) => ({\n\t\t\t\t\tqueries: state.queries.map((q) =>\n\t\t\t\t\t\tq.id === id ? { ...q, isFavorite: !q.isFavorite } : q,\n\t\t\t\t\t),\n\t\t\t\t})),\n\n\t\t\tgetQueriesByFolder: (folderId) => {\n\t\t\t\tconst state = get();\n\t\t\t\treturn state.queries\n\t\t\t\t\t.filter((q) => q.folderId === folderId && !q.isFavorite)\n\t\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name));\n\t\t\t},\n\n\t\t\tgetFavoriteQueries: () => {\n\t\t\t\tconst state = get();\n\t\t\t\treturn state.queries\n\t\t\t\t\t.filter((q) => q.isFavorite)\n\t\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name));\n\t\t\t},\n\n\t\t\tgetFavoriteFolders: () => {\n\t\t\t\tconst state = get();\n\t\t\t\treturn state.folders.filter((f) => f.isFavorite);\n\t\t\t},\n\n\t\t\tgetQuery: (id) => {\n\t\t\t\tconst state = get();\n\t\t\t\treturn state.queries.find((q) => q.id === id);\n\t\t\t},\n\n\t\t\tsetSelectedQuery: (id) =>\n\t\t\t\tset((state) => ({\n\t\t\t\t\tqueries: state.queries.map((q) =>\n\t\t\t\t\t\tq.id === id ? { ...q, isSelected: true } : { ...q, isSelected: false },\n\t\t\t\t\t),\n\t\t\t\t})),\n\n\t\t\tgetSelectedQuery: () => {\n\t\t\t\tconst state = get();\n\t\t\t\treturn state.queries.find((q) => q.isSelected);\n\t\t\t},\n\t\t}),\n\t\t{\n\t\t\tname: \"dbstudio-queries\",\n\t\t},\n\t),\n);\n"],"mappings":"4FA+CA,IAAa,EAAkB,EAAqB,EACnD,EAAA,CACE,EAAK,KAAS,CACd,QAAS,CAAC,EACV,QAAS,CAAC,EAEV,UAAY,GAAW,EAAK,IAAW,CAAE,QAAS,CAAC,GAAG,EAAM,QAAS,CAAM,CAAE,EAAE,EAE/E,aAAA,CAAe,EAAI,IAClB,EAAK,IAAW,CACf,QAAS,EAAM,QAAQ,IAAK,GAAO,EAAE,KAAO,EAAK,CAAE,GAAG,EAAG,GAAG,CAAQ,EAAI,CAAE,CAC3E,EAAE,EAEH,aAAe,GACd,EAAK,IAAW,CACf,QAAS,EAAM,QAAQ,OAAQ,GAAM,EAAE,KAAO,CAAE,EAChD,QAAS,EAAM,QAAQ,OAAQ,GAAM,EAAE,WAAa,CAAE,CACvD,EAAE,EAEH,aAAe,GACd,EAAK,IAAW,CACf,QAAS,EAAM,QAAQ,IAAK,GAC3B,EAAE,KAAO,EAAK,CAAE,GAAG,EAAG,WAAY,CAAC,EAAE,UAAW,EAAI,CACrD,CACD,EAAE,EAEH,qBAAuB,GACtB,EAAK,IAAW,CACf,QAAS,EAAM,QAAQ,IAAK,GAC3B,EAAE,KAAO,EAAK,CAAE,GAAG,EAAG,WAAY,CAAC,EAAE,UAAW,EAAI,CACrD,CACD,EAAE,EAEH,SAAA,CAAW,EAAe,IAAsB,CAC/C,MAAM,EAAQ,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,EAAG,EAAE,EAClD,EAAkB,CACvB,GAAI,EACJ,KAAM,GAAQ,iBACd,MAAO,GACP,WAAY,GACZ,WAAY,GACZ,SAAU,GAAY,MACvB,EACA,OAAA,EAAK,IAAW,CACf,QAAS,CAAC,GAAG,EAAM,QAAS,CAAQ,CACrC,EAAE,EACK,CACR,EAEA,YAAA,CAAc,EAAI,IACjB,EAAK,IAAW,CACf,QAAS,EAAM,QAAQ,IAAK,GAAO,EAAE,KAAO,EAAK,CAAE,GAAG,EAAG,GAAG,CAAQ,EAAI,CAAE,CAC3E,EAAE,EAEH,YAAc,GACb,EAAK,IAAW,CACf,QAAS,EAAM,QAAQ,OAAQ,GAAM,EAAE,KAAO,CAAE,CACjD,EAAE,EAEH,UAAA,CAAY,EAAS,IACpB,EAAK,IAAW,CACf,QAAS,EAAM,QAAQ,IAAK,GAAO,EAAE,KAAO,EAAU,CAAE,GAAG,EAAG,SAAA,CAAS,EAAI,CAAE,CAC9E,EAAE,EAEH,eAAiB,GAChB,EAAK,IAAW,CACf,QAAS,EAAM,QAAQ,IAAK,GAC3B,EAAE,KAAO,EAAK,CAAE,GAAG,EAAG,WAAY,CAAC,EAAE,UAAW,EAAI,CACrD,CACD,EAAE,EAEH,mBAAqB,GACN,EACP,EAAM,QACX,OAAQ,GAAM,EAAE,WAAa,GAAY,CAAC,EAAE,UAAU,EACtD,KAAA,CAAM,EAAG,IAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC,EAG9C,mBAAA,IACe,EACP,EAAM,QACX,OAAQ,GAAM,EAAE,UAAU,EAC1B,KAAA,CAAM,EAAG,IAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC,EAG9C,mBAAA,IACe,EACP,EAAM,QAAQ,OAAQ,GAAM,EAAE,UAAU,EAGhD,SAAW,GACI,EACP,EAAM,QAAQ,KAAM,GAAM,EAAE,KAAO,CAAE,EAG7C,iBAAmB,GAClB,EAAK,IAAW,CACf,QAAS,EAAM,QAAQ,IAAK,GAC3B,EAAE,KAAO,EAAK,CAAE,GAAG,EAAG,WAAY,EAAK,EAAI,CAAE,GAAG,EAAG,WAAY,EAAM,CACtE,CACD,EAAE,EAEH,iBAAA,IACe,EACP,EAAM,QAAQ,KAAM,GAAM,EAAE,UAAU,CAE/C,GACA,CACC,KAAM,kBACP,CACD,CACD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/code-editor-D1LiAEIU.js","assets/rolldown-runtime-b3L32Ng1.js","assets/icons-B5bSDd0r.js","assets/radix-ui-DS4zDRqg.js","assets/dist-m8A6NETj.js","assets/monaco-editor-DJLWokZr.js","assets/monaco-editor-DVSAlpqy.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as q}from"./rolldown-runtime-b3L32Ng1.js";import{a as L,g as U,i as N,o as P,r as W,v as Y}from"./tanstack-C38qytx8.js";import{F as G,N as B,X as K,a as J,f as X,nt as I,o as Z,w}from"./icons-B5bSDd0r.js";import{Ot as ee,n as te,t as ae}from"./radix-ui-DS4zDRqg.js";import{r as re}from"./monitoring-Dw3KwoPJ.js";import{n as h}from"./dist-m8A6NETj.js";import{B as E,a as C,d as se,f as T,k as ne,l as v,n as S,o as R,r as Q,t as oe,z as ie}from"./format-cell-value-DG6WpZw_.js";import{a as le}from"./monaco-editor-DJLWokZr.js";import{T as k,v as de,y as ce}from"./index-
|
|
2
|
+
import{r as q}from"./rolldown-runtime-b3L32Ng1.js";import{a as L,g as U,i as N,o as P,r as W,v as Y}from"./tanstack-C38qytx8.js";import{F as G,N as B,X as K,a as J,f as X,nt as I,o as Z,w}from"./icons-B5bSDd0r.js";import{Ot as ee,n as te,t as ae}from"./radix-ui-DS4zDRqg.js";import{r as re}from"./monitoring-Dw3KwoPJ.js";import{n as h}from"./dist-m8A6NETj.js";import{B as E,a as C,d as se,f as T,k as ne,l as v,n as S,o as R,r as Q,t as oe,z as ie}from"./format-cell-value-DG6WpZw_.js";import{a as le}from"./monaco-editor-DJLWokZr.js";import{T as k,v as de,y as ce}from"./index-qlp0O2jT.js";import{t as ue}from"./queries.store-Cbuh20_d.js";var l=q(I(),1),ge=`-- Your query here...
|
|
3
3
|
`,me=`{
|
|
4
4
|
"collection": "your_collection",
|
|
5
5
|
"operation": "find",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../src/utils/constants/placeholders.ts","../../src/features/query-runner/components/table-view.tsx","../../src/features/query-runner/components/query-result-container.tsx","../../../ui/src/primitives/toggle.tsx","../../../ui/src/primitives/toggle-group.tsx","../../src/features/query-runner/components/runner-header.tsx","../../src/features/query-runner/hooks/use-execute-query.ts","../../src/features/query-runner/screens/runner-screen.tsx"],"sourcesContent":["export const PGSQL_PLACEHOLDER_QUERY = `-- Your query here...\n`;\n\nexport const MONGO_PLACEHOLDER_QUERY = `{\n \"collection\": \"your_collection\",\n \"operation\": \"find\",\n \"filter\": {},\n \"sort\": { \"_id\": 1 },\n \"limit\": 50\n}`;\n","import type { ExecuteQueryResult } from \"@db-studio/shared/types\";\nimport { flexRender, getCoreRowModel, type Row, useReactTable } from \"@tanstack/react-table\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useMemo, useRef } from \"react\";\nimport { formatCellValue } from \"@/utils/format-cell-value\";\n\nexport const TableView = ({ results }: { results: ExecuteQueryResult | null }) => {\n\tconst columns = useMemo(() => {\n\t\tif (!results?.columns) return [];\n\n\t\treturn results.columns.map((item: string) => ({\n\t\t\tid: item,\n\t\t\taccessorKey: item,\n\t\t\theader: item,\n\t\t\tcell: ({ row }: { row: Row<Record<string, unknown>> }) => (\n\t\t\t\t<div className=\"font-medium truncate text-zinc-200\">\n\t\t\t\t\t{formatCellValue(row.getValue(item))}\n\t\t\t\t</div>\n\t\t\t),\n\t\t}));\n\t}, [results?.columns]);\n\n\tconst table = useReactTable({\n\t\tcolumns: columns,\n\t\tdata: results?.rows ?? [],\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tcolumnResizeMode: \"onChange\",\n\t\tenableColumnResizing: true,\n\t});\n\n\tconst { rows } = table.getRowModel();\n\n\tconst parentRef = useRef<HTMLDivElement>(null);\n\n\tconst virtualizer = useVirtualizer({\n\t\tcount: rows.length,\n\t\tgetScrollElement: () => parentRef.current,\n\t\testimateSize: () => 35,\n\t\toverscan: 10,\n\t});\n\n\tconst items = virtualizer.getVirtualItems();\n\n\tconst totalTableWidth = table.getAllColumns().reduce((sum, col) => sum + col.getSize(), 0);\n\n\treturn (\n\t\t<div\n\t\t\tref={parentRef}\n\t\t\tclassName=\"relative h-full overflow-auto w-full\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName=\"sticky top-0 z-20 bg-zinc-950 border-b border-zinc-800\"\n\t\t\t\tstyle={{ width: `${totalTableWidth}px`, minWidth: \"100%\" }}\n\t\t\t>\n\t\t\t\t{table.getHeaderGroups().map((headerGroup) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={headerGroup.id}\n\t\t\t\t\t\tclassName=\"flex text-xs\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{headerGroup.headers.map((header) => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\tclassName=\"shrink-0 p-2 font-semibold text-zinc-300 border-r border-zinc-800 relative\"\n\t\t\t\t\t\t\t\tstyle={{ width: `${header.getSize()}px` }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{header.isPlaceholder\n\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t: flexRender(header.column.columnDef.header, header.getContext())}\n\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\t\t\t\tonMouseDown={header.getResizeHandler()}\n\t\t\t\t\t\t\t\t\tonTouchStart={header.getResizeHandler()}\n\t\t\t\t\t\t\t\t\tclassName={`absolute top-0 right-0 h-full w-1 cursor-col-resize select-none touch-none hover:bg-blue-500 ${\n\t\t\t\t\t\t\t\t\t\theader.column.getIsResizing() ? \"bg-blue-500\" : \"\"\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\theight: `${virtualizer.getTotalSize()}px`,\n\t\t\t\t\twidth: `${totalTableWidth}px`,\n\t\t\t\t\tminWidth: \"100%\",\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{items.map((virtualRow) => {\n\t\t\t\t\tconst row = rows[virtualRow.index];\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\t\twidth: `${totalTableWidth}px`,\n\t\t\t\t\t\t\t\tminWidth: \"100%\",\n\t\t\t\t\t\t\t\theight: `${virtualRow.size}px`,\n\t\t\t\t\t\t\t\ttransform: `translateY(${virtualRow.start}px)`,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"flex text-xs border-b border-zinc-800 hover:bg-zinc-800/50\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{row.getVisibleCells().map((cell) => (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={cell.id}\n\t\t\t\t\t\t\t\t\tclassName=\"shrink-0 p-2 border-r border-zinc-800\"\n\t\t\t\t\t\t\t\t\tstyle={{ width: `${cell.column.getSize()}px` }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{flexRender(cell.column.columnDef.cell, cell.getContext())}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{rows.length === 0 && (\n\t\t\t\t<div className=\"flex items-center justify-center h-24 text-zinc-400\">No results.</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n","import type { ExecuteQueryResult } from \"@db-studio/shared/types\";\nimport { Spinner } from \"@db-studio/ui/spinner\";\nimport JsonView from \"@uiw/react-json-view\";\nimport { vscodeTheme } from \"@uiw/react-json-view/vscode\";\nimport { useQueryState } from \"nuqs\";\nimport { useMemo } from \"react\";\nimport { CONSTANTS } from \"@/utils/constants\";\nimport { TableView } from \"./table-view\";\n\nexport const QueryResultContainer = ({\n\tresults,\n\tisLoading,\n\terror,\n}: {\n\tresults: ExecuteQueryResult | null;\n\tisLoading: boolean;\n\terror: Error | null;\n}) => {\n\tconst [showAs] = useQueryState(CONSTANTS.RUNNER_STATE_KEYS.SHOW_AS);\n\n\tconst renderResults = useMemo(() => {\n\t\tif (error) {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex h-full p-2\">\n\t\t\t\t\t<div className=\"text-sm\">Error: {error.message}</div>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (results?.message) {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex h-full p-2\">\n\t\t\t\t\t<p>{results.message}</p>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (!results || results.rows.length === 0) {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex h-full p-2\">\n\t\t\t\t\t<p>Run the query to see the results</p>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (showAs === \"json\") {\n\t\t\treturn (\n\t\t\t\t<div className=\"p-2\">\n\t\t\t\t\t<JsonView\n\t\t\t\t\t\tvalue={results?.rows ?? []}\n\t\t\t\t\t\tobjectSortKeys={true}\n\t\t\t\t\t\tdisplayObjectSize={false}\n\t\t\t\t\t\tdisplayDataTypes={false}\n\t\t\t\t\t\tindentWidth={14}\n\t\t\t\t\t\tcollapsed={2}\n\t\t\t\t\t\tshortenTextAfterLength={100}\n\t\t\t\t\t\thighlightUpdates={false}\n\t\t\t\t\t\tstyle={vscodeTheme}\n\t\t\t\t\t\tenableClipboard={false}\n\t\t\t\t\t\tclassName=\"size-full\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn <TableView results={results} />;\n\t}, [showAs, results, error]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"absolute bottom-0 left-0 right-0 border-t-2 border-zinc-80 flex flex-col bg-[#1E1E1E] w-full\"\n\t\t\tstyle={{ height: \"calc(100vh - 400px)\" }}\n\t\t>\n\t\t\t<div className=\"flex-1 overflow-auto w-full\">\n\t\t\t\t{isLoading ? (\n\t\t\t\t\t<div className=\"flex items-center justify-center h-full overflow-auto\">\n\t\t\t\t\t\t<Spinner\n\t\t\t\t\t\t\tsize=\"size-8\"\n\t\t\t\t\t\t\tcolor=\"bg-[#d4d4d4]\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\trenderResults\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../utils\";\n\nconst toggleVariants = cva(\n\t\"hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[state=on]:bg-zinc-900 gap-1 rounded-md text-xs font-medium transition-all [&_svg:not([class*='size-'])]:size-3.5 group/toggle hover:bg-muted inline-flex items-center justify-center whitespace-nowrap outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"bg-transparent\",\n\t\t\t\tghost: \"bg-transparent hover:bg-muted\",\n\t\t\t\toutline: \"border-input hover:bg-muted border bg-transparent\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: \"h-7 min-w-7 px-2\",\n\t\t\t\tsm: \"h-6 min-w-6 rounded-[min(var(--radius-md),8px)] px-1.5 text-[0.625rem] [&_svg:not([class*='size-'])]:size-3\",\n\t\t\t\tlg: \"h-8 min-w-8 px-2\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t},\n);\n\nfunction _Toggle({\n\tclassName,\n\tvariant = \"default\",\n\tsize = \"default\",\n\t...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n\treturn (\n\t\t<TogglePrimitive.Root\n\t\t\tdata-slot=\"toggle\"\n\t\t\tclassName={cn(toggleVariants({ variant, size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { _Toggle as Toggle, toggleVariants };\n","\"use client\";\n\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport type { VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { use } from \"react\";\nimport { cn } from \"../utils\";\nimport { toggleVariants } from \"./toggle\";\n\nconst ToggleGroupContext = React.createContext<\n\tVariantProps<typeof toggleVariants> & {\n\t\tspacing?: number;\n\t\torientation?: \"horizontal\" | \"vertical\";\n\t}\n>({\n\tsize: \"default\",\n\tvariant: \"default\",\n\tspacing: 0,\n\torientation: \"horizontal\",\n});\n\nfunction ToggleGroup({\n\tclassName,\n\tvariant,\n\tsize,\n\tspacing = 0,\n\torientation = \"horizontal\",\n\tchildren,\n\t...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n\tVariantProps<typeof toggleVariants> & {\n\t\tspacing?: number;\n\t\torientation?: \"horizontal\" | \"vertical\";\n\t}) {\n\treturn (\n\t\t<ToggleGroupPrimitive.Root\n\t\t\tdata-slot=\"toggle-group\"\n\t\t\tdata-variant={variant}\n\t\t\tdata-size={size}\n\t\t\tdata-spacing={spacing}\n\t\t\tdata-orientation={orientation}\n\t\t\tstyle={{ \"--gap\": spacing } as React.CSSProperties}\n\t\t\tclassName={cn(\n\t\t\t\t\"rounded-md data-[size=sm]:rounded-[min(var(--radius-md),8px)] group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ToggleGroupContext.Provider value={{ variant, size, spacing, orientation }}>\n\t\t\t\t{children}\n\t\t\t</ToggleGroupContext.Provider>\n\t\t</ToggleGroupPrimitive.Root>\n\t);\n}\n\nfunction ToggleGroupItem({\n\tclassName,\n\tchildren,\n\tvariant = \"default\",\n\tsize = \"default\",\n\t...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n\tVariantProps<typeof toggleVariants>) {\n\tconst context = use(ToggleGroupContext);\n\n\treturn (\n\t\t<ToggleGroupPrimitive.Item\n\t\t\tdata-slot=\"toggle-group-item\"\n\t\t\tdata-variant={context.variant || variant}\n\t\t\tdata-size={context.size || size}\n\t\t\tdata-spacing={context.spacing}\n\t\t\tclassName={cn(\n\t\t\t\t\"group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-md shrink-0 focus:z-10 focus-visible:z-10 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t\",\n\t\t\t\ttoggleVariants({\n\t\t\t\t\tvariant: context.variant || variant,\n\t\t\t\t\tsize: context.size || size,\n\t\t\t\t}),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</ToggleGroupPrimitive.Item>\n\t);\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","import { Button } from \"@db-studio/ui/button\";\nimport { ToggleGroup, ToggleGroupItem } from \"@db-studio/ui/toggle-group\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@db-studio/ui/tooltip\";\nimport { AlignLeft, Braces, Command, CornerDownLeft, Heart, Save, Table } from \"lucide-react\";\nimport { useQueryState } from \"nuqs\";\nimport { CONSTANTS } from \"@/utils/constants\";\nimport type { QueryResult } from \"../screens/runner-screen\";\n\nexport const RunnerHeader = ({\n\tisExecutingQuery,\n\thandleButtonClick,\n\thandleFormatQuery,\n\thandleSaveQuery,\n\thandleFavorite,\n\tisFavorite,\n\tqueryId,\n\thasUnsavedChanges,\n\tqueryResult,\n}: {\n\tisExecutingQuery: boolean;\n\thandleButtonClick: () => void;\n\thandleFormatQuery: () => void;\n\thandleSaveQuery: () => void;\n\thandleFavorite: () => void;\n\tisFavorite: boolean;\n\tqueryId: string;\n\thasUnsavedChanges: boolean;\n\tqueryResult: QueryResult | null;\n}) => {\n\tconst [showAs, setShowAs] = useQueryState(CONSTANTS.RUNNER_STATE_KEYS.SHOW_AS);\n\n\treturn (\n\t\t<header className=\"max-h-8 overflow-hidden border-b border-zinc-800 w-full flex items-center justify-between bg-zinc-950 sticky top-0 left-0 right-0 z-0\">\n\t\t\t<div className=\"flex items-center\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\tclassName=\"h-8! border-l-0 border-y-0 border-r border-black rounded-none bg-green-700/60 text-white hover:bg-green-800/60 gap-1 disabled:opacity-50\"\n\t\t\t\t\tonClick={handleButtonClick}\n\t\t\t\t\tdisabled={isExecutingQuery}\n\t\t\t\t\taria-label=\"Run the query\"\n\t\t\t\t>\n\t\t\t\t\tRun\n\t\t\t\t\t<Command className=\"size-3\" />\n\t\t\t\t\t<CornerDownLeft className=\"size-3\" />\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"h-8! border-l-0 border-y-0 border-r border-zinc-800 rounded-none\"\n\t\t\t\t\taria-label=\"Format the query\"\n\t\t\t\t\tonClick={handleFormatQuery}\n\t\t\t\t>\n\t\t\t\t\tFormat <AlignLeft className=\"size-3\" />\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"h-8! border-l-0 border-y-0 border-r border-zinc-800 rounded-none\"\n\t\t\t\t\taria-label=\"Save the query\"\n\t\t\t\t\tonClick={handleSaveQuery}\n\t\t\t\t>\n\t\t\t\t\tSave <Save className=\"size-3\" />\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"h-8! border-l-0 border-y-0 border-r border-zinc-800 rounded-none\"\n\t\t\t\t\taria-label=\"Favorite the query\"\n\t\t\t\t\tonClick={handleFavorite}\n\t\t\t\t>\n\t\t\t\t\t{isFavorite ? (\n\t\t\t\t\t\t<Heart className=\"size-3 fill-current\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Heart className=\"size-3\" />\n\t\t\t\t\t)}\n\t\t\t\t</Button>\n\n\t\t\t\t{queryId && hasUnsavedChanges && (\n\t\t\t\t\t<span className=\"text-xs px-2 text-muted-foreground\">Unsaved changes</span>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t<div className=\"flex items-center\">\n\t\t\t\t{queryResult && (\n\t\t\t\t\t<div className=\"flex items-center gap-1 px-2\">\n\t\t\t\t\t\t<span className=\"text-xs text-zinc-500\">\n\t\t\t\t\t\t\t{queryResult.data?.duration?.toFixed(2)}ms\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span className=\"text-xs text-zinc-500\">•</span>\n\t\t\t\t\t\t<span className=\"text-xs text-zinc-500\">\n\t\t\t\t\t\t\t{queryResult.data?.rowCount ?? 0} rows\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<ToggleGroup\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\t\tif (value === showAs) return;\n\t\t\t\t\t\tsetShowAs(value);\n\t\t\t\t\t}}\n\t\t\t\t\tvalue={showAs ?? undefined}\n\t\t\t\t\tclassName=\"h-8! rounded-none! border-l!\"\n\t\t\t\t>\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t<ToggleGroupItem\n\t\t\t\t\t\t\t\tvalue=\"table\"\n\t\t\t\t\t\t\t\taria-label=\"Toggle table\"\n\t\t\t\t\t\t\t\tclassName=\"rounded-none! h-8! aspect-square!\"\n\t\t\t\t\t\t\t\tdata-selected={showAs === \"table\"}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Table />\n\t\t\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\t<p>View as a table</p>\n\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t<ToggleGroupItem\n\t\t\t\t\t\t\t\tvalue=\"json\"\n\t\t\t\t\t\t\t\taria-label=\"Toggle JSON\"\n\t\t\t\t\t\t\t\tclassName=\"rounded-none! h-8! aspect-square!\"\n\t\t\t\t\t\t\t\tdata-selected={showAs === \"json\"}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Braces />\n\t\t\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\t<p>View as a JSON</p>\n\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</ToggleGroup>\n\t\t\t</div>\n\t\t</header>\n\t);\n};\n","import type { ExecuteQueryResult } from \"@db-studio/shared/types\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { posthogAnalytics } from \"@/lib/posthog\";\nimport { executeQuery as executeQueryRequest } from \"@/shared/api\";\nimport { useDatabaseStore } from \"@/stores/database.store\";\n\nexport const useExecuteQuery = () => {\n\tconst { selectedDatabase, dbType } = useDatabaseStore();\n\n\tconst {\n\t\tmutateAsync: executeQuery,\n\t\tisPending: isExecutingQuery,\n\t\terror: executeQueryError,\n\t} = useMutation<ExecuteQueryResult, Error, { query: string }>({\n\t\tmutationFn: async ({ query }) => {\n\t\t\tconst res = await executeQueryRequest({ query, db: selectedDatabase });\n\t\t\treturn res.data.data;\n\t\t},\n\t\tonSuccess: () => {\n\t\t\tif (dbType) posthogAnalytics.capture(\"query_executed\", { db_type: dbType });\n\t\t},\n\t});\n\n\treturn {\n\t\texecuteQuery,\n\t\tisExecutingQuery,\n\t\texecuteQueryError,\n\t};\n};\n","import type { ExecuteQueryResult } from \"@db-studio/shared/types\";\nimport { useNavigate } from \"@tanstack/react-router\";\nimport { lazy, Suspense, useCallback, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { useDatabaseStore } from \"@/stores/database.store\";\nimport { useQueriesStore } from \"@/stores/queries.store\";\nimport {\n\tMONGO_PLACEHOLDER_QUERY,\n\tPGSQL_PLACEHOLDER_QUERY,\n} from \"@/utils/constants/placeholders\";\nimport { QueryResultContainer } from \"../components/query-result-container\";\nimport { RunnerHeader } from \"../components/runner-header\";\nimport { useExecuteQuery } from \"../hooks/use-execute-query\";\n\nconst CodeEditor = lazy(() =>\n\timport(\"../components/code-editor\").then((module) => ({\n\t\tdefault: module.CodeEditor,\n\t})),\n);\n\nexport type QueryResult = {\n\tdata: ExecuteQueryResult;\n\tqueryId: string;\n};\n\nexport const RunnerScreen = ({ queryId }: { queryId?: string }) => {\n\tconst navigate = useNavigate();\n\tconst [queryResult, setQueryResult] = useState<QueryResult | undefined>(undefined);\n\tconst { getQuery, updateQuery, toggleFavorite, addQuery } = useQueriesStore();\n\tconst query = queryId ? getQuery(queryId) : null;\n\tconst isFavorite = query?.isFavorite ?? false;\n\tconst { executeQuery, isExecutingQuery, executeQueryError } = useExecuteQuery();\n\tconst [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);\n\tconst [currentQuery, setCurrentQuery] = useState<string>(\"\");\n\tconst { dbType } = useDatabaseStore();\n\n\tconst getInitialQuery = useCallback(() => {\n\t\tconst placeholder =\n\t\t\tdbType === \"mongodb\" ? MONGO_PLACEHOLDER_QUERY : PGSQL_PLACEHOLDER_QUERY;\n\t\tif (!query) return placeholder;\n\t\treturn query?.query ?? placeholder;\n\t}, [query, dbType]);\n\n\tconst handleExecuteQuery = useCallback(\n\t\tasync (query: string) => {\n\t\t\tif (!query.trim()) {\n\t\t\t\ttoast.error(\"Query is empty!\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\texecuteQuery({ query }).then((result) => {\n\t\t\t\tsetQueryResult({ data: result, queryId: queryId ?? \"\" });\n\t\t\t});\n\t\t},\n\t\t[executeQuery, queryId],\n\t);\n\n\tconst handleButtonClick = useCallback(() => {\n\t\tif (!currentQuery.trim()) {\n\t\t\ttoast.error(\"Query is empty!\");\n\t\t\treturn;\n\t\t}\n\n\t\thandleExecuteQuery(currentQuery);\n\t}, [handleExecuteQuery, currentQuery]);\n\n\tconst handleFavorite = useCallback(() => {\n\t\tif (!queryId) return;\n\t\ttoggleFavorite(queryId);\n\t\ttoast.success(isFavorite ? \"Query unfavorited\" : \"Query favorited\");\n\t}, [toggleFavorite, queryId, isFavorite]);\n\n\tconst handleFormatQuery = useCallback(() => {\n\t\t// passed to Monaco component\n\t}, []);\n\n\tconst handleSaveQuery = useCallback(() => {\n\t\tif (!currentQuery) return;\n\n\t\tif (!queryId) {\n\t\t\tconst newQueryId = addQuery();\n\t\t\tupdateQuery(newQueryId, { query: currentQuery });\n\t\t\tnavigate({\n\t\t\t\tto: \"/runner/$queryId\",\n\t\t\t\tparams: { queryId: newQueryId },\n\t\t\t});\n\t\t} else {\n\t\t\tupdateQuery(queryId, { query: currentQuery });\n\t\t}\n\t\tsetHasUnsavedChanges(false);\n\t\ttoast.success(\"Query saved\");\n\t}, [currentQuery, queryId, updateQuery, addQuery, navigate]);\n\n\treturn (\n\t\t<div className=\"flex-1 relative w-full flex flex-col\">\n\t\t\t<RunnerHeader\n\t\t\t\tisExecutingQuery={isExecutingQuery}\n\t\t\t\thandleButtonClick={handleButtonClick}\n\t\t\t\thandleFormatQuery={handleFormatQuery}\n\t\t\t\thandleSaveQuery={handleSaveQuery}\n\t\t\t\thandleFavorite={handleFavorite}\n\t\t\t\tisFavorite={isFavorite}\n\t\t\t\tqueryId={queryId ?? \"\"}\n\t\t\t\thasUnsavedChanges={hasUnsavedChanges}\n\t\t\t\tqueryResult={queryResult ?? null}\n\t\t\t/>\n\n\t\t\t<Suspense fallback={<div className=\"flex-1 bg-[#1E1E1E] size-full\" />}>\n\t\t\t\t<CodeEditor\n\t\t\t\t\tinitialQuery={getInitialQuery()}\n\t\t\t\t\tqueryId={queryId}\n\t\t\t\t\tsavedQuery={query?.query ?? \"\"}\n\t\t\t\t\tlanguage={dbType === \"mongodb\" ? \"json\" : \"pgsql\"}\n\t\t\t\t\tonQueryChange={setCurrentQuery}\n\t\t\t\t\tonUnsavedChanges={setHasUnsavedChanges}\n\t\t\t\t\tonExecuteQuery={handleExecuteQuery}\n\t\t\t\t\tonFormatQuery={handleFormatQuery}\n\t\t\t\t\tonSaveQuery={handleSaveQuery}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\n\t\t\t<QueryResultContainer\n\t\t\t\tresults={queryResult?.data ?? null}\n\t\t\t\tisLoading={isExecutingQuery}\n\t\t\t\terror={executeQueryError}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n"],"file":"query-runner-Db56mYGQ.js"}
|
|
1
|
+
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../src/utils/constants/placeholders.ts","../../src/features/query-runner/components/table-view.tsx","../../src/features/query-runner/components/query-result-container.tsx","../../../ui/src/primitives/toggle.tsx","../../../ui/src/primitives/toggle-group.tsx","../../src/features/query-runner/components/runner-header.tsx","../../src/features/query-runner/hooks/use-execute-query.ts","../../src/features/query-runner/screens/runner-screen.tsx"],"sourcesContent":["export const PGSQL_PLACEHOLDER_QUERY = `-- Your query here...\n`;\n\nexport const MONGO_PLACEHOLDER_QUERY = `{\n \"collection\": \"your_collection\",\n \"operation\": \"find\",\n \"filter\": {},\n \"sort\": { \"_id\": 1 },\n \"limit\": 50\n}`;\n","import type { ExecuteQueryResult } from \"@db-studio/shared/types\";\nimport { flexRender, getCoreRowModel, type Row, useReactTable } from \"@tanstack/react-table\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useMemo, useRef } from \"react\";\nimport { formatCellValue } from \"@/utils/format-cell-value\";\n\nexport const TableView = ({ results }: { results: ExecuteQueryResult | null }) => {\n\tconst columns = useMemo(() => {\n\t\tif (!results?.columns) return [];\n\n\t\treturn results.columns.map((item: string) => ({\n\t\t\tid: item,\n\t\t\taccessorKey: item,\n\t\t\theader: item,\n\t\t\tcell: ({ row }: { row: Row<Record<string, unknown>> }) => (\n\t\t\t\t<div className=\"font-medium truncate text-zinc-200\">\n\t\t\t\t\t{formatCellValue(row.getValue(item))}\n\t\t\t\t</div>\n\t\t\t),\n\t\t}));\n\t}, [results?.columns]);\n\n\tconst table = useReactTable({\n\t\tcolumns: columns,\n\t\tdata: results?.rows ?? [],\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tcolumnResizeMode: \"onChange\",\n\t\tenableColumnResizing: true,\n\t});\n\n\tconst { rows } = table.getRowModel();\n\n\tconst parentRef = useRef<HTMLDivElement>(null);\n\n\tconst virtualizer = useVirtualizer({\n\t\tcount: rows.length,\n\t\tgetScrollElement: () => parentRef.current,\n\t\testimateSize: () => 35,\n\t\toverscan: 10,\n\t});\n\n\tconst items = virtualizer.getVirtualItems();\n\n\tconst totalTableWidth = table.getAllColumns().reduce((sum, col) => sum + col.getSize(), 0);\n\n\treturn (\n\t\t<div\n\t\t\tref={parentRef}\n\t\t\tclassName=\"relative h-full overflow-auto w-full\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName=\"sticky top-0 z-20 bg-zinc-950 border-b border-zinc-800\"\n\t\t\t\tstyle={{ width: `${totalTableWidth}px`, minWidth: \"100%\" }}\n\t\t\t>\n\t\t\t\t{table.getHeaderGroups().map((headerGroup) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={headerGroup.id}\n\t\t\t\t\t\tclassName=\"flex text-xs\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{headerGroup.headers.map((header) => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\tclassName=\"shrink-0 p-2 font-semibold text-zinc-300 border-r border-zinc-800 relative\"\n\t\t\t\t\t\t\t\tstyle={{ width: `${header.getSize()}px` }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{header.isPlaceholder\n\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t: flexRender(header.column.columnDef.header, header.getContext())}\n\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\t\t\t\tonMouseDown={header.getResizeHandler()}\n\t\t\t\t\t\t\t\t\tonTouchStart={header.getResizeHandler()}\n\t\t\t\t\t\t\t\t\tclassName={`absolute top-0 right-0 h-full w-1 cursor-col-resize select-none touch-none hover:bg-blue-500 ${\n\t\t\t\t\t\t\t\t\t\theader.column.getIsResizing() ? \"bg-blue-500\" : \"\"\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\theight: `${virtualizer.getTotalSize()}px`,\n\t\t\t\t\twidth: `${totalTableWidth}px`,\n\t\t\t\t\tminWidth: \"100%\",\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{items.map((virtualRow) => {\n\t\t\t\t\tconst row = rows[virtualRow.index];\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\t\twidth: `${totalTableWidth}px`,\n\t\t\t\t\t\t\t\tminWidth: \"100%\",\n\t\t\t\t\t\t\t\theight: `${virtualRow.size}px`,\n\t\t\t\t\t\t\t\ttransform: `translateY(${virtualRow.start}px)`,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"flex text-xs border-b border-zinc-800 hover:bg-zinc-800/50\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{row.getVisibleCells().map((cell) => (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={cell.id}\n\t\t\t\t\t\t\t\t\tclassName=\"shrink-0 p-2 border-r border-zinc-800\"\n\t\t\t\t\t\t\t\t\tstyle={{ width: `${cell.column.getSize()}px` }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{flexRender(cell.column.columnDef.cell, cell.getContext())}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{rows.length === 0 && (\n\t\t\t\t<div className=\"flex items-center justify-center h-24 text-zinc-400\">No results.</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n","import type { ExecuteQueryResult } from \"@db-studio/shared/types\";\nimport { Spinner } from \"@db-studio/ui/spinner\";\nimport JsonView from \"@uiw/react-json-view\";\nimport { vscodeTheme } from \"@uiw/react-json-view/vscode\";\nimport { useQueryState } from \"nuqs\";\nimport { useMemo } from \"react\";\nimport { CONSTANTS } from \"@/utils/constants\";\nimport { TableView } from \"./table-view\";\n\nexport const QueryResultContainer = ({\n\tresults,\n\tisLoading,\n\terror,\n}: {\n\tresults: ExecuteQueryResult | null;\n\tisLoading: boolean;\n\terror: Error | null;\n}) => {\n\tconst [showAs] = useQueryState(CONSTANTS.RUNNER_STATE_KEYS.SHOW_AS);\n\n\tconst renderResults = useMemo(() => {\n\t\tif (error) {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex h-full p-2\">\n\t\t\t\t\t<div className=\"text-sm\">Error: {error.message}</div>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (results?.message) {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex h-full p-2\">\n\t\t\t\t\t<p>{results.message}</p>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (!results || results.rows.length === 0) {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex h-full p-2\">\n\t\t\t\t\t<p>Run the query to see the results</p>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (showAs === \"json\") {\n\t\t\treturn (\n\t\t\t\t<div className=\"p-2\">\n\t\t\t\t\t<JsonView\n\t\t\t\t\t\tvalue={results?.rows ?? []}\n\t\t\t\t\t\tobjectSortKeys={true}\n\t\t\t\t\t\tdisplayObjectSize={false}\n\t\t\t\t\t\tdisplayDataTypes={false}\n\t\t\t\t\t\tindentWidth={14}\n\t\t\t\t\t\tcollapsed={2}\n\t\t\t\t\t\tshortenTextAfterLength={100}\n\t\t\t\t\t\thighlightUpdates={false}\n\t\t\t\t\t\tstyle={vscodeTheme}\n\t\t\t\t\t\tenableClipboard={false}\n\t\t\t\t\t\tclassName=\"size-full\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn <TableView results={results} />;\n\t}, [showAs, results, error]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"absolute bottom-0 left-0 right-0 border-t-2 border-zinc-80 flex flex-col bg-[#1E1E1E] w-full\"\n\t\t\tstyle={{ height: \"calc(100vh - 400px)\" }}\n\t\t>\n\t\t\t<div className=\"flex-1 overflow-auto w-full\">\n\t\t\t\t{isLoading ? (\n\t\t\t\t\t<div className=\"flex items-center justify-center h-full overflow-auto\">\n\t\t\t\t\t\t<Spinner\n\t\t\t\t\t\t\tsize=\"size-8\"\n\t\t\t\t\t\t\tcolor=\"bg-[#d4d4d4]\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\trenderResults\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../utils\";\n\nconst toggleVariants = cva(\n\t\"hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[state=on]:bg-zinc-900 gap-1 rounded-md text-xs font-medium transition-all [&_svg:not([class*='size-'])]:size-3.5 group/toggle hover:bg-muted inline-flex items-center justify-center whitespace-nowrap outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"bg-transparent\",\n\t\t\t\tghost: \"bg-transparent hover:bg-muted\",\n\t\t\t\toutline: \"border-input hover:bg-muted border bg-transparent\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: \"h-7 min-w-7 px-2\",\n\t\t\t\tsm: \"h-6 min-w-6 rounded-[min(var(--radius-md),8px)] px-1.5 text-[0.625rem] [&_svg:not([class*='size-'])]:size-3\",\n\t\t\t\tlg: \"h-8 min-w-8 px-2\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t},\n);\n\nfunction _Toggle({\n\tclassName,\n\tvariant = \"default\",\n\tsize = \"default\",\n\t...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n\treturn (\n\t\t<TogglePrimitive.Root\n\t\t\tdata-slot=\"toggle\"\n\t\t\tclassName={cn(toggleVariants({ variant, size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { _Toggle as Toggle, toggleVariants };\n","\"use client\";\n\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport type { VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { use } from \"react\";\nimport { cn } from \"../utils\";\nimport { toggleVariants } from \"./toggle\";\n\nconst ToggleGroupContext = React.createContext<\n\tVariantProps<typeof toggleVariants> & {\n\t\tspacing?: number;\n\t\torientation?: \"horizontal\" | \"vertical\";\n\t}\n>({\n\tsize: \"default\",\n\tvariant: \"default\",\n\tspacing: 0,\n\torientation: \"horizontal\",\n});\n\nfunction ToggleGroup({\n\tclassName,\n\tvariant,\n\tsize,\n\tspacing = 0,\n\torientation = \"horizontal\",\n\tchildren,\n\t...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n\tVariantProps<typeof toggleVariants> & {\n\t\tspacing?: number;\n\t\torientation?: \"horizontal\" | \"vertical\";\n\t}) {\n\treturn (\n\t\t<ToggleGroupPrimitive.Root\n\t\t\tdata-slot=\"toggle-group\"\n\t\t\tdata-variant={variant}\n\t\t\tdata-size={size}\n\t\t\tdata-spacing={spacing}\n\t\t\tdata-orientation={orientation}\n\t\t\tstyle={{ \"--gap\": spacing } as React.CSSProperties}\n\t\t\tclassName={cn(\n\t\t\t\t\"rounded-md data-[size=sm]:rounded-[min(var(--radius-md),8px)] group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ToggleGroupContext.Provider value={{ variant, size, spacing, orientation }}>\n\t\t\t\t{children}\n\t\t\t</ToggleGroupContext.Provider>\n\t\t</ToggleGroupPrimitive.Root>\n\t);\n}\n\nfunction ToggleGroupItem({\n\tclassName,\n\tchildren,\n\tvariant = \"default\",\n\tsize = \"default\",\n\t...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n\tVariantProps<typeof toggleVariants>) {\n\tconst context = use(ToggleGroupContext);\n\n\treturn (\n\t\t<ToggleGroupPrimitive.Item\n\t\t\tdata-slot=\"toggle-group-item\"\n\t\t\tdata-variant={context.variant || variant}\n\t\t\tdata-size={context.size || size}\n\t\t\tdata-spacing={context.spacing}\n\t\t\tclassName={cn(\n\t\t\t\t\"group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-md shrink-0 focus:z-10 focus-visible:z-10 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t\",\n\t\t\t\ttoggleVariants({\n\t\t\t\t\tvariant: context.variant || variant,\n\t\t\t\t\tsize: context.size || size,\n\t\t\t\t}),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</ToggleGroupPrimitive.Item>\n\t);\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","import { Button } from \"@db-studio/ui/button\";\nimport { ToggleGroup, ToggleGroupItem } from \"@db-studio/ui/toggle-group\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@db-studio/ui/tooltip\";\nimport { AlignLeft, Braces, Command, CornerDownLeft, Heart, Save, Table } from \"lucide-react\";\nimport { useQueryState } from \"nuqs\";\nimport { CONSTANTS } from \"@/utils/constants\";\nimport type { QueryResult } from \"../screens/runner-screen\";\n\nexport const RunnerHeader = ({\n\tisExecutingQuery,\n\thandleButtonClick,\n\thandleFormatQuery,\n\thandleSaveQuery,\n\thandleFavorite,\n\tisFavorite,\n\tqueryId,\n\thasUnsavedChanges,\n\tqueryResult,\n}: {\n\tisExecutingQuery: boolean;\n\thandleButtonClick: () => void;\n\thandleFormatQuery: () => void;\n\thandleSaveQuery: () => void;\n\thandleFavorite: () => void;\n\tisFavorite: boolean;\n\tqueryId: string;\n\thasUnsavedChanges: boolean;\n\tqueryResult: QueryResult | null;\n}) => {\n\tconst [showAs, setShowAs] = useQueryState(CONSTANTS.RUNNER_STATE_KEYS.SHOW_AS);\n\n\treturn (\n\t\t<header className=\"max-h-8 overflow-hidden border-b border-zinc-800 w-full flex items-center justify-between bg-zinc-950 sticky top-0 left-0 right-0 z-0\">\n\t\t\t<div className=\"flex items-center\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\tclassName=\"h-8! border-l-0 border-y-0 border-r border-black rounded-none bg-green-700/60 text-white hover:bg-green-800/60 gap-1 disabled:opacity-50\"\n\t\t\t\t\tonClick={handleButtonClick}\n\t\t\t\t\tdisabled={isExecutingQuery}\n\t\t\t\t\taria-label=\"Run the query\"\n\t\t\t\t>\n\t\t\t\t\tRun\n\t\t\t\t\t<Command className=\"size-3\" />\n\t\t\t\t\t<CornerDownLeft className=\"size-3\" />\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"h-8! border-l-0 border-y-0 border-r border-zinc-800 rounded-none\"\n\t\t\t\t\taria-label=\"Format the query\"\n\t\t\t\t\tonClick={handleFormatQuery}\n\t\t\t\t>\n\t\t\t\t\tFormat <AlignLeft className=\"size-3\" />\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"h-8! border-l-0 border-y-0 border-r border-zinc-800 rounded-none\"\n\t\t\t\t\taria-label=\"Save the query\"\n\t\t\t\t\tonClick={handleSaveQuery}\n\t\t\t\t>\n\t\t\t\t\tSave <Save className=\"size-3\" />\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"h-8! border-l-0 border-y-0 border-r border-zinc-800 rounded-none\"\n\t\t\t\t\taria-label=\"Favorite the query\"\n\t\t\t\t\tonClick={handleFavorite}\n\t\t\t\t>\n\t\t\t\t\t{isFavorite ? (\n\t\t\t\t\t\t<Heart className=\"size-3 fill-current\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Heart className=\"size-3\" />\n\t\t\t\t\t)}\n\t\t\t\t</Button>\n\n\t\t\t\t{queryId && hasUnsavedChanges && (\n\t\t\t\t\t<span className=\"text-xs px-2 text-muted-foreground\">Unsaved changes</span>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t<div className=\"flex items-center\">\n\t\t\t\t{queryResult && (\n\t\t\t\t\t<div className=\"flex items-center gap-1 px-2\">\n\t\t\t\t\t\t<span className=\"text-xs text-zinc-500\">\n\t\t\t\t\t\t\t{queryResult.data?.duration?.toFixed(2)}ms\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span className=\"text-xs text-zinc-500\">•</span>\n\t\t\t\t\t\t<span className=\"text-xs text-zinc-500\">\n\t\t\t\t\t\t\t{queryResult.data?.rowCount ?? 0} rows\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<ToggleGroup\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\t\tif (value === showAs) return;\n\t\t\t\t\t\tsetShowAs(value);\n\t\t\t\t\t}}\n\t\t\t\t\tvalue={showAs ?? undefined}\n\t\t\t\t\tclassName=\"h-8! rounded-none! border-l!\"\n\t\t\t\t>\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t<ToggleGroupItem\n\t\t\t\t\t\t\t\tvalue=\"table\"\n\t\t\t\t\t\t\t\taria-label=\"Toggle table\"\n\t\t\t\t\t\t\t\tclassName=\"rounded-none! h-8! aspect-square!\"\n\t\t\t\t\t\t\t\tdata-selected={showAs === \"table\"}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Table />\n\t\t\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\t<p>View as a table</p>\n\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t<ToggleGroupItem\n\t\t\t\t\t\t\t\tvalue=\"json\"\n\t\t\t\t\t\t\t\taria-label=\"Toggle JSON\"\n\t\t\t\t\t\t\t\tclassName=\"rounded-none! h-8! aspect-square!\"\n\t\t\t\t\t\t\t\tdata-selected={showAs === \"json\"}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Braces />\n\t\t\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\t<p>View as a JSON</p>\n\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</ToggleGroup>\n\t\t\t</div>\n\t\t</header>\n\t);\n};\n","import type { ExecuteQueryResult } from \"@db-studio/shared/types\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { posthogAnalytics } from \"@/lib/posthog\";\nimport { executeQuery as executeQueryRequest } from \"@/shared/api\";\nimport { useDatabaseStore } from \"@/stores/database.store\";\n\nexport const useExecuteQuery = () => {\n\tconst { selectedDatabase, dbType } = useDatabaseStore();\n\n\tconst {\n\t\tmutateAsync: executeQuery,\n\t\tisPending: isExecutingQuery,\n\t\terror: executeQueryError,\n\t} = useMutation<ExecuteQueryResult, Error, { query: string }>({\n\t\tmutationFn: async ({ query }) => {\n\t\t\tconst res = await executeQueryRequest({ query, db: selectedDatabase });\n\t\t\treturn res.data.data;\n\t\t},\n\t\tonSuccess: () => {\n\t\t\tif (dbType) posthogAnalytics.capture(\"query_executed\", { db_type: dbType });\n\t\t},\n\t});\n\n\treturn {\n\t\texecuteQuery,\n\t\tisExecutingQuery,\n\t\texecuteQueryError,\n\t};\n};\n","import type { ExecuteQueryResult } from \"@db-studio/shared/types\";\nimport { useNavigate } from \"@tanstack/react-router\";\nimport { lazy, Suspense, useCallback, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { useDatabaseStore } from \"@/stores/database.store\";\nimport { useQueriesStore } from \"@/stores/queries.store\";\nimport {\n\tMONGO_PLACEHOLDER_QUERY,\n\tPGSQL_PLACEHOLDER_QUERY,\n} from \"@/utils/constants/placeholders\";\nimport { QueryResultContainer } from \"../components/query-result-container\";\nimport { RunnerHeader } from \"../components/runner-header\";\nimport { useExecuteQuery } from \"../hooks/use-execute-query\";\n\nconst CodeEditor = lazy(() =>\n\timport(\"../components/code-editor\").then((module) => ({\n\t\tdefault: module.CodeEditor,\n\t})),\n);\n\nexport type QueryResult = {\n\tdata: ExecuteQueryResult;\n\tqueryId: string;\n};\n\nexport const RunnerScreen = ({ queryId }: { queryId?: string }) => {\n\tconst navigate = useNavigate();\n\tconst [queryResult, setQueryResult] = useState<QueryResult | undefined>(undefined);\n\tconst { getQuery, updateQuery, toggleFavorite, addQuery } = useQueriesStore();\n\tconst query = queryId ? getQuery(queryId) : null;\n\tconst isFavorite = query?.isFavorite ?? false;\n\tconst { executeQuery, isExecutingQuery, executeQueryError } = useExecuteQuery();\n\tconst [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);\n\tconst [currentQuery, setCurrentQuery] = useState<string>(\"\");\n\tconst { dbType } = useDatabaseStore();\n\n\tconst getInitialQuery = useCallback(() => {\n\t\tconst placeholder =\n\t\t\tdbType === \"mongodb\" ? MONGO_PLACEHOLDER_QUERY : PGSQL_PLACEHOLDER_QUERY;\n\t\tif (!query) return placeholder;\n\t\treturn query?.query ?? placeholder;\n\t}, [query, dbType]);\n\n\tconst handleExecuteQuery = useCallback(\n\t\tasync (query: string) => {\n\t\t\tif (!query.trim()) {\n\t\t\t\ttoast.error(\"Query is empty!\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\texecuteQuery({ query }).then((result) => {\n\t\t\t\tsetQueryResult({ data: result, queryId: queryId ?? \"\" });\n\t\t\t});\n\t\t},\n\t\t[executeQuery, queryId],\n\t);\n\n\tconst handleButtonClick = useCallback(() => {\n\t\tif (!currentQuery.trim()) {\n\t\t\ttoast.error(\"Query is empty!\");\n\t\t\treturn;\n\t\t}\n\n\t\thandleExecuteQuery(currentQuery);\n\t}, [handleExecuteQuery, currentQuery]);\n\n\tconst handleFavorite = useCallback(() => {\n\t\tif (!queryId) return;\n\t\ttoggleFavorite(queryId);\n\t\ttoast.success(isFavorite ? \"Query unfavorited\" : \"Query favorited\");\n\t}, [toggleFavorite, queryId, isFavorite]);\n\n\tconst handleFormatQuery = useCallback(() => {\n\t\t// passed to Monaco component\n\t}, []);\n\n\tconst handleSaveQuery = useCallback(() => {\n\t\tif (!currentQuery) return;\n\n\t\tif (!queryId) {\n\t\t\tconst newQueryId = addQuery();\n\t\t\tupdateQuery(newQueryId, { query: currentQuery });\n\t\t\tnavigate({\n\t\t\t\tto: \"/runner/$queryId\",\n\t\t\t\tparams: { queryId: newQueryId },\n\t\t\t});\n\t\t} else {\n\t\t\tupdateQuery(queryId, { query: currentQuery });\n\t\t}\n\t\tsetHasUnsavedChanges(false);\n\t\ttoast.success(\"Query saved\");\n\t}, [currentQuery, queryId, updateQuery, addQuery, navigate]);\n\n\treturn (\n\t\t<div className=\"flex-1 relative w-full flex flex-col\">\n\t\t\t<RunnerHeader\n\t\t\t\tisExecutingQuery={isExecutingQuery}\n\t\t\t\thandleButtonClick={handleButtonClick}\n\t\t\t\thandleFormatQuery={handleFormatQuery}\n\t\t\t\thandleSaveQuery={handleSaveQuery}\n\t\t\t\thandleFavorite={handleFavorite}\n\t\t\t\tisFavorite={isFavorite}\n\t\t\t\tqueryId={queryId ?? \"\"}\n\t\t\t\thasUnsavedChanges={hasUnsavedChanges}\n\t\t\t\tqueryResult={queryResult ?? null}\n\t\t\t/>\n\n\t\t\t<Suspense fallback={<div className=\"flex-1 bg-[#1E1E1E] size-full\" />}>\n\t\t\t\t<CodeEditor\n\t\t\t\t\tinitialQuery={getInitialQuery()}\n\t\t\t\t\tqueryId={queryId}\n\t\t\t\t\tsavedQuery={query?.query ?? \"\"}\n\t\t\t\t\tlanguage={dbType === \"mongodb\" ? \"json\" : \"pgsql\"}\n\t\t\t\t\tonQueryChange={setCurrentQuery}\n\t\t\t\t\tonUnsavedChanges={setHasUnsavedChanges}\n\t\t\t\t\tonExecuteQuery={handleExecuteQuery}\n\t\t\t\t\tonFormatQuery={handleFormatQuery}\n\t\t\t\t\tonSaveQuery={handleSaveQuery}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\n\t\t\t<QueryResultContainer\n\t\t\t\tresults={queryResult?.data ?? null}\n\t\t\t\tisLoading={isExecutingQuery}\n\t\t\t\terror={executeQueryError}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n"],"file":"query-runner-CRvSuMh-.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Ot as r}from"./radix-ui-DS4zDRqg.js";import{t}from"./query-runner-
|
|
1
|
+
import{Ot as r}from"./radix-ui-DS4zDRqg.js";import{t}from"./query-runner-CRvSuMh-.js";var e=r();function m(){return(0,e.jsx)(t,{})}export{m as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-
|
|
1
|
+
{"version":3,"file":"runner-CNit1IxV.js","names":["RunnerScreen","RouteComponent","component"],"sources":["../../src/routes/_pathlessLayout/runner/index.tsx?tsr-split=component"],"sourcesContent":["import { createFileRoute } from \"@tanstack/react-router\";\nimport { RunnerScreen } from \"@/features/query-runner\";\n\nexport const Route = createFileRoute(\"/_pathlessLayout/runner/\")({\n\tcomponent: RouteComponent,\n});\n\nfunction RouteComponent() {\n\treturn <RunnerScreen />;\n}\n"],"mappings":"gGAOA,SAASC,GAAiB,CACzB,SAAO,EAAA,KAAC,EAAD,CAAa,CAAA,CACrB"}
|
package/dist/web-dist/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="/image.png" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>db-studio</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-qlp0O2jT.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-b3L32Ng1.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/icons-B5bSDd0r.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/radix-ui-DS4zDRqg.js">
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "db-studio",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.9.
|
|
4
|
+
"version": "1.9.5",
|
|
5
5
|
"description": "Modern database client for PostgreSQL with spreadsheet-like grid, AI-powered SQL assistance, ER diagrams, fast data browsing and editing. CLI tool, upcoming desktop & web versions.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"database client",
|