@astral/ui 4.75.0 → 4.76.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 (103) hide show
  1. package/components/PageContent/PageContentHeader/Description/Description.js +2 -1
  2. package/components/PageContent/PageContentHeader/Description/styles.d.ts +5 -0
  3. package/components/PageContent/PageContentHeader/Description/styles.js +10 -0
  4. package/components/PageContent/PageContentHeader/PageContentHeader.js +10 -1
  5. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/MobilePageContentHeaderActions.d.ts +3 -0
  6. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/MobilePageContentHeaderActions.js +12 -0
  7. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/index.d.ts +1 -0
  8. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/index.js +1 -0
  9. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/styles.d.ts +38 -0
  10. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/styles.js +41 -0
  11. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/index.d.ts +1 -0
  12. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/index.js +1 -0
  13. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/useLogic.d.ts +14 -0
  14. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/useLogic.js +23 -0
  15. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/utils/composeCloseIntoActions/composeCloseIntoActions.d.ts +14 -0
  16. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/utils/composeCloseIntoActions/composeCloseIntoActions.js +18 -0
  17. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/utils/composeCloseIntoActions/index.d.ts +1 -0
  18. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/utils/composeCloseIntoActions/index.js +1 -0
  19. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/utils/index.d.ts +1 -0
  20. package/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/utils/index.js +1 -0
  21. package/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActions.d.ts +2 -3
  22. package/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActions.js +8 -3
  23. package/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActionsSkeleton/PageContentHeaderActionsSkeleton.d.ts +1 -0
  24. package/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActionsSkeleton/PageContentHeaderActionsSkeleton.js +5 -0
  25. package/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActionsSkeleton/index.d.ts +1 -0
  26. package/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActionsSkeleton/index.js +1 -0
  27. package/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActionsSkeleton/styles.d.ts +8 -0
  28. package/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActionsSkeleton/styles.js +13 -0
  29. package/components/PageContent/PageContentHeader/PageContentHeaderActions/index.d.ts +2 -0
  30. package/components/PageContent/PageContentHeader/PageContentHeaderActions/index.js +2 -0
  31. package/components/PageContent/PageContentHeader/PageContentHeaderActions/types.d.ts +3 -0
  32. package/components/PageContent/PageContentHeader/PageContentHeaderActions/types.js +1 -0
  33. package/components/PageContent/PageContentHeader/PageContentHeaderContext/PageContentHeaderContext.d.ts +9 -0
  34. package/components/PageContent/PageContentHeader/PageContentHeaderContext/PageContentHeaderContext.js +8 -0
  35. package/components/PageContent/PageContentHeader/PageContentHeaderContext/PageContentHeaderProvider/PageContentHeaderProvider.d.ts +7 -0
  36. package/components/PageContent/PageContentHeader/PageContentHeaderContext/PageContentHeaderProvider/PageContentHeaderProvider.js +7 -0
  37. package/components/PageContent/PageContentHeader/PageContentHeaderContext/PageContentHeaderProvider/index.d.ts +1 -0
  38. package/components/PageContent/PageContentHeader/PageContentHeaderContext/PageContentHeaderProvider/index.js +1 -0
  39. package/components/PageContent/PageContentHeader/PageContentHeaderContext/index.d.ts +2 -0
  40. package/components/PageContent/PageContentHeader/PageContentHeaderContext/index.js +2 -0
  41. package/components/PageContent/PageContentHeader/Title/Title.js +2 -3
  42. package/components/PageContent/PageContentHeader/Title/styles.d.ts +7 -0
  43. package/components/PageContent/PageContentHeader/Title/styles.js +9 -0
  44. package/components/PageContent/PageContentHeader/styles.js +8 -6
  45. package/components/PageContent/PageContentHeader/useLogic/index.d.ts +1 -0
  46. package/components/PageContent/PageContentHeader/useLogic/index.js +1 -0
  47. package/components/PageContent/PageContentHeader/useLogic/useLogic.d.ts +4 -0
  48. package/components/PageContent/PageContentHeader/useLogic/useLogic.js +15 -0
  49. package/components/PageContent/public.d.ts +1 -1
  50. package/components/PageContent/public.js +1 -1
  51. package/components/PageContent/styles.js +4 -0
  52. package/node/components/PageContent/PageContentHeader/Description/Description.js +2 -1
  53. package/node/components/PageContent/PageContentHeader/Description/styles.d.ts +5 -0
  54. package/node/components/PageContent/PageContentHeader/Description/styles.js +13 -0
  55. package/node/components/PageContent/PageContentHeader/PageContentHeader.js +10 -1
  56. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/MobilePageContentHeaderActions.d.ts +3 -0
  57. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/MobilePageContentHeaderActions.js +16 -0
  58. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/index.d.ts +1 -0
  59. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/index.js +17 -0
  60. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/styles.d.ts +38 -0
  61. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/styles.js +44 -0
  62. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/index.d.ts +1 -0
  63. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/index.js +17 -0
  64. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/useLogic.d.ts +14 -0
  65. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/useLogic.js +27 -0
  66. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/utils/composeCloseIntoActions/composeCloseIntoActions.d.ts +14 -0
  67. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/utils/composeCloseIntoActions/composeCloseIntoActions.js +22 -0
  68. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/utils/composeCloseIntoActions/index.d.ts +1 -0
  69. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/utils/composeCloseIntoActions/index.js +17 -0
  70. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/utils/index.d.ts +1 -0
  71. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/MobilePageContentHeaderActions/useLogic/utils/index.js +17 -0
  72. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActions.d.ts +2 -3
  73. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActions.js +7 -2
  74. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActionsSkeleton/PageContentHeaderActionsSkeleton.d.ts +1 -0
  75. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActionsSkeleton/PageContentHeaderActionsSkeleton.js +9 -0
  76. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActionsSkeleton/index.d.ts +1 -0
  77. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActionsSkeleton/index.js +17 -0
  78. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActionsSkeleton/styles.d.ts +8 -0
  79. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/PageContentHeaderActionsSkeleton/styles.js +16 -0
  80. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/index.d.ts +2 -0
  81. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/index.js +2 -0
  82. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/types.d.ts +3 -0
  83. package/node/components/PageContent/PageContentHeader/PageContentHeaderActions/types.js +2 -0
  84. package/node/components/PageContent/PageContentHeader/PageContentHeaderContext/PageContentHeaderContext.d.ts +9 -0
  85. package/node/components/PageContent/PageContentHeader/PageContentHeaderContext/PageContentHeaderContext.js +11 -0
  86. package/node/components/PageContent/PageContentHeader/PageContentHeaderContext/PageContentHeaderProvider/PageContentHeaderProvider.d.ts +7 -0
  87. package/node/components/PageContent/PageContentHeader/PageContentHeaderContext/PageContentHeaderProvider/PageContentHeaderProvider.js +11 -0
  88. package/node/components/PageContent/PageContentHeader/PageContentHeaderContext/PageContentHeaderProvider/index.d.ts +1 -0
  89. package/node/components/PageContent/PageContentHeader/PageContentHeaderContext/PageContentHeaderProvider/index.js +17 -0
  90. package/node/components/PageContent/PageContentHeader/PageContentHeaderContext/index.d.ts +2 -0
  91. package/node/components/PageContent/PageContentHeader/PageContentHeaderContext/index.js +18 -0
  92. package/node/components/PageContent/PageContentHeader/Title/Title.js +1 -2
  93. package/node/components/PageContent/PageContentHeader/Title/styles.d.ts +7 -0
  94. package/node/components/PageContent/PageContentHeader/Title/styles.js +10 -1
  95. package/node/components/PageContent/PageContentHeader/styles.js +8 -6
  96. package/node/components/PageContent/PageContentHeader/useLogic/index.d.ts +1 -0
  97. package/node/components/PageContent/PageContentHeader/useLogic/index.js +17 -0
  98. package/node/components/PageContent/PageContentHeader/useLogic/useLogic.d.ts +4 -0
  99. package/node/components/PageContent/PageContentHeader/useLogic/useLogic.js +19 -0
  100. package/node/components/PageContent/public.d.ts +1 -1
  101. package/node/components/PageContent/public.js +2 -1
  102. package/node/components/PageContent/styles.js +4 -0
  103. package/package.json +1 -1
@@ -1,9 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Skeleton } from '../../../Skeleton';
3
3
  import { Typography } from '../../../Typography';
4
+ import { SkeletonWrapper } from './styles';
4
5
  export const Description = ({ className, description, isLoading, }) => {
5
6
  if (!description && isLoading) {
6
- return _jsx(Skeleton, { className: className, height: 20, width: 300 });
7
+ return (_jsx(SkeletonWrapper, { children: _jsx(Skeleton, { className: className, height: 16, width: 300, variant: "rounded" }) }));
7
8
  }
8
9
  if (typeof description === 'string') {
9
10
  return (_jsx(Typography, { className: className, variant: "body1", children: description }));
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export declare const SkeletonWrapper: 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>, {}>;
@@ -0,0 +1,10 @@
1
+ import { styled } from '../../../styled';
2
+ export const SkeletonWrapper = styled.div `
3
+ display: flex;
4
+
5
+ padding: ${({ theme }) => theme.spacing(1, 0)};
6
+
7
+ ${({ theme }) => theme.breakpoints.down('sm')} {
8
+ display: none;
9
+ }
10
+ `;
@@ -1,8 +1,17 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createPortal } from 'react-dom';
2
3
  import { pageContentHeaderClassnames } from './constants';
3
4
  import { Description } from './Description';
5
+ import { PageContentHeaderProvider } from './PageContentHeaderContext';
4
6
  import { TitleBlock, Wrapper } from './styles';
5
7
  import { Title } from './Title';
8
+ import { useLogic } from './useLogic';
6
9
  export const PageContentHeader = ({ title, description, actions, children, isLoading, }) => {
7
- return (_jsxs(Wrapper, { className: pageContentHeaderClassnames.pageContentHeader, children: [_jsxs(TitleBlock, { children: [_jsx(Title, { title: title, isLoading: isLoading, children: children }), _jsx(Description, { className: pageContentHeaderClassnames.description, description: description, isLoading: isLoading })] }), actions && actions] }));
10
+ const { pageHeaderContainer, isMobile } = useLogic();
11
+ const content = (_jsx(PageContentHeaderProvider, { title: title, description: description, children: _jsxs(Wrapper, { className: pageContentHeaderClassnames.pageContentHeader, children: [_jsxs(TitleBlock, { children: [_jsx(Title, { title: title, isLoading: isLoading, children: children }), _jsx(Description, { className: pageContentHeaderClassnames.description, description: description, isLoading: isLoading })] }), actions] }) }));
12
+ // В мобильной версии pageContentHeader отображается внутри PageHeader страницы
13
+ if (isMobile && pageHeaderContainer) {
14
+ return createPortal(content, pageHeaderContainer);
15
+ }
16
+ return content;
8
17
  };
@@ -0,0 +1,3 @@
1
+ import { type ElementType } from 'react';
2
+ import { type PageContentHeaderActionsProps } from '../types';
3
+ export declare const MobilePageContentHeaderActions: <TMainActionComponent extends ElementType = ElementType, TSecondaryActionComponent extends ElementType = ElementType>(props: PageContentHeaderActionsProps<TMainActionComponent, TSecondaryActionComponent>) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { DotsVOutlineMd } from '../../../../../icons/DotsVOutlineMd';
3
+ import { BottomDrawer } from '../../../../BottomDrawer';
4
+ import { SecondaryActions, SecondaryVisibleActions, } from '../../../../PageHeader/PageActions';
5
+ import { Typography } from '../../../../Typography';
6
+ import { Description } from '../../Description';
7
+ import { ActionsWrapper, AddonInfoWrapper, BottomDrawerWrapper, StyledIconButton, StyledMainActions, } from './styles';
8
+ import { useLogic } from './useLogic';
9
+ export const MobilePageContentHeaderActions = (props) => {
10
+ const { open, handleOpenMenu, handleCloseMenu, main, secondary, secondaryVisible, title, description, } = useLogic(props);
11
+ return (_jsxs(_Fragment, { children: [_jsx(StyledIconButton, { title: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E", variant: "text", color: "grey", onClick: handleOpenMenu, children: _jsx(DotsVOutlineMd, {}) }), _jsx(BottomDrawer, { title: "\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F", onClose: handleCloseMenu, open: open, children: _jsxs(BottomDrawerWrapper, { children: [_jsxs(AddonInfoWrapper, { children: [_jsx(Typography, { variant: "h6", children: title }), _jsx(Description, { description: description })] }), _jsxs(ActionsWrapper, { children: [_jsx(StyledMainActions, { actions: main, size: "large" }), _jsx(SecondaryVisibleActions, { actions: secondaryVisible, size: "large" }), _jsx(SecondaryActions, { actions: secondary, size: "large" })] })] }) })] }));
12
+ };
@@ -0,0 +1 @@
1
+ export * from './MobilePageContentHeaderActions';
@@ -0,0 +1 @@
1
+ export * from './MobilePageContentHeaderActions';
@@ -0,0 +1,38 @@
1
+ /// <reference types="react" />
2
+ export declare const BottomDrawerWrapper: 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 AddonInfoWrapper: 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 StyledIconButton: import("../../../../styled").StyledComponent<Omit<import("../../../..").WithoutEmotionSpecific<import("@mui/material").ButtonProps>, "color" | "component" | "size" | "variant" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple"> & {
11
+ variant?: "light" | "link" | "text" | "contained" | "outlined" | undefined;
12
+ loading?: boolean | undefined;
13
+ color?: "primary" | "success" | "warning" | "error" | "grey" | undefined;
14
+ component?: import("react").ElementType | undefined;
15
+ selected?: boolean | undefined;
16
+ size?: "large" | "medium" | undefined;
17
+ } & Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, ""> & import("react").RefAttributes<HTMLButtonElement> & {
18
+ theme?: import("@emotion/react").Theme | undefined;
19
+ }, {}, {}>;
20
+ export declare const ActionsWrapper: import("../../../../styled").StyledComponent<{
21
+ theme?: import("@emotion/react").Theme | undefined;
22
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
23
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
24
+ export declare const StyledMainActions: import("../../../../styled").StyledComponent<Omit<import("../../../../ActionGroup").MainActionsProps<import("react").ElementType>, "actions"> & {
25
+ actions?: import("../../../..").MainAction<import("react").ElementType>[] | undefined;
26
+ className?: string | undefined;
27
+ size: import("../../../..").ButtonSize;
28
+ spacing?: number | undefined;
29
+ } & {
30
+ theme?: import("@emotion/react").Theme | undefined;
31
+ }, {}, {}>;
32
+ export declare const StyledSkeleton: import("../../../../styled").StyledComponent<Omit<import("../../../..").WithoutEmotionSpecific<import("@mui/material").SkeletonProps<import("react").ElementType, unknown>>, "animation" | "variant"> & {
33
+ component?: import("react").ElementType | undefined;
34
+ variant?: "text" | "circular" | "rounded" | undefined;
35
+ shapeSize?: "large" | "medium" | "small" | undefined;
36
+ } & {
37
+ theme?: import("@emotion/react").Theme | undefined;
38
+ }, {}, {}>;
@@ -0,0 +1,41 @@
1
+ import { IconButton } from '../../../../IconButton';
2
+ import { MainActions } from '../../../../PageHeader/PageActions';
3
+ import { Skeleton } from '../../../../Skeleton';
4
+ import { styled } from '../../../../styled';
5
+ import { tooltipClassnames } from '../../../../Tooltip';
6
+ export const BottomDrawerWrapper = styled.div `
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: ${({ theme }) => theme.spacing(6)};
10
+
11
+ padding: ${({ theme }) => theme.spacing(4)};
12
+ `;
13
+ export const AddonInfoWrapper = styled.div `
14
+ display: flex;
15
+ flex-direction: column;
16
+ gap: ${({ theme }) => theme.spacing(3)};
17
+ `;
18
+ export const StyledIconButton = styled(IconButton) `
19
+ ${({ theme }) => theme.breakpoints.up('sm')} {
20
+ display: none;
21
+ }
22
+ `;
23
+ export const ActionsWrapper = styled.div `
24
+ display: flex;
25
+ flex-direction: column;
26
+ gap: ${({ theme }) => theme.spacing(2)};
27
+
28
+ & .${tooltipClassnames.contentWrapper} {
29
+ display: none;
30
+ }
31
+ `;
32
+ export const StyledMainActions = styled(MainActions) `
33
+ ${({ theme }) => theme.breakpoints.down('sm')} {
34
+ padding-bottom: 0;
35
+ }
36
+ `;
37
+ export const StyledSkeleton = styled(Skeleton) `
38
+ ${({ theme }) => theme.breakpoints.up('sm')} {
39
+ display: none;
40
+ }
41
+ `;
@@ -0,0 +1,14 @@
1
+ import { type ElementType } from 'react';
2
+ import { type PageContentHeaderActionsProps } from '../../types';
3
+ type UseLogicParams<TMainActionComponent extends ElementType = ElementType, TSecondaryActionComponent extends ElementType = ElementType> = PageContentHeaderActionsProps<TMainActionComponent, TSecondaryActionComponent>;
4
+ export declare const useLogic: <TMainActionComponent extends ElementType = ElementType, TSecondaryActionComponent extends ElementType = ElementType>({ main: rawMain, secondary: rawSecondary, secondaryVisible: rawSecondaryVisible, }: UseLogicParams<TMainActionComponent, TSecondaryActionComponent>) => {
5
+ open: boolean;
6
+ handleOpenMenu: () => void;
7
+ handleCloseMenu: () => void;
8
+ main: import("../../../../..").MainAction<TMainActionComponent>[];
9
+ secondary: import("../../../../../ActionGroup").SecondaryAction<TSecondaryActionComponent>[];
10
+ secondaryVisible: import("../../../../../ActionGroup").SecondaryVisibleAction[];
11
+ title: import("react").ReactNode;
12
+ description: import("react").ReactNode;
13
+ };
14
+ export {};
@@ -0,0 +1,23 @@
1
+ import { useContext, useMemo } from 'react';
2
+ import { useMenu } from '../../../../../useMenu';
3
+ import { PageContentHeaderContext } from '../../../PageContentHeaderContext';
4
+ import { composeCloseIntoActions } from './utils';
5
+ export const useLogic = ({ main: rawMain = [], secondary: rawSecondary = [], secondaryVisible: rawSecondaryVisible = [], }) => {
6
+ const { open, handleOpenMenu, handleCloseMenu } = useMenu();
7
+ const { title, description } = useContext(PageContentHeaderContext);
8
+ const [main, secondary, secondaryVisible] = useMemo(() => [
9
+ composeCloseIntoActions(rawMain, handleCloseMenu),
10
+ composeCloseIntoActions(rawSecondary, handleCloseMenu),
11
+ composeCloseIntoActions(rawSecondaryVisible, handleCloseMenu),
12
+ ], [rawMain, rawSecondary, rawSecondaryVisible, handleCloseMenu]);
13
+ return {
14
+ open,
15
+ handleOpenMenu,
16
+ handleCloseMenu,
17
+ main,
18
+ secondary,
19
+ secondaryVisible,
20
+ title,
21
+ description,
22
+ };
23
+ };
@@ -0,0 +1,14 @@
1
+ import { type MouseEventHandler } from 'react';
2
+ type NestedAction = {
3
+ onClick?: MouseEventHandler;
4
+ };
5
+ type Action = {
6
+ onClick?: MouseEventHandler;
7
+ isNested?: boolean;
8
+ actions?: NestedAction[];
9
+ };
10
+ /**
11
+ * Рекурсивно оборачивает onClick обработчики действий, добавляя вызов closeFn
12
+ */
13
+ export declare const composeCloseIntoActions: <TAction extends Action>(actions: TAction[], closeFn: () => void) => TAction[];
14
+ export {};
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Рекурсивно оборачивает onClick обработчики действий, добавляя вызов closeFn
3
+ */
4
+ export const composeCloseIntoActions = (actions, closeFn) => {
5
+ return actions.map((action) => {
6
+ const composed = {
7
+ ...action,
8
+ onClick: (event) => {
9
+ action.onClick?.(event);
10
+ closeFn();
11
+ },
12
+ };
13
+ if (action.actions) {
14
+ composed.actions = composeCloseIntoActions(action.actions, closeFn);
15
+ }
16
+ return composed;
17
+ });
18
+ };
@@ -1,4 +1,3 @@
1
1
  import type { ElementType } from 'react';
2
- import { type PageActionsProps } from '../../../PageHeader';
3
- export type PageContentHeaderActionsProps<TMainActionComponent extends ElementType = ElementType, TSecondaryActionComponent extends ElementType = ElementType> = PageActionsProps<TMainActionComponent, TSecondaryActionComponent>;
4
- export declare const PageContentHeaderActions: <TMainActionComponent extends ElementType = ElementType, TSecondaryActionComponent extends ElementType = ElementType>(props: PageContentHeaderActionsProps<TMainActionComponent, TSecondaryActionComponent>) => import("react/jsx-runtime").JSX.Element;
2
+ import { type PageContentHeaderActionsProps } from './types';
3
+ export declare const PageContentHeaderActions: <TMainActionComponent extends ElementType = ElementType, TSecondaryActionComponent extends ElementType = ElementType>({ isLoading, ...props }: PageContentHeaderActionsProps<TMainActionComponent, TSecondaryActionComponent>) => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,10 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { PageActions } from '../../../PageHeader';
3
- export const PageContentHeaderActions = (props) => {
4
- return _jsx(PageActions, { size: "medium", spacing: 1, ...props });
3
+ import { MobilePageContentHeaderActions } from './MobilePageContentHeaderActions';
4
+ import { PageContentHeaderActionsSkeleton } from './PageContentHeaderActionsSkeleton';
5
+ export const PageContentHeaderActions = ({ isLoading, ...props }) => {
6
+ if (isLoading) {
7
+ return _jsx(PageContentHeaderActionsSkeleton, {});
8
+ }
9
+ return (_jsxs(_Fragment, { children: [_jsx(PageActions, { size: "medium", spacing: 1, ...props }), _jsx(MobilePageContentHeaderActions, { ...props })] }));
5
10
  };
@@ -0,0 +1 @@
1
+ export declare const PageContentHeaderActionsSkeleton: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { StyledSkeleton } from './styles';
3
+ export const PageContentHeaderActionsSkeleton = () => {
4
+ return _jsx(StyledSkeleton, { variant: "rounded" });
5
+ };
@@ -0,0 +1 @@
1
+ export * from './PageContentHeaderActionsSkeleton';
@@ -0,0 +1 @@
1
+ export * from './PageContentHeaderActionsSkeleton';
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ export declare const StyledSkeleton: import("../../../../styled").StyledComponent<Omit<import("../../../..").WithoutEmotionSpecific<import("@mui/material").SkeletonProps<import("react").ElementType, unknown>>, "animation" | "variant"> & {
3
+ component?: import("react").ElementType | undefined;
4
+ variant?: "text" | "circular" | "rounded" | undefined;
5
+ shapeSize?: "large" | "medium" | "small" | undefined;
6
+ } & {
7
+ theme?: import("@emotion/react").Theme | undefined;
8
+ }, {}, {}>;
@@ -0,0 +1,13 @@
1
+ import { Skeleton } from '../../../../Skeleton';
2
+ import { styled } from '../../../../styled';
3
+ export const StyledSkeleton = styled(Skeleton) `
4
+ flex-shrink: 0;
5
+
6
+ width: 180px;
7
+ height: 32px;
8
+
9
+ ${({ theme }) => theme.breakpoints.down('sm')} {
10
+ width: 40px;
11
+ height: 40px;
12
+ }
13
+ `;
@@ -1 +1,3 @@
1
1
  export * from './PageContentHeaderActions';
2
+ export * from './types';
3
+ export * from './PageContentHeaderActionsSkeleton';
@@ -1 +1,3 @@
1
1
  export * from './PageContentHeaderActions';
2
+ export * from './types';
3
+ export * from './PageContentHeaderActionsSkeleton';
@@ -0,0 +1,3 @@
1
+ import type { ElementType } from 'react';
2
+ import type { PageActionsProps } from '../../../PageHeader';
3
+ export type PageContentHeaderActionsProps<TMainActionComponent extends ElementType = ElementType, TSecondaryActionComponent extends ElementType = ElementType> = PageActionsProps<TMainActionComponent, TSecondaryActionComponent>;
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from 'react';
2
+ export type PageContentHeaderContextProps = {
3
+ title?: ReactNode;
4
+ description?: ReactNode;
5
+ };
6
+ /**
7
+ * Контекст для проброса параметров (title, description) для использования внутри bottomDrawer в мобильном отображении.
8
+ */
9
+ export declare const PageContentHeaderContext: import("react").Context<PageContentHeaderContextProps>;
@@ -0,0 +1,8 @@
1
+ import { createContext } from 'react';
2
+ /**
3
+ * Контекст для проброса параметров (title, description) для использования внутри bottomDrawer в мобильном отображении.
4
+ */
5
+ export const PageContentHeaderContext = createContext({
6
+ title: undefined,
7
+ description: undefined,
8
+ });
@@ -0,0 +1,7 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type PageContentHeaderContextProps } from '../PageContentHeaderContext';
3
+ type Props = PageContentHeaderContextProps & {
4
+ children: ReactNode;
5
+ };
6
+ export declare const PageContentHeaderProvider: ({ children, title, description, }: Props) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { PageContentHeaderContext, } from '../PageContentHeaderContext';
4
+ export const PageContentHeaderProvider = ({ children, title, description, }) => {
5
+ const contextValue = useMemo(() => ({ title, description }), [title, description]);
6
+ return (_jsx(PageContentHeaderContext.Provider, { value: contextValue, children: children }));
7
+ };
@@ -0,0 +1 @@
1
+ export * from './PageContentHeaderProvider';
@@ -0,0 +1,2 @@
1
+ export * from './PageContentHeaderContext';
2
+ export * from './PageContentHeaderProvider';
@@ -0,0 +1,2 @@
1
+ export * from './PageContentHeaderContext';
2
+ export * from './PageContentHeaderProvider';
@@ -1,10 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { OverflowTypography } from '../../../OverflowTypography';
3
- import { Skeleton } from '../../../Skeleton';
4
- import { TitleWrapper } from './styles';
3
+ import { StyledSkeleton, TitleWrapper } from './styles';
5
4
  export const Title = ({ title, isLoading, children }) => {
6
5
  if (!title && !children && isLoading) {
7
- return _jsx(Skeleton, { height: 20, width: 200 });
6
+ return _jsx(StyledSkeleton, { variant: "rounded" });
8
7
  }
9
8
  if (typeof title === 'string') {
10
9
  return (_jsxs(TitleWrapper, { component: "h3", variant: "h5", children: [_jsx(OverflowTypography, { component: "div", variant: "inherit", children: title }), children] }));
@@ -10,3 +10,10 @@ export declare const TitleWrapper: import("../../../styled").StyledComponent<imp
10
10
  } & import("react").HTMLAttributes<HTMLParagraphElement> & import("react").RefAttributes<HTMLSpanElement> & {
11
11
  theme?: import("@emotion/react").Theme | undefined;
12
12
  }, {}, {}>;
13
+ export declare const StyledSkeleton: import("../../../styled").StyledComponent<Omit<import("../../..").WithoutEmotionSpecific<import("@mui/material").SkeletonProps<import("react").ElementType, unknown>>, "animation" | "variant"> & {
14
+ component?: import("react").ElementType | undefined;
15
+ variant?: "text" | "circular" | "rounded" | undefined;
16
+ shapeSize?: "large" | "medium" | "small" | undefined;
17
+ } & {
18
+ theme?: import("@emotion/react").Theme | undefined;
19
+ }, {}, {}>;
@@ -1,3 +1,4 @@
1
+ import { Skeleton } from '../../../Skeleton';
1
2
  import { styled } from '../../../styled';
2
3
  import { Typography } from '../../../Typography';
3
4
  export const TitleWrapper = styled(Typography) `
@@ -6,3 +7,11 @@ export const TitleWrapper = styled(Typography) `
6
7
  gap: ${({ theme }) => theme.spacing(1)};
7
8
  align-items: center;
8
9
  `;
10
+ export const StyledSkeleton = styled(Skeleton) `
11
+ width: 200px;
12
+ height: 20px;
13
+
14
+ ${({ theme }) => theme.breakpoints.down('sm')} {
15
+ width: 100%;
16
+ }
17
+ `;
@@ -11,13 +11,13 @@ export const Wrapper = styled.header `
11
11
  border-bottom: 1px solid ${({ theme }) => theme.palette.components.border.default};
12
12
 
13
13
  ${({ theme }) => theme.breakpoints.down('sm')} {
14
- margin: ${({ theme }) => theme.spacing(0, 4)};
14
+ gap: ${({ theme }) => theme.spacing(5)};
15
15
 
16
- background-color: ${({ theme }) => theme.palette.background.default};
17
- border: 1px solid ${({ theme }) => theme.palette.components.border.default};
18
- border-bottom: none;
19
- border-top-left-radius: ${({ theme }) => theme.shape.medium};
20
- border-top-right-radius: ${({ theme }) => theme.shape.medium};
16
+ height: 48px;
17
+ padding: ${({ theme }) => theme.spacing(0, 1, 0, 4)};
18
+
19
+ background-color: ${({ theme }) => theme.palette.background.default};
20
+ border-bottom: 1px solid ${({ theme }) => theme.palette.components.border.default};
21
21
  }
22
22
  `;
23
23
  export const TitleBlock = styled.div `
@@ -26,6 +26,8 @@ export const TitleBlock = styled.div `
26
26
  flex-direction: column;
27
27
 
28
28
  ${({ theme }) => theme.breakpoints.down('sm')} {
29
+ width: 100%;
30
+
29
31
  & .${pageContentHeaderClassnames.description} {
30
32
  display: none;
31
33
  }
@@ -0,0 +1 @@
1
+ export * from './useLogic';
@@ -0,0 +1 @@
1
+ export * from './useLogic';
@@ -0,0 +1,4 @@
1
+ export declare const useLogic: () => {
2
+ pageHeaderContainer: Element | null;
3
+ isMobile: boolean;
4
+ };
@@ -0,0 +1,15 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { pageHeaderClassnames } from '../../../PageHeader';
3
+ import { useViewportType } from '../../../useViewportType';
4
+ export const useLogic = () => {
5
+ const [pageHeaderContainer, setPageHeaderContainer] = useState(null);
6
+ const { isMobile } = useViewportType();
7
+ useEffect(() => {
8
+ const container = document.querySelector(`.${pageHeaderClassnames.root}`);
9
+ setPageHeaderContainer(container);
10
+ }, []);
11
+ return {
12
+ pageHeaderContainer,
13
+ isMobile,
14
+ };
15
+ };
@@ -1,4 +1,4 @@
1
1
  export { pageContentClassnames } from './constants';
2
2
  export { PageContent } from './PageContent';
3
- export { PageContentHeader, PageContentHeaderActions, type PageContentHeaderActionsProps, type PageContentHeaderProps, } from './PageContentHeader';
3
+ export { PageContentHeader, PageContentHeaderActions, type PageContentHeaderActionsProps, PageContentHeaderActionsSkeleton, type PageContentHeaderProps, } from './PageContentHeader';
4
4
  export type { PageContentProps } from './types';
@@ -1,3 +1,3 @@
1
1
  export { pageContentClassnames } from './constants';
2
2
  export { PageContent } from './PageContent';
3
- export { PageContentHeader, PageContentHeaderActions, } from './PageContentHeader';
3
+ export { PageContentHeader, PageContentHeaderActions, PageContentHeaderActionsSkeleton, } from './PageContentHeader';
@@ -67,6 +67,10 @@ export const Content = styled.div `
67
67
  padding-right: ${({ theme }) => theme.spacing(4)};
68
68
  padding-bottom: ${({ theme }) => theme.spacing(3)};
69
69
  padding-left: ${({ theme }) => theme.spacing(4)};
70
+
71
+ &.${pageContentClassnames.contentHasHeader}, &.${pageContentClassnames.hasAside} {
72
+ padding: ${({ theme }) => theme.spacing(4, 4, 3)};
73
+ }
70
74
  }
71
75
 
72
76
  ${({ theme }) => theme.breakpoints.down('sm')} {
@@ -4,9 +4,10 @@ exports.Description = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const Skeleton_1 = require("../../../Skeleton");
6
6
  const Typography_1 = require("../../../Typography");
7
+ const styles_1 = require("./styles");
7
8
  const Description = ({ className, description, isLoading, }) => {
8
9
  if (!description && isLoading) {
9
- return (0, jsx_runtime_1.jsx)(Skeleton_1.Skeleton, { className: className, height: 20, width: 300 });
10
+ return ((0, jsx_runtime_1.jsx)(styles_1.SkeletonWrapper, { children: (0, jsx_runtime_1.jsx)(Skeleton_1.Skeleton, { className: className, height: 16, width: 300, variant: "rounded" }) }));
10
11
  }
11
12
  if (typeof description === 'string') {
12
13
  return ((0, jsx_runtime_1.jsx)(Typography_1.Typography, { className: className, variant: "body1", children: description }));
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export declare const SkeletonWrapper: import("@emotion/styled/dist/declarations/src/types").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>, {}>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SkeletonWrapper = void 0;
4
+ const styled_1 = require("../../../styled");
5
+ exports.SkeletonWrapper = styled_1.styled.div `
6
+ display: flex;
7
+
8
+ padding: ${({ theme }) => theme.spacing(1, 0)};
9
+
10
+ ${({ theme }) => theme.breakpoints.down('sm')} {
11
+ display: none;
12
+ }
13
+ `;
@@ -2,11 +2,20 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PageContentHeader = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_dom_1 = require("react-dom");
5
6
  const constants_1 = require("./constants");
6
7
  const Description_1 = require("./Description");
8
+ const PageContentHeaderContext_1 = require("./PageContentHeaderContext");
7
9
  const styles_1 = require("./styles");
8
10
  const Title_1 = require("./Title");
11
+ const useLogic_1 = require("./useLogic");
9
12
  const PageContentHeader = ({ title, description, actions, children, isLoading, }) => {
10
- return ((0, jsx_runtime_1.jsxs)(styles_1.Wrapper, { className: constants_1.pageContentHeaderClassnames.pageContentHeader, children: [(0, jsx_runtime_1.jsxs)(styles_1.TitleBlock, { children: [(0, jsx_runtime_1.jsx)(Title_1.Title, { title: title, isLoading: isLoading, children: children }), (0, jsx_runtime_1.jsx)(Description_1.Description, { className: constants_1.pageContentHeaderClassnames.description, description: description, isLoading: isLoading })] }), actions && actions] }));
13
+ const { pageHeaderContainer, isMobile } = (0, useLogic_1.useLogic)();
14
+ const content = ((0, jsx_runtime_1.jsx)(PageContentHeaderContext_1.PageContentHeaderProvider, { title: title, description: description, children: (0, jsx_runtime_1.jsxs)(styles_1.Wrapper, { className: constants_1.pageContentHeaderClassnames.pageContentHeader, children: [(0, jsx_runtime_1.jsxs)(styles_1.TitleBlock, { children: [(0, jsx_runtime_1.jsx)(Title_1.Title, { title: title, isLoading: isLoading, children: children }), (0, jsx_runtime_1.jsx)(Description_1.Description, { className: constants_1.pageContentHeaderClassnames.description, description: description, isLoading: isLoading })] }), actions] }) }));
15
+ // В мобильной версии pageContentHeader отображается внутри PageHeader страницы
16
+ if (isMobile && pageHeaderContainer) {
17
+ return (0, react_dom_1.createPortal)(content, pageHeaderContainer);
18
+ }
19
+ return content;
11
20
  };
12
21
  exports.PageContentHeader = PageContentHeader;
@@ -0,0 +1,3 @@
1
+ import { type ElementType } from 'react';
2
+ import { type PageContentHeaderActionsProps } from '../types';
3
+ export declare const MobilePageContentHeaderActions: <TMainActionComponent extends ElementType = ElementType, TSecondaryActionComponent extends ElementType = ElementType>(props: PageContentHeaderActionsProps<TMainActionComponent, TSecondaryActionComponent>) => import("react/jsx-runtime").JSX.Element;