From e1adc7c1aff5e014275a946e7946cee2b2121b4e Mon Sep 17 00:00:00 2001 From: diondiondion Date: Tue, 15 Sep 2026 14:49:32 +0000 Subject: [PATCH] Redesign: Implement new navigation in advanced (multi-column) layout (#40522) --- .../mastodon/components/column/index.tsx | 7 ++++- .../components/column/styles.module.scss | 19 +++++++++++++ .../columns_area/multi_column_content.tsx | 5 ++++ .../columns_area/redesign.module.scss | 28 ++++++++++++++----- .../ui/components/columns_area/redesign.tsx | 19 ++++++------- .../redesign_multicol.module.scss | 28 +++++++++++++++++++ 6 files changed, 87 insertions(+), 19 deletions(-) create mode 100644 app/javascript/mastodon/components/column/styles.module.scss create mode 100644 app/javascript/mastodon/features/ui/components/columns_area/redesign_multicol.module.scss diff --git a/app/javascript/mastodon/components/column/index.tsx b/app/javascript/mastodon/components/column/index.tsx index 380136e24ee..4a55652eb24 100644 --- a/app/javascript/mastodon/components/column/index.tsx +++ b/app/javascript/mastodon/components/column/index.tsx @@ -5,9 +5,11 @@ import classNames from 'classnames'; import { useDebouncedCallback } from 'use-debounce'; import { getColumnSkipLinkId } from '@/mastodon/features/ui/components/skip_links'; +import { isRedesignEnabled } from '@/mastodon/utils/environment'; import { scrollTop } from 'mastodon/scroll'; import { ColumnContext, useColumnIndexContext } from './context'; +import classes from './styles.module.scss'; interface ColumnProps { children?: React.ReactNode; @@ -66,7 +68,10 @@ export const Column: React.FC = ({ role='region' ref={nodeRef} onScroll={handleScroll} - className={classNames('column', className)} + className={classNames( + isRedesignEnabled() ? classes.root : 'column', + className, + )} aria-label={label} aria-labelledby={ label === undefined ? getColumnSkipLinkId(columnIndex) : undefined diff --git a/app/javascript/mastodon/components/column/styles.module.scss b/app/javascript/mastodon/components/column/styles.module.scss new file mode 100644 index 00000000000..3e4e70bc9ba --- /dev/null +++ b/app/javascript/mastodon/components/column/styles.module.scss @@ -0,0 +1,19 @@ +:global(.layout-multiple-columns) .root { + box-sizing: border-box; + position: relative; + display: flex; + flex-direction: column; + flex: 0 0 auto; + + --available-width: calc( + 100% - var(--multi-column-navigation-width) - var(--multi-column-gap) + ); + + width: clamp( + 360px, + (var(--available-width) / 4 - var(--multi-column-gap)), + 400px + ); + padding: 0; + background: var(--color-bg-primary); +} diff --git a/app/javascript/mastodon/features/ui/components/columns_area/multi_column_content.tsx b/app/javascript/mastodon/features/ui/components/columns_area/multi_column_content.tsx index 957d9d13f3f..f3267c52587 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area/multi_column_content.tsx +++ b/app/javascript/mastodon/features/ui/components/columns_area/multi_column_content.tsx @@ -4,6 +4,7 @@ import type { List, Record } from 'immutable'; import { ColumnIndexContext } from '@/mastodon/components/column/context'; import { useAppSelector } from '@/mastodon/store'; +import { isRedesignEnabled } from '@/mastodon/utils/environment'; import { Compose, @@ -76,6 +77,10 @@ export const MultiColumnContent: React.FC<{ const uuid = column.get('uuid'); const id = column.get('id'); + if (isRedesignEnabled() && id === 'COMPOSE') { + return null; + } + return ( ; }> = ({ children, minimalShell, singleColumn, ref }) => { - const isModalOpen = useAppSelector( - (state) => !state.modal.get('stack').isEmpty(), - ); const isMobile = useBreakpoint('openable'); if (minimalShell) { return ( -
+
{isMobile && }
{children}
@@ -37,7 +34,7 @@ export const ColumnsAreaRedesign: React.FC<{ if (singleColumn) { return ( -
+
@@ -49,11 +46,11 @@ export const ColumnsAreaRedesign: React.FC<{ } return ( -
+
+
+ +
+ {children}
); diff --git a/app/javascript/mastodon/features/ui/components/columns_area/redesign_multicol.module.scss b/app/javascript/mastodon/features/ui/components/columns_area/redesign_multicol.module.scss new file mode 100644 index 00000000000..33aa871dbac --- /dev/null +++ b/app/javascript/mastodon/features/ui/components/columns_area/redesign_multicol.module.scss @@ -0,0 +1,28 @@ +@use '@/styles/mastodon/variables' as *; + +.root { + --multi-column-navigation-width: 320px; + --multi-column-gap: var(--space-xs); + + position: relative; + display: flex; + flex: 1 1 auto; + justify-content: flex-start; + gap: var(--multi-column-gap); + padding-inline-end: var(--multi-column-gap); + overflow-x: auto; +} + +.navigationWrapper { + position: sticky; + inset-inline-start: 0; + top: 0; + z-index: 100; + min-width: var(--multi-column-navigation-width); + padding-bottom: env(safe-area-inset-bottom); + background: var(--color-bg-blend); + + @media (max-width: ($mobile-menu-breakpoint - 1)) { + display: none; + } +}