@astral/ui 4.72.0 → 4.73.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.
Files changed (146) hide show
  1. package/components/PageAside/MobileAsideButton/MobileAsideButton.d.ts +6 -0
  2. package/components/PageAside/MobileAsideButton/MobileAsideButton.js +13 -0
  3. package/components/PageAside/MobileAsideButton/index.d.ts +1 -0
  4. package/components/PageAside/MobileAsideButton/index.js +1 -0
  5. package/components/PageAside/MobileAsideButton/styles.d.ts +22 -0
  6. package/components/PageAside/MobileAsideButton/styles.js +31 -0
  7. package/components/PageAside/PageAside.d.ts +2 -9
  8. package/components/PageAside/PageAside.js +21 -4
  9. package/components/PageAside/constants.d.ts +5 -0
  10. package/components/PageAside/constants.js +6 -0
  11. package/components/PageAside/hooks/index.d.ts +1 -0
  12. package/components/PageAside/hooks/index.js +1 -0
  13. package/components/PageAside/hooks/usePageAside/index.d.ts +1 -0
  14. package/components/PageAside/hooks/usePageAside/index.js +1 -0
  15. package/components/PageAside/hooks/usePageAside/usePageAside.d.ts +9 -0
  16. package/components/PageAside/hooks/usePageAside/usePageAside.js +17 -0
  17. package/components/PageAside/index.d.ts +4 -0
  18. package/components/PageAside/index.js +3 -0
  19. package/components/PageAside/public.d.ts +3 -1
  20. package/components/PageAside/public.js +1 -0
  21. package/components/PageAside/styles.d.ts +15 -0
  22. package/components/PageAside/styles.js +36 -7
  23. package/components/PageAside/types.d.ts +24 -0
  24. package/components/PageAside/types.js +1 -0
  25. package/components/PageAsideBlock/styles.js +2 -2
  26. package/components/PageAsideNavigation/PageAsideNavigation.d.ts +2 -0
  27. package/components/PageAsideNavigation/PageAsideNavigation.js +9 -0
  28. package/components/PageAsideNavigation/PageAsideNavigationItem/PageAsideNavigationItem.d.ts +18 -0
  29. package/components/PageAsideNavigation/PageAsideNavigationItem/PageAsideNavigationItem.js +18 -0
  30. package/components/PageAsideNavigation/PageAsideNavigationItem/constants.d.ts +4 -0
  31. package/components/PageAsideNavigation/PageAsideNavigationItem/constants.js +5 -0
  32. package/components/PageAsideNavigation/PageAsideNavigationItem/index.d.ts +3 -0
  33. package/components/PageAsideNavigation/PageAsideNavigationItem/index.js +2 -0
  34. package/components/PageAsideNavigation/PageAsideNavigationItem/styles.d.ts +9 -0
  35. package/components/PageAsideNavigation/PageAsideNavigationItem/styles.js +113 -0
  36. package/components/PageAsideNavigation/PageAsideNavigationItem/types.d.ts +26 -0
  37. package/components/PageAsideNavigation/PageAsideNavigationItem/types.js +1 -0
  38. package/components/PageAsideNavigation/constants.d.ts +3 -0
  39. package/components/PageAsideNavigation/constants.js +4 -0
  40. package/components/PageAsideNavigation/index.d.ts +4 -0
  41. package/components/PageAsideNavigation/index.js +3 -0
  42. package/components/PageAsideNavigation/public.d.ts +3 -0
  43. package/components/PageAsideNavigation/public.js +3 -0
  44. package/components/PageAsideNavigation/styles.d.ts +13 -0
  45. package/components/PageAsideNavigation/styles.js +48 -0
  46. package/components/PageAsideNavigation/types.d.ts +17 -0
  47. package/components/PageAsideNavigation/types.js +1 -0
  48. package/components/PageHeader/HeaderContent/styles.js +0 -2
  49. package/components/PageHeader/PageHeader.js +11 -1
  50. package/components/PageHeader/styles.js +7 -5
  51. package/components/PagePinnableAside/PagePinnableAside.d.ts +1 -1
  52. package/components/PagePinnableAside/PagePinnableAside.js +16 -4
  53. package/components/PagePinnableAside/constants.d.ts +2 -0
  54. package/components/PagePinnableAside/constants.js +2 -0
  55. package/components/PagePinnableAside/styles.js +8 -11
  56. package/components/PagePinnableAside/types.d.ts +17 -1
  57. package/components/PagePinnableAside/useLogic/useLogic.d.ts +4 -2
  58. package/components/PagePinnableAside/useLogic/useLogic.js +10 -2
  59. package/components/Tabs/Tabs.js +2 -2
  60. package/components/Tabs/hooks/index.d.ts +1 -1
  61. package/components/Tabs/hooks/index.js +1 -1
  62. package/components/useScrollToActiveElement/index.d.ts +1 -0
  63. package/components/useScrollToActiveElement/index.js +1 -0
  64. package/components/useScrollToActiveElement/useScrollToActiveElement.d.ts +9 -0
  65. package/components/useScrollToActiveElement/useScrollToActiveElement.js +29 -0
  66. package/node/components/PageAside/MobileAsideButton/MobileAsideButton.d.ts +6 -0
  67. package/node/components/PageAside/MobileAsideButton/MobileAsideButton.js +17 -0
  68. package/node/components/PageAside/MobileAsideButton/index.d.ts +1 -0
  69. package/node/components/PageAside/MobileAsideButton/index.js +5 -0
  70. package/node/components/PageAside/MobileAsideButton/styles.d.ts +22 -0
  71. package/node/components/PageAside/MobileAsideButton/styles.js +34 -0
  72. package/node/components/PageAside/PageAside.d.ts +2 -9
  73. package/node/components/PageAside/PageAside.js +19 -2
  74. package/node/components/PageAside/constants.d.ts +5 -0
  75. package/node/components/PageAside/constants.js +7 -1
  76. package/node/components/PageAside/hooks/index.d.ts +1 -0
  77. package/node/components/{Tabs/hooks/useScrollToActiveTab → PageAside/hooks}/index.js +1 -1
  78. package/node/components/PageAside/hooks/usePageAside/index.d.ts +1 -0
  79. package/node/components/PageAside/hooks/usePageAside/index.js +17 -0
  80. package/node/components/PageAside/hooks/usePageAside/usePageAside.d.ts +9 -0
  81. package/node/components/PageAside/hooks/usePageAside/usePageAside.js +21 -0
  82. package/node/components/PageAside/index.d.ts +4 -0
  83. package/node/components/PageAside/index.js +7 -1
  84. package/node/components/PageAside/public.d.ts +3 -1
  85. package/node/components/PageAside/public.js +3 -1
  86. package/node/components/PageAside/styles.d.ts +15 -0
  87. package/node/components/PageAside/styles.js +38 -9
  88. package/node/components/PageAside/types.d.ts +24 -0
  89. package/node/components/PageAside/types.js +2 -0
  90. package/node/components/PageAsideBlock/styles.js +2 -2
  91. package/node/components/PageAsideNavigation/PageAsideNavigation.d.ts +2 -0
  92. package/node/components/PageAsideNavigation/PageAsideNavigation.js +13 -0
  93. package/node/components/PageAsideNavigation/PageAsideNavigationItem/PageAsideNavigationItem.d.ts +18 -0
  94. package/node/components/PageAsideNavigation/PageAsideNavigationItem/PageAsideNavigationItem.js +22 -0
  95. package/node/components/PageAsideNavigation/PageAsideNavigationItem/constants.d.ts +4 -0
  96. package/node/components/PageAsideNavigation/PageAsideNavigationItem/constants.js +8 -0
  97. package/node/components/PageAsideNavigation/PageAsideNavigationItem/index.d.ts +3 -0
  98. package/node/components/PageAsideNavigation/PageAsideNavigationItem/index.js +7 -0
  99. package/node/components/PageAsideNavigation/PageAsideNavigationItem/styles.d.ts +9 -0
  100. package/node/components/PageAsideNavigation/PageAsideNavigationItem/styles.js +116 -0
  101. package/node/components/PageAsideNavigation/PageAsideNavigationItem/types.d.ts +26 -0
  102. package/node/components/PageAsideNavigation/PageAsideNavigationItem/types.js +2 -0
  103. package/node/components/PageAsideNavigation/constants.d.ts +3 -0
  104. package/node/components/PageAsideNavigation/constants.js +7 -0
  105. package/node/components/PageAsideNavigation/index.d.ts +4 -0
  106. package/node/components/PageAsideNavigation/index.js +10 -0
  107. package/node/components/PageAsideNavigation/public.d.ts +3 -0
  108. package/node/components/PageAsideNavigation/public.js +10 -0
  109. package/node/components/PageAsideNavigation/styles.d.ts +13 -0
  110. package/node/components/PageAsideNavigation/styles.js +51 -0
  111. package/node/components/PageAsideNavigation/types.d.ts +17 -0
  112. package/node/components/PageAsideNavigation/types.js +2 -0
  113. package/node/components/PageHeader/HeaderContent/styles.js +0 -2
  114. package/node/components/PageHeader/PageHeader.js +11 -1
  115. package/node/components/PageHeader/styles.js +18 -16
  116. package/node/components/PagePinnableAside/PagePinnableAside.d.ts +1 -1
  117. package/node/components/PagePinnableAside/PagePinnableAside.js +16 -4
  118. package/node/components/PagePinnableAside/constants.d.ts +2 -0
  119. package/node/components/PagePinnableAside/constants.js +2 -0
  120. package/node/components/PagePinnableAside/styles.js +10 -13
  121. package/node/components/PagePinnableAside/types.d.ts +17 -1
  122. package/node/components/PagePinnableAside/useLogic/useLogic.d.ts +4 -2
  123. package/node/components/PagePinnableAside/useLogic/useLogic.js +10 -2
  124. package/node/components/Tabs/Tabs.js +2 -2
  125. package/node/components/Tabs/hooks/index.d.ts +1 -1
  126. package/node/components/Tabs/hooks/index.js +1 -1
  127. package/node/components/useScrollToActiveElement/index.d.ts +1 -0
  128. package/node/components/useScrollToActiveElement/index.js +17 -0
  129. package/node/components/useScrollToActiveElement/useScrollToActiveElement.d.ts +9 -0
  130. package/node/components/useScrollToActiveElement/useScrollToActiveElement.js +33 -0
  131. package/package.json +1 -1
  132. package/components/DashboardLayout/Sidebar/MenuSidebarButton/types.d.ts +0 -0
  133. package/components/DashboardLayout/Sidebar/MenuSidebarButton/types.js +0 -1
  134. package/components/DashboardLayout/Sidebar/Sidebar.d.ts +0 -0
  135. package/components/DashboardLayout/Sidebar/Sidebar.js +0 -1
  136. package/components/Tabs/hooks/useScrollToActiveTab/index.d.ts +0 -1
  137. package/components/Tabs/hooks/useScrollToActiveTab/index.js +0 -1
  138. package/components/Tabs/hooks/useScrollToActiveTab/useScrollToActiveTab.d.ts +0 -4
  139. package/components/Tabs/hooks/useScrollToActiveTab/useScrollToActiveTab.js +0 -24
  140. package/node/components/DashboardLayout/Sidebar/MenuSidebarButton/types.d.ts +0 -0
  141. package/node/components/DashboardLayout/Sidebar/MenuSidebarButton/types.js +0 -1
  142. package/node/components/DashboardLayout/Sidebar/Sidebar.d.ts +0 -0
  143. package/node/components/DashboardLayout/Sidebar/Sidebar.js +0 -1
  144. package/node/components/Tabs/hooks/useScrollToActiveTab/index.d.ts +0 -1
  145. package/node/components/Tabs/hooks/useScrollToActiveTab/useScrollToActiveTab.d.ts +0 -4
  146. package/node/components/Tabs/hooks/useScrollToActiveTab/useScrollToActiveTab.js +0 -28
@@ -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 {};
@@ -0,0 +1,3 @@
1
+ export declare const pageAsideNavigationClassnames: {
2
+ root: string;
3
+ };
@@ -0,0 +1,4 @@
1
+ import { createUIKitClassname } from '../utils/createUIKitClassname';
2
+ export const pageAsideNavigationClassnames = {
3
+ root: createUIKitClassname('page-aside-navigation'),
4
+ };
@@ -0,0 +1,4 @@
1
+ export type { PageAsideNavigationProps } from './types';
2
+ export { PageAsideNavigation } from './PageAsideNavigation';
3
+ export { PageAsideNavigationItem, type PageAsideNavigationItemProps, pageAsideNavigationItemClassnames, } from './PageAsideNavigationItem';
4
+ export { pageAsideNavigationClassnames } from './constants';
@@ -0,0 +1,3 @@
1
+ export { PageAsideNavigation } from './PageAsideNavigation';
2
+ export { PageAsideNavigationItem, pageAsideNavigationItemClassnames, } from './PageAsideNavigationItem';
3
+ export { pageAsideNavigationClassnames } from './constants';
@@ -0,0 +1,3 @@
1
+ export { pageAsideNavigationClassnames } from './constants';
2
+ export { PageAsideNavigation } from './PageAsideNavigation';
3
+ export { PageAsideNavigationItem, type PageAsideNavigationItemProps, pageAsideNavigationItemClassnames, } from './PageAsideNavigationItem';
@@ -0,0 +1,3 @@
1
+ export { pageAsideNavigationClassnames } from './constants';
2
+ export { PageAsideNavigation } from './PageAsideNavigation';
3
+ export { PageAsideNavigationItem, pageAsideNavigationItemClassnames, } from './PageAsideNavigationItem';
@@ -0,0 +1,13 @@
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").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
6
+ export declare const NavigationList: 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<HTMLUListElement>, HTMLUListElement>, {}>;
10
+ export declare const AddonNavigationWrapper: 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>, {}>;