@astral/ui 4.72.0 → 4.73.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/components/DashboardLayout/Header/styles.js +21 -1
- package/components/MenuOrganization/OrganizationButton/styles.js +3 -0
- package/components/PageAside/MobileAsideButton/MobileAsideButton.d.ts +6 -0
- package/components/PageAside/MobileAsideButton/MobileAsideButton.js +13 -0
- package/components/PageAside/MobileAsideButton/index.d.ts +1 -0
- package/components/PageAside/MobileAsideButton/index.js +1 -0
- package/components/PageAside/MobileAsideButton/styles.d.ts +22 -0
- package/components/PageAside/MobileAsideButton/styles.js +31 -0
- package/components/PageAside/PageAside.d.ts +2 -9
- package/components/PageAside/PageAside.js +21 -4
- package/components/PageAside/constants.d.ts +5 -0
- package/components/PageAside/constants.js +6 -0
- package/components/PageAside/hooks/index.d.ts +1 -0
- package/components/PageAside/hooks/index.js +1 -0
- package/components/PageAside/hooks/usePageAside/index.d.ts +1 -0
- package/components/PageAside/hooks/usePageAside/index.js +1 -0
- package/components/PageAside/hooks/usePageAside/usePageAside.d.ts +9 -0
- package/components/PageAside/hooks/usePageAside/usePageAside.js +17 -0
- package/components/PageAside/index.d.ts +4 -0
- package/components/PageAside/index.js +3 -0
- package/components/PageAside/public.d.ts +3 -1
- package/components/PageAside/public.js +1 -0
- package/components/PageAside/styles.d.ts +15 -0
- package/components/PageAside/styles.js +36 -7
- package/components/PageAside/types.d.ts +24 -0
- package/components/PageAside/types.js +1 -0
- package/components/PageAsideBlock/styles.js +2 -2
- package/components/PageAsideNavigation/PageAsideNavigation.d.ts +2 -0
- package/components/PageAsideNavigation/PageAsideNavigation.js +9 -0
- package/components/PageAsideNavigation/PageAsideNavigationItem/PageAsideNavigationItem.d.ts +18 -0
- package/components/PageAsideNavigation/PageAsideNavigationItem/PageAsideNavigationItem.js +18 -0
- package/components/PageAsideNavigation/PageAsideNavigationItem/constants.d.ts +4 -0
- package/components/PageAsideNavigation/PageAsideNavigationItem/constants.js +5 -0
- package/components/PageAsideNavigation/PageAsideNavigationItem/index.d.ts +3 -0
- package/components/PageAsideNavigation/PageAsideNavigationItem/index.js +2 -0
- package/components/PageAsideNavigation/PageAsideNavigationItem/styles.d.ts +9 -0
- package/components/PageAsideNavigation/PageAsideNavigationItem/styles.js +113 -0
- package/components/PageAsideNavigation/PageAsideNavigationItem/types.d.ts +26 -0
- package/components/PageAsideNavigation/PageAsideNavigationItem/types.js +1 -0
- package/components/PageAsideNavigation/constants.d.ts +3 -0
- package/components/PageAsideNavigation/constants.js +4 -0
- package/components/PageAsideNavigation/index.d.ts +4 -0
- package/components/PageAsideNavigation/index.js +3 -0
- package/components/PageAsideNavigation/public.d.ts +3 -0
- package/components/PageAsideNavigation/public.js +3 -0
- package/components/PageAsideNavigation/styles.d.ts +13 -0
- package/components/PageAsideNavigation/styles.js +48 -0
- package/components/PageAsideNavigation/types.d.ts +17 -0
- package/components/PageAsideNavigation/types.js +1 -0
- package/components/PageHeader/HeaderContent/styles.js +0 -2
- package/components/PageHeader/PageHeader.js +11 -1
- package/components/PageHeader/styles.js +7 -5
- package/components/PagePinnableAside/PagePinnableAside.d.ts +1 -1
- package/components/PagePinnableAside/PagePinnableAside.js +16 -4
- package/components/PagePinnableAside/constants.d.ts +2 -0
- package/components/PagePinnableAside/constants.js +2 -0
- package/components/PagePinnableAside/styles.js +8 -11
- package/components/PagePinnableAside/types.d.ts +17 -1
- package/components/PagePinnableAside/useLogic/useLogic.d.ts +4 -2
- package/components/PagePinnableAside/useLogic/useLogic.js +10 -2
- package/components/Tabs/Tabs.js +2 -2
- package/components/Tabs/hooks/index.d.ts +1 -1
- package/components/Tabs/hooks/index.js +1 -1
- package/components/useScrollToActiveElement/index.d.ts +1 -0
- package/components/useScrollToActiveElement/index.js +1 -0
- package/components/useScrollToActiveElement/useScrollToActiveElement.d.ts +9 -0
- package/components/useScrollToActiveElement/useScrollToActiveElement.js +29 -0
- package/node/components/DashboardLayout/Header/styles.js +21 -1
- package/node/components/MenuOrganization/OrganizationButton/styles.js +3 -0
- package/node/components/PageAside/MobileAsideButton/MobileAsideButton.d.ts +6 -0
- package/node/components/PageAside/MobileAsideButton/MobileAsideButton.js +17 -0
- package/node/components/PageAside/MobileAsideButton/index.d.ts +1 -0
- package/node/components/PageAside/MobileAsideButton/index.js +5 -0
- package/node/components/PageAside/MobileAsideButton/styles.d.ts +22 -0
- package/node/components/PageAside/MobileAsideButton/styles.js +34 -0
- package/node/components/PageAside/PageAside.d.ts +2 -9
- package/node/components/PageAside/PageAside.js +19 -2
- package/node/components/PageAside/constants.d.ts +5 -0
- package/node/components/PageAside/constants.js +7 -1
- package/node/components/PageAside/hooks/index.d.ts +1 -0
- package/node/components/{Tabs/hooks/useScrollToActiveTab → PageAside/hooks}/index.js +1 -1
- package/node/components/PageAside/hooks/usePageAside/index.d.ts +1 -0
- package/node/components/PageAside/hooks/usePageAside/index.js +17 -0
- package/node/components/PageAside/hooks/usePageAside/usePageAside.d.ts +9 -0
- package/node/components/PageAside/hooks/usePageAside/usePageAside.js +21 -0
- package/node/components/PageAside/index.d.ts +4 -0
- package/node/components/PageAside/index.js +7 -1
- package/node/components/PageAside/public.d.ts +3 -1
- package/node/components/PageAside/public.js +3 -1
- package/node/components/PageAside/styles.d.ts +15 -0
- package/node/components/PageAside/styles.js +38 -9
- package/node/components/PageAside/types.d.ts +24 -0
- package/node/components/PageAside/types.js +2 -0
- package/node/components/PageAsideBlock/styles.js +2 -2
- package/node/components/PageAsideNavigation/PageAsideNavigation.d.ts +2 -0
- package/node/components/PageAsideNavigation/PageAsideNavigation.js +13 -0
- package/node/components/PageAsideNavigation/PageAsideNavigationItem/PageAsideNavigationItem.d.ts +18 -0
- package/node/components/PageAsideNavigation/PageAsideNavigationItem/PageAsideNavigationItem.js +22 -0
- package/node/components/PageAsideNavigation/PageAsideNavigationItem/constants.d.ts +4 -0
- package/node/components/PageAsideNavigation/PageAsideNavigationItem/constants.js +8 -0
- package/node/components/PageAsideNavigation/PageAsideNavigationItem/index.d.ts +3 -0
- package/node/components/PageAsideNavigation/PageAsideNavigationItem/index.js +7 -0
- package/node/components/PageAsideNavigation/PageAsideNavigationItem/styles.d.ts +9 -0
- package/node/components/PageAsideNavigation/PageAsideNavigationItem/styles.js +116 -0
- package/node/components/PageAsideNavigation/PageAsideNavigationItem/types.d.ts +26 -0
- package/node/components/PageAsideNavigation/PageAsideNavigationItem/types.js +2 -0
- package/node/components/PageAsideNavigation/constants.d.ts +3 -0
- package/node/components/PageAsideNavigation/constants.js +7 -0
- package/node/components/PageAsideNavigation/index.d.ts +4 -0
- package/node/components/PageAsideNavigation/index.js +10 -0
- package/node/components/PageAsideNavigation/public.d.ts +3 -0
- package/node/components/PageAsideNavigation/public.js +10 -0
- package/node/components/PageAsideNavigation/styles.d.ts +13 -0
- package/node/components/PageAsideNavigation/styles.js +51 -0
- package/node/components/PageAsideNavigation/types.d.ts +17 -0
- package/node/components/PageAsideNavigation/types.js +2 -0
- package/node/components/PageHeader/HeaderContent/styles.js +0 -2
- package/node/components/PageHeader/PageHeader.js +11 -1
- package/node/components/PageHeader/styles.js +18 -16
- package/node/components/PagePinnableAside/PagePinnableAside.d.ts +1 -1
- package/node/components/PagePinnableAside/PagePinnableAside.js +16 -4
- package/node/components/PagePinnableAside/constants.d.ts +2 -0
- package/node/components/PagePinnableAside/constants.js +2 -0
- package/node/components/PagePinnableAside/styles.js +10 -13
- package/node/components/PagePinnableAside/types.d.ts +17 -1
- package/node/components/PagePinnableAside/useLogic/useLogic.d.ts +4 -2
- package/node/components/PagePinnableAside/useLogic/useLogic.js +10 -2
- package/node/components/Tabs/Tabs.js +2 -2
- package/node/components/Tabs/hooks/index.d.ts +1 -1
- package/node/components/Tabs/hooks/index.js +1 -1
- package/node/components/useScrollToActiveElement/index.d.ts +1 -0
- package/node/components/useScrollToActiveElement/index.js +17 -0
- package/node/components/useScrollToActiveElement/useScrollToActiveElement.d.ts +9 -0
- package/node/components/useScrollToActiveElement/useScrollToActiveElement.js +33 -0
- package/package.json +1 -1
- package/components/DashboardLayout/Sidebar/MenuSidebarButton/types.d.ts +0 -0
- package/components/DashboardLayout/Sidebar/MenuSidebarButton/types.js +0 -1
- package/components/DashboardLayout/Sidebar/Sidebar.d.ts +0 -0
- package/components/DashboardLayout/Sidebar/Sidebar.js +0 -1
- package/components/Tabs/hooks/useScrollToActiveTab/index.d.ts +0 -1
- package/components/Tabs/hooks/useScrollToActiveTab/index.js +0 -1
- package/components/Tabs/hooks/useScrollToActiveTab/useScrollToActiveTab.d.ts +0 -4
- package/components/Tabs/hooks/useScrollToActiveTab/useScrollToActiveTab.js +0 -24
- package/node/components/DashboardLayout/Sidebar/MenuSidebarButton/types.d.ts +0 -0
- package/node/components/DashboardLayout/Sidebar/MenuSidebarButton/types.js +0 -1
- package/node/components/DashboardLayout/Sidebar/Sidebar.d.ts +0 -0
- package/node/components/DashboardLayout/Sidebar/Sidebar.js +0 -1
- package/node/components/Tabs/hooks/useScrollToActiveTab/index.d.ts +0 -1
- package/node/components/Tabs/hooks/useScrollToActiveTab/useScrollToActiveTab.d.ts +0 -4
- package/node/components/Tabs/hooks/useScrollToActiveTab/useScrollToActiveTab.js +0 -28
|
@@ -70,7 +70,9 @@ export const HeaderSection = styled.div `
|
|
|
70
70
|
align-items: center;
|
|
71
71
|
|
|
72
72
|
${({ theme }) => theme.breakpoints.down('sm')} {
|
|
73
|
-
flex-
|
|
73
|
+
flex-shrink: 0;
|
|
74
|
+
|
|
75
|
+
min-width: 0;
|
|
74
76
|
}
|
|
75
77
|
`;
|
|
76
78
|
export const HeaderContentSection = styled(HeaderSection) `
|
|
@@ -78,6 +80,8 @@ export const HeaderContentSection = styled(HeaderSection) `
|
|
|
78
80
|
justify-content: flex-end;
|
|
79
81
|
|
|
80
82
|
${({ theme }) => theme.breakpoints.down('sm')} {
|
|
83
|
+
flex-grow: 1;
|
|
84
|
+
flex-shrink: unset;
|
|
81
85
|
gap: ${({ theme }) => theme.spacing(2)};
|
|
82
86
|
|
|
83
87
|
&.${dashboardLayoutHeaderClassnames.priorityFeatureMenuOrg} {
|
|
@@ -119,6 +123,7 @@ export const HeaderContent = styled.div `
|
|
|
119
123
|
justify-content: space-between;
|
|
120
124
|
|
|
121
125
|
${({ theme }) => theme.breakpoints.down('sm')} {
|
|
126
|
+
width: 100%;
|
|
122
127
|
padding: 0;
|
|
123
128
|
}
|
|
124
129
|
`;
|
|
@@ -127,6 +132,17 @@ export const HeaderContent = styled.div `
|
|
|
127
132
|
*/
|
|
128
133
|
export const PriorityFeatureWrapper = styled.div `
|
|
129
134
|
${({ theme }) => theme.breakpoints.down('sm')} {
|
|
135
|
+
display: flex;
|
|
136
|
+
justify-content: flex-end;
|
|
137
|
+
|
|
138
|
+
min-width: 0;
|
|
139
|
+
|
|
140
|
+
&.${dashboardLayoutHeaderClassnames.priorityFeatureMenuOrg} {
|
|
141
|
+
& .${menuOrganizationClassnames.button} {
|
|
142
|
+
padding: ${({ theme }) => theme.spacing(2, 0)};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
130
146
|
&.${dashboardLayoutHeaderClassnames.featureInSidebar} {
|
|
131
147
|
position: absolute;
|
|
132
148
|
z-index: ${({ theme }) => theme.zIndex.appBar - 1};
|
|
@@ -188,6 +204,10 @@ export const PriorityFeatureWrapper = styled.div `
|
|
|
188
204
|
}
|
|
189
205
|
|
|
190
206
|
&.${dashboardLayoutHeaderClassnames.priorityFeatureMenuOrg} {
|
|
207
|
+
& .${menuOrganizationClassnames.button} {
|
|
208
|
+
padding: ${({ theme }) => theme.spacing(2, 0)};
|
|
209
|
+
}
|
|
210
|
+
|
|
191
211
|
& .${dashboardLayoutHeaderClassnames.profile} {
|
|
192
212
|
display: block;
|
|
193
213
|
flex-grow: 1;
|
|
@@ -27,6 +27,7 @@ export const StyledButton = styled(Button) `
|
|
|
27
27
|
justify-content: space-between;
|
|
28
28
|
|
|
29
29
|
width: 100%;
|
|
30
|
+
min-width: unset;
|
|
30
31
|
max-width: unset;
|
|
31
32
|
|
|
32
33
|
border-radius: 0;
|
|
@@ -48,6 +49,8 @@ export const Container = styled.div `
|
|
|
48
49
|
display: flex;
|
|
49
50
|
flex-direction: column;
|
|
50
51
|
|
|
52
|
+
/* Позволяет элементу сжиматься до ширины контейнера */
|
|
53
|
+
min-width: 0;
|
|
51
54
|
max-width: 260px;
|
|
52
55
|
`;
|
|
53
56
|
export const StyledTypography = styled(Typography, {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronDOutlineMd } from '../../../icons/ChevronDOutlineMd';
|
|
3
|
+
import { useToggle } from '../../useToggle';
|
|
4
|
+
import { DrawerContent, StyledBottomDrawer, StyledButton } from './styles';
|
|
5
|
+
export const MobileAsideButton = ({ content }) => {
|
|
6
|
+
const [isDrawerOpen, handleOpenDrawer, handleCloseDrawer] = useToggle({
|
|
7
|
+
initialState: false,
|
|
8
|
+
});
|
|
9
|
+
if (!content) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return (_jsxs(_Fragment, { children: [_jsx(StyledButton, { variant: "outlined", color: "grey", endIcon: _jsx(ChevronDOutlineMd, {}), onClick: handleOpenDrawer, children: "\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F" }), _jsx(StyledBottomDrawer, { title: "\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F", open: isDrawerOpen, onClose: handleCloseDrawer, children: _jsx(DrawerContent, { children: content }) })] }));
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { MobileAsideButton } from './MobileAsideButton';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { MobileAsideButton } from './MobileAsideButton';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const StyledButton: import("../../styled").StyledComponent<Omit<import("../..").WithoutEmotionSpecific<import("@mui/material").ButtonProps>, "color" | "component" | "size" | "variant" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple"> & {
|
|
3
|
+
variant?: "light" | "link" | "text" | "contained" | "outlined" | undefined;
|
|
4
|
+
loading?: boolean | undefined;
|
|
5
|
+
color?: "primary" | "success" | "warning" | "error" | "grey" | undefined;
|
|
6
|
+
component?: import("react").ElementType | undefined;
|
|
7
|
+
selected?: boolean | undefined;
|
|
8
|
+
size?: "large" | "medium" | undefined;
|
|
9
|
+
} & Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, ""> & import("react").RefAttributes<HTMLButtonElement> & {
|
|
10
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
11
|
+
}, {}, {}>;
|
|
12
|
+
export declare const DrawerContent: import("../../styled").StyledComponent<{
|
|
13
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
14
|
+
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
15
|
+
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
16
|
+
export declare const StyledBottomDrawer: import("../../styled").StyledComponent<{
|
|
17
|
+
title?: string | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>[] | undefined;
|
|
18
|
+
drawerHeaderHeight?: number | undefined;
|
|
19
|
+
headerContent?: import("react").ReactNode;
|
|
20
|
+
} & import("../..").WithoutEmotionSpecific<Omit<import("@mui/material").DrawerProps, "title" | "anchor" | "variant">> & {
|
|
21
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
22
|
+
}, {}, {}>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { paperClasses } from '@mui/material';
|
|
2
|
+
import { BottomDrawer } from '../../BottomDrawer';
|
|
3
|
+
import { OFFSET_TOP_SCREEN } from '../../BottomDrawer/constants';
|
|
4
|
+
import { Button } from '../../Button';
|
|
5
|
+
import { styled } from '../../styled';
|
|
6
|
+
export const StyledButton = styled(Button) `
|
|
7
|
+
display: none;
|
|
8
|
+
|
|
9
|
+
${({ theme }) => theme.breakpoints.down('sm')} {
|
|
10
|
+
display: flex;
|
|
11
|
+
order: 3;
|
|
12
|
+
|
|
13
|
+
margin: ${({ theme }) => theme.spacing(0, 4, 4)};
|
|
14
|
+
|
|
15
|
+
background-color: ${({ theme }) => theme.palette.background.default};
|
|
16
|
+
}
|
|
17
|
+
`;
|
|
18
|
+
export const DrawerContent = styled.div `
|
|
19
|
+
padding: ${({ theme }) => theme.spacing(4)};
|
|
20
|
+
`;
|
|
21
|
+
export const StyledBottomDrawer = styled(BottomDrawer) `
|
|
22
|
+
& .${paperClasses.root} {
|
|
23
|
+
height: calc(100vh - ${OFFSET_TOP_SCREEN});
|
|
24
|
+
|
|
25
|
+
/* Причина игнора: прогрессивное улучшение */
|
|
26
|
+
/* stylelint-disable plugin/no-unsupported-browser-features */
|
|
27
|
+
@supports (height: 100dvh) {
|
|
28
|
+
height: calc(100dvh - ${OFFSET_TOP_SCREEN});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
@@ -1,9 +1,2 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export
|
|
3
|
-
children: ReactNode;
|
|
4
|
-
/**
|
|
5
|
-
* Название класса, применяется к корневому компоненту
|
|
6
|
-
*/
|
|
7
|
-
className?: string;
|
|
8
|
-
};
|
|
9
|
-
export declare const PageAside: ({ children, className }: PageAsideProps) => import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
import { type PageAsideProps } from './types';
|
|
2
|
+
export declare const PageAside: ({ children, className, header, navigation, }: PageAsideProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,5 +1,22 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { createPortal } from 'react-dom';
|
|
3
|
+
import { classNames } from '../utils/classNames';
|
|
4
|
+
import { cva } from '../utils/cva';
|
|
5
|
+
import { pageAsideClassnames } from './constants';
|
|
6
|
+
import { usePageAside } from './hooks';
|
|
7
|
+
import { MobileAsideButton } from './MobileAsideButton';
|
|
8
|
+
import { AsideHeader, MobileAsideHeader, MobileAsideNavigation, StyledDivider, Wrapper, } from './styles';
|
|
9
|
+
const asideCva = cva(pageAsideClassnames.root, {
|
|
10
|
+
variants: {
|
|
11
|
+
withHeader: {
|
|
12
|
+
true: pageAsideClassnames.withHeader,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
export const PageAside = ({ children, className, header, navigation, }) => {
|
|
17
|
+
const { pageHeaderContainer, isMobileNavigationVisible } = usePageAside({
|
|
18
|
+
navigation,
|
|
19
|
+
});
|
|
20
|
+
return (_jsxs(_Fragment, { children: [isMobileNavigationVisible &&
|
|
21
|
+
createPortal(_jsx(MobileAsideNavigation, { className: pageAsideClassnames.mobileNavigation, children: navigation }), pageHeaderContainer), header && _jsx(MobileAsideHeader, { children: header }), _jsx(MobileAsideButton, { content: children }), _jsxs(Wrapper, { className: classNames(className, asideCva({ withHeader: Boolean(header) })), children: [header && (_jsxs(AsideHeader, { children: [header, _jsx(StyledDivider, {})] })), navigation, children] })] }));
|
|
5
22
|
};
|
|
@@ -1 +1,7 @@
|
|
|
1
|
+
import { createUIKitClassname } from '../utils/createUIKitClassname';
|
|
1
2
|
export const PAGE_ASIDE_WIDTH = '320px';
|
|
3
|
+
export const pageAsideClassnames = {
|
|
4
|
+
mobileNavigation: createUIKitClassname('page-aside__mobile-navigation'),
|
|
5
|
+
withHeader: createUIKitClassname('page-aside_with-header'),
|
|
6
|
+
root: createUIKitClassname('page-aside'),
|
|
7
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './usePageAside';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './usePageAside';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './usePageAside';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './usePageAside';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
type UsePageAsideParams = {
|
|
3
|
+
navigation?: ReactNode;
|
|
4
|
+
};
|
|
5
|
+
export declare const usePageAside: ({ navigation }: UsePageAsideParams) => {
|
|
6
|
+
pageHeaderContainer: Element | null;
|
|
7
|
+
isMobileNavigationVisible: false | "" | 0 | 0n | Element | null | undefined;
|
|
8
|
+
};
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { pageHeaderClassnames } from '../../../PageHeader';
|
|
3
|
+
export const usePageAside = ({ navigation }) => {
|
|
4
|
+
const [pageHeaderContainer, setPageHeaderContainer] = useState(null);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
if (!navigation) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
const container = document.querySelector(`.${pageHeaderClassnames.root}`);
|
|
10
|
+
setPageHeaderContainer(container);
|
|
11
|
+
}, []);
|
|
12
|
+
const isMobileNavigationVisible = navigation && pageHeaderContainer;
|
|
13
|
+
return {
|
|
14
|
+
pageHeaderContainer,
|
|
15
|
+
isMobileNavigationVisible,
|
|
16
|
+
};
|
|
17
|
+
};
|
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
export { PAGE_ASIDE_WIDTH } from './constants';
|
|
2
2
|
export * from './PageAside';
|
|
3
|
+
export type { PageAsideProps } from './types';
|
|
4
|
+
export { usePageAside } from './hooks';
|
|
5
|
+
export { MobileAsideButton } from './MobileAsideButton';
|
|
6
|
+
export { pageAsideClassnames } from './constants';
|
|
@@ -3,3 +3,18 @@ export declare const Wrapper: import("../styled").StyledComponent<{
|
|
|
3
3
|
theme?: import("@emotion/react").Theme | undefined;
|
|
4
4
|
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
5
5
|
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, {}>;
|
|
6
|
+
export declare const MobileAsideHeader: import("../styled").StyledComponent<{
|
|
7
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
8
|
+
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
9
|
+
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
10
|
+
export declare const AsideHeader: import("../styled").StyledComponent<{
|
|
11
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
12
|
+
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
13
|
+
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
14
|
+
export declare const StyledDivider: import("../styled").StyledComponent<import("../Divider").DividerProps & {
|
|
15
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
16
|
+
}, {}, {}>;
|
|
17
|
+
export declare const MobileAsideNavigation: import("../styled").StyledComponent<{
|
|
18
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
19
|
+
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
20
|
+
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { Divider } from '../Divider';
|
|
2
|
+
import { pageAsideNavigationClassnames } from '../PageAsideNavigation/constants';
|
|
1
3
|
import { styled } from '../styled';
|
|
2
|
-
import { PAGE_ASIDE_WIDTH } from './constants';
|
|
4
|
+
import { PAGE_ASIDE_WIDTH, pageAsideClassnames } from './constants';
|
|
3
5
|
export const Wrapper = styled.aside `
|
|
4
6
|
overflow: auto;
|
|
5
7
|
grid-column: 2;
|
|
@@ -11,19 +13,46 @@ export const Wrapper = styled.aside `
|
|
|
11
13
|
border-top: 1px solid ${({ theme }) => theme.palette.components.border.default};
|
|
12
14
|
border-left: 1px solid ${({ theme }) => theme.palette.components.border.default};
|
|
13
15
|
|
|
16
|
+
&.${pageAsideClassnames.withHeader} {
|
|
17
|
+
& .${pageAsideNavigationClassnames.root} {
|
|
18
|
+
padding-top: ${({ theme }) => theme.spacing(5)};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
14
22
|
${({ theme }) => theme.breakpoints.down('laptop')} {
|
|
15
23
|
padding: ${({ theme }) => theme.spacing(4)};
|
|
16
24
|
}
|
|
17
25
|
|
|
18
26
|
${({ theme }) => theme.breakpoints.down('sm')} {
|
|
19
|
-
|
|
27
|
+
display: none;
|
|
28
|
+
}
|
|
29
|
+
`;
|
|
30
|
+
export const MobileAsideHeader = styled.div `
|
|
31
|
+
display: none;
|
|
32
|
+
|
|
33
|
+
${({ theme }) => theme.breakpoints.down('sm')} {
|
|
34
|
+
display: block;
|
|
20
35
|
order: 3;
|
|
21
36
|
|
|
22
|
-
|
|
23
|
-
|
|
37
|
+
padding: ${({ theme }) => theme.microSpacing(0, 8, 5)};
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
export const AsideHeader = styled.div `
|
|
41
|
+
position: relative;
|
|
42
|
+
|
|
43
|
+
padding: ${({ theme }) => theme.spacing(1, 0, 4)};
|
|
44
|
+
`;
|
|
45
|
+
export const StyledDivider = styled(Divider) `
|
|
46
|
+
position: absolute;
|
|
47
|
+
bottom: 0;
|
|
48
|
+
left: ${({ theme }) => theme.spacing(-6)};
|
|
24
49
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
50
|
+
width: ${({ theme }) => `calc(100% + ${theme.spacing(12)})`};
|
|
51
|
+
`;
|
|
52
|
+
export const MobileAsideNavigation = styled.div `
|
|
53
|
+
display: none;
|
|
54
|
+
|
|
55
|
+
${({ theme }) => theme.breakpoints.down('sm')} {
|
|
56
|
+
display: block;
|
|
28
57
|
}
|
|
29
58
|
`;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export type PageAsideProps = {
|
|
3
|
+
children?: ReactNode;
|
|
4
|
+
/**
|
|
5
|
+
* Название класса, применяется к корневому компоненту
|
|
6
|
+
*/
|
|
7
|
+
className?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Заголовок боковой панели
|
|
10
|
+
*/
|
|
11
|
+
header?: ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* Компонент для отображения навигации
|
|
14
|
+
* @example
|
|
15
|
+
* <PageAside navigation={
|
|
16
|
+
* <PageAsideNavigation>
|
|
17
|
+
* <PageAsideNavigationItem>
|
|
18
|
+
* Home
|
|
19
|
+
* </PageAsideNavigationItem>
|
|
20
|
+
* </PageAsideNavigation>}
|
|
21
|
+
* />
|
|
22
|
+
*/
|
|
23
|
+
navigation?: ReactNode;
|
|
24
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -22,11 +22,11 @@ export const Wrapper = styled.div `
|
|
|
22
22
|
padding: ${({ theme }) => theme.spacing(4, 0)};
|
|
23
23
|
|
|
24
24
|
:first-of-type {
|
|
25
|
-
padding: ${({ theme }) => theme.spacing(
|
|
25
|
+
padding: ${({ theme }) => theme.spacing(0, 0, 4)};
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
:last-of-type {
|
|
29
|
-
padding: ${({ theme }) => theme.spacing(4, 0,
|
|
29
|
+
padding: ${({ theme }) => theme.spacing(4, 0, 0)};
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
`;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useScrollToActiveElement } from '../useScrollToActiveElement';
|
|
3
|
+
import { classNames } from '../utils/classNames';
|
|
4
|
+
import { pageAsideNavigationClassnames } from './constants';
|
|
5
|
+
import { AddonNavigationWrapper, NavigationList, Wrapper } from './styles';
|
|
6
|
+
export const PageAsideNavigation = ({ addonNavigation, children, className, addonNavigationPosition = 'start', }) => {
|
|
7
|
+
const { containerRef } = useScrollToActiveElement();
|
|
8
|
+
return (_jsxs(Wrapper, { className: classNames(pageAsideNavigationClassnames.root, className), children: [addonNavigationPosition === 'start' && addonNavigation && (_jsx(AddonNavigationWrapper, { children: addonNavigation })), _jsx(NavigationList, { ref: containerRef, children: children }), addonNavigationPosition === 'end' && addonNavigation && (_jsx(AddonNavigationWrapper, { children: addonNavigation }))] }));
|
|
9
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ElementType, type ForwardedRef } from 'react';
|
|
2
|
+
import { type PageAsideNavigationItemProps } from './types';
|
|
3
|
+
export declare const PageAsideNavigationItemInner: <TComponent extends ElementType = "a">({ children, component, icon, onClick, isActive, className, ...props }: PageAsideNavigationItemProps<TComponent>, ref: ForwardedRef<TComponent>) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export declare const PageAsideNavigationItem: <TComponent extends ElementType = "a">(props: {
|
|
5
|
+
children: import("react").ReactNode;
|
|
6
|
+
className?: string | undefined;
|
|
7
|
+
isActive?: boolean | undefined;
|
|
8
|
+
onClick?: (() => void) | undefined;
|
|
9
|
+
icon?: import("react").ReactNode;
|
|
10
|
+
component?: TComponent | undefined;
|
|
11
|
+
} & Omit<import("react").ComponentPropsWithRef<TComponent>, keyof {
|
|
12
|
+
children: import("react").ReactNode;
|
|
13
|
+
className?: string | undefined;
|
|
14
|
+
isActive?: boolean | undefined;
|
|
15
|
+
onClick?: (() => void) | undefined;
|
|
16
|
+
icon?: import("react").ReactNode;
|
|
17
|
+
component?: ElementType | undefined;
|
|
18
|
+
}> & import("react").RefAttributes<TComponent>) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | null;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRefWithGeneric } from '../../forwardRefWithGeneric';
|
|
3
|
+
import { OverflowTypography } from '../../OverflowTypography';
|
|
4
|
+
import { cva } from '../../utils/cva';
|
|
5
|
+
import { pageAsideNavigationItemClassnames } from './constants';
|
|
6
|
+
import { IconWrapper, Wrapper } from './styles';
|
|
7
|
+
const itemCva = cva(pageAsideNavigationItemClassnames.root, {
|
|
8
|
+
variants: {
|
|
9
|
+
isActive: {
|
|
10
|
+
true: pageAsideNavigationItemClassnames.isActive,
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
export const PageAsideNavigationItemInner = ({ children, component, icon, onClick, isActive, className, ...props }, ref) => {
|
|
15
|
+
const Component = component ?? 'a';
|
|
16
|
+
return (_jsx(Wrapper, { className: className, children: _jsxs(Component, { ref: ref, ...props, className: itemCva({ isActive }), onClick: onClick, "aria-selected": isActive, children: [_jsx(IconWrapper, { children: icon }), _jsx(OverflowTypography, { children: children })] }) }));
|
|
17
|
+
};
|
|
18
|
+
export const PageAsideNavigationItem = forwardRefWithGeneric(PageAsideNavigationItemInner);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const Wrapper: import("../../styled").StyledComponent<{
|
|
3
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
4
|
+
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
5
|
+
}, import("react").DetailedHTMLProps<import("react").LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, {}>;
|
|
6
|
+
export declare const IconWrapper: import("../../styled").StyledComponent<{
|
|
7
|
+
theme?: import("@emotion/react").Theme | undefined;
|
|
8
|
+
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
9
|
+
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { svgIconClassnames } from '../../SvgIcon/constants';
|
|
2
|
+
import { styled } from '../../styled';
|
|
3
|
+
import { pageAsideNavigationItemClassnames } from './constants';
|
|
4
|
+
export const Wrapper = styled.li `
|
|
5
|
+
cursor: pointer;
|
|
6
|
+
|
|
7
|
+
height: 44px;
|
|
8
|
+
|
|
9
|
+
& .${pageAsideNavigationItemClassnames.root} {
|
|
10
|
+
cursor: pointer;
|
|
11
|
+
|
|
12
|
+
position: relative;
|
|
13
|
+
|
|
14
|
+
overflow: hidden;
|
|
15
|
+
display: flex;
|
|
16
|
+
gap: ${({ theme }) => theme.spacing(3)};
|
|
17
|
+
align-items: center;
|
|
18
|
+
|
|
19
|
+
width: 100%;
|
|
20
|
+
margin: 0;
|
|
21
|
+
padding: ${({ theme }) => theme.microSpacing(6, 5)};
|
|
22
|
+
|
|
23
|
+
color: ${({ theme }) => theme.palette.grey[800]};
|
|
24
|
+
text-decoration: none;
|
|
25
|
+
|
|
26
|
+
/* Сбрасываем стандартные стили */
|
|
27
|
+
background-color: ${({ theme }) => theme.palette.background.default};
|
|
28
|
+
border: none;
|
|
29
|
+
border-radius: ${({ theme }) => theme.shape.small};
|
|
30
|
+
outline: none;
|
|
31
|
+
|
|
32
|
+
&:visited, &:link {
|
|
33
|
+
color: ${({ theme }) => theme.palette.grey[800]};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&:hover {
|
|
37
|
+
color: ${({ theme }) => theme.palette.primary[800]};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&:active {
|
|
41
|
+
color: ${({ theme }) => theme.palette.primary[900]};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
& .${pageAsideNavigationItemClassnames.isActive} {
|
|
46
|
+
background-color: ${({ theme }) => theme.palette.primary[100]};
|
|
47
|
+
|
|
48
|
+
&::before {
|
|
49
|
+
content: '';
|
|
50
|
+
|
|
51
|
+
position: absolute;
|
|
52
|
+
inset: 0;
|
|
53
|
+
|
|
54
|
+
width: 10px;
|
|
55
|
+
|
|
56
|
+
border-left: 3px solid ${({ theme }) => theme.palette.primary[800]};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
${({ theme }) => theme.breakpoints.down('sm')} {
|
|
62
|
+
height: 40px;
|
|
63
|
+
-webkit-tap-highlight-color: transparent;
|
|
64
|
+
|
|
65
|
+
& .${pageAsideNavigationItemClassnames.root} {
|
|
66
|
+
box-sizing: border-box;
|
|
67
|
+
height: inherit;
|
|
68
|
+
padding: ${({ theme }) => theme.microSpacing(5, 6)};
|
|
69
|
+
|
|
70
|
+
border: 1px solid ${({ theme }) => theme.palette.grey[400]};
|
|
71
|
+
border-radius: ${({ theme }) => theme.shape.medium};
|
|
72
|
+
|
|
73
|
+
transition: ${({ theme }) => theme.transitions.create(['border-color', 'background-color'], {
|
|
74
|
+
duration: theme.transitions.duration.shortest,
|
|
75
|
+
})};
|
|
76
|
+
|
|
77
|
+
&:hover {
|
|
78
|
+
color: ${({ theme }) => theme.palette.grey[800]};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
&:active {
|
|
82
|
+
color: ${({ theme }) => theme.palette.grey[800]};
|
|
83
|
+
|
|
84
|
+
border-color: ${({ theme }) => theme.palette.grey[800]};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
& .${pageAsideNavigationItemClassnames.isActive} {
|
|
89
|
+
background-color: ${({ theme }) => theme.palette.grey[100]};
|
|
90
|
+
border-color: ${({ theme }) => theme.palette.grey[800]};
|
|
91
|
+
|
|
92
|
+
&::before {
|
|
93
|
+
display: none;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
&:active {
|
|
97
|
+
border-color: ${({ theme }) => theme.palette.grey[400]};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
`;
|
|
102
|
+
export const IconWrapper = styled.div `
|
|
103
|
+
display: flex;
|
|
104
|
+
|
|
105
|
+
& .${svgIconClassnames.root} {
|
|
106
|
+
width: 20px;
|
|
107
|
+
height: 20px;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
${({ theme }) => theme.breakpoints.down('sm')} {
|
|
111
|
+
display: none;
|
|
112
|
+
}
|
|
113
|
+
`;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef, type ElementType, type ReactNode } from 'react';
|
|
2
|
+
type PageAsideNavigationItemOwnProps<TComponent extends ElementType> = {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
/**
|
|
5
|
+
* Название класса, применяется к корневому компоненту
|
|
6
|
+
*/
|
|
7
|
+
className?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Флаг активности элемента
|
|
10
|
+
*/
|
|
11
|
+
isActive?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Функция вызываемая при клике на элемент
|
|
14
|
+
*/
|
|
15
|
+
onClick?: () => void;
|
|
16
|
+
/**
|
|
17
|
+
* Иконка элемента
|
|
18
|
+
*/
|
|
19
|
+
icon?: ReactNode;
|
|
20
|
+
/**
|
|
21
|
+
* Тип элемента
|
|
22
|
+
*/
|
|
23
|
+
component?: TComponent;
|
|
24
|
+
};
|
|
25
|
+
export type PageAsideNavigationItemProps<TComponent extends ElementType> = PageAsideNavigationItemOwnProps<TComponent> & Omit<ComponentPropsWithRef<TComponent>, keyof PageAsideNavigationItemOwnProps<ElementType>>;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|