@kkkarsss/ui 1.4.0 → 1.4.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/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.js +2 -0
- package/dist/providers/layout/layout-context.d.ts +12 -0
- package/dist/providers/layout/layout-context.js +17 -0
- package/dist/providers/layout/use-layout.d.ts +7 -0
- package/dist/providers/layout/use-layout.js +9 -0
- package/dist/ui/layout/main-page-layout/main-page-layout.js +4 -6
- package/package.json +1 -1
|
@@ -7,3 +7,5 @@ export { ThemeProvider } from './theme/theme-provider';
|
|
|
7
7
|
export { AlertContext, type TAlert } from './alert/alert-context';
|
|
8
8
|
export { AlertProvider } from './alert/alert-provider';
|
|
9
9
|
export { useAlerts } from './alert/use-alerts';
|
|
10
|
+
export { LayoutProvider } from './layout/layout-context';
|
|
11
|
+
export { useLayout } from './layout/use-layout';
|
package/dist/providers/index.js
CHANGED
|
@@ -7,3 +7,5 @@ export { ThemeProvider } from './theme/theme-provider';
|
|
|
7
7
|
export { AlertContext } from './alert/alert-context';
|
|
8
8
|
export { AlertProvider } from './alert/alert-provider';
|
|
9
9
|
export { useAlerts } from './alert/use-alerts';
|
|
10
|
+
export { LayoutProvider } from './layout/layout-context';
|
|
11
|
+
export { useLayout } from './layout/use-layout';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type FC, type PropsWithChildren } from 'react';
|
|
2
|
+
export type TExpandedPanel = 'left' | 'right' | null;
|
|
3
|
+
type TLayoutContext = {
|
|
4
|
+
expandedPanel: TExpandedPanel;
|
|
5
|
+
setExpandedPanel: (panel: TExpandedPanel) => void;
|
|
6
|
+
toggleLeftPanel: () => void;
|
|
7
|
+
toggleRightPanel: () => void;
|
|
8
|
+
closePanels: () => void;
|
|
9
|
+
};
|
|
10
|
+
export declare const LayoutContext: import("react").Context<TLayoutContext | undefined>;
|
|
11
|
+
export declare const LayoutProvider: FC<PropsWithChildren>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useState, useMemo } from 'react';
|
|
3
|
+
export const LayoutContext = createContext(undefined);
|
|
4
|
+
export const LayoutProvider = ({ children }) => {
|
|
5
|
+
const [expandedPanel, setExpandedPanel] = useState(null);
|
|
6
|
+
const toggleLeftPanel = () => setExpandedPanel((prev) => (prev === 'left' ? null : 'left'));
|
|
7
|
+
const toggleRightPanel = () => setExpandedPanel((prev) => (prev === 'right' ? null : 'right'));
|
|
8
|
+
const closePanels = () => setExpandedPanel(null);
|
|
9
|
+
const value = useMemo(() => ({
|
|
10
|
+
expandedPanel,
|
|
11
|
+
setExpandedPanel,
|
|
12
|
+
toggleLeftPanel,
|
|
13
|
+
toggleRightPanel,
|
|
14
|
+
closePanels,
|
|
15
|
+
}), [expandedPanel]);
|
|
16
|
+
return _jsx(LayoutContext.Provider, { value: value, children: children });
|
|
17
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const useLayout: () => {
|
|
2
|
+
expandedPanel: import("./layout-context").TExpandedPanel;
|
|
3
|
+
setExpandedPanel: (panel: import("./layout-context").TExpandedPanel) => void;
|
|
4
|
+
toggleLeftPanel: () => void;
|
|
5
|
+
toggleRightPanel: () => void;
|
|
6
|
+
closePanels: () => void;
|
|
7
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { LayoutContext } from './layout-context';
|
|
3
|
+
export const useLayout = () => {
|
|
4
|
+
const context = useContext(LayoutContext);
|
|
5
|
+
if (!context) {
|
|
6
|
+
throw new Error('useLayout must be used within a LayoutProvider');
|
|
7
|
+
}
|
|
8
|
+
return context;
|
|
9
|
+
};
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Menu, X } from 'lucide-react';
|
|
3
|
-
import { Fragment
|
|
4
|
-
import { useWidget } from '../../../providers';
|
|
3
|
+
import { Fragment } from 'react';
|
|
4
|
+
import { useWidget, useLayout } from '../../../providers';
|
|
5
5
|
import { jc } from '../../../utils';
|
|
6
6
|
import { Flex } from '../flex/flex';
|
|
7
7
|
import { IconAction } from '../icon-action/icon-action';
|
|
8
8
|
export const MainPageLayout = ({ children, leftPanel, rightPanel, leftIcon, rightIcon, }) => {
|
|
9
9
|
const { widget } = useWidget();
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
const toggleRight = () => setExpandedPanel(expandedPanel === 'right' ? null : 'right');
|
|
13
|
-
return (_jsx("div", { className: "@container/layout w-full h-[100dvh]", children: _jsxs("main", { className: "grid h-full w-full grid-cols-1 @s/layout:grid-cols-[300px_1fr_300px] @s/layout:py-xl @s/layout:px-l @s/layout:gap-l py-m px-s gap-s relative overflow-hidden", children: [_jsx("aside", { className: "hidden @s/layout:block h-full w-full", children: leftPanel }), _jsx("div", { className: "@s/layout:hidden absolute left-4 top-4 z-50", children: _jsx(IconAction, { icon: expandedPanel === 'left' ? _jsx(X, { size: 20 }) : leftIcon || _jsx(Menu, { size: 20 }), onClick: toggleLeft }) }), _jsxs(Flex, { justify: 'center', gap: '16px', type: 'fill', className: jc(expandedPanel ? 'hidden @s/layout:flex' : 'flex', 'h-full mt-[50px] @s/layout:m-0'), children: [children, widget && _jsx(Fragment, { children: widget.ui }, widget.id)] }), _jsx("aside", { className: "hidden @s/layout:block h-full w-full", children: rightPanel }), _jsx("div", { className: "@s/layout:hidden absolute right-4 top-4 z-50", children: _jsx(IconAction, { icon: expandedPanel === 'right' ? _jsx(X, { size: 20 }) : rightIcon || _jsx(Menu, { size: 20 }), onClick: toggleRight }) }), expandedPanel && (_jsx("div", { className: "@s/layout:hidden absolute inset-0 z-40 bg-[var(--background)] pt-16 px-4 pb-4 overflow-auto", children: expandedPanel === 'left' ? leftPanel : rightPanel }))] }) }));
|
|
10
|
+
const { expandedPanel, toggleLeftPanel, toggleRightPanel } = useLayout();
|
|
11
|
+
return (_jsx("div", { className: "@container w-full h-[100dvh]", children: _jsxs("main", { className: "grid h-full w-full grid-cols-1 @m:grid-cols-[300px_1fr_300px] @m:py-xl @m:px-l @m:gap-l py-m px-s gap-s relative overflow-hidden", children: [_jsx("aside", { className: "hidden @m:block h-full w-full", children: leftPanel }), _jsx("div", { className: "@m:hidden absolute left-4 top-4 z-50", children: _jsx(IconAction, { icon: expandedPanel === 'left' ? _jsx(X, { size: 20 }) : leftIcon || _jsx(Menu, { size: 20 }), onClick: toggleLeftPanel }) }), _jsxs(Flex, { justify: 'center', gap: '16px', type: 'fill', className: jc(expandedPanel ? 'hidden @m:flex' : 'flex', 'h-full'), children: [children, widget && _jsx(Fragment, { children: widget.ui }, widget.id)] }), _jsx("aside", { className: "hidden @m:block h-full w-full", children: rightPanel }), _jsx("div", { className: "@m:hidden absolute right-4 top-4 z-50", children: _jsx(IconAction, { icon: expandedPanel === 'right' ? _jsx(X, { size: 20 }) : rightIcon || _jsx(Menu, { size: 20 }), onClick: toggleRightPanel }) }), expandedPanel && (_jsx("div", { className: "@m:hidden absolute inset-0 z-40 bg-background pt-16 px-4 pb-4 overflow-auto", children: expandedPanel === 'left' ? leftPanel : rightPanel }))] }) }));
|
|
14
12
|
};
|