@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.
Files changed (150) hide show
  1. package/components/DashboardLayout/Header/styles.js +21 -1
  2. package/components/MenuOrganization/OrganizationButton/styles.js +3 -0
  3. package/components/PageAside/MobileAsideButton/MobileAsideButton.d.ts +6 -0
  4. package/components/PageAside/MobileAsideButton/MobileAsideButton.js +13 -0
  5. package/components/PageAside/MobileAsideButton/index.d.ts +1 -0
  6. package/components/PageAside/MobileAsideButton/index.js +1 -0
  7. package/components/PageAside/MobileAsideButton/styles.d.ts +22 -0
  8. package/components/PageAside/MobileAsideButton/styles.js +31 -0
  9. package/components/PageAside/PageAside.d.ts +2 -9
  10. package/components/PageAside/PageAside.js +21 -4
  11. package/components/PageAside/constants.d.ts +5 -0
  12. package/components/PageAside/constants.js +6 -0
  13. package/components/PageAside/hooks/index.d.ts +1 -0
  14. package/components/PageAside/hooks/index.js +1 -0
  15. package/components/PageAside/hooks/usePageAside/index.d.ts +1 -0
  16. package/components/PageAside/hooks/usePageAside/index.js +1 -0
  17. package/components/PageAside/hooks/usePageAside/usePageAside.d.ts +9 -0
  18. package/components/PageAside/hooks/usePageAside/usePageAside.js +17 -0
  19. package/components/PageAside/index.d.ts +4 -0
  20. package/components/PageAside/index.js +3 -0
  21. package/components/PageAside/public.d.ts +3 -1
  22. package/components/PageAside/public.js +1 -0
  23. package/components/PageAside/styles.d.ts +15 -0
  24. package/components/PageAside/styles.js +36 -7
  25. package/components/PageAside/types.d.ts +24 -0
  26. package/components/PageAside/types.js +1 -0
  27. package/components/PageAsideBlock/styles.js +2 -2
  28. package/components/PageAsideNavigation/PageAsideNavigation.d.ts +2 -0
  29. package/components/PageAsideNavigation/PageAsideNavigation.js +9 -0
  30. package/components/PageAsideNavigation/PageAsideNavigationItem/PageAsideNavigationItem.d.ts +18 -0
  31. package/components/PageAsideNavigation/PageAsideNavigationItem/PageAsideNavigationItem.js +18 -0
  32. package/components/PageAsideNavigation/PageAsideNavigationItem/constants.d.ts +4 -0
  33. package/components/PageAsideNavigation/PageAsideNavigationItem/constants.js +5 -0
  34. package/components/PageAsideNavigation/PageAsideNavigationItem/index.d.ts +3 -0
  35. package/components/PageAsideNavigation/PageAsideNavigationItem/index.js +2 -0
  36. package/components/PageAsideNavigation/PageAsideNavigationItem/styles.d.ts +9 -0
  37. package/components/PageAsideNavigation/PageAsideNavigationItem/styles.js +113 -0
  38. package/components/PageAsideNavigation/PageAsideNavigationItem/types.d.ts +26 -0
  39. package/components/PageAsideNavigation/PageAsideNavigationItem/types.js +1 -0
  40. package/components/PageAsideNavigation/constants.d.ts +3 -0
  41. package/components/PageAsideNavigation/constants.js +4 -0
  42. package/components/PageAsideNavigation/index.d.ts +4 -0
  43. package/components/PageAsideNavigation/index.js +3 -0
  44. package/components/PageAsideNavigation/public.d.ts +3 -0
  45. package/components/PageAsideNavigation/public.js +3 -0
  46. package/components/PageAsideNavigation/styles.d.ts +13 -0
  47. package/components/PageAsideNavigation/styles.js +48 -0
  48. package/components/PageAsideNavigation/types.d.ts +17 -0
  49. package/components/PageAsideNavigation/types.js +1 -0
  50. package/components/PageHeader/HeaderContent/styles.js +0 -2
  51. package/components/PageHeader/PageHeader.js +11 -1
  52. package/components/PageHeader/styles.js +7 -5
  53. package/components/PagePinnableAside/PagePinnableAside.d.ts +1 -1
  54. package/components/PagePinnableAside/PagePinnableAside.js +16 -4
  55. package/components/PagePinnableAside/constants.d.ts +2 -0
  56. package/components/PagePinnableAside/constants.js +2 -0
  57. package/components/PagePinnableAside/styles.js +8 -11
  58. package/components/PagePinnableAside/types.d.ts +17 -1
  59. package/components/PagePinnableAside/useLogic/useLogic.d.ts +4 -2
  60. package/components/PagePinnableAside/useLogic/useLogic.js +10 -2
  61. package/components/Tabs/Tabs.js +2 -2
  62. package/components/Tabs/hooks/index.d.ts +1 -1
  63. package/components/Tabs/hooks/index.js +1 -1
  64. package/components/useScrollToActiveElement/index.d.ts +1 -0
  65. package/components/useScrollToActiveElement/index.js +1 -0
  66. package/components/useScrollToActiveElement/useScrollToActiveElement.d.ts +9 -0
  67. package/components/useScrollToActiveElement/useScrollToActiveElement.js +29 -0
  68. package/node/components/DashboardLayout/Header/styles.js +21 -1
  69. package/node/components/MenuOrganization/OrganizationButton/styles.js +3 -0
  70. package/node/components/PageAside/MobileAsideButton/MobileAsideButton.d.ts +6 -0
  71. package/node/components/PageAside/MobileAsideButton/MobileAsideButton.js +17 -0
  72. package/node/components/PageAside/MobileAsideButton/index.d.ts +1 -0
  73. package/node/components/PageAside/MobileAsideButton/index.js +5 -0
  74. package/node/components/PageAside/MobileAsideButton/styles.d.ts +22 -0
  75. package/node/components/PageAside/MobileAsideButton/styles.js +34 -0
  76. package/node/components/PageAside/PageAside.d.ts +2 -9
  77. package/node/components/PageAside/PageAside.js +19 -2
  78. package/node/components/PageAside/constants.d.ts +5 -0
  79. package/node/components/PageAside/constants.js +7 -1
  80. package/node/components/PageAside/hooks/index.d.ts +1 -0
  81. package/node/components/{Tabs/hooks/useScrollToActiveTab → PageAside/hooks}/index.js +1 -1
  82. package/node/components/PageAside/hooks/usePageAside/index.d.ts +1 -0
  83. package/node/components/PageAside/hooks/usePageAside/index.js +17 -0
  84. package/node/components/PageAside/hooks/usePageAside/usePageAside.d.ts +9 -0
  85. package/node/components/PageAside/hooks/usePageAside/usePageAside.js +21 -0
  86. package/node/components/PageAside/index.d.ts +4 -0
  87. package/node/components/PageAside/index.js +7 -1
  88. package/node/components/PageAside/public.d.ts +3 -1
  89. package/node/components/PageAside/public.js +3 -1
  90. package/node/components/PageAside/styles.d.ts +15 -0
  91. package/node/components/PageAside/styles.js +38 -9
  92. package/node/components/PageAside/types.d.ts +24 -0
  93. package/node/components/PageAside/types.js +2 -0
  94. package/node/components/PageAsideBlock/styles.js +2 -2
  95. package/node/components/PageAsideNavigation/PageAsideNavigation.d.ts +2 -0
  96. package/node/components/PageAsideNavigation/PageAsideNavigation.js +13 -0
  97. package/node/components/PageAsideNavigation/PageAsideNavigationItem/PageAsideNavigationItem.d.ts +18 -0
  98. package/node/components/PageAsideNavigation/PageAsideNavigationItem/PageAsideNavigationItem.js +22 -0
  99. package/node/components/PageAsideNavigation/PageAsideNavigationItem/constants.d.ts +4 -0
  100. package/node/components/PageAsideNavigation/PageAsideNavigationItem/constants.js +8 -0
  101. package/node/components/PageAsideNavigation/PageAsideNavigationItem/index.d.ts +3 -0
  102. package/node/components/PageAsideNavigation/PageAsideNavigationItem/index.js +7 -0
  103. package/node/components/PageAsideNavigation/PageAsideNavigationItem/styles.d.ts +9 -0
  104. package/node/components/PageAsideNavigation/PageAsideNavigationItem/styles.js +116 -0
  105. package/node/components/PageAsideNavigation/PageAsideNavigationItem/types.d.ts +26 -0
  106. package/node/components/PageAsideNavigation/PageAsideNavigationItem/types.js +2 -0
  107. package/node/components/PageAsideNavigation/constants.d.ts +3 -0
  108. package/node/components/PageAsideNavigation/constants.js +7 -0
  109. package/node/components/PageAsideNavigation/index.d.ts +4 -0
  110. package/node/components/PageAsideNavigation/index.js +10 -0
  111. package/node/components/PageAsideNavigation/public.d.ts +3 -0
  112. package/node/components/PageAsideNavigation/public.js +10 -0
  113. package/node/components/PageAsideNavigation/styles.d.ts +13 -0
  114. package/node/components/PageAsideNavigation/styles.js +51 -0
  115. package/node/components/PageAsideNavigation/types.d.ts +17 -0
  116. package/node/components/PageAsideNavigation/types.js +2 -0
  117. package/node/components/PageHeader/HeaderContent/styles.js +0 -2
  118. package/node/components/PageHeader/PageHeader.js +11 -1
  119. package/node/components/PageHeader/styles.js +18 -16
  120. package/node/components/PagePinnableAside/PagePinnableAside.d.ts +1 -1
  121. package/node/components/PagePinnableAside/PagePinnableAside.js +16 -4
  122. package/node/components/PagePinnableAside/constants.d.ts +2 -0
  123. package/node/components/PagePinnableAside/constants.js +2 -0
  124. package/node/components/PagePinnableAside/styles.js +10 -13
  125. package/node/components/PagePinnableAside/types.d.ts +17 -1
  126. package/node/components/PagePinnableAside/useLogic/useLogic.d.ts +4 -2
  127. package/node/components/PagePinnableAside/useLogic/useLogic.js +10 -2
  128. package/node/components/Tabs/Tabs.js +2 -2
  129. package/node/components/Tabs/hooks/index.d.ts +1 -1
  130. package/node/components/Tabs/hooks/index.js +1 -1
  131. package/node/components/useScrollToActiveElement/index.d.ts +1 -0
  132. package/node/components/useScrollToActiveElement/index.js +17 -0
  133. package/node/components/useScrollToActiveElement/useScrollToActiveElement.d.ts +9 -0
  134. package/node/components/useScrollToActiveElement/useScrollToActiveElement.js +33 -0
  135. package/package.json +1 -1
  136. package/components/DashboardLayout/Sidebar/MenuSidebarButton/types.d.ts +0 -0
  137. package/components/DashboardLayout/Sidebar/MenuSidebarButton/types.js +0 -1
  138. package/components/DashboardLayout/Sidebar/Sidebar.d.ts +0 -0
  139. package/components/DashboardLayout/Sidebar/Sidebar.js +0 -1
  140. package/components/Tabs/hooks/useScrollToActiveTab/index.d.ts +0 -1
  141. package/components/Tabs/hooks/useScrollToActiveTab/index.js +0 -1
  142. package/components/Tabs/hooks/useScrollToActiveTab/useScrollToActiveTab.d.ts +0 -4
  143. package/components/Tabs/hooks/useScrollToActiveTab/useScrollToActiveTab.js +0 -24
  144. package/node/components/DashboardLayout/Sidebar/MenuSidebarButton/types.d.ts +0 -0
  145. package/node/components/DashboardLayout/Sidebar/MenuSidebarButton/types.js +0 -1
  146. package/node/components/DashboardLayout/Sidebar/Sidebar.d.ts +0 -0
  147. package/node/components/DashboardLayout/Sidebar/Sidebar.js +0 -1
  148. package/node/components/Tabs/hooks/useScrollToActiveTab/index.d.ts +0 -1
  149. package/node/components/Tabs/hooks/useScrollToActiveTab/useScrollToActiveTab.d.ts +0 -4
  150. 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-grow: 1;
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,6 @@
1
+ import { type ReactNode } from 'react';
2
+ type MobileAsideButtonProps = {
3
+ content?: ReactNode;
4
+ };
5
+ export declare const MobileAsideButton: ({ content }: MobileAsideButtonProps) => import("react/jsx-runtime").JSX.Element | null;
6
+ export {};
@@ -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 ReactNode } from 'react';
2
- export type PageAsideProps = {
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 { Wrapper } from './styles';
3
- export const PageAside = ({ children, className }) => {
4
- return _jsx(Wrapper, { className: className, children: children });
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,6 @@
1
1
  export declare const PAGE_ASIDE_WIDTH = "320px";
2
+ export declare const pageAsideClassnames: {
3
+ mobileNavigation: string;
4
+ withHeader: string;
5
+ root: string;
6
+ };
@@ -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';
@@ -1,2 +1,5 @@
1
1
  export { PAGE_ASIDE_WIDTH } from './constants';
2
2
  export * from './PageAside';
3
+ export { usePageAside } from './hooks';
4
+ export { MobileAsideButton } from './MobileAsideButton';
5
+ export { pageAsideClassnames } from './constants';
@@ -1 +1,3 @@
1
- export { PageAside, type PageAsideProps } from './PageAside';
1
+ export { pageAsideClassnames } from './constants';
2
+ export { PageAside } from './PageAside';
3
+ export type { PageAsideProps } from './types';
@@ -1 +1,2 @@
1
+ export { pageAsideClassnames } from './constants';
1
2
  export { PageAside } from './PageAside';
@@ -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
- overflow: unset;
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
- width: unset;
23
- margin: ${({ theme }) => theme.spacing(0, 4, 4)};
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
- background-color: ${({ theme }) => theme.palette.background.default};
26
- border: 1px solid ${({ theme }) => theme.palette.components.border.default};
27
- border-radius: ${({ theme }) => theme.shape.medium};
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(3, 0, 4)};
25
+ padding: ${({ theme }) => theme.spacing(0, 0, 4)};
26
26
  }
27
27
 
28
28
  :last-of-type {
29
- padding: ${({ theme }) => theme.spacing(4, 0, 3)};
29
+ padding: ${({ theme }) => theme.spacing(4, 0, 0)};
30
30
  }
31
31
  }
32
32
  `;
@@ -0,0 +1,2 @@
1
+ import { type PageAsideNavigationProps } from './types';
2
+ export declare const PageAsideNavigation: ({ addonNavigation, children, className, addonNavigationPosition, }: PageAsideNavigationProps) => import("react/jsx-runtime").JSX.Element;
@@ -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,4 @@
1
+ export declare const pageAsideNavigationItemClassnames: {
2
+ root: string;
3
+ isActive: string;
4
+ };
@@ -0,0 +1,5 @@
1
+ import { createUIKitClassname } from '../../utils/createUIKitClassname';
2
+ export const pageAsideNavigationItemClassnames = {
3
+ root: createUIKitClassname('page-aside-navigation__item'),
4
+ isActive: createUIKitClassname('page-aside-navigation__item_active'),
5
+ };
@@ -0,0 +1,3 @@
1
+ export { PageAsideNavigationItem } from './PageAsideNavigationItem';
2
+ export { pageAsideNavigationItemClassnames } from './constants';
3
+ export type { PageAsideNavigationItemProps } from './types';
@@ -0,0 +1,2 @@
1
+ export { PageAsideNavigationItem } from './PageAsideNavigationItem';
2
+ export { pageAsideNavigationItemClassnames } from './constants';
@@ -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 {};