diff --git a/src/backend/impress/configuration/theme/default.json b/src/backend/impress/configuration/theme/default.json
index 3f87d89c7..4c752dd48 100644
--- a/src/backend/impress/configuration/theme/default.json
+++ b/src/backend/impress/configuration/theme/default.json
@@ -142,7 +142,7 @@
"icon": {
"src": "/assets/icon-docs.svg",
"style": {
- "width": "40px",
+ "width": "36px",
"height": "auto"
},
"alt": "",
diff --git a/src/frontend/apps/impress/src/components/Effect.tsx b/src/frontend/apps/impress/src/components/Effect.tsx
index 53cffc2a4..5d79c8c2f 100644
--- a/src/frontend/apps/impress/src/components/Effect.tsx
+++ b/src/frontend/apps/impress/src/components/Effect.tsx
@@ -1,3 +1,6 @@
+import { PropsWithChildren, useEffect, useState } from 'react';
+import styled, { keyframes } from 'styled-components';
+
export const showEffect = `
transform: scaleY(1);
opacity: 1;
@@ -9,3 +12,56 @@ export const hideEffect = `
opacity: 0;
max-height: 0;
`;
+
+const fadeIn = keyframes`
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+`;
+
+const fadeOut = keyframes`
+ from {
+ opacity: 1;
+ }
+ to {
+ opacity: 0;
+ }
+`;
+
+const FadeItem = styled.div<{ $isVisible: boolean }>`
+ display: flex;
+ animation: ${({ $isVisible }) => ($isVisible ? fadeIn : fadeOut)} 0.2s ease
+ forwards;
+`;
+
+export const FadeComponent = ({
+ children,
+ isVisible,
+}: PropsWithChildren<{ isVisible: boolean }>) => {
+ const [isGroupMounted, setIsGroupMounted] = useState(isVisible);
+
+ useEffect(() => {
+ if (isVisible) {
+ setIsGroupMounted(true);
+ }
+ }, [isVisible]);
+
+ const handleFadeOutEnd = () => {
+ if (!isVisible) {
+ setIsGroupMounted(false);
+ }
+ };
+
+ if (!isGroupMounted) {
+ return null;
+ }
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx
index ce0c88fe8..1dc0c2e0b 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx
+++ b/src/frontend/apps/impress/src/features/docs/doc-management/components/SimpleDocItem.tsx
@@ -100,6 +100,7 @@ export const SimpleDocItem = ({
$weight="500"
$css={ItemTextCss}
data-testid="doc-title"
+ title={docTitle}
>
{docTitle}
diff --git a/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx b/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx
index d32e97407..1f0747162 100644
--- a/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx
+++ b/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGrid.tsx
@@ -90,10 +90,9 @@ export const DocsGrid = ({
{
const { t } = useTranslation();
const { isPanelOpen } = useLeftPanelStore();
+ const isVisible = (isTablet && !isPanelOpen) || isMobile;
+
return (
{isTablet && (
)}
- {(isTablet && !isPanelOpen) || isMobile ? (
- <>
-
-
-
-
- >
- ) : null}
+
+
+
+
+
+
+
+
);
};
diff --git a/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelCollapseButton.tsx b/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelCollapseButton.tsx
index c0df08fe5..7ca7dea0f 100644
--- a/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelCollapseButton.tsx
+++ b/src/frontend/apps/impress/src/features/left-panel/components/LeftPanelCollapseButton.tsx
@@ -1,6 +1,7 @@
import { Button } from '@gouvfr-lasuite/cunningham-react';
import { Text } from '@/components';
+import { FadeComponent } from '@/components/Effect';
import { CardFloatingBar } from '@/components/FloatingBar';
import LeftPanelIcon from '../assets/left-panel.svg';
@@ -27,15 +28,16 @@ export const LeftPanelCollapseButton = ({
icon={}
data-testid="floating-bar-toggle-left-panel"
>
- {buttonTitle && (
+
{buttonTitle}
- )}
+
);
};
diff --git a/src/frontend/apps/impress/src/layouts/MainLayout.tsx b/src/frontend/apps/impress/src/layouts/MainLayout.tsx
index 9a19293c0..835bce5aa 100644
--- a/src/frontend/apps/impress/src/layouts/MainLayout.tsx
+++ b/src/frontend/apps/impress/src/layouts/MainLayout.tsx
@@ -2,7 +2,7 @@ import { PropsWithChildren } from 'react';
import { useTranslation } from 'react-i18next';
import { css } from 'styled-components';
-import { Box, BoxProps } from '@/components';
+import { Box, BoxType } from '@/components';
import { LeftPanel, ResizableLeftPanel } from '@/features/left-panel';
import { RightPanel } from '@/features/right-panel/components/RightPanel';
import { DocEditorSkeleton, Skeleton } from '@/features/skeletons';
@@ -12,11 +12,15 @@ import { usePanelCoordination } from './usePanelCoordination';
type MainLayoutProps = {
enableResizablePanel?: boolean;
+ propsLayout?: BoxType;
+ propsContent?: BoxType;
};
export function MainLayout({
children,
enableResizablePanel = false,
+ propsLayout,
+ propsContent,
}: PropsWithChildren) {
return (
-
+
{children}
);
}
-export interface MainLayoutContentProps {
+export interface MainLayoutContentProps extends BoxType {
enableResizablePanel: boolean;
}
export function MainLayoutContent({
children,
enableResizablePanel,
+ ...props
}: PropsWithChildren) {
if (enableResizablePanel) {
- return {children};
+ return {children};
}
return (
<>
- {children}
+ {children}
>
);
}
-const MainResizableLayout = ({ children }: PropsWithChildren) => {
+const MainResizableLayout = ({
+ children,
+ ...props
+}: PropsWithChildren) => {
usePanelCoordination();
return (
-
+
{children}
@@ -71,7 +83,7 @@ const MainResizableLayout = ({ children }: PropsWithChildren) => {
export const MainContent = ({
children,
...props
-}: PropsWithChildren) => {
+}: PropsWithChildren) => {
const { t } = useTranslation();
return (
diff --git a/src/frontend/apps/impress/src/pages/docs/index.tsx b/src/frontend/apps/impress/src/pages/docs/index.tsx
index a8afdc29d..cd594e263 100644
--- a/src/frontend/apps/impress/src/pages/docs/index.tsx
+++ b/src/frontend/apps/impress/src/pages/docs/index.tsx
@@ -35,7 +35,15 @@ const Page: NextPageWithLayout = () => {
};
Page.getLayout = function getLayout(page: ReactElement) {
- return {page};
+ return (
+
+ {page}
+
+ );
};
export default Page;