@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 @@
|
|
|
1
|
+
{"version":3,"file":"RoomBuilder.d.ts","sourceRoot":"","sources":["../src/RoomBuilder.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAI5D,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EA8D7B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ProgressModal, SpinnerPane } from '@sqlrooms/ui';
|
|
3
|
+
import { MosaicLayout, getVisibleMosaicLayoutPanels } from '@sqlrooms/layout';
|
|
4
|
+
import { Suspense, useCallback, useMemo } from 'react';
|
|
5
|
+
import { useBaseRoomShellStore } from './RoomShellStore';
|
|
6
|
+
export const RoomShell = () => {
|
|
7
|
+
const layout = useBaseRoomShellStore((state) => state.config.layout);
|
|
8
|
+
const setLayout = useBaseRoomShellStore((state) => state.room.setLayout);
|
|
9
|
+
const panels = useBaseRoomShellStore((state) => state.room.panels);
|
|
10
|
+
const loadingProgress = useBaseRoomShellStore((state) => state.room.getLoadingProgress());
|
|
11
|
+
const ErrorBoundary = useBaseRoomShellStore((state) => state.room.CustomErrorBoundary);
|
|
12
|
+
const visibleRoomPanels = useMemo(() => getVisibleMosaicLayoutPanels(layout?.nodes), [layout]);
|
|
13
|
+
const handleLayoutChange = useCallback((nodes) => {
|
|
14
|
+
// Keep layout properties, e.g. 'pinned' and 'fixed'
|
|
15
|
+
setLayout({ ...layout, nodes });
|
|
16
|
+
}, [setLayout, layout]);
|
|
17
|
+
const renderedPanels = useMemo(() => {
|
|
18
|
+
return Array.from(visibleRoomPanels).reduce((acc, id) => {
|
|
19
|
+
const PanelComp = panels[id]?.component;
|
|
20
|
+
if (PanelComp) {
|
|
21
|
+
acc.set(id, _jsx(ErrorBoundary, { children: _jsx(PanelComp, {}) }));
|
|
22
|
+
}
|
|
23
|
+
return acc;
|
|
24
|
+
}, new Map());
|
|
25
|
+
}, [ErrorBoundary, panels, visibleRoomPanels]);
|
|
26
|
+
return (_jsx(ErrorBoundary, { children: _jsxs(Suspense, { fallback: _jsx(SpinnerPane, { h: "100%" }), children: [_jsx("div", { className: "flex h-full w-full flex-grow flex-col items-stretch px-0 pb-0", children: layout ? (_jsx(MosaicLayout, { renderTile: (id) => _jsx(_Fragment, { children: renderedPanels.get(id) }), value: layout.nodes, onChange: handleLayoutChange })) : null }), _jsx(ProgressModal, { isOpen: loadingProgress !== undefined, title: "Loading", loadingStage: loadingProgress?.message, indeterminate: true })] }) }));
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=RoomBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomBuilder.js","sourceRoot":"","sources":["../src/RoomBuilder.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,aAAa,EAAE,WAAW,EAAC,MAAM,cAAc,CAAC;AACxD,OAAO,EAAC,YAAY,EAAE,4BAA4B,EAAC,MAAM,kBAAkB,CAAC;AAC5E,OAAc,EAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAE5D,OAAO,EAAC,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAa,GAAG,EAAE;IACtC,MAAM,MAAM,GAAG,qBAAqB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,qBAAqB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,qBAAqB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,qBAAqB,CAAC,CAAC,KAAK,EAAE,EAAE,CACtD,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAChC,CAAC;IACF,MAAM,aAAa,GAAG,qBAAqB,CACzC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAC1C,CAAC;IAEF,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC,EACjD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,KAAgC,EAAE,EAAE;QACnC,oDAAoD;QACpD,SAAS,CAAC,EAAC,GAAG,MAAM,EAAE,KAAK,EAAC,CAAC,CAAC;IAChC,CAAC,EACD,CAAC,SAAS,EAAE,MAAM,CAAC,CACpB,CAAC;IAEF,MAAM,cAAc,GAAiC,OAAO,CAAC,GAAG,EAAE;QAChE,OAAO,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAU,EAAE,EAAE;YAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;YACxC,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,CAAC,GAAG,CACL,EAAE,EACF,KAAC,aAAa,cACZ,KAAC,SAAS,KAAG,GACC,CACjB,CAAC;YACJ,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,IAAI,GAAG,EAA2B,CAAC,CAAC;IACzC,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE/C,OAAO,CACL,KAAC,aAAa,cACZ,MAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,WAAW,IAAC,CAAC,EAAC,MAAM,GAAG,aAC1C,cAAK,SAAS,EAAC,+DAA+D,YAC3E,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,YAAY,IACX,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,4BAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,GAAI,EACjD,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,QAAQ,EAAE,kBAAkB,GAC5B,CACH,CAAC,CAAC,CAAC,IAAI,GACJ,EAEN,KAAC,aAAa,IACZ,MAAM,EAAE,eAAe,KAAK,SAAS,EACrC,KAAK,EAAC,SAAS,EACf,YAAY,EAAE,eAAe,EAAE,OAAO,EACtC,aAAa,EAAE,IAAI,GAEnB,IACO,GACG,CACjB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {ProgressModal, SpinnerPane} from '@sqlrooms/ui';\nimport {MosaicLayout, getVisibleMosaicLayoutPanels} from '@sqlrooms/layout';\nimport React, {Suspense, useCallback, useMemo} from 'react';\nimport type {MosaicNode} from 'react-mosaic-component';\nimport {useBaseRoomShellStore} from './RoomShellStore';\n\nexport const RoomShell: React.FC = () => {\n const layout = useBaseRoomShellStore((state) => state.config.layout);\n const setLayout = useBaseRoomShellStore((state) => state.room.setLayout);\n const panels = useBaseRoomShellStore((state) => state.room.panels);\n const loadingProgress = useBaseRoomShellStore((state) =>\n state.room.getLoadingProgress(),\n );\n const ErrorBoundary = useBaseRoomShellStore(\n (state) => state.room.CustomErrorBoundary,\n );\n\n const visibleRoomPanels = useMemo(\n () => getVisibleMosaicLayoutPanels(layout?.nodes),\n [layout],\n );\n\n const handleLayoutChange = useCallback(\n (nodes: MosaicNode<string> | null) => {\n // Keep layout properties, e.g. 'pinned' and 'fixed'\n setLayout({...layout, nodes});\n },\n [setLayout, layout],\n );\n\n const renderedPanels: Map<string, React.ReactNode> = useMemo(() => {\n return Array.from(visibleRoomPanels).reduce((acc, id: string) => {\n const PanelComp = panels[id]?.component;\n if (PanelComp) {\n acc.set(\n id,\n <ErrorBoundary>\n <PanelComp />\n </ErrorBoundary>,\n );\n }\n return acc;\n }, new Map<string, React.ReactNode>());\n }, [ErrorBoundary, panels, visibleRoomPanels]);\n\n return (\n <ErrorBoundary>\n <Suspense fallback={<SpinnerPane h=\"100%\" />}>\n <div className=\"flex h-full w-full flex-grow flex-col items-stretch px-0 pb-0\">\n {layout ? (\n <MosaicLayout\n renderTile={(id) => <>{renderedPanels.get(id)}</>}\n value={layout.nodes}\n onChange={handleLayoutChange}\n />\n ) : null}\n </div>\n\n <ProgressModal\n isOpen={loadingProgress !== undefined}\n title=\"Loading\"\n loadingStage={loadingProgress?.message}\n indeterminate={true}\n // progress={loadingProgress?.progress}\n />\n </Suspense>\n </ErrorBoundary>\n );\n};\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { RoomStore } from '@sqlrooms/core';
|
|
2
|
+
import { BaseRoomConfig } from '@sqlrooms/room-config';
|
|
3
|
+
import { FC, PropsWithChildren } from 'react';
|
|
4
|
+
export declare function RoomShellBase<PC extends BaseRoomConfig>({ className, children, roomStore, }: React.PropsWithChildren<{
|
|
5
|
+
className?: string;
|
|
6
|
+
roomStore?: RoomStore<PC>;
|
|
7
|
+
}>): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare const RoomSidebar: FC<PropsWithChildren<{
|
|
9
|
+
className?: string;
|
|
10
|
+
}>>;
|
|
11
|
+
export declare const LayoutComposer: FC<{
|
|
12
|
+
className?: string;
|
|
13
|
+
}>;
|
|
14
|
+
export declare const LoadingProgress: FC<{
|
|
15
|
+
className?: string;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const RoomShell: typeof RoomShellBase & {
|
|
18
|
+
Sidebar: FC<PropsWithChildren<{
|
|
19
|
+
className?: string;
|
|
20
|
+
}>>;
|
|
21
|
+
SidebarButton: FC<{
|
|
22
|
+
className?: string;
|
|
23
|
+
title: string;
|
|
24
|
+
isSelected: boolean;
|
|
25
|
+
isDisabled?: boolean;
|
|
26
|
+
icon: React.ComponentType<{
|
|
27
|
+
className?: string;
|
|
28
|
+
}>;
|
|
29
|
+
onClick: () => void;
|
|
30
|
+
}>;
|
|
31
|
+
LayoutComposer: FC<{
|
|
32
|
+
className?: string;
|
|
33
|
+
}>;
|
|
34
|
+
LoadingProgress: FC<{
|
|
35
|
+
className?: string;
|
|
36
|
+
}>;
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=RoomShell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomShell.d.ts","sourceRoot":"","sources":["../src/RoomShell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AASrD,OAAO,EAAC,EAAE,EAAE,iBAAiB,EAAwB,MAAM,OAAO,CAAC;AAQnE,wBAAgB,aAAa,CAAC,EAAE,SAAS,cAAc,EAAE,EACvD,SAAS,EACT,QAAQ,EACR,SAAS,GACV,EAAE,KAAK,CAAC,iBAAiB,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;CAC3B,CAAC,2CAaD;AAED,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,iBAAiB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,CAenE,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAC,CAkDnD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAC,CAcpD,CAAC;AAEF,eAAO,MAAM,SAAS;;oBArFsC,MAAM;;;;;;;;qBA3BhE,CAAD;;;;;oBA4C4C,MAAM;;;oBAoDL,MAAM;;CAqBlD,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { RoomStateProvider } from '@sqlrooms/core';
|
|
3
|
+
import { MosaicLayout } from '@sqlrooms/layout';
|
|
4
|
+
import { cn, ErrorBoundary, ProgressModal, SpinnerPane, Toaster, TooltipProvider, } from '@sqlrooms/ui';
|
|
5
|
+
import { Suspense, useCallback } from 'react';
|
|
6
|
+
import { RoomShellSidebarButtons, SidebarButton, } from './RoomShellSidebarButtons';
|
|
7
|
+
import { useBaseRoomShellStore } from './RoomShellStore';
|
|
8
|
+
export function RoomShellBase({ className, children, roomStore, }) {
|
|
9
|
+
return (_jsx(RoomStateProvider, { roomStore: roomStore, children: _jsx("div", { className: cn('flex h-full w-full', className), children: _jsx(ErrorBoundary, { children: _jsxs(Suspense, { fallback: _jsx(SpinnerPane, { h: "100%" }), children: [_jsx(TooltipProvider, { children: children }), _jsx(Toaster, {})] }) }) }) }));
|
|
10
|
+
}
|
|
11
|
+
export const RoomSidebar = ({ className, children, }) => {
|
|
12
|
+
return (_jsxs("div", { className: cn('bg-muted/70 flex h-full w-12 flex-col items-center px-1 py-4', className), children: [_jsx(RoomShellSidebarButtons, {}), children] }));
|
|
13
|
+
};
|
|
14
|
+
export const LayoutComposer = ({ className }) => {
|
|
15
|
+
const layout = useBaseRoomShellStore((state) => state.config.layout);
|
|
16
|
+
const setLayout = useBaseRoomShellStore((state) => state.room.setLayout);
|
|
17
|
+
const panels = useBaseRoomShellStore((state) => state.room.panels);
|
|
18
|
+
const ErrorBoundary = useBaseRoomShellStore((state) => state.room.CustomErrorBoundary);
|
|
19
|
+
const handleLayoutChange = useCallback((nodes) => {
|
|
20
|
+
// Keep layout properties, e.g. 'pinned' and 'fixed'
|
|
21
|
+
setLayout({ ...layout, nodes });
|
|
22
|
+
}, [setLayout, layout]);
|
|
23
|
+
// const visibleRoomPanels = useMemo(
|
|
24
|
+
// () => getVisibleMosaicLayoutPanels(layout?.nodes),
|
|
25
|
+
// [layout],
|
|
26
|
+
// );
|
|
27
|
+
const renderTile = (panelId) => {
|
|
28
|
+
// const panelId = visibleRoomPanels.find((p) => p === id);
|
|
29
|
+
const PanelComp = panelId && panels[panelId]?.component;
|
|
30
|
+
if (!PanelComp) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return (_jsx(ErrorBoundary, { children: _jsx(PanelComp, {}) }, panelId));
|
|
34
|
+
};
|
|
35
|
+
return (_jsx("div", { className: cn('flex h-full w-full flex-grow flex-col items-stretch', className), children: layout ? (_jsx(MosaicLayout, { renderTile: renderTile, value: layout.nodes, onChange: handleLayoutChange })) : null }));
|
|
36
|
+
};
|
|
37
|
+
export const LoadingProgress = ({ className }) => {
|
|
38
|
+
const loadingProgress = useBaseRoomShellStore((state) => state.room.getLoadingProgress());
|
|
39
|
+
return (_jsx(ProgressModal, { className: className, isOpen: loadingProgress !== undefined, title: "Loading", loadingStage: loadingProgress?.message, indeterminate: true }));
|
|
40
|
+
};
|
|
41
|
+
export const RoomShell = Object.assign(RoomShellBase, {
|
|
42
|
+
Sidebar: RoomSidebar,
|
|
43
|
+
SidebarButton: SidebarButton,
|
|
44
|
+
LayoutComposer: LayoutComposer,
|
|
45
|
+
LoadingProgress: LoadingProgress,
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=RoomShell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomShell.js","sourceRoot":"","sources":["../src/RoomShell.tsx"],"names":[],"mappings":"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","sourcesContent":["import {RoomStateProvider, RoomStore} from '@sqlrooms/core';\nimport {MosaicLayout} from '@sqlrooms/layout';\nimport {BaseRoomConfig} from '@sqlrooms/room-config';\nimport {\n cn,\n ErrorBoundary,\n ProgressModal,\n SpinnerPane,\n Toaster,\n TooltipProvider,\n} from '@sqlrooms/ui';\nimport {FC, PropsWithChildren, Suspense, useCallback} from 'react';\nimport {MosaicNode} from 'react-mosaic-component';\nimport {\n RoomShellSidebarButtons,\n SidebarButton,\n} from './RoomShellSidebarButtons';\nimport {useBaseRoomShellStore} from './RoomShellStore';\n\nexport function RoomShellBase<PC extends BaseRoomConfig>({\n className,\n children,\n roomStore,\n}: React.PropsWithChildren<{\n className?: string;\n roomStore?: RoomStore<PC>;\n}>) {\n return (\n <RoomStateProvider roomStore={roomStore}>\n <div className={cn('flex h-full w-full', className)}>\n <ErrorBoundary>\n <Suspense fallback={<SpinnerPane h=\"100%\" />}>\n <TooltipProvider>{children}</TooltipProvider>\n <Toaster />\n </Suspense>\n </ErrorBoundary>\n </div>\n </RoomStateProvider>\n );\n}\n\nexport const RoomSidebar: FC<PropsWithChildren<{className?: string}>> = ({\n className,\n children,\n}) => {\n return (\n <div\n className={cn(\n 'bg-muted/70 flex h-full w-12 flex-col items-center px-1 py-4',\n className,\n )}\n >\n <RoomShellSidebarButtons />\n {children}\n </div>\n );\n};\n\nexport const LayoutComposer: FC<{className?: string}> = ({className}) => {\n const layout = useBaseRoomShellStore((state) => state.config.layout);\n const setLayout = useBaseRoomShellStore((state) => state.room.setLayout);\n const panels = useBaseRoomShellStore((state) => state.room.panels);\n const ErrorBoundary = useBaseRoomShellStore(\n (state) => state.room.CustomErrorBoundary,\n );\n\n const handleLayoutChange = useCallback(\n (nodes: MosaicNode<string> | null) => {\n // Keep layout properties, e.g. 'pinned' and 'fixed'\n setLayout({...layout, nodes});\n },\n [setLayout, layout],\n );\n\n // const visibleRoomPanels = useMemo(\n // () => getVisibleMosaicLayoutPanels(layout?.nodes),\n // [layout],\n // );\n\n const renderTile = (panelId: string) => {\n // const panelId = visibleRoomPanels.find((p) => p === id);\n const PanelComp = panelId && panels[panelId]?.component;\n if (!PanelComp) {\n return null;\n }\n return (\n <ErrorBoundary key={panelId}>\n <PanelComp />\n </ErrorBoundary>\n );\n };\n\n return (\n <div\n className={cn(\n 'flex h-full w-full flex-grow flex-col items-stretch',\n className,\n )}\n >\n {layout ? (\n <MosaicLayout\n renderTile={renderTile}\n value={layout.nodes}\n onChange={handleLayoutChange}\n />\n ) : null}\n </div>\n );\n};\n\nexport const LoadingProgress: FC<{className?: string}> = ({className}) => {\n const loadingProgress = useBaseRoomShellStore((state) =>\n state.room.getLoadingProgress(),\n );\n return (\n <ProgressModal\n className={className}\n isOpen={loadingProgress !== undefined}\n title=\"Loading\"\n loadingStage={loadingProgress?.message}\n indeterminate={true}\n // progress={loadingProgress?.progress}\n />\n );\n};\n\nexport const RoomShell = Object.assign(RoomShellBase, {\n Sidebar: RoomSidebar,\n SidebarButton: SidebarButton,\n LayoutComposer: LayoutComposer,\n LoadingProgress: LoadingProgress,\n});\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React, { FC } from 'react';
|
|
2
|
+
declare const SidebarButton: FC<{
|
|
3
|
+
className?: string;
|
|
4
|
+
title: string;
|
|
5
|
+
isSelected: boolean;
|
|
6
|
+
isDisabled?: boolean;
|
|
7
|
+
icon: React.ComponentType<{
|
|
8
|
+
className?: string;
|
|
9
|
+
}>;
|
|
10
|
+
onClick: () => void;
|
|
11
|
+
}>;
|
|
12
|
+
declare const RoomShellSidebarButton: FC<{
|
|
13
|
+
roomPanelType: string;
|
|
14
|
+
}>;
|
|
15
|
+
declare const RoomShellSidebarButtons: FC<{
|
|
16
|
+
className?: string;
|
|
17
|
+
}>;
|
|
18
|
+
export { RoomShellSidebarButton, RoomShellSidebarButtons, SidebarButton };
|
|
19
|
+
//# sourceMappingURL=RoomShellSidebarButtons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomShellSidebarButtons.d.ts","sourceRoot":"","sources":["../src/RoomShellSidebarButtons.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,EAAC,EAAE,EAAU,MAAM,OAAO,CAAC;AAGzC,QAAA,MAAM,aAAa,EAAE,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IAChD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CA+BA,CAAC;AAEF,QAAA,MAAM,sBAAsB,EAAE,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAC,CAuBvD,CAAC;AAEF,QAAA,MAAM,uBAAuB,EAAE,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAC,CAwBrD,CAAC;AAEF,OAAO,EAAC,sBAAsB,EAAE,uBAAuB,EAAE,aAAa,EAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { getVisibleMosaicLayoutPanels } from '@sqlrooms/layout';
|
|
3
|
+
import { Button, cn, Tooltip, TooltipContent, TooltipTrigger, } from '@sqlrooms/ui';
|
|
4
|
+
import { useMemo } from 'react';
|
|
5
|
+
import { useBaseRoomShellStore } from './RoomShellStore';
|
|
6
|
+
const SidebarButton = ({ className, title, isSelected, isDisabled = false, icon: Icon, onClick, }) => {
|
|
7
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: cn('h-10 w-10 rounded-none', isSelected ? 'bg-secondary' : 'hover:bg-secondary/50',
|
|
8
|
+
// isDisabled && 'opacity-50 cursor-not-allowed',
|
|
9
|
+
className), disabled: isDisabled, onClick: onClick, children: Icon ? _jsx(Icon, { className: "h-5 w-5" }) : title }) }), _jsx(TooltipContent, { side: "right", children: _jsx("p", { children: title }) })] }));
|
|
10
|
+
};
|
|
11
|
+
const RoomShellSidebarButton = ({ roomPanelType, }) => {
|
|
12
|
+
const initialized = useBaseRoomShellStore((state) => state.room.initialized);
|
|
13
|
+
const layout = useBaseRoomShellStore((state) => state.config.layout);
|
|
14
|
+
const panels = useBaseRoomShellStore((state) => state.room.panels);
|
|
15
|
+
const visibleRoomPanels = useMemo(() => getVisibleMosaicLayoutPanels(layout?.nodes), [layout]);
|
|
16
|
+
const togglePanel = useBaseRoomShellStore((state) => state.room.togglePanel);
|
|
17
|
+
const { icon: Icon, title } = panels[roomPanelType] ?? {};
|
|
18
|
+
return (_jsx(SidebarButton, { title: title ?? '', isSelected: visibleRoomPanels.includes(roomPanelType), isDisabled: !initialized, icon: Icon ?? (() => null), onClick: () => togglePanel(roomPanelType) }, roomPanelType));
|
|
19
|
+
};
|
|
20
|
+
const RoomShellSidebarButtons = ({ className }) => {
|
|
21
|
+
const panels = useBaseRoomShellStore((state) => state.room.panels);
|
|
22
|
+
return (_jsxs("div", { className: cn('flex h-full grow flex-col', className), children: [_jsx("div", { className: "flex flex-col gap-2", children: panels
|
|
23
|
+
? Object.keys(panels)
|
|
24
|
+
.filter((key) => panels[key]?.placement === 'sidebar')
|
|
25
|
+
.map((type) => (_jsx(RoomShellSidebarButton, { roomPanelType: type }, type)))
|
|
26
|
+
: null }), _jsx("div", { className: "flex-1" }), _jsx("div", { className: "flex flex-col gap-2", children: Object.keys(panels)
|
|
27
|
+
.filter((key) => panels[key]?.placement === 'sidebar-bottom')
|
|
28
|
+
.map((type) => (_jsx(RoomShellSidebarButton, { roomPanelType: type }, type))) })] }));
|
|
29
|
+
};
|
|
30
|
+
export { RoomShellSidebarButton, RoomShellSidebarButtons, SidebarButton };
|
|
31
|
+
//# sourceMappingURL=RoomShellSidebarButtons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomShellSidebarButtons.js","sourceRoot":"","sources":["../src/RoomShellSidebarButtons.tsx"],"names":[],"mappings":"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","sourcesContent":["import {getVisibleMosaicLayoutPanels} from '@sqlrooms/layout';\nimport {\n Button,\n cn,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@sqlrooms/ui';\nimport React, {FC, useMemo} from 'react';\nimport {useBaseRoomShellStore} from './RoomShellStore';\n\nconst SidebarButton: FC<{\n className?: string;\n title: string;\n isSelected: boolean;\n isDisabled?: boolean;\n icon: React.ComponentType<{className?: string}>;\n onClick: () => void;\n}> = ({\n className,\n title,\n isSelected,\n isDisabled = false,\n icon: Icon,\n onClick,\n}) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n 'h-10 w-10 rounded-none',\n isSelected ? 'bg-secondary' : 'hover:bg-secondary/50',\n // isDisabled && 'opacity-50 cursor-not-allowed',\n className,\n )}\n disabled={isDisabled}\n onClick={onClick}\n >\n {Icon ? <Icon className=\"h-5 w-5\" /> : title}\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p>{title}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n\nconst RoomShellSidebarButton: FC<{roomPanelType: string}> = ({\n roomPanelType,\n}) => {\n const initialized = useBaseRoomShellStore((state) => state.room.initialized);\n const layout = useBaseRoomShellStore((state) => state.config.layout);\n const panels = useBaseRoomShellStore((state) => state.room.panels);\n const visibleRoomPanels = useMemo(\n () => getVisibleMosaicLayoutPanels(layout?.nodes),\n [layout],\n );\n const togglePanel = useBaseRoomShellStore((state) => state.room.togglePanel);\n const {icon: Icon, title} = panels[roomPanelType] ?? {};\n\n return (\n <SidebarButton\n key={roomPanelType}\n title={title ?? ''}\n isSelected={visibleRoomPanels.includes(roomPanelType)}\n isDisabled={!initialized}\n icon={Icon ?? (() => null)}\n onClick={() => togglePanel(roomPanelType)}\n />\n );\n};\n\nconst RoomShellSidebarButtons: FC<{className?: string}> = ({className}) => {\n const panels = useBaseRoomShellStore((state) => state.room.panels);\n\n return (\n <div className={cn('flex h-full grow flex-col', className)}>\n <div className=\"flex flex-col gap-2\">\n {panels\n ? Object.keys(panels)\n .filter((key) => panels[key]?.placement === 'sidebar')\n .map((type) => (\n <RoomShellSidebarButton key={type} roomPanelType={type} />\n ))\n : null}\n </div>\n <div className=\"flex-1\" />\n <div className=\"flex flex-col gap-2\">\n {Object.keys(panels)\n .filter((key) => panels[key]?.placement === 'sidebar-bottom')\n .map((type) => (\n <RoomShellSidebarButton key={type} roomPanelType={type} />\n ))}\n </div>\n </div>\n );\n};\n\nexport {RoomShellSidebarButton, RoomShellSidebarButtons, SidebarButton};\n"]}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { DataTable, DuckDbConnector, DuckDbSliceConfig, DuckDbSliceState, LoadFileOptions } from '@sqlrooms/duckdb';
|
|
2
|
+
import { RoomState, RoomStateActions, RoomStateProps } from '@sqlrooms/core';
|
|
3
|
+
import { DataSource, LayoutConfig } from '@sqlrooms/room-config';
|
|
4
|
+
import { ReactNode } from 'react';
|
|
5
|
+
import { StateCreator, StoreApi } from 'zustand';
|
|
6
|
+
import { BaseRoomConfig } from '@sqlrooms/room-config/src/BaseRoomConfig';
|
|
7
|
+
import { DataSourceState, DataSourceStatus, RoomFileInfo, RoomFileState } from './types';
|
|
8
|
+
export type RoomShellStore<PC extends BaseRoomConfig> = StoreApi<RoomShellSliceState<PC>>;
|
|
9
|
+
export type RoomPanelInfo = {
|
|
10
|
+
title?: string;
|
|
11
|
+
icon?: React.ComponentType<{
|
|
12
|
+
className?: string;
|
|
13
|
+
}>;
|
|
14
|
+
component: React.ComponentType;
|
|
15
|
+
placement: 'sidebar' | 'sidebar-bottom' | 'main' | 'top-bar';
|
|
16
|
+
};
|
|
17
|
+
export declare const INITIAL_BASE_ROOM_CONFIG: BaseRoomConfig & DuckDbSliceConfig;
|
|
18
|
+
export type RoomShellSliceStateProps<PC extends BaseRoomConfig> = RoomStateProps<PC> & {
|
|
19
|
+
initialized: boolean;
|
|
20
|
+
roomFiles: RoomFileInfo[];
|
|
21
|
+
roomFilesProgress: {
|
|
22
|
+
[pathname: string]: RoomFileState;
|
|
23
|
+
};
|
|
24
|
+
isDataAvailable: boolean;
|
|
25
|
+
dataSourceStates: {
|
|
26
|
+
[tableName: string]: DataSourceState;
|
|
27
|
+
};
|
|
28
|
+
panels: Record<string, RoomPanelInfo>;
|
|
29
|
+
CustomErrorBoundary: React.ComponentType<{
|
|
30
|
+
onRetry?: () => void;
|
|
31
|
+
children?: ReactNode;
|
|
32
|
+
}>;
|
|
33
|
+
};
|
|
34
|
+
export type RoomShellSliceStateActions<PC extends BaseRoomConfig> = RoomStateActions<PC> & {
|
|
35
|
+
/**
|
|
36
|
+
* Initialize the room state.
|
|
37
|
+
* @returns A promise that resolves when the room state has been initialized.
|
|
38
|
+
*/
|
|
39
|
+
initialize: () => Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Set the layout of the room.
|
|
42
|
+
* @param layout - The layout to set.
|
|
43
|
+
*/
|
|
44
|
+
setLayout(layout: LayoutConfig): void;
|
|
45
|
+
/**
|
|
46
|
+
* Toggle a panel.
|
|
47
|
+
* @param panel - The panel to toggle.
|
|
48
|
+
* @param show - Whether to show the panel.
|
|
49
|
+
*/
|
|
50
|
+
togglePanel: (panel: string, show?: boolean) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Toggle the pin state of a panel.
|
|
53
|
+
* @param panel - The panel to toggle the pin state of.
|
|
54
|
+
*/
|
|
55
|
+
togglePanelPin: (panel: string) => void;
|
|
56
|
+
setRoomTitle(title: string): void;
|
|
57
|
+
setDescription(description: string): void;
|
|
58
|
+
/**
|
|
59
|
+
* Add or update a SQL query data source.
|
|
60
|
+
* @param tableName - The name of the table to create or update.
|
|
61
|
+
* @param query - The SQL query to execute.
|
|
62
|
+
* @param oldTableName - The name of the table to replace (optional).
|
|
63
|
+
*/
|
|
64
|
+
addOrUpdateSqlQueryDataSource(tableName: string, query: string, oldTableName?: string): Promise<void>;
|
|
65
|
+
removeSqlQueryDataSource(tableName: string): Promise<void>;
|
|
66
|
+
areDatasetsReady(): boolean;
|
|
67
|
+
addRoomFile(file: File | string, tableName?: string, loadFileOptions?: LoadFileOptions): Promise<DataTable | undefined>;
|
|
68
|
+
removeRoomFile(pathname: string): void;
|
|
69
|
+
setRoomFiles(info: RoomFileInfo[]): void;
|
|
70
|
+
setRoomFileProgress(pathname: string, fileState: RoomFileState): void;
|
|
71
|
+
addDataSource: (dataSource: DataSource, status?: DataSourceStatus) => Promise<void>;
|
|
72
|
+
};
|
|
73
|
+
export type RoomShellSliceState<PC extends BaseRoomConfig> = RoomState<PC> & {
|
|
74
|
+
config: PC;
|
|
75
|
+
room: RoomShellSliceStateProps<PC> & RoomShellSliceStateActions<PC>;
|
|
76
|
+
} & DuckDbSliceState;
|
|
77
|
+
/**
|
|
78
|
+
* This type takes a union type U (for example, A | B) and transforms it into an intersection type (A & B). This is useful because if you pass in, say, two slices of type { a: number } and { b: string }, the union of the slice types would be { a: number } | { b: string }, but you really want an object that has both properties—i.e. { a: number } & { b: string }.
|
|
79
|
+
*/
|
|
80
|
+
type InitialState<PC extends BaseRoomConfig> = {
|
|
81
|
+
connector?: DuckDbConnector;
|
|
82
|
+
config: Partial<PC>;
|
|
83
|
+
room: Partial<Omit<RoomShellSliceStateProps<PC>, 'config' | 'panels'>> & {
|
|
84
|
+
panels?: RoomShellSliceStateProps<PC>['panels'];
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
export declare function createRoomShellSlice<PC extends BaseRoomConfig>(props: InitialState<PC>): StateCreator<RoomShellSliceState<PC>>;
|
|
88
|
+
export declare function useBaseRoomShellStore<PC extends BaseRoomConfig, PS extends RoomShellSliceState<PC>, T>(selector: (state: RoomShellSliceState<PC>) => T): T;
|
|
89
|
+
export declare function createSlice<PC extends BaseRoomConfig, S>(sliceCreator: (...args: Parameters<StateCreator<S & RoomShellSliceState<PC>>>) => S): StateCreator<S>;
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=RoomShellStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomShellStore.d.ts","sourceRoot":"","sources":["../src/RoomShellStore.ts"],"names":[],"mappings":"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"}
|