+
+
+ }
+ />
+ ) : (
+
+
+
+ )}
{(canViewFeed(signedIn, permissions, localLiveFeedAccess) && canViewFeed(signedIn, permissions, remoteLiveFeedAccess)) && (
diff --git a/app/javascript/mastodon/features/home_timeline/components/column_settings_redesign.tsx b/app/javascript/mastodon/features/home_timeline/components/column_settings_redesign.tsx
new file mode 100644
index 00000000000..067e051dbd1
--- /dev/null
+++ b/app/javascript/mastodon/features/home_timeline/components/column_settings_redesign.tsx
@@ -0,0 +1,79 @@
+import { useCallback } from 'react';
+
+import { FormattedMessage } from 'react-intl';
+
+import { SlidersHorizontalIcon } from '@phosphor-icons/react';
+
+import { ColumnSettingsMenu } from '@/mastodon/components/column_header';
+import { MenuItemCheckbox } from '@/mastodon/components/menu';
+import type { MenuItemCheckboxChangeHandler } from '@/mastodon/components/menu/items';
+import { useAppSelector, useAppDispatch } from 'mastodon/store';
+
+import { changeSetting } from '../../../actions/settings';
+
+export const HomeColumnSettings: React.FC<{
+ children?: React.ReactNode;
+}> = ({ children }) => {
+ const dispatch = useAppDispatch();
+
+ const settings = useAppSelector((state) => state.settings.get('home'));
+ const onChange = useCallback(
+ ({ value, checked }) => {
+ dispatch(changeSetting(['home', 'shows', value], checked));
+ },
+ [dispatch],
+ );
+
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
+ // @ts-expect-error settings isn't typed yet
+ const showBoosts = settings.getIn(['shows', 'reblog']) as boolean;
+ // @ts-expect-error settings isn't typed yet
+ const showQuotes = settings.getIn(['shows', 'quote']) as boolean;
+ // @ts-expect-error settings isn't typed yet
+ const showReplies = settings.getIn(['shows', 'reply']) as boolean;
+ /* eslint-enable @typescript-eslint/no-unsafe-call */
+
+ return (
+
+ }
+ >
+
+
+
+
+
+
+
+
+
+ {children}
+
+ );
+};
diff --git a/app/javascript/mastodon/features/home_timeline/index.jsx b/app/javascript/mastodon/features/home_timeline/index.jsx
index f9dfb64c552..2ae26a63b95 100644
--- a/app/javascript/mastodon/features/home_timeline/index.jsx
+++ b/app/javascript/mastodon/features/home_timeline/index.jsx
@@ -11,7 +11,7 @@ import { connect } from 'react-redux';
import CampaignIcon from '@/material-icons/400-24px/campaign.svg?react';
import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react';
import { Column } from '@/mastodon/components/column';
-import { ColumnHeader } from '@/mastodon/components/column/header';
+import { ColumnHeader as LegacyColumnHeader } from '@/mastodon/components/column/header';
import { injectIntl } from '@/mastodon/components/intl';
import { SymbolLogo } from 'mastodon/components/logo';
import { fetchAnnouncements, toggleShowAnnouncements } from 'mastodon/actions/announcements';
@@ -28,6 +28,10 @@ import { ColumnSettings } from './components/column_settings';
import { CriticalUpdateBanner } from './components/critical_update_banner';
import { Announcements } from './components/announcements';
import { AnnualReportTimeline } from '../annual_report/timeline';
+import { isRedesignEnabled } from '@/mastodon/utils/environment';
+import { ColumnHeader } from '@/mastodon/components/column_header';
+import { HomeColumnSettings } from './components/column_settings_redesign';
+import { MultiColumnMenuItems } from '@/mastodon/components/column_header/multicolumn_settings';
const messages = defineMessages({
title: { id: 'column.home', defaultMessage: 'Home' },
@@ -143,21 +147,40 @@ class HomeTimeline extends PureComponent {
return (
- }
- scrollTopOnClick
- >
-
-
+ {isRedesignEnabled() ? (
+
+ {multiColumn &&
+
+ }
+
+ }
+ />
+ ) : (
+ }
+ scrollTopOnClick
+ >
+
+
+ )}
{signedIn ? (
{
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index dc3cb77cfa3..f87e229f7ac 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -449,6 +449,7 @@
"collections.visibility_unlisted": "Unlisted",
"collections.visibility_unlisted_hint": "Visible to anyone with a link. Hidden from search results and recommendations.",
"column.about": "About",
+ "column.blocked_accounts": "Blocked Accounts",
"column.blocks": "Blocked users",
"column.bookmarks": "Bookmarks",
"column.community": "Local timeline",
@@ -462,6 +463,7 @@
"column.firehose_local": "Live feed for this server",
"column.firehose_singular": "Live feed",
"column.follow_requests": "Follow requests",
+ "column.has_unread_content": "(has unread content)",
"column.home": "Home",
"column.list_members": "Manage list members",
"column.lists": "Lists",
@@ -471,14 +473,19 @@
"column.pins": "Pinned posts",
"column.public": "Federated timeline",
"column.saved_posts": "Saved Posts",
+ "column.settings": "Column Settings",
"column.your_collections": "Your Collections",
"column_back_button.label": "Back",
"column_header.hide_settings": "Hide settings",
"column_header.moveLeft_settings": "Move column to the left",
"column_header.moveRight_settings": "Move column to the right",
+ "column_header.move_column_left": "Move column left",
+ "column_header.move_column_right": "Move column right",
"column_header.pin": "Pin",
+ "column_header.pin_column": "Pin column",
"column_header.show_settings": "Show settings",
"column_header.unpin": "Unpin",
+ "column_header.unpin_column": "Unpin column",
"column_search.cancel": "Cancel",
"combobox.close_results": "Close results",
"combobox.loading": "Loading",
@@ -853,6 +860,7 @@
"home.pending_critical_update.body": "Please update your Mastodon server as soon as possible!",
"home.pending_critical_update.link": "See updates",
"home.pending_critical_update.title": "Critical security update available!",
+ "home.settings": "Home Settings",
"home.show_announcements": "Show announcements",
"ignore_notifications_modal.bots_title": "Ignore notifications from bots?",
"ignore_notifications_modal.disclaimer": "Mastodon cannot inform users that you've ignored their notifications. Ignoring notifications will not stop the messages themselves from being sent.",
@@ -979,7 +987,7 @@
"navigation_bar.administration": "Administration",
"navigation_bar.advanced_interface": "Open in advanced web interface",
"navigation_bar.automated_deletion": "Automated post deletion",
- "navigation_bar.blocked_accounts": "Blocked accounts",
+ "navigation_bar.blocked_accounts": "Blocked Accounts",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.bookmarks": "Bookmarks",
"navigation_bar.collections": "Collections",
@@ -992,7 +1000,7 @@
"navigation_bar.followers_and_following": "Followers & Following",
"navigation_bar.follows_and_followers": "Follows and followers",
"navigation_bar.import_export": "Import and export",
- "navigation_bar.liked_posts": "Liked posts",
+ "navigation_bar.liked_posts": "Liked Posts",
"navigation_bar.lists": "Lists",
"navigation_bar.live_feed_local": "Live feed (local)",
"navigation_bar.live_feed_public": "Live feed (public)",
@@ -1403,6 +1411,7 @@
"subscribed_languages.lead": "Only posts in selected languages will appear on your home and list timelines after the change. Select none to receive posts in all languages.",
"subscribed_languages.save": "Save changes",
"subscribed_languages.target": "Change subscribed languages for {target}",
+ "tab_bar.messages": "Messages",
"tabs_bar.create_custom_feed": "Create feed",
"tabs_bar.custom_feeds": "Custom Feeds",
"tabs_bar.custom_feeds_empty": "You have no custom feeds yet.",
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 9de3cd386be..56918dbb05e 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -8044,9 +8044,12 @@ a.status-card {
display: flex;
flex-shrink: 0;
+ [data-redesign='true'] & {
+ border-inline: none;
+ }
+
@media screen and (max-width: ($no-gap-breakpoint - 1px)) {
- border-right: 0;
- border-left: 0;
+ border-inline: none;
}
button {