@sqlrooms/room-shell 0.17.0
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/LICENSE.md +9 -0
- package/README.md +722 -0
- package/dist/RoomBuilder.d.ts +3 -0
- package/dist/RoomBuilder.d.ts.map +1 -0
- package/dist/RoomBuilder.js +28 -0
- package/dist/RoomBuilder.js.map +1 -0
- package/dist/RoomShell.d.ts +38 -0
- package/dist/RoomShell.d.ts.map +1 -0
- package/dist/RoomShell.js +47 -0
- package/dist/RoomShell.js.map +1 -0
- package/dist/RoomShellSidebarButtons.d.ts +19 -0
- package/dist/RoomShellSidebarButtons.d.ts.map +1 -0
- package/dist/RoomShellSidebarButtons.js +31 -0
- package/dist/RoomShellSidebarButtons.js.map +1 -0
- package/dist/RoomShellStore.d.ts +91 -0
- package/dist/RoomShellStore.d.ts.map +1 -0
- package/dist/RoomShellStore.js +461 -0
- package/dist/RoomShellStore.js.map +1 -0
- package/dist/data-sources/FileDataSourceCard.d.ts +9 -0
- package/dist/data-sources/FileDataSourceCard.d.ts.map +1 -0
- package/dist/data-sources/FileDataSourceCard.js +29 -0
- package/dist/data-sources/FileDataSourceCard.js.map +1 -0
- package/dist/data-sources/FileDataSourcesPanel.d.ts +6 -0
- package/dist/data-sources/FileDataSourcesPanel.d.ts.map +1 -0
- package/dist/data-sources/FileDataSourcesPanel.js +10 -0
- package/dist/data-sources/FileDataSourcesPanel.js.map +1 -0
- package/dist/data-sources/TableCard.d.ts +20 -0
- package/dist/data-sources/TableCard.d.ts.map +1 -0
- package/dist/data-sources/TableCard.js +12 -0
- package/dist/data-sources/TableCard.js.map +1 -0
- package/dist/data-sources/TablesListPanel.d.ts +7 -0
- package/dist/data-sources/TablesListPanel.d.ts.map +1 -0
- package/dist/data-sources/TablesListPanel.js +26 -0
- package/dist/data-sources/TablesListPanel.js.map +1 -0
- package/dist/data-sources/index.d.ts +5 -0
- package/dist/data-sources/index.d.ts.map +1 -0
- package/dist/data-sources/index.js +5 -0
- package/dist/data-sources/index.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/panels/RoomHeaderButton.d.ts +9 -0
- package/dist/panels/RoomHeaderButton.d.ts.map +1 -0
- package/dist/panels/RoomHeaderButton.js +8 -0
- package/dist/panels/RoomHeaderButton.js.map +1 -0
- package/dist/panels/RoomPanel.d.ts +8 -0
- package/dist/panels/RoomPanel.d.ts.map +1 -0
- package/dist/panels/RoomPanel.js +8 -0
- package/dist/panels/RoomPanel.js.map +1 -0
- package/dist/panels/RoomPanelHeader.d.ts +8 -0
- package/dist/panels/RoomPanelHeader.d.ts.map +1 -0
- package/dist/panels/RoomPanelHeader.js +17 -0
- package/dist/panels/RoomPanelHeader.js.map +1 -0
- package/dist/panels/index.d.ts +4 -0
- package/dist/panels/index.d.ts.map +1 -0
- package/dist/panels/index.js +4 -0
- package/dist/panels/index.js.map +1 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { FileDataSourceCard } from './FileDataSourceCard';
|
|
3
|
+
import { useBaseRoomShellStore } from '../RoomShellStore';
|
|
4
|
+
const FileDataSourcesPanel = ({ isReadOnly }) => {
|
|
5
|
+
const roomFiles = useBaseRoomShellStore((state) => state.room.roomFiles);
|
|
6
|
+
const roomFilesProgress = useBaseRoomShellStore((state) => state.room.roomFilesProgress);
|
|
7
|
+
return (_jsx("div", { className: "flex flex-grow flex-col overflow-auto", children: roomFiles.map((fileInfo, i) => (_jsx(FileDataSourceCard, { isReadOnly: isReadOnly, fileInfo: fileInfo, fileState: roomFilesProgress[fileInfo.pathname] }, i))) }));
|
|
8
|
+
};
|
|
9
|
+
export { FileDataSourcesPanel };
|
|
10
|
+
//# sourceMappingURL=FileDataSourcesPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileDataSourcesPanel.js","sourceRoot":"","sources":["../../src/data-sources/FileDataSourcesPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAExD,MAAM,oBAAoB,GAA+B,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE;IACxE,MAAM,SAAS,GAAG,qBAAqB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzE,MAAM,iBAAiB,GAAG,qBAAqB,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CACxC,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAC,uCAAuC,YACnD,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAC9B,KAAC,kBAAkB,IAEjB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAH1C,CAAC,CAIN,CACH,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAC,oBAAoB,EAAC,CAAC","sourcesContent":["import {FC} from 'react';\nimport {FileDataSourceCard} from './FileDataSourceCard';\nimport {useBaseRoomShellStore} from '../RoomShellStore';\n\nconst FileDataSourcesPanel: FC<{isReadOnly?: boolean}> = ({isReadOnly}) => {\n const roomFiles = useBaseRoomShellStore((state) => state.room.roomFiles);\n const roomFilesProgress = useBaseRoomShellStore(\n (state) => state.room.roomFilesProgress,\n );\n\n return (\n <div className=\"flex flex-grow flex-col overflow-auto\">\n {roomFiles.map((fileInfo, i) => (\n <FileDataSourceCard\n key={i}\n isReadOnly={isReadOnly}\n fileInfo={fileInfo}\n fileState={roomFilesProgress[fileInfo.pathname]}\n />\n ))}\n </div>\n );\n};\n\nexport {FileDataSourcesPanel};\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DataTable } from '@sqlrooms/duckdb';
|
|
2
|
+
import React, { FC } from 'react';
|
|
3
|
+
export type TableAction = {
|
|
4
|
+
icon: React.FC<{
|
|
5
|
+
className: string;
|
|
6
|
+
}>;
|
|
7
|
+
label: string;
|
|
8
|
+
onClick: (tableName: string) => void;
|
|
9
|
+
};
|
|
10
|
+
declare const TableCard: FC<{
|
|
11
|
+
isReadOnly?: boolean;
|
|
12
|
+
value?: DataTable;
|
|
13
|
+
rowCount?: number;
|
|
14
|
+
onReset?: () => void;
|
|
15
|
+
onClick?: () => void;
|
|
16
|
+
className?: string;
|
|
17
|
+
menuRenderer?: (v: DataTable) => React.ReactNode;
|
|
18
|
+
}>;
|
|
19
|
+
export { TableCard };
|
|
20
|
+
//# sourceMappingURL=TableCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableCard.d.ts","sourceRoot":"","sources":["../../src/data-sources/TableCard.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAG3C,OAAO,KAAK,EAAE,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAEhC,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AACF,QAAA,MAAM,SAAS,EAAE,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC;CAClD,CA2EA,CAAC;AAEF,OAAO,EAAC,SAAS,EAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Badge, Button, Card, cn, DropdownMenu, DropdownMenuContent, DropdownMenuTrigger, Tooltip, TooltipContent, TooltipTrigger, } from '@sqlrooms/ui';
|
|
3
|
+
import { formatNumber } from '@sqlrooms/utils';
|
|
4
|
+
import { EllipsisIcon } from 'lucide-react';
|
|
5
|
+
const TableCard = ({ value, rowCount, onClick, className, menuRenderer }) => {
|
|
6
|
+
if (!value)
|
|
7
|
+
return null;
|
|
8
|
+
const numRows = value.rowCount ?? rowCount;
|
|
9
|
+
return (_jsx(Card, { className: cn(`hover:border-foreground relative flex cursor-pointer flex-col items-center justify-center rounded-sm border px-2 py-2 transition-colors`, className), onClick: onClick, children: _jsx("div", { className: "mt-0 flex w-full flex-col gap-2 px-2", children: _jsxs("div", { className: "w-full overflow-auto", children: [_jsxs("div", { className: "relative mb-2 flex h-[30px] cursor-pointer flex-row items-center gap-1 overflow-hidden", children: [_jsx("div", { className: "text-foreground mb-1 flex-1 overflow-hidden text-ellipsis whitespace-nowrap py-1 font-mono text-sm font-bold", children: value.tableName }), menuRenderer ? (_jsx("div", { className: "flex-none", children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { size: "icon", variant: "ghost", className: "text-muted-foreground h-6 w-6", children: _jsx(EllipsisIcon, { className: "h-5 w-5" }) }) }), _jsx(DropdownMenuContent, { align: "end", children: menuRenderer(value) })] }) })) : null] }), _jsx("div", { className: "flex flex-col gap-1", children: value.columns?.map((row, i) => (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "hover:bg-foreground/10 flex items-center gap-3 rounded-sm font-mono", children: [_jsx(Badge, { variant: "secondary", className: "text-muted-foreground w-[70px] overflow-hidden whitespace-nowrap px-1 py-0 text-xs", children: row.type }), _jsx("div", { className: "max-w-[100px] text-xs", children: row.name })] }) }), _jsx(TooltipContent, { className: "max-w-[250px]", side: "right", align: "center", children: _jsxs("div", { className: "flex flex-col gap-1 font-mono", children: [_jsx("div", { className: "text-sm font-bold", children: row.name }), _jsx("div", { className: "text-muted-foreground text-xs", children: row.type })] }) })] }, i))) }), numRows !== undefined && Number.isFinite(numRows) && (_jsx("div", { className: "mt-1 text-right text-xs", children: `${formatNumber(numRows)} rows` }))] }) }) }));
|
|
10
|
+
};
|
|
11
|
+
export { TableCard };
|
|
12
|
+
//# sourceMappingURL=TableCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableCard.js","sourceRoot":"","sources":["../../src/data-sources/TableCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,KAAK,EACL,MAAM,EACN,IAAI,EACJ,EAAE,EACF,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAQ1C,MAAM,SAAS,GAQV,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAC,EAAE,EAAE;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAC3C,OAAO,CACL,KAAC,IAAI,IACH,SAAS,EAAE,EAAE,CACX,yIAAyI,EACzI,SAAS,CACV,EACD,OAAO,EAAE,OAAO,YAEhB,cAAK,SAAS,EAAC,sCAAsC,YACnD,eAAK,SAAS,EAAC,sBAAsB,aACnC,eAAK,SAAS,EAAC,wFAAwF,aACrG,cAAK,SAAS,EAAC,8GAA8G,YAC1H,KAAK,CAAC,SAAS,GACZ,EACL,YAAY,CAAC,CAAC,CAAC,CACd,cAAK,SAAS,EAAC,WAAW,YACxB,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,KAAC,MAAM,IACL,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,+BAA+B,YAEzC,KAAC,YAAY,IAAC,SAAS,EAAC,SAAS,GAAG,GAC7B,GACW,EACtB,KAAC,mBAAmB,IAAC,KAAK,EAAC,KAAK,YAC7B,YAAY,CAAC,KAAK,CAAC,GACA,IACT,GACX,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,EACN,cAAK,SAAS,EAAC,qBAAqB,YACjC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAC9B,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,eAAK,SAAS,EAAC,qEAAqE,aAClF,KAAC,KAAK,IACJ,OAAO,EAAC,WAAW,EACnB,SAAS,EAAC,oFAAoF,YAE7F,GAAG,CAAC,IAAI,GACH,EACR,cAAK,SAAS,EAAC,uBAAuB,YAAE,GAAG,CAAC,IAAI,GAAO,IACnD,GACS,EACjB,KAAC,cAAc,IACb,SAAS,EAAC,eAAe,EACzB,IAAI,EAAC,OAAO,EACZ,KAAK,EAAC,QAAQ,YAEd,eAAK,SAAS,EAAC,+BAA+B,aAC5C,cAAK,SAAS,EAAC,mBAAmB,YAAE,GAAG,CAAC,IAAI,GAAO,EACnD,cAAK,SAAS,EAAC,+BAA+B,YAC3C,GAAG,CAAC,IAAI,GACL,IACF,GACS,KAvBL,CAAC,CAwBL,CACX,CAAC,GACE,EACL,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CACpD,cAAK,SAAS,EAAC,yBAAyB,YACrC,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,GAC5B,CACP,IACG,GACF,GACD,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAC,SAAS,EAAC,CAAC","sourcesContent":["import {\n Badge,\n Button,\n Card,\n cn,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuTrigger,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@sqlrooms/ui';\nimport {DataTable} from '@sqlrooms/duckdb';\nimport {formatNumber} from '@sqlrooms/utils';\nimport {EllipsisIcon} from 'lucide-react';\nimport React, {FC} from 'react';\n\nexport type TableAction = {\n icon: React.FC<{className: string}>;\n label: string;\n onClick: (tableName: string) => void;\n};\nconst TableCard: FC<{\n isReadOnly?: boolean;\n value?: DataTable;\n rowCount?: number;\n onReset?: () => void;\n onClick?: () => void;\n className?: string;\n menuRenderer?: (v: DataTable) => React.ReactNode;\n}> = ({value, rowCount, onClick, className, menuRenderer}) => {\n if (!value) return null;\n\n const numRows = value.rowCount ?? rowCount;\n return (\n <Card\n className={cn(\n `hover:border-foreground relative flex cursor-pointer flex-col items-center justify-center rounded-sm border px-2 py-2 transition-colors`,\n className,\n )}\n onClick={onClick}\n >\n <div className=\"mt-0 flex w-full flex-col gap-2 px-2\">\n <div className=\"w-full overflow-auto\">\n <div className=\"relative mb-2 flex h-[30px] cursor-pointer flex-row items-center gap-1 overflow-hidden\">\n <div className=\"text-foreground mb-1 flex-1 overflow-hidden text-ellipsis whitespace-nowrap py-1 font-mono text-sm font-bold\">\n {value.tableName}\n </div>\n {menuRenderer ? (\n <div className=\"flex-none\">\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 {menuRenderer(value)}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n ) : null}\n </div>\n <div className=\"flex flex-col gap-1\">\n {value.columns?.map((row, i) => (\n <Tooltip key={i}>\n <TooltipTrigger asChild>\n <div className=\"hover:bg-foreground/10 flex items-center gap-3 rounded-sm font-mono\">\n <Badge\n variant=\"secondary\"\n className=\"text-muted-foreground w-[70px] overflow-hidden whitespace-nowrap px-1 py-0 text-xs\"\n >\n {row.type}\n </Badge>\n <div className=\"max-w-[100px] text-xs\">{row.name}</div>\n </div>\n </TooltipTrigger>\n <TooltipContent\n className=\"max-w-[250px]\"\n side=\"right\"\n align=\"center\"\n >\n <div className=\"flex flex-col gap-1 font-mono\">\n <div className=\"text-sm font-bold\">{row.name}</div>\n <div className=\"text-muted-foreground text-xs\">\n {row.type}\n </div>\n </div>\n </TooltipContent>\n </Tooltip>\n ))}\n </div>\n {numRows !== undefined && Number.isFinite(numRows) && (\n <div className=\"mt-1 text-right text-xs\">\n {`${formatNumber(numRows)} rows`}\n </div>\n )}\n </div>\n </div>\n </Card>\n );\n};\n\nexport {TableCard};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TablesListPanel.d.ts","sourceRoot":"","sources":["../../src/data-sources/TablesListPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,EAAE,EAAW,MAAM,OAAO,CAAC;AAInC,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAuDA,CAAC;AAEF,OAAO,EAAC,eAAe,EAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { DataTableModal } from '@sqlrooms/data-table';
|
|
3
|
+
import { cn, useDisclosure } from '@sqlrooms/ui';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { useBaseRoomShellStore } from '../RoomShellStore';
|
|
6
|
+
import { TableCard } from './TableCard';
|
|
7
|
+
const TablesListPanel = ({ className, isReadOnly }) => {
|
|
8
|
+
const tables = useBaseRoomShellStore((state) => state.db.tables);
|
|
9
|
+
const tableRowCounts = useBaseRoomShellStore((state) => state.db.tableRowCounts);
|
|
10
|
+
const [selectedTable, setSelectedTable] = useState(undefined);
|
|
11
|
+
const { isOpen, onOpen, onClose } = useDisclosure();
|
|
12
|
+
const handleClick = (table) => {
|
|
13
|
+
onOpen();
|
|
14
|
+
setSelectedTable(table);
|
|
15
|
+
};
|
|
16
|
+
const handleClose = () => {
|
|
17
|
+
onClose();
|
|
18
|
+
setSelectedTable(undefined);
|
|
19
|
+
};
|
|
20
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: cn('relative flex flex-grow flex-col items-stretch gap-2', className), children: tables?.length ? (_jsx("div", { className: "flex flex-col gap-2", children: tables.map((table, i) => (_jsx(TableCard, { onClick: () => handleClick(table), isReadOnly: isReadOnly, value: table, rowCount: tableRowCounts[table.tableName] }, i))) })) : null }), _jsx(DataTableModal, { className: "h-[80vh] max-w-[75vw]", tableModal: {
|
|
21
|
+
isOpen: isOpen,
|
|
22
|
+
onClose: handleClose,
|
|
23
|
+
}, title: selectedTable?.tableName, query: `SELECT * FROM ${selectedTable?.tableName}` })] }));
|
|
24
|
+
};
|
|
25
|
+
export { TablesListPanel };
|
|
26
|
+
//# sourceMappingURL=TablesListPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TablesListPanel.js","sourceRoot":"","sources":["../../src/data-sources/TablesListPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAC,EAAE,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAK,QAAQ,EAAC,MAAM,OAAO,CAAC;AACnC,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAEtC,MAAM,eAAe,GAGhB,CAAC,EAAC,SAAS,EAAE,UAAU,EAAC,EAAE,EAAE;IAC/B,MAAM,MAAM,GAAG,qBAAqB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,qBAAqB,CAC1C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,CACnC,CAAC;IAEF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAChD,SAAS,CACV,CAAC;IACF,MAAM,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAC,GAAG,aAAa,EAAE,CAAC;IAElD,MAAM,WAAW,GAAG,CAAC,KAAgB,EAAE,EAAE;QACvC,MAAM,EAAE,CAAC;QACT,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,OAAO,EAAE,CAAC;QACV,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,OAAO,CACL,8BACE,cACE,SAAS,EAAE,EAAE,CACX,sDAAsD,EACtD,SAAS,CACV,YAEA,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAChB,cAAK,SAAS,EAAC,qBAAqB,YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,KAAC,SAAS,IAER,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EACjC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,IAJpC,CAAC,CAKN,CACH,CAAC,GACE,CACP,CAAC,CAAC,CAAC,IAAI,GACJ,EAEN,KAAC,cAAc,IACb,SAAS,EAAC,uBAAuB,EACjC,UAAU,EAAE;oBACV,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,WAAW;iBACrB,EACD,KAAK,EAAE,aAAa,EAAE,SAAS,EAC/B,KAAK,EAAE,iBAAiB,aAAa,EAAE,SAAS,EAAE,GAClD,IACD,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAC,eAAe,EAAC,CAAC","sourcesContent":["import {DataTableModal} from '@sqlrooms/data-table';\nimport {DataTable} from '@sqlrooms/duckdb';\nimport {cn, useDisclosure} from '@sqlrooms/ui';\nimport {FC, useState} from 'react';\nimport {useBaseRoomShellStore} from '../RoomShellStore';\nimport {TableCard} from './TableCard';\n\nconst TablesListPanel: FC<{\n className?: string;\n isReadOnly?: boolean;\n}> = ({className, isReadOnly}) => {\n const tables = useBaseRoomShellStore((state) => state.db.tables);\n const tableRowCounts = useBaseRoomShellStore(\n (state) => state.db.tableRowCounts,\n );\n\n const [selectedTable, setSelectedTable] = useState<DataTable | undefined>(\n undefined,\n );\n const {isOpen, onOpen, onClose} = useDisclosure();\n\n const handleClick = (table: DataTable) => {\n onOpen();\n setSelectedTable(table);\n };\n\n const handleClose = () => {\n onClose();\n setSelectedTable(undefined);\n };\n\n return (\n <>\n <div\n className={cn(\n 'relative flex flex-grow flex-col items-stretch gap-2',\n className,\n )}\n >\n {tables?.length ? (\n <div className=\"flex flex-col gap-2\">\n {tables.map((table, i) => (\n <TableCard\n key={i}\n onClick={() => handleClick(table)}\n isReadOnly={isReadOnly}\n value={table}\n rowCount={tableRowCounts[table.tableName]}\n />\n ))}\n </div>\n ) : null}\n </div>\n\n <DataTableModal\n className=\"h-[80vh] max-w-[75vw]\"\n tableModal={{\n isOpen: isOpen,\n onClose: handleClose,\n }}\n title={selectedTable?.tableName}\n query={`SELECT * FROM ${selectedTable?.tableName}`}\n />\n </>\n );\n};\n\nexport {TablesListPanel};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-sources/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data-sources/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC","sourcesContent":["export * from './FileDataSourceCard';\nexport * from './FileDataSourcesPanel';\nexport * from './TableCard';\nexport * from './TablesListPanel';\n"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* {@include ../README.md}
|
|
3
|
+
* @packageDocumentation
|
|
4
|
+
*/
|
|
5
|
+
export { FileDataSourceCard } from './data-sources/FileDataSourceCard';
|
|
6
|
+
export { FileDataSourcesPanel } from './data-sources/FileDataSourcesPanel';
|
|
7
|
+
export { TableCard } from './data-sources/TableCard';
|
|
8
|
+
export { TablesListPanel } from './data-sources/TablesListPanel';
|
|
9
|
+
export { PanelHeaderButton } from './panels/RoomHeaderButton';
|
|
10
|
+
export { RoomPanel } from './panels/RoomPanel';
|
|
11
|
+
export { RoomPanelHeader } from './panels/RoomPanelHeader';
|
|
12
|
+
export { RoomShellSidebarButton, RoomShellSidebarButtons, SidebarButton, } from './RoomShellSidebarButtons';
|
|
13
|
+
export { type TaskProgress, createRoomStore } from '@sqlrooms/core';
|
|
14
|
+
export { createRoomShellSlice, createSlice, useBaseRoomShellStore, type RoomShellSliceState, type RoomPanelInfo, } from './RoomShellStore';
|
|
15
|
+
export type { StateCreator, StoreApi } from 'zustand';
|
|
16
|
+
export { DataSourceStatus, type DataSourceState, type RoomFileInfo, type RoomFileState, } from './types';
|
|
17
|
+
export * from '@sqlrooms/room-config';
|
|
18
|
+
export { RoomShell } from './RoomShell';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,kBAAkB,EAAC,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAC,oBAAoB,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,GACd,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAC,KAAK,YAAY,EAAE,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAElE,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAEpD,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,SAAS,CAAC;AAGjB,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* {@include ../README.md}
|
|
3
|
+
* @packageDocumentation
|
|
4
|
+
*/
|
|
5
|
+
export { FileDataSourceCard } from './data-sources/FileDataSourceCard';
|
|
6
|
+
export { FileDataSourcesPanel } from './data-sources/FileDataSourcesPanel';
|
|
7
|
+
export { TableCard } from './data-sources/TableCard';
|
|
8
|
+
export { TablesListPanel } from './data-sources/TablesListPanel';
|
|
9
|
+
export { PanelHeaderButton } from './panels/RoomHeaderButton';
|
|
10
|
+
export { RoomPanel } from './panels/RoomPanel';
|
|
11
|
+
export { RoomPanelHeader } from './panels/RoomPanelHeader';
|
|
12
|
+
export { RoomShellSidebarButton, RoomShellSidebarButtons, SidebarButton, } from './RoomShellSidebarButtons';
|
|
13
|
+
export { createRoomStore } from '@sqlrooms/core';
|
|
14
|
+
export { createRoomShellSlice, createSlice, useBaseRoomShellStore, } from './RoomShellStore';
|
|
15
|
+
export { DataSourceStatus, } from './types';
|
|
16
|
+
// Re-export all room-config types
|
|
17
|
+
export * from '@sqlrooms/room-config';
|
|
18
|
+
export { RoomShell } from './RoomShell';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,kBAAkB,EAAC,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAC,oBAAoB,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,GACd,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAoB,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAElE,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,qBAAqB,GAGtB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EACL,gBAAgB,GAIjB,MAAM,SAAS,CAAC;AAEjB,kCAAkC;AAClC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\n\nexport {FileDataSourceCard} from './data-sources/FileDataSourceCard';\nexport {FileDataSourcesPanel} from './data-sources/FileDataSourcesPanel';\nexport {TableCard} from './data-sources/TableCard';\nexport {TablesListPanel} from './data-sources/TablesListPanel';\n\nexport {PanelHeaderButton} from './panels/RoomHeaderButton';\nexport {RoomPanel} from './panels/RoomPanel';\nexport {RoomPanelHeader} from './panels/RoomPanelHeader';\n\nexport {\n RoomShellSidebarButton,\n RoomShellSidebarButtons,\n SidebarButton,\n} from './RoomShellSidebarButtons';\n\nexport {type TaskProgress, createRoomStore} from '@sqlrooms/core';\n\nexport {\n createRoomShellSlice,\n createSlice,\n useBaseRoomShellStore,\n type RoomShellSliceState,\n type RoomPanelInfo,\n} from './RoomShellStore';\n\nexport type {StateCreator, StoreApi} from 'zustand';\n\nexport {\n DataSourceStatus,\n type DataSourceState,\n type RoomFileInfo,\n type RoomFileState,\n} from './types';\n\n// Re-export all room-config types\nexport * from '@sqlrooms/room-config';\nexport {RoomShell} from './RoomShell';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomHeaderButton.d.ts","sourceRoot":"","sources":["../../src/panels/RoomHeaderButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAEhC,QAAA,MAAM,iBAAiB,EAAE,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAeA,CAAC;AAEF,OAAO,EAAC,iBAAiB,EAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from '@sqlrooms/ui';
|
|
3
|
+
const PanelHeaderButton = (props) => {
|
|
4
|
+
const { isPinned, icon, label, onClick } = props;
|
|
5
|
+
return (_jsx(Button, { size: "icon", onClick: onClick, variant: "ghost", className: `h-6 w-6 ${isPinned ? 'text-foreground' : 'text-muted-foreground'} hover:text-foreground hover:bg-foreground/10`, "aria-label": label, children: icon }));
|
|
6
|
+
};
|
|
7
|
+
export { PanelHeaderButton };
|
|
8
|
+
//# sourceMappingURL=RoomHeaderButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomHeaderButton.js","sourceRoot":"","sources":["../../src/panels/RoomHeaderButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAGpC,MAAM,iBAAiB,GAKlB,CAAC,KAAK,EAAE,EAAE;IACb,MAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAC,GAAG,KAAK,CAAC;IAC/C,OAAO,CACL,KAAC,MAAM,IACL,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,OAAO,EAAC,OAAO,EACf,SAAS,EAAE,WACT,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,uBACjC,+CAA+C,gBACnC,KAAK,YAEhB,IAAI,GACE,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAC,iBAAiB,EAAC,CAAC","sourcesContent":["import {Button} from '@sqlrooms/ui';\nimport React, {FC} from 'react';\n\nconst PanelHeaderButton: FC<{\n label: string;\n icon: React.ReactElement;\n isPinned?: boolean;\n onClick: () => void;\n}> = (props) => {\n const {isPinned, icon, label, onClick} = props;\n return (\n <Button\n size=\"icon\"\n onClick={onClick}\n variant=\"ghost\"\n className={`h-6 w-6 ${\n isPinned ? 'text-foreground' : 'text-muted-foreground'\n } hover:text-foreground hover:bg-foreground/10`}\n aria-label={label}\n >\n {icon}\n </Button>\n );\n};\n\nexport {PanelHeaderButton};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomPanel.d.ts","sourceRoot":"","sources":["../../src/panels/RoomPanel.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAE,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAG5C,QAAA,MAAM,SAAS,EAAE,EAAE,CACjB,iBAAiB,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC,CAUH,CAAC;AAEF,OAAO,EAAC,SAAS,EAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '@sqlrooms/ui';
|
|
3
|
+
import { RoomPanelHeader } from './RoomPanelHeader';
|
|
4
|
+
const RoomPanel = ({ type: roomPanelType, children, className, showHeader = true }) => {
|
|
5
|
+
return (_jsxs("div", { className: cn('flex h-full flex-grow flex-col gap-3', className), children: [showHeader && _jsx(RoomPanelHeader, { panelKey: roomPanelType }), _jsx("div", { className: "flex h-full flex-grow flex-col gap-3 overflow-auto", children: children })] }));
|
|
6
|
+
};
|
|
7
|
+
export { RoomPanel };
|
|
8
|
+
//# sourceMappingURL=RoomPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomPanel.js","sourceRoot":"","sources":["../../src/panels/RoomPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAEhC,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAElD,MAAM,SAAS,GAMX,CAAC,EAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI,EAAC,EAAE,EAAE;IACpE,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,sCAAsC,EAAE,SAAS,CAAC,aAClE,UAAU,IAAI,KAAC,eAAe,IAAC,QAAQ,EAAE,aAAa,GAAI,EAC3D,cAAK,SAAS,EAAC,oDAAoD,YAChE,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAC,SAAS,EAAC,CAAC","sourcesContent":["import {cn} from '@sqlrooms/ui';\nimport {FC, PropsWithChildren} from 'react';\nimport {RoomPanelHeader} from './RoomPanelHeader';\n\nconst RoomPanel: FC<\n PropsWithChildren<{\n className?: string;\n type: string;\n showHeader?: boolean;\n }>\n> = ({type: roomPanelType, children, className, showHeader = true}) => {\n return (\n <div className={cn('flex h-full flex-grow flex-col gap-3', className)}>\n {showHeader && <RoomPanelHeader panelKey={roomPanelType} />}\n <div className=\"flex h-full flex-grow flex-col gap-3 overflow-auto\">\n {children}\n </div>\n </div>\n );\n};\n\nexport {RoomPanel};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomPanelHeader.d.ts","sourceRoot":"","sources":["../../src/panels/RoomPanelHeader.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAU,MAAM,OAAO,CAAC;AAIlC,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAkDA,CAAC;AAEF,OAAO,EAAC,eAAe,EAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { PinIcon, PinOffIcon, XIcon } from 'lucide-react';
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { useBaseRoomShellStore } from '../RoomShellStore';
|
|
5
|
+
import { PanelHeaderButton } from './RoomHeaderButton';
|
|
6
|
+
const RoomPanelHeader = (props) => {
|
|
7
|
+
const { showHeader = true, panelKey: type, children } = props;
|
|
8
|
+
const panels = useBaseRoomShellStore((state) => state.room.panels);
|
|
9
|
+
const { icon: Icon, title } = panels[type] ?? {};
|
|
10
|
+
const togglePanel = useBaseRoomShellStore((state) => state.room.togglePanel);
|
|
11
|
+
const togglePanelPin = useBaseRoomShellStore((state) => state.room.togglePanelPin);
|
|
12
|
+
const pinnedPanels = useBaseRoomShellStore((state) => state.config.layout.pinned);
|
|
13
|
+
const isPinned = useMemo(() => pinnedPanels?.includes(type), [pinnedPanels, type]);
|
|
14
|
+
return (_jsxs("div", { className: "flex", children: [_jsxs("div", { className: "flex w-full flex-row items-center gap-2", children: [showHeader && (_jsxs(_Fragment, { children: [Icon ? _jsx(Icon, { className: "h-4 w-4" }) : null, _jsx("h2", { className: "text-muted-foreground text-xs font-semibold uppercase", children: title })] })), children] }), _jsxs("div", { className: "bg-secondary/50 flex gap-0", children: [_jsx(PanelHeaderButton, { isPinned: isPinned, icon: isPinned ? (_jsx(PinIcon, { className: "w-[18px]" })) : (_jsx(PinOffIcon, { className: "w-[18px]" })), onClick: () => togglePanelPin(type), label: "Pin panel" }), _jsx(PanelHeaderButton, { icon: _jsx(XIcon, { className: "w-[18px]" }), onClick: () => togglePanel(type), label: `Close panel "${title}"` })] })] }));
|
|
15
|
+
};
|
|
16
|
+
export { RoomPanelHeader };
|
|
17
|
+
//# sourceMappingURL=RoomPanelHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomPanelHeader.js","sourceRoot":"","sources":["../../src/panels/RoomPanelHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAC,MAAM,cAAc,CAAC;AACxD,OAAO,EAAK,OAAO,EAAC,MAAM,OAAO,CAAC;AAClC,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAC,iBAAiB,EAAC,MAAM,oBAAoB,CAAC;AAErD,MAAM,eAAe,GAIhB,CAAC,KAAK,EAAE,EAAE;IACb,MAAM,EAAC,UAAU,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAC,GAAG,KAAK,CAAC;IAC5D,MAAM,MAAM,GAAG,qBAAqB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/C,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7E,MAAM,cAAc,GAAG,qBAAqB,CAC1C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CACrC,CAAC;IACF,MAAM,YAAY,GAAG,qBAAqB,CACxC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CACtC,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,EAClC,CAAC,YAAY,EAAE,IAAI,CAAC,CACrB,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,MAAM,aACnB,eAAK,SAAS,EAAC,yCAAyC,aACrD,UAAU,IAAI,CACb,8BACG,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAC3C,aAAI,SAAS,EAAC,uDAAuD,YAClE,KAAK,GACH,IACJ,CACJ,EACA,QAAQ,IACL,EACN,eAAK,SAAS,EAAC,4BAA4B,aACzC,KAAC,iBAAiB,IAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EACF,QAAQ,CAAC,CAAC,CAAC,CACT,KAAC,OAAO,IAAC,SAAS,EAAC,UAAU,GAAG,CACjC,CAAC,CAAC,CAAC,CACF,KAAC,UAAU,IAAC,SAAS,EAAC,UAAU,GAAG,CACpC,EAEH,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EACnC,KAAK,EAAC,WAAW,GACjB,EACF,KAAC,iBAAiB,IAChB,IAAI,EAAE,KAAC,KAAK,IAAC,SAAS,EAAC,UAAU,GAAG,EACpC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAChC,KAAK,EAAE,gBAAgB,KAAK,GAAG,GAC/B,IACE,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAC,eAAe,EAAC,CAAC","sourcesContent":["import {PinIcon, PinOffIcon, XIcon} from 'lucide-react';\nimport {FC, useMemo} from 'react';\nimport {useBaseRoomShellStore} from '../RoomShellStore';\nimport {PanelHeaderButton} from './RoomHeaderButton';\n\nconst RoomPanelHeader: FC<{\n panelKey: string;\n showHeader?: boolean;\n children?: React.ReactNode;\n}> = (props) => {\n const {showHeader = true, panelKey: type, children} = props;\n const panels = useBaseRoomShellStore((state) => state.room.panels);\n const {icon: Icon, title} = panels[type] ?? {};\n const togglePanel = useBaseRoomShellStore((state) => state.room.togglePanel);\n const togglePanelPin = useBaseRoomShellStore(\n (state) => state.room.togglePanelPin,\n );\n const pinnedPanels = useBaseRoomShellStore(\n (state) => state.config.layout.pinned,\n );\n const isPinned = useMemo(\n () => pinnedPanels?.includes(type),\n [pinnedPanels, type],\n );\n\n return (\n <div className=\"flex\">\n <div className=\"flex w-full flex-row items-center gap-2\">\n {showHeader && (\n <>\n {Icon ? <Icon className=\"h-4 w-4\" /> : null}\n <h2 className=\"text-muted-foreground text-xs font-semibold uppercase\">\n {title}\n </h2>\n </>\n )}\n {children}\n </div>\n <div className=\"bg-secondary/50 flex gap-0\">\n <PanelHeaderButton\n isPinned={isPinned}\n icon={\n isPinned ? (\n <PinIcon className=\"w-[18px]\" />\n ) : (\n <PinOffIcon className=\"w-[18px]\" />\n )\n }\n onClick={() => togglePanelPin(type)}\n label=\"Pin panel\"\n />\n <PanelHeaderButton\n icon={<XIcon className=\"w-[18px]\" />}\n onClick={() => togglePanel(type)}\n label={`Close panel \"${title}\"`}\n />\n </div>\n </div>\n );\n};\n\nexport {RoomPanelHeader};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/panels/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/panels/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC","sourcesContent":["export * from './RoomPanel';\nexport * from './RoomPanelHeader';\nexport * from './RoomHeaderButton';\n"]}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ProgressInfo } from '@sqlrooms/utils';
|
|
2
|
+
export type RoomFileState = {
|
|
3
|
+
status: 'download' | 'upload' | 'done';
|
|
4
|
+
progress?: ProgressInfo;
|
|
5
|
+
} | {
|
|
6
|
+
status: 'error';
|
|
7
|
+
message?: string;
|
|
8
|
+
};
|
|
9
|
+
export type RoomFileInfo = {
|
|
10
|
+
pathname: string;
|
|
11
|
+
duckdbFileName?: string;
|
|
12
|
+
file?: File;
|
|
13
|
+
size?: number;
|
|
14
|
+
numRows?: number;
|
|
15
|
+
};
|
|
16
|
+
export declare enum DataSourceStatus {
|
|
17
|
+
PENDING = "PENDING",
|
|
18
|
+
FETCHING = "FETCHING",
|
|
19
|
+
READY = "READY",
|
|
20
|
+
ERROR = "ERROR"
|
|
21
|
+
}
|
|
22
|
+
export type DataSourceState = {
|
|
23
|
+
status: DataSourceStatus;
|
|
24
|
+
message?: string;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAE7C,MAAM,MAAM,aAAa,GACrB;IACE,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB,GACD;IACE,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAGlB,CAAC;AAEF,oBAAY,gBAAgB;IAC1B,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export var DataSourceStatus;
|
|
2
|
+
(function (DataSourceStatus) {
|
|
3
|
+
DataSourceStatus["PENDING"] = "PENDING";
|
|
4
|
+
DataSourceStatus["FETCHING"] = "FETCHING";
|
|
5
|
+
DataSourceStatus["READY"] = "READY";
|
|
6
|
+
DataSourceStatus["ERROR"] = "ERROR";
|
|
7
|
+
})(DataSourceStatus || (DataSourceStatus = {}));
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,uCAAmB,CAAA;IACnB,yCAAqB,CAAA;IACrB,mCAAe,CAAA;IACf,mCAAe,CAAA;AACjB,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B","sourcesContent":["import {ProgressInfo} from '@sqlrooms/utils';\n\nexport type RoomFileState =\n | {\n status: 'download' | 'upload' | 'done';\n progress?: ProgressInfo;\n }\n | {\n status: 'error';\n message?: string;\n };\n\nexport type RoomFileInfo = {\n pathname: string;\n duckdbFileName?: string;\n file?: File;\n size?: number;\n numRows?: number;\n // hasBeenUploaded?: boolean;\n // uploadState?: FileUploadState;\n};\n\nexport enum DataSourceStatus {\n PENDING = 'PENDING',\n FETCHING = 'FETCHING',\n READY = 'READY',\n ERROR = 'ERROR',\n}\n\nexport type DataSourceState = {\n status: DataSourceStatus;\n message?: string;\n};\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sqlrooms/room-shell",
|
|
3
|
+
"version": "0.17.0",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"types": "dist/index.d.ts",
|
|
6
|
+
"module": "dist/index.js",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"author": "Ilya Boyandin <ilya@boyandin.me>",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/sqlrooms/sqlrooms.git"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"dev": "tsc -w",
|
|
22
|
+
"build": "tsc",
|
|
23
|
+
"lint": "eslint .",
|
|
24
|
+
"typecheck": "tsc --noEmit",
|
|
25
|
+
"typedoc": "typedoc"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@sqlrooms/core": "0.17.0",
|
|
29
|
+
"@sqlrooms/data-table": "0.17.0",
|
|
30
|
+
"@sqlrooms/duckdb": "0.17.0",
|
|
31
|
+
"@sqlrooms/layout": "0.17.0",
|
|
32
|
+
"@sqlrooms/room-config": "0.17.0",
|
|
33
|
+
"@sqlrooms/ui": "0.17.0",
|
|
34
|
+
"@sqlrooms/utils": "0.17.0",
|
|
35
|
+
"apache-arrow": "17.0.0",
|
|
36
|
+
"immer": "^10.1.1",
|
|
37
|
+
"lucide-react": "^0.474.0",
|
|
38
|
+
"react-mosaic-component": "5.3.0",
|
|
39
|
+
"zod": "^3.25.57",
|
|
40
|
+
"zustand": "^5.0.5"
|
|
41
|
+
},
|
|
42
|
+
"peerDependencies": {
|
|
43
|
+
"react": ">=18"
|
|
44
|
+
},
|
|
45
|
+
"gitHead": "1f2a306da771481e2c89d8bfbd0507772167b1b5"
|
|
46
|
+
}
|