@sqlrooms/sql-editor 0.15.0 → 0.16.1
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 +3 -4
- package/dist/SqlEditor.d.ts.map +1 -1
- package/dist/SqlEditor.js +22 -136
- package/dist/SqlEditor.js.map +1 -1
- package/dist/SqlEditorSlice.d.ts +58 -15
- package/dist/SqlEditorSlice.d.ts.map +1 -1
- package/dist/SqlEditorSlice.js +244 -94
- package/dist/SqlEditorSlice.js.map +1 -1
- package/dist/SqlMonacoEditor.d.ts.map +1 -1
- package/dist/SqlMonacoEditor.js +2 -1
- package/dist/SqlMonacoEditor.js.map +1 -1
- package/dist/components/CreateTableModal.d.ts.map +1 -0
- package/dist/{CreateTableModal.js → components/CreateTableModal.js} +4 -11
- package/dist/components/CreateTableModal.js.map +1 -0
- package/dist/components/DeleteSqlQueryModal.d.ts.map +1 -0
- package/dist/components/DeleteSqlQueryModal.js.map +1 -0
- package/dist/components/QueryEditorPanel.d.ts +9 -0
- package/dist/components/QueryEditorPanel.d.ts.map +1 -0
- package/dist/components/QueryEditorPanel.js +14 -0
- package/dist/components/QueryEditorPanel.js.map +1 -0
- package/dist/components/QueryEditorPanelActions.d.ts +5 -0
- package/dist/components/QueryEditorPanelActions.d.ts.map +1 -0
- package/dist/components/QueryEditorPanelActions.js +53 -0
- package/dist/components/QueryEditorPanelActions.js.map +1 -0
- package/dist/components/QueryEditorPanelEditor.d.ts +5 -0
- package/dist/components/QueryEditorPanelEditor.d.ts.map +1 -0
- package/dist/components/QueryEditorPanelEditor.js +45 -0
- package/dist/components/QueryEditorPanelEditor.js.map +1 -0
- package/dist/components/QueryEditorPanelTabsList.d.ts +5 -0
- package/dist/components/QueryEditorPanelTabsList.d.ts.map +1 -0
- package/dist/components/QueryEditorPanelTabsList.js +71 -0
- package/dist/components/QueryEditorPanelTabsList.js.map +1 -0
- package/dist/components/QueryResultPanel.d.ts +12 -0
- package/dist/components/QueryResultPanel.d.ts.map +1 -0
- package/dist/components/QueryResultPanel.js +30 -0
- package/dist/components/QueryResultPanel.js.map +1 -0
- package/dist/components/RenameSqlQueryModal.d.ts.map +1 -0
- package/dist/components/RenameSqlQueryModal.js +30 -0
- package/dist/components/RenameSqlQueryModal.js.map +1 -0
- package/dist/components/SqlEditorHeader.d.ts +15 -0
- package/dist/components/SqlEditorHeader.d.ts.map +1 -0
- package/dist/components/SqlEditorHeader.js +7 -0
- package/dist/components/SqlEditorHeader.js.map +1 -0
- package/dist/components/SqlQueryDataSourcesPanel.d.ts.map +1 -0
- package/dist/components/SqlQueryDataSourcesPanel.js.map +1 -0
- package/dist/components/SqlReferenceButton.d.ts +12 -0
- package/dist/components/SqlReferenceButton.d.ts.map +1 -0
- package/dist/components/SqlReferenceButton.js +10 -0
- package/dist/components/SqlReferenceButton.js.map +1 -0
- package/dist/components/TableStructurePanel.d.ts +13 -0
- package/dist/components/TableStructurePanel.d.ts.map +1 -0
- package/dist/components/TableStructurePanel.js +21 -0
- package/dist/components/TableStructurePanel.js.map +1 -0
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/package.json +19 -18
- package/dist/CreateTableModal.d.ts.map +0 -1
- package/dist/CreateTableModal.js.map +0 -1
- package/dist/DeleteSqlQueryModal.d.ts.map +0 -1
- package/dist/DeleteSqlQueryModal.js.map +0 -1
- package/dist/RenameSqlQueryModal.d.ts.map +0 -1
- package/dist/RenameSqlQueryModal.js +0 -27
- package/dist/RenameSqlQueryModal.js.map +0 -1
- package/dist/SqlQueryDataSourcesPanel.d.ts.map +0 -1
- package/dist/SqlQueryDataSourcesPanel.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -5
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js +0 -5
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/useMonacoEditor.d.ts +0 -13
- package/dist/hooks/useMonacoEditor.d.ts.map +0 -1
- package/dist/hooks/useMonacoEditor.js +0 -78
- package/dist/hooks/useMonacoEditor.js.map +0 -1
- package/dist/hooks/useQueryExecution.d.ts +0 -17
- package/dist/hooks/useQueryExecution.d.ts.map +0 -1
- package/dist/hooks/useQueryExecution.js +0 -61
- package/dist/hooks/useQueryExecution.js.map +0 -1
- package/dist/hooks/useQueryTabManagement.d.ts +0 -41
- package/dist/hooks/useQueryTabManagement.d.ts.map +0 -1
- package/dist/hooks/useQueryTabManagement.js +0 -95
- package/dist/hooks/useQueryTabManagement.js.map +0 -1
- package/dist/hooks/useTableManagement.d.ts +0 -14
- package/dist/hooks/useTableManagement.d.ts.map +0 -1
- package/dist/hooks/useTableManagement.js +0 -46
- package/dist/hooks/useTableManagement.js.map +0 -1
- /package/dist/{CreateTableModal.d.ts → components/CreateTableModal.d.ts} +0 -0
- /package/dist/{DeleteSqlQueryModal.d.ts → components/DeleteSqlQueryModal.d.ts} +0 -0
- /package/dist/{DeleteSqlQueryModal.js → components/DeleteSqlQueryModal.js} +0 -0
- /package/dist/{RenameSqlQueryModal.d.ts → components/RenameSqlQueryModal.d.ts} +0 -0
- /package/dist/{SqlQueryDataSourcesPanel.d.ts → components/SqlQueryDataSourcesPanel.d.ts} +0 -0
- /package/dist/{SqlQueryDataSourcesPanel.js → components/SqlQueryDataSourcesPanel.js} +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { TableSchemaTree } from '@sqlrooms/schema-tree';
|
|
3
|
+
import { cn, SpinnerPane } from '@sqlrooms/ui';
|
|
4
|
+
import { useMemo } from 'react';
|
|
5
|
+
import { useStoreWithSqlEditor } from '../SqlEditorSlice';
|
|
6
|
+
export const TableStructurePanel = ({ className, schema = '*', }) => {
|
|
7
|
+
// Get state from store
|
|
8
|
+
const schemaTrees = useStoreWithSqlEditor((s) => s.db.schemaTrees);
|
|
9
|
+
const filteredSchemaTrees = useMemo(() => {
|
|
10
|
+
if (schema === '*') {
|
|
11
|
+
return schemaTrees;
|
|
12
|
+
}
|
|
13
|
+
if (typeof schema === 'function') {
|
|
14
|
+
return schemaTrees?.filter((tree) => schema(tree.object.name));
|
|
15
|
+
}
|
|
16
|
+
return schemaTrees?.filter((tree) => tree.object.name === schema);
|
|
17
|
+
}, [schema, schemaTrees]);
|
|
18
|
+
const isRefreshing = useStoreWithSqlEditor((s) => s.db.isRefreshingTableSchemas);
|
|
19
|
+
return (_jsxs("div", { className: cn('relative flex h-full flex-col gap-2 overflow-auto px-1 py-2', className), children: [filteredSchemaTrees && (_jsx(TableSchemaTree, { schemaTrees: filteredSchemaTrees })), isRefreshing && (_jsx(SpinnerPane, { className: "bg-background/80 absolute inset-0 h-full" }))] }));
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=TableStructurePanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableStructurePanel.js","sourceRoot":"","sources":["../../src/components/TableStructurePanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAC,EAAE,EAAE,WAAW,EAAC,MAAM,cAAc,CAAC;AAC7C,OAAc,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAaxD,MAAM,CAAC,MAAM,mBAAmB,GAAuC,CAAC,EACtE,SAAS,EACT,MAAM,GAAG,GAAG,GACb,EAAE,EAAE;IACH,uBAAuB;IACvB,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE;QACvC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAE1B,MAAM,YAAY,GAAG,qBAAqB,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,wBAAwB,CACrC,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,6DAA6D,EAC7D,SAAS,CACV,aAEA,mBAAmB,IAAI,CACtB,KAAC,eAAe,IAAC,WAAW,EAAE,mBAAmB,GAAI,CACtD,EACA,YAAY,IAAI,CACf,KAAC,WAAW,IAAC,SAAS,EAAC,0CAA0C,GAAG,CACrE,IACG,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {TableSchemaTree} from '@sqlrooms/schema-tree';\nimport {cn, SpinnerPane} from '@sqlrooms/ui';\nimport React, {useMemo} from 'react';\nimport {useStoreWithSqlEditor} from '../SqlEditorSlice';\n\nexport interface TableStructurePanelProps {\n /** Custom class name for styling */\n className?: string;\n /** The database schema to use. Defaults to 'main'.\n * If '*' is provided, all tables will be shown.\n * If a function is provided, it will be used to filter the tables. */\n schema?: string | ((name: string) => boolean);\n /** Callback when a table is selected */\n onTableSelect?: (table: string | undefined) => void;\n}\n\nexport const TableStructurePanel: React.FC<TableStructurePanelProps> = ({\n className,\n schema = '*',\n}) => {\n // Get state from store\n const schemaTrees = useStoreWithSqlEditor((s) => s.db.schemaTrees);\n const filteredSchemaTrees = useMemo(() => {\n if (schema === '*') {\n return schemaTrees;\n }\n if (typeof schema === 'function') {\n return schemaTrees?.filter((tree) => schema(tree.object.name));\n }\n return schemaTrees?.filter((tree) => tree.object.name === schema);\n }, [schema, schemaTrees]);\n\n const isRefreshing = useStoreWithSqlEditor(\n (s) => s.db.isRefreshingTableSchemas,\n );\n\n return (\n <div\n className={cn(\n 'relative flex h-full flex-col gap-2 overflow-auto px-1 py-2',\n className,\n )}\n >\n {filteredSchemaTrees && (\n <TableSchemaTree schemaTrees={filteredSchemaTrees} />\n )}\n {isRefreshing && (\n <SpinnerPane className=\"bg-background/80 absolute inset-0 h-full\" />\n )}\n </div>\n );\n};\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,12 +2,20 @@
|
|
|
2
2
|
* {@include ../README.md}
|
|
3
3
|
* @packageDocumentation
|
|
4
4
|
*/
|
|
5
|
-
export { default as CreateTableModal } from './CreateTableModal';
|
|
5
|
+
export { default as CreateTableModal } from './components/CreateTableModal';
|
|
6
6
|
export { default as SqlEditor } from './SqlEditor';
|
|
7
7
|
export type { SqlEditorProps as Props } from './SqlEditor';
|
|
8
8
|
export { default as SqlEditorModal } from './SqlEditorModal';
|
|
9
9
|
export { createDefaultSqlEditorConfig, createSqlEditorSlice, SqlEditorSliceConfig, } from './SqlEditorSlice';
|
|
10
10
|
export type { SqlEditorSliceState } from './SqlEditorSlice';
|
|
11
|
-
export { SqlQueryDataSourcesPanel } from './SqlQueryDataSourcesPanel';
|
|
11
|
+
export { SqlQueryDataSourcesPanel } from './components/SqlQueryDataSourcesPanel';
|
|
12
12
|
export { SqlMonacoEditor } from './SqlMonacoEditor';
|
|
13
|
+
export { TableStructurePanel } from './components/TableStructurePanel';
|
|
14
|
+
export { QueryResultPanel } from './components/QueryResultPanel';
|
|
15
|
+
export { SqlEditorHeader } from './components/SqlEditorHeader';
|
|
16
|
+
export { SqlReferenceButton, SqlReferenceButtonContent, } from './components/SqlReferenceButton';
|
|
17
|
+
export { QueryEditorPanel } from './components/QueryEditorPanel';
|
|
18
|
+
export { QueryEditorPanelActions } from './components/QueryEditorPanelActions';
|
|
19
|
+
export { QueryEditorPanelTabsList } from './components/QueryEditorPanelTabsList';
|
|
20
|
+
export { QueryEditorPanelEditor } from './components/QueryEditorPanelEditor';
|
|
13
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,aAAa,CAAC;AACjD,YAAY,EAAC,cAAc,IAAI,KAAK,EAAC,MAAM,aAAa,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAC,mBAAmB,EAAC,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,uBAAuB,EAAC,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,10 +2,18 @@
|
|
|
2
2
|
* {@include ../README.md}
|
|
3
3
|
* @packageDocumentation
|
|
4
4
|
*/
|
|
5
|
-
export { default as CreateTableModal } from './CreateTableModal';
|
|
5
|
+
export { default as CreateTableModal } from './components/CreateTableModal';
|
|
6
6
|
export { default as SqlEditor } from './SqlEditor';
|
|
7
7
|
export { default as SqlEditorModal } from './SqlEditorModal';
|
|
8
8
|
export { createDefaultSqlEditorConfig, createSqlEditorSlice, SqlEditorSliceConfig, } from './SqlEditorSlice';
|
|
9
|
-
export { SqlQueryDataSourcesPanel } from './SqlQueryDataSourcesPanel';
|
|
9
|
+
export { SqlQueryDataSourcesPanel } from './components/SqlQueryDataSourcesPanel';
|
|
10
10
|
export { SqlMonacoEditor } from './SqlMonacoEditor';
|
|
11
|
+
export { TableStructurePanel } from './components/TableStructurePanel';
|
|
12
|
+
export { QueryResultPanel } from './components/QueryResultPanel';
|
|
13
|
+
export { SqlEditorHeader } from './components/SqlEditorHeader';
|
|
14
|
+
export { SqlReferenceButton, SqlReferenceButtonContent, } from './components/SqlReferenceButton';
|
|
15
|
+
export { QueryEditorPanel } from './components/QueryEditorPanel';
|
|
16
|
+
export { QueryEditorPanelActions } from './components/QueryEditorPanelActions';
|
|
17
|
+
export { QueryEditorPanelTabsList } from './components/QueryEditorPanelTabsList';
|
|
18
|
+
export { QueryEditorPanelEditor } from './components/QueryEditorPanelEditor';
|
|
11
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,uBAAuB,EAAC,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAC,wBAAwB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\nexport {default as CreateTableModal} from './components/CreateTableModal';\nexport {default as SqlEditor} from './SqlEditor';\nexport type {SqlEditorProps as Props} from './SqlEditor';\nexport {default as SqlEditorModal} from './SqlEditorModal';\nexport {\n createDefaultSqlEditorConfig,\n createSqlEditorSlice,\n SqlEditorSliceConfig,\n} from './SqlEditorSlice';\nexport type {SqlEditorSliceState} from './SqlEditorSlice';\nexport {SqlQueryDataSourcesPanel} from './components/SqlQueryDataSourcesPanel';\nexport {SqlMonacoEditor} from './SqlMonacoEditor';\nexport {TableStructurePanel} from './components/TableStructurePanel';\nexport {QueryResultPanel} from './components/QueryResultPanel';\nexport {SqlEditorHeader} from './components/SqlEditorHeader';\nexport {\n SqlReferenceButton,\n SqlReferenceButtonContent,\n} from './components/SqlReferenceButton';\nexport {QueryEditorPanel} from './components/QueryEditorPanel';\nexport {QueryEditorPanelActions} from './components/QueryEditorPanelActions';\nexport {QueryEditorPanelTabsList} from './components/QueryEditorPanelTabsList';\nexport {QueryEditorPanelEditor} from './components/QueryEditorPanelEditor';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqlrooms/sql-editor",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Ilya Boyandin <ilya@boyandin.me>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,33 +27,34 @@
|
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@hookform/resolvers": "^3.10.0",
|
|
29
29
|
"@monaco-editor/react": "^4.7.0",
|
|
30
|
-
"@sqlrooms/data-table": "0.
|
|
31
|
-
"@sqlrooms/duckdb": "0.
|
|
32
|
-
"@sqlrooms/layout": "0.
|
|
33
|
-
"@sqlrooms/monaco-editor": "0.
|
|
34
|
-
"@sqlrooms/project-builder": "0.
|
|
35
|
-
"@sqlrooms/project-config": "0.
|
|
36
|
-
"@sqlrooms/
|
|
37
|
-
"@sqlrooms/
|
|
38
|
-
"
|
|
30
|
+
"@sqlrooms/data-table": "0.16.1",
|
|
31
|
+
"@sqlrooms/duckdb": "0.16.1",
|
|
32
|
+
"@sqlrooms/layout": "0.16.1",
|
|
33
|
+
"@sqlrooms/monaco-editor": "0.16.1",
|
|
34
|
+
"@sqlrooms/project-builder": "0.16.1",
|
|
35
|
+
"@sqlrooms/project-config": "0.16.1",
|
|
36
|
+
"@sqlrooms/schema-tree": "0.16.1",
|
|
37
|
+
"@sqlrooms/ui": "0.16.1",
|
|
38
|
+
"@sqlrooms/utils": "0.16.1",
|
|
39
39
|
"d3-dsv": "^3.0.1",
|
|
40
40
|
"file-saver": "^2.0.5",
|
|
41
41
|
"immer": "^10.1.1",
|
|
42
42
|
"lucide-react": "^0.474.0",
|
|
43
43
|
"monaco-editor": "^0.52.2",
|
|
44
|
-
"react-hook-form": "^7.
|
|
45
|
-
"zod": "^3.
|
|
46
|
-
"zustand": "^5.0.
|
|
44
|
+
"react-hook-form": "^7.57.0",
|
|
45
|
+
"zod": "^3.25.57",
|
|
46
|
+
"zustand": "^5.0.5"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
|
-
"
|
|
50
|
-
"react
|
|
49
|
+
"apache-arrow": ">=17",
|
|
50
|
+
"react": ">=18",
|
|
51
|
+
"react-dom": ">=18"
|
|
51
52
|
},
|
|
52
53
|
"devDependencies": {
|
|
53
54
|
"@types/d3-dsv": "^3.0.7",
|
|
54
55
|
"@types/file-saver": "^2.0.7",
|
|
55
|
-
"@types/react": "^
|
|
56
|
-
"@types/react-dom": "^
|
|
56
|
+
"@types/react": "^19.1.7",
|
|
57
|
+
"@types/react-dom": "^19.1.6"
|
|
57
58
|
},
|
|
58
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "c2015b30f09c327c14008143d5c9752d9ebc3949"
|
|
59
60
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CreateTableModal.d.ts","sourceRoot":"","sources":["../src/CreateTableModal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAmB7D,OAAO,EAAC,EAAE,EAAc,MAAM,OAAO,CAAC;AAkBtC,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,qBAAqB,EAAE,CACrB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,KAClB,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA6G/C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CreateTableModal.js","sourceRoot":"","sources":["../src/CreateTableModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import {zodResolver} from '@hookform/resolvers/zod';\nimport {SqlQueryDataSource} from '@sqlrooms/project-builder';\nimport {\n Alert,\n AlertDescription,\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Input,\n} from '@sqlrooms/ui';\nimport {FC, useCallback} from 'react';\nimport {useForm} from 'react-hook-form';\nimport * as z from 'zod';\nimport {SqlMonacoEditor} from './SqlMonacoEditor';\n\nconst VALID_TABLE_OR_COLUMN_REGEX = /^[a-zA-Z_][a-zA-Z0-9_]{0,62}$/;\n\nconst formSchema = z.object({\n tableName: z\n .string()\n .min(1, 'Table name is required')\n .regex(\n VALID_TABLE_OR_COLUMN_REGEX,\n 'Only letters, digits and underscores are allowed; should not start with a digit',\n ),\n query: z.string().min(1, 'Query is required'),\n});\n\nexport type CreateTableModalProps = {\n query: string;\n isOpen: boolean;\n onClose: () => void;\n editDataSource?: SqlQueryDataSource;\n onAddOrUpdateSqlQuery: (\n tableName: string,\n query: string,\n oldTableName?: string,\n ) => Promise<void>;\n};\n\nconst CreateTableModal: FC<CreateTableModalProps> = (props) => {\n const {editDataSource, isOpen, onClose, onAddOrUpdateSqlQuery} = props;\n\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n values: {\n tableName: editDataSource?.tableName ?? '',\n query: editDataSource?.sqlQuery ?? props.query.trim(),\n },\n });\n\n const onSubmit = useCallback(\n async (values: z.infer<typeof formSchema>) => {\n try {\n const {tableName, query} = values;\n await onAddOrUpdateSqlQuery(\n tableName,\n query,\n editDataSource?.tableName,\n );\n form.reset();\n onClose();\n } catch (err) {\n form.setError('root', {type: 'manual', message: `${err}`});\n }\n },\n [onAddOrUpdateSqlQuery, editDataSource?.tableName, onClose, form],\n );\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent className=\"sm:max-w-[800px]\">\n {/* @ts-ignore */}\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-4\">\n <DialogHeader>\n <DialogTitle>\n {editDataSource\n ? 'Edit table query'\n : 'Create table from query'}\n </DialogTitle>\n {!editDataSource && (\n <DialogDescription>\n Create a new table from the results of an SQL query.\n </DialogDescription>\n )}\n </DialogHeader>\n\n {form.formState.errors.root && (\n <Alert variant=\"destructive\">\n <AlertDescription>\n {form.formState.errors.root.message}\n </AlertDescription>\n </Alert>\n )}\n\n <FormField\n // @ts-ignore\n control={form.control}\n name=\"tableName\"\n render={({field}) => (\n <FormItem>\n <FormLabel>Table name:</FormLabel>\n <FormControl>\n <Input {...field} className=\"font-mono\" autoFocus />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n\n <FormField\n // @ts-ignore\n control={form.control}\n name=\"query\"\n render={({field}) => (\n <FormItem>\n <FormLabel>SQL query:</FormLabel>\n <FormControl>\n <SqlMonacoEditor\n value={field.value}\n onChange={field.onChange}\n className=\"min-h-[200px]\"\n options={{\n scrollBeyondLastLine: false,\n automaticLayout: true,\n minimap: {enabled: false},\n wordWrap: 'on',\n }}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={form.formState.isSubmitting}>\n {editDataSource ? 'Update' : 'Create'}\n </Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default CreateTableModal;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteSqlQueryModal.d.ts","sourceRoot":"","sources":["../src/DeleteSqlQueryModal.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB,CAsBA,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteSqlQueryModal.js","sourceRoot":"","sources":["../src/DeleteSqlQueryModal.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,MAAM,GACP,MAAM,cAAc,CAAC;AAGtB,MAAM,mBAAmB,GAIpB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAC,EAAE,EAAE;IACpC,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,OAAO,EAAE,YAC9D,MAAC,aAAa,eACZ,MAAC,YAAY,eACX,KAAC,WAAW,+BAA2B,EACvC,KAAC,iBAAiB,4FAGE,IACP,EACf,MAAC,YAAY,eACX,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,OAAO,uBAEjC,EACT,KAAC,MAAM,IAAC,OAAO,EAAC,aAAa,EAAC,OAAO,EAAE,SAAS,uBAEvC,IACI,IACD,GACT,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC","sourcesContent":["import {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Button,\n} from '@sqlrooms/ui';\nimport React from 'react';\n\nconst DeleteSqlQueryModal: React.FC<{\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}> = ({isOpen, onClose, onConfirm}) => {\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete Query</DialogTitle>\n <DialogDescription>\n Are you sure you want to delete this query? This action cannot be\n undone.\n </DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button variant=\"destructive\" onClick={onConfirm}>\n Delete\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default DeleteSqlQueryModal;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RenameSqlQueryModal.d.ts","sourceRoot":"","sources":["../src/RenameSqlQueryModal.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAmDA,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, Button, Form, FormControl, FormField, FormItem, FormLabel, FormMessage, Input, } from '@sqlrooms/ui';
|
|
3
|
-
import { useForm } from 'react-hook-form';
|
|
4
|
-
import * as z from 'zod';
|
|
5
|
-
import { zodResolver } from '@hookform/resolvers/zod';
|
|
6
|
-
const formSchema = z.object({
|
|
7
|
-
queryName: z.string().min(1, 'Query name is required'),
|
|
8
|
-
});
|
|
9
|
-
const RenameSqlQueryModal = ({ isOpen, onClose, initialName, onRename }) => {
|
|
10
|
-
const form = useForm({
|
|
11
|
-
resolver: zodResolver(formSchema),
|
|
12
|
-
defaultValues: {
|
|
13
|
-
queryName: initialName,
|
|
14
|
-
},
|
|
15
|
-
});
|
|
16
|
-
function onSubmit(values) {
|
|
17
|
-
onRename(values.queryName);
|
|
18
|
-
onClose();
|
|
19
|
-
}
|
|
20
|
-
return (_jsx(Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose(), children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Rename Query" }) }), _jsx(Form, { ...form, children: _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "space-y-4", children: [_jsx(FormField
|
|
21
|
-
// @ts-ignore
|
|
22
|
-
, {
|
|
23
|
-
// @ts-ignore
|
|
24
|
-
control: form.control, name: "queryName", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Query Name" }), _jsx(FormControl, { children: _jsx(Input, { ...field, autoFocus: true, placeholder: "Enter query name" }) }), _jsx(FormMessage, {})] })) }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }), _jsx(Button, { type: "submit", children: "Save" })] })] }) })] }) }));
|
|
25
|
-
};
|
|
26
|
-
export default RenameSqlQueryModal;
|
|
27
|
-
//# sourceMappingURL=RenameSqlQueryModal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RenameSqlQueryModal.js","sourceRoot":"","sources":["../src/RenameSqlQueryModal.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,MAAM,EACN,IAAI,EACJ,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,KAAK,GACN,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AAEpD,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC;CACvD,CAAC,CAAC;AAIH,MAAM,mBAAmB,GAKpB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAC,EAAE,EAAE;IAChD,MAAM,IAAI,GAAG,OAAO,CAAW;QAC7B,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC;QACjC,aAAa,EAAE;YACb,SAAS,EAAE,WAAW;SACvB;KACF,CAAC,CAAC;IAEH,SAAS,QAAQ,CAAC,MAAgB;QAChC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,OAAO,EAAE,YAC9D,MAAC,aAAa,eACZ,KAAC,YAAY,cACX,KAAC,WAAW,+BAA2B,GAC1B,EAEf,KAAC,IAAI,OAAK,IAAI,YACZ,gBAAM,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAC,WAAW,aAChE,KAAC,SAAS;4BACR,aAAa;;gCAAb,aAAa;gCACb,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,IAAI,EAAC,WAAW,EAChB,MAAM,EAAE,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE,CAAC,CACnB,MAAC,QAAQ,eACP,KAAC,SAAS,6BAAuB,EACjC,KAAC,WAAW,cACV,KAAC,KAAK,OACA,KAAK,EACT,SAAS,QACT,WAAW,EAAC,kBAAkB,GAC9B,GACU,EACd,KAAC,WAAW,KAAG,IACN,CACZ,GACD,EACF,MAAC,YAAY,eACX,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,OAAO,uBAE/C,EACT,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,qBAAc,IACtB,IACV,GACF,IACO,GACT,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC","sourcesContent":["import {\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Button,\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Input,\n} from '@sqlrooms/ui';\nimport React from 'react';\nimport {useForm} from 'react-hook-form';\nimport * as z from 'zod';\nimport {zodResolver} from '@hookform/resolvers/zod';\n\nconst formSchema = z.object({\n queryName: z.string().min(1, 'Query name is required'),\n});\n\ntype FormData = z.infer<typeof formSchema>;\n\nconst RenameSqlQueryModal: React.FC<{\n isOpen: boolean;\n onClose: () => void;\n initialName: string;\n onRename: (newName: string) => void;\n}> = ({isOpen, onClose, initialName, onRename}) => {\n const form = useForm<FormData>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n queryName: initialName,\n },\n });\n\n function onSubmit(values: FormData) {\n onRename(values.queryName);\n onClose();\n }\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Rename Query</DialogTitle>\n </DialogHeader>\n {/* @ts-ignore */}\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-4\">\n <FormField\n // @ts-ignore\n control={form.control}\n name=\"queryName\"\n render={({field}) => (\n <FormItem>\n <FormLabel>Query Name</FormLabel>\n <FormControl>\n <Input\n {...field}\n autoFocus\n placeholder=\"Enter query name\"\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\">Save</Button>\n </DialogFooter>\n </form>\n </Form>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default RenameSqlQueryModal;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SqlQueryDataSourcesPanel.d.ts","sourceRoot":"","sources":["../src/SqlQueryDataSourcesPanel.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAgB7D,OAAO,EAAC,EAAE,EAAwB,MAAM,OAAO,CAAC;AAGhD,QAAA,MAAM,wBAAwB,EAAE,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;CACxC,CAoHA,CAAC;AAEF,OAAO,EAAC,wBAAwB,EAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SqlQueryDataSourcesPanel.js","sourceRoot":"","sources":["../src/SqlQueryDataSourcesPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n DataSourceStatus,\n useBaseProjectBuilderStore,\n} from '@sqlrooms/project-builder';\nimport {SqlQueryDataSource} from '@sqlrooms/project-builder';\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@sqlrooms/ui';\nimport {\n EllipsisIcon,\n FileIcon,\n PencilIcon,\n PlusIcon,\n RefreshCcwIcon,\n XIcon,\n} from 'lucide-react';\nimport {FC, useCallback, useState} from 'react';\nimport CreateTableModal from './CreateTableModal';\n\nconst SqlQueryDataSourcesPanel: FC<{\n isReadOnly?: boolean;\n queryDataSources: SqlQueryDataSource[];\n}> = ({queryDataSources, isReadOnly}) => {\n const [selectedDataSource, setSelectedDataSource] =\n useState<SqlQueryDataSource>();\n const [isOpen, setIsOpen] = useState(false);\n const dataSourceStates = useBaseProjectBuilderStore(\n (state) => state.project.dataSourceStates,\n );\n const removeSqlQueryDataSource = useBaseProjectBuilderStore(\n (state) => state.project.removeSqlQueryDataSource,\n );\n\n const handleEdit = useCallback((dataSource: SqlQueryDataSource) => {\n setSelectedDataSource(dataSource);\n setIsOpen(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setSelectedDataSource(undefined);\n }, []);\n\n const handleRemove = useCallback(\n (dataSource: SqlQueryDataSource) => {\n const {tableName} = dataSource;\n removeSqlQueryDataSource(tableName);\n },\n [removeSqlQueryDataSource],\n );\n\n const addOrUpdateSqlQueryDataSource = useBaseProjectBuilderStore(\n (state) => state.project.addOrUpdateSqlQueryDataSource,\n );\n\n return (\n <div className=\"flex flex-grow flex-col overflow-auto\">\n <div className=\"flex flex-col items-stretch\">\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => setIsOpen(true)}\n disabled={isReadOnly}\n >\n <PlusIcon className=\"mr-2 h-4 w-4\" />\n Add\n </Button>\n </div>\n <CreateTableModal\n isOpen={isOpen}\n onClose={handleClose}\n editDataSource={selectedDataSource}\n query=\"\"\n onAddOrUpdateSqlQuery={addOrUpdateSqlQueryDataSource}\n />\n\n <div className=\"flex flex-grow flex-col overflow-auto\">\n {queryDataSources.map((dataSource) => (\n <div key={dataSource.tableName} className=\"flex flex-col gap-1 p-2\">\n <div className=\"flex cursor-pointer flex-row items-center gap-1\">\n <div className=\"w-[15px] flex-none\">\n <FileIcon className=\"w-[15px]\" />\n </div>\n <div className=\"flex-1 overflow-hidden text-ellipsis\">\n <span className=\"break-words text-xs\">\n {dataSource.tableName}\n </span>\n </div>\n <div className=\"flex-none\">\n {!isReadOnly ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"text-muted-foreground h-6 w-6\"\n >\n <EllipsisIcon className=\"h-5 w-5\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => handleEdit(dataSource)}>\n <PencilIcon className=\"mr-2 h-4 w-4\" />\n Edit\n </DropdownMenuItem>\n <DropdownMenuItem disabled>\n <RefreshCcwIcon className=\"mr-2 h-4 w-4\" />\n Refresh\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => handleRemove(dataSource)}\n >\n <XIcon className=\"mr-2 h-4 w-4\" />\n Remove from project\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n </div>\n </div>\n <div className=\"flex flex-row items-center gap-1\">\n {dataSourceStates[dataSource.tableName]?.status ===\n DataSourceStatus.ERROR ? (\n <div className=\"bg-destructive/15 text-destructive flex-1 rounded p-1 text-xs\">\n {dataSourceStates[dataSource.tableName]?.message}\n </div>\n ) : dataSourceStates[dataSource.tableName]?.status ===\n DataSourceStatus.FETCHING ? (\n <div className=\"bg-secondary h-1 w-full overflow-hidden rounded\">\n <div className=\"bg-primary h-full animate-pulse\" />\n </div>\n ) : null}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nexport {SqlQueryDataSourcesPanel};\n"]}
|
package/dist/hooks/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
|
package/dist/hooks/index.js
DELETED
package/dist/hooks/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC,CAAC,mDAAmD;AAC5F,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC","sourcesContent":["export * from './useQueryTabManagement'; // Deprecated - use SqlEditorSlice methods directly\nexport * from './useTableManagement';\nexport * from './useQueryExecution';\nexport * from './useMonacoEditor';\n"]}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
type EditorInstance = any;
|
|
2
|
-
type MonacoInstance = any;
|
|
3
|
-
/**
|
|
4
|
-
* Hook for managing Monaco editor instances and keyboard shortcuts
|
|
5
|
-
*/
|
|
6
|
-
export declare function useMonacoEditor(): {
|
|
7
|
-
editorInstances: Record<string, any>;
|
|
8
|
-
handleEditorMount: (editor: EditorInstance, monaco: MonacoInstance, queryId: string, onRunQuery: () => Promise<void>) => void;
|
|
9
|
-
getQueryText: (queryId: string, defaultQuery: string) => string;
|
|
10
|
-
setRunQueryHandler: (handler: () => Promise<void>) => void;
|
|
11
|
-
};
|
|
12
|
-
export {};
|
|
13
|
-
//# sourceMappingURL=useMonacoEditor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMonacoEditor.d.ts","sourceRoot":"","sources":["../../src/hooks/useMonacoEditor.ts"],"names":[],"mappings":"AAEA,KAAK,cAAc,GAAG,GAAG,CAAC;AAC1B,KAAK,cAAc,GAAG,GAAG,CAAC;AAE1B;;GAEG;AACH,wBAAgB,eAAe;;gCAsBjB,cAAc,UACd,cAAc,WACb,MAAM,cACH,MAAM,OAAO,CAAC,IAAI,CAAC;4BAoBvB,MAAM,gBAAgB,MAAM,KAAG,MAAM;kCAhCA,MAAM,OAAO,CAAC,IAAI,CAAC;EAuFrE"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { useRef, useState, useEffect, useCallback } from 'react';
|
|
2
|
-
/**
|
|
3
|
-
* Hook for managing Monaco editor instances and keyboard shortcuts
|
|
4
|
-
*/
|
|
5
|
-
export function useMonacoEditor() {
|
|
6
|
-
// Store editor instances for each query tab
|
|
7
|
-
const [editorInstances, setEditorInstances] = useState({});
|
|
8
|
-
// Use a ref for the run query function to avoid dependency issues
|
|
9
|
-
// This ref is NOT for Zustand selectors, it's for function reference stability
|
|
10
|
-
const handleRunQueryRef = useRef(async () => { });
|
|
11
|
-
/**
|
|
12
|
-
* Set the run query handler reference
|
|
13
|
-
*/
|
|
14
|
-
const setRunQueryHandler = useCallback((handler) => {
|
|
15
|
-
handleRunQueryRef.current = handler;
|
|
16
|
-
}, []);
|
|
17
|
-
/**
|
|
18
|
-
* Handle editor mounting and setup keyboard shortcuts
|
|
19
|
-
*/
|
|
20
|
-
const handleEditorMount = useCallback((editor, monaco, queryId, onRunQuery) => {
|
|
21
|
-
// Store the editor instance
|
|
22
|
-
setEditorInstances((prev) => ({
|
|
23
|
-
...prev,
|
|
24
|
-
[queryId]: editor,
|
|
25
|
-
}));
|
|
26
|
-
// Add Cmd/Ctrl+Enter keyboard shortcut to run query
|
|
27
|
-
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter, () => {
|
|
28
|
-
void handleRunQueryRef.current();
|
|
29
|
-
});
|
|
30
|
-
}, []);
|
|
31
|
-
/**
|
|
32
|
-
* Get selected text or entire query from the editor
|
|
33
|
-
*/
|
|
34
|
-
const getQueryText = useCallback((queryId, defaultQuery) => {
|
|
35
|
-
const editor = editorInstances[queryId];
|
|
36
|
-
if (!editor)
|
|
37
|
-
return defaultQuery;
|
|
38
|
-
const selection = editor.getSelection();
|
|
39
|
-
if (selection &&
|
|
40
|
-
!selection.isEmpty() &&
|
|
41
|
-
typeof editor.getModel().getValueInRange === 'function') {
|
|
42
|
-
// Return selected text
|
|
43
|
-
return editor.getModel().getValueInRange(selection);
|
|
44
|
-
}
|
|
45
|
-
// Return the entire query if no selection
|
|
46
|
-
return defaultQuery;
|
|
47
|
-
}, [editorInstances]);
|
|
48
|
-
/**
|
|
49
|
-
* Setup global keyboard shortcuts for running queries
|
|
50
|
-
*/
|
|
51
|
-
useEffect(() => {
|
|
52
|
-
// This global event listener is a fallback for when the editor doesn't have focus
|
|
53
|
-
const handleKeyDown = (evt) => {
|
|
54
|
-
if (evt instanceof KeyboardEvent &&
|
|
55
|
-
evt.key === 'Enter' &&
|
|
56
|
-
(evt.metaKey || evt.ctrlKey || evt.shiftKey)) {
|
|
57
|
-
// Check if the event target is not part of the Monaco editor
|
|
58
|
-
const target = evt.target;
|
|
59
|
-
const isMonacoEditor = target.closest('.monaco-editor');
|
|
60
|
-
// Only handle the event if it's not already being handled by Monaco
|
|
61
|
-
if (!isMonacoEditor) {
|
|
62
|
-
void handleRunQueryRef.current();
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
globalThis.addEventListener('keydown', handleKeyDown);
|
|
67
|
-
return () => {
|
|
68
|
-
globalThis.removeEventListener('keydown', handleKeyDown);
|
|
69
|
-
};
|
|
70
|
-
}, []);
|
|
71
|
-
return {
|
|
72
|
-
editorInstances,
|
|
73
|
-
handleEditorMount,
|
|
74
|
-
getQueryText,
|
|
75
|
-
setRunQueryHandler,
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=useMonacoEditor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMonacoEditor.js","sourceRoot":"","sources":["../../src/hooks/useMonacoEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import {useRef, useState, useEffect, useCallback} from 'react';\n\ntype EditorInstance = any;\ntype MonacoInstance = any;\n\n/**\n * Hook for managing Monaco editor instances and keyboard shortcuts\n */\nexport function useMonacoEditor() {\n // Store editor instances for each query tab\n const [editorInstances, setEditorInstances] = useState<\n Record<string, EditorInstance>\n >({});\n\n // Use a ref for the run query function to avoid dependency issues\n // This ref is NOT for Zustand selectors, it's for function reference stability\n const handleRunQueryRef = useRef<() => Promise<void>>(async () => {});\n\n /**\n * Set the run query handler reference\n */\n const setRunQueryHandler = useCallback((handler: () => Promise<void>) => {\n handleRunQueryRef.current = handler;\n }, []);\n\n /**\n * Handle editor mounting and setup keyboard shortcuts\n */\n const handleEditorMount = useCallback(\n (\n editor: EditorInstance,\n monaco: MonacoInstance,\n queryId: string,\n onRunQuery: () => Promise<void>,\n ) => {\n // Store the editor instance\n setEditorInstances((prev) => ({\n ...prev,\n [queryId]: editor,\n }));\n\n // Add Cmd/Ctrl+Enter keyboard shortcut to run query\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter, () => {\n void handleRunQueryRef.current();\n });\n },\n [],\n );\n\n /**\n * Get selected text or entire query from the editor\n */\n const getQueryText = useCallback(\n (queryId: string, defaultQuery: string): string => {\n const editor = editorInstances[queryId];\n if (!editor) return defaultQuery;\n\n const selection = editor.getSelection();\n if (\n selection &&\n !selection.isEmpty() &&\n typeof editor.getModel().getValueInRange === 'function'\n ) {\n // Return selected text\n return editor.getModel().getValueInRange(selection);\n }\n\n // Return the entire query if no selection\n return defaultQuery;\n },\n [editorInstances],\n );\n\n /**\n * Setup global keyboard shortcuts for running queries\n */\n useEffect(() => {\n // This global event listener is a fallback for when the editor doesn't have focus\n const handleKeyDown = (evt: Event) => {\n if (\n evt instanceof KeyboardEvent &&\n evt.key === 'Enter' &&\n (evt.metaKey || evt.ctrlKey || evt.shiftKey)\n ) {\n // Check if the event target is not part of the Monaco editor\n const target = evt.target as HTMLElement;\n const isMonacoEditor = target.closest('.monaco-editor');\n\n // Only handle the event if it's not already being handled by Monaco\n if (!isMonacoEditor) {\n void handleRunQueryRef.current();\n }\n }\n };\n\n globalThis.addEventListener('keydown', handleKeyDown);\n\n return () => {\n globalThis.removeEventListener('keydown', handleKeyDown);\n };\n }, []);\n\n return {\n editorInstances,\n handleEditorMount,\n getQueryText,\n setRunQueryHandler,\n };\n}\n"]}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Table } from 'apache-arrow';
|
|
2
|
-
/**
|
|
3
|
-
* Hook for executing SQL queries and managing results
|
|
4
|
-
*/
|
|
5
|
-
export declare function useQueryExecution(schema?: string): {
|
|
6
|
-
results: Table<any> | undefined;
|
|
7
|
-
resultsTableData: {
|
|
8
|
-
data: ArrayLike<any>;
|
|
9
|
-
columns: import("@tanstack/table-core").ColumnDef<any, any>[];
|
|
10
|
-
} | undefined;
|
|
11
|
-
loading: boolean;
|
|
12
|
-
error: string | null;
|
|
13
|
-
runQuery: (q: string) => Promise<Table<any> | undefined>;
|
|
14
|
-
exportResults: () => void;
|
|
15
|
-
clearResults: () => void;
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=useQueryExecution.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryExecution.d.ts","sourceRoot":"","sources":["../../src/hooks/useQueryExecution.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAInC;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,MAAe;;;;;;;;kBAkB3C,MAAM;;;EAgDnB"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { useState, useCallback } from 'react';
|
|
2
|
-
import { useArrowDataTable } from '@sqlrooms/data-table';
|
|
3
|
-
import { useStoreWithSqlEditor } from '../SqlEditorSlice';
|
|
4
|
-
/**
|
|
5
|
-
* Hook for executing SQL queries and managing results
|
|
6
|
-
*/
|
|
7
|
-
export function useQueryExecution(schema = 'main') {
|
|
8
|
-
const [results, setResults] = useState();
|
|
9
|
-
const resultsTableData = useArrowDataTable(results);
|
|
10
|
-
const [loading, setLoading] = useState(false);
|
|
11
|
-
const [error, setError] = useState(null);
|
|
12
|
-
// Get functions from SqlEditorSlice directly
|
|
13
|
-
const executeQueryFromSlice = useStoreWithSqlEditor((s) => s.sqlEditor.executeQuery);
|
|
14
|
-
const exportResultsToCsv = useStoreWithSqlEditor((s) => s.sqlEditor.exportResultsToCsv);
|
|
15
|
-
/**
|
|
16
|
-
* Execute a SQL query
|
|
17
|
-
*/
|
|
18
|
-
const runQuery = useCallback(async (q) => {
|
|
19
|
-
try {
|
|
20
|
-
setLoading(true);
|
|
21
|
-
setError(null);
|
|
22
|
-
const { results: queryResults, error: queryError } = await executeQueryFromSlice(q, schema);
|
|
23
|
-
if (queryError) {
|
|
24
|
-
setError(queryError);
|
|
25
|
-
setResults(undefined);
|
|
26
|
-
}
|
|
27
|
-
else if (queryResults) {
|
|
28
|
-
setResults(queryResults);
|
|
29
|
-
}
|
|
30
|
-
return queryResults;
|
|
31
|
-
}
|
|
32
|
-
finally {
|
|
33
|
-
setLoading(false);
|
|
34
|
-
}
|
|
35
|
-
}, [executeQueryFromSlice, schema]);
|
|
36
|
-
/**
|
|
37
|
-
* Export query results to CSV
|
|
38
|
-
*/
|
|
39
|
-
const exportResults = useCallback(() => {
|
|
40
|
-
if (!results)
|
|
41
|
-
return;
|
|
42
|
-
exportResultsToCsv(results);
|
|
43
|
-
}, [exportResultsToCsv, results]);
|
|
44
|
-
/**
|
|
45
|
-
* Clear current query results
|
|
46
|
-
*/
|
|
47
|
-
const clearResults = useCallback(() => {
|
|
48
|
-
setResults(undefined);
|
|
49
|
-
setError(null);
|
|
50
|
-
}, []);
|
|
51
|
-
return {
|
|
52
|
-
results,
|
|
53
|
-
resultsTableData,
|
|
54
|
-
loading,
|
|
55
|
-
error,
|
|
56
|
-
runQuery,
|
|
57
|
-
exportResults,
|
|
58
|
-
clearResults,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=useQueryExecution.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryExecution.js","sourceRoot":"","sources":["../../src/hooks/useQueryExecution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,WAAW,EAAC,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAExD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB,MAAM;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAS,CAAC;IAChD,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,6CAA6C;IAC7C,MAAM,qBAAqB,GAAG,qBAAqB,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAChC,CAAC;IACF,MAAM,kBAAkB,GAAG,qBAAqB,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CACtC,CAAC;IAEF;;OAEG;IACH,MAAM,QAAQ,GAAG,WAAW,CAC1B,KAAK,EAAE,CAAS,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEf,MAAM,EAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAC,GAC9C,MAAM,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAEzC,IAAI,UAAU,EAAE,CAAC;gBACf,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACrB,UAAU,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,YAAY,EAAE,CAAC;gBACxB,UAAU,CAAC,YAAY,CAAC,CAAC;YAC3B,CAAC;YAED,OAAO,YAAY,CAAC;QACtB,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EACD,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAChC,CAAC;IAEF;;OAEG;IACH,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC;IAElC;;OAEG;IACH,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,UAAU,CAAC,SAAS,CAAC,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,OAAO;QACP,gBAAgB;QAChB,OAAO;QACP,KAAK;QACL,QAAQ;QACR,aAAa;QACb,YAAY;KACb,CAAC;AACJ,CAAC","sourcesContent":["import {useState, useCallback} from 'react';\nimport {Table} from 'apache-arrow';\nimport {useArrowDataTable} from '@sqlrooms/data-table';\nimport {useStoreWithSqlEditor} from '../SqlEditorSlice';\n\n/**\n * Hook for executing SQL queries and managing results\n */\nexport function useQueryExecution(schema: string = 'main') {\n const [results, setResults] = useState<Table>();\n const resultsTableData = useArrowDataTable(results);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Get functions from SqlEditorSlice directly\n const executeQueryFromSlice = useStoreWithSqlEditor(\n (s) => s.sqlEditor.executeQuery,\n );\n const exportResultsToCsv = useStoreWithSqlEditor(\n (s) => s.sqlEditor.exportResultsToCsv,\n );\n\n /**\n * Execute a SQL query\n */\n const runQuery = useCallback(\n async (q: string) => {\n try {\n setLoading(true);\n setError(null);\n\n const {results: queryResults, error: queryError} =\n await executeQueryFromSlice(q, schema);\n\n if (queryError) {\n setError(queryError);\n setResults(undefined);\n } else if (queryResults) {\n setResults(queryResults);\n }\n\n return queryResults;\n } finally {\n setLoading(false);\n }\n },\n [executeQueryFromSlice, schema],\n );\n\n /**\n * Export query results to CSV\n */\n const exportResults = useCallback(() => {\n if (!results) return;\n exportResultsToCsv(results);\n }, [exportResultsToCsv, results]);\n\n /**\n * Clear current query results\n */\n const clearResults = useCallback(() => {\n setResults(undefined);\n setError(null);\n }, []);\n\n return {\n results,\n resultsTableData,\n loading,\n error,\n runQuery,\n exportResults,\n clearResults,\n };\n}\n"]}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
export type SqlQuery = {
|
|
2
|
-
id: string;
|
|
3
|
-
name: string;
|
|
4
|
-
query: string;
|
|
5
|
-
};
|
|
6
|
-
/**
|
|
7
|
-
* Hook for managing query tabs (adding, renaming, deleting)
|
|
8
|
-
*
|
|
9
|
-
* @deprecated Use the methods directly from SqlEditorSlice instead
|
|
10
|
-
*/
|
|
11
|
-
export declare function useQueryTabManagement(defaultQuery?: string): {
|
|
12
|
-
queries: {
|
|
13
|
-
query: string;
|
|
14
|
-
name: string;
|
|
15
|
-
id: string;
|
|
16
|
-
}[];
|
|
17
|
-
selectedQueryId: string;
|
|
18
|
-
queryToDelete: string | null;
|
|
19
|
-
queryToRename: {
|
|
20
|
-
id: string;
|
|
21
|
-
name: string;
|
|
22
|
-
} | null;
|
|
23
|
-
getCurrentQuery: () => string;
|
|
24
|
-
handleTabChange: (value: string) => void;
|
|
25
|
-
handleUpdateQuery: (value: string | undefined) => void;
|
|
26
|
-
handleNewQuery: () => {
|
|
27
|
-
id: string;
|
|
28
|
-
name: string;
|
|
29
|
-
query: string;
|
|
30
|
-
};
|
|
31
|
-
handleStartRename: (queryId: string, currentName: string, event: React.MouseEvent) => void;
|
|
32
|
-
handleFinishRename: (newName: string) => void;
|
|
33
|
-
handleDeleteQuery: (queryId: string, event: React.MouseEvent) => void;
|
|
34
|
-
handleConfirmDeleteQuery: () => void;
|
|
35
|
-
setQueryToDelete: import("react").Dispatch<import("react").SetStateAction<string | null>>;
|
|
36
|
-
setQueryToRename: import("react").Dispatch<import("react").SetStateAction<{
|
|
37
|
-
id: string;
|
|
38
|
-
name: string;
|
|
39
|
-
} | null>>;
|
|
40
|
-
};
|
|
41
|
-
//# sourceMappingURL=useQueryTabManagement.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryTabManagement.d.ts","sourceRoot":"","sources":["../../src/hooks/useQueryTabManagement.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,GAAE,MAAW;;;;;;;;;YAyBvD,MAAM;cACJ,MAAM;;;6BAcJ,MAAM;+BAUN,MAAM,GAAG,SAAS;;;;;;iCAkBhB,MAAM,eAAe,MAAM,SAAS,KAAK,CAAC,UAAU;kCAWpD,MAAM;iCAaN,MAAM,SAAS,KAAK,CAAC,UAAU;;;;YAnErC,MAAM;cACJ,MAAM;;EAmGf"}
|