From e333b4d348c96df6d295eca6034678796e7b606a Mon Sep 17 00:00:00 2001 From: Peng Xiao Date: Tue, 12 Mar 2024 14:56:45 +0000 Subject: [PATCH] fix(core): make sidebar switch transition smooth (#6085) --- .../sidebar-header/sidebar-switch.css.ts | 11 ++++++++--- .../sidebar-header/sidebar-switch.tsx | 4 ++-- .../workbench/view/route-container.css.ts | 15 ++++++++++++++- .../workbench/view/route-container.tsx | 19 +++++++++++++++---- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/packages/frontend/core/src/components/app-sidebar/sidebar-header/sidebar-switch.css.ts b/packages/frontend/core/src/components/app-sidebar/sidebar-header/sidebar-switch.css.ts index ee6d809f59..45c075d008 100644 --- a/packages/frontend/core/src/components/app-sidebar/sidebar-header/sidebar-switch.css.ts +++ b/packages/frontend/core/src/components/app-sidebar/sidebar-header/sidebar-switch.css.ts @@ -1,18 +1,23 @@ import { style } from '@vanilla-extract/css'; + export const sidebarSwitch = style({ opacity: 0, - display: 'none !important', + display: 'inline-flex', overflow: 'hidden', pointerEvents: 'none', - transition: 'all .3s ease-in-out', + transition: 'max-width 0.2s ease-in-out, margin 0.3s ease-in-out', selectors: { '&[data-show=true]': { + maxWidth: '32px', opacity: 1, - display: 'inline-flex !important', width: '32px', flexShrink: 0, fontSize: '24px', pointerEvents: 'auto', }, + '&[data-show=false]': { + maxWidth: 0, + margin: '0 !important', + }, }, }); diff --git a/packages/frontend/core/src/components/app-sidebar/sidebar-header/sidebar-switch.tsx b/packages/frontend/core/src/components/app-sidebar/sidebar-header/sidebar-switch.tsx index 818c9419f3..70e584d9ed 100644 --- a/packages/frontend/core/src/components/app-sidebar/sidebar-header/sidebar-switch.tsx +++ b/packages/frontend/core/src/components/app-sidebar/sidebar-header/sidebar-switch.tsx @@ -8,10 +8,10 @@ import { appSidebarOpenAtom } from '../index.jotai'; import * as styles from './sidebar-switch.css'; export const SidebarSwitch = ({ - show = true, + show, className, }: { - show?: boolean; + show: boolean; className?: string; }) => { const [open, setOpen] = useAtom(appSidebarOpenAtom); diff --git a/packages/frontend/core/src/modules/workbench/view/route-container.css.ts b/packages/frontend/core/src/modules/workbench/view/route-container.css.ts index 2f3e423992..ceb85ee034 100644 --- a/packages/frontend/core/src/modules/workbench/view/route-container.css.ts +++ b/packages/frontend/core/src/modules/workbench/view/route-container.css.ts @@ -39,7 +39,20 @@ export const leftSidebarButton = style({ }); export const rightSidebarButton = style({ - margin: '0 0 0 16px', + transition: 'all 0.2s ease-in-out', + selectors: { + '&[data-show=true]': { + opacity: 1, + width: 32, + maxWidth: 32, + marginLeft: 16, + }, + '&[data-show=false]': { + opacity: 0, + maxWidth: 0, + marginLeft: 0, + }, + }, }); export const viewHeaderContainer = style({ diff --git a/packages/frontend/core/src/modules/workbench/view/route-container.tsx b/packages/frontend/core/src/modules/workbench/view/route-container.tsx index d746c9a9e7..8d0a3d2bdd 100644 --- a/packages/frontend/core/src/modules/workbench/view/route-container.tsx +++ b/packages/frontend/core/src/modules/workbench/view/route-container.tsx @@ -25,12 +25,19 @@ export interface Props { const ToggleButton = ({ onToggle, className, + show, }: { onToggle?: () => void; className: string; + show: boolean; }) => { return ( - + ); @@ -50,14 +57,18 @@ export const RouteContainer = ({ route }: Props) => { return (
- {viewPosition.isFirst && !leftSidebarOpen && ( - + {viewPosition.isFirst && ( + )} - {viewPosition.isLast && !rightSidebarOpen && ( + {viewPosition.isLast && ( <> {rightSidebarHasViews && (