chore: remove zen and wider mode

Signed-off-by: Innei <tukon479@gmail.com>
This commit is contained in:
Innei 2025-09-12 20:47:07 +08:00
parent e9669c1f33
commit 6e028b3e68
No known key found for this signature in database
GPG Key ID: 0F62D33977F021F7
38 changed files with 43 additions and 309 deletions

View File

@ -2,9 +2,6 @@ import { createSettingAtom } from "@follow/atoms/helper/setting.js"
import { defaultUISettings } from "@follow/shared/settings/defaults"
import { enhancedUISettingKeys } from "@follow/shared/settings/enhanced"
import type { UISettings } from "@follow/shared/settings/interface"
import { jotaiStore } from "@follow/utils/jotai"
import { atom, useAtomValue } from "jotai"
import { useEventCallback } from "usehooks-ts"
import { getDefaultLanguage } from "~/lib/language"
import { DEFAULT_ACTION_ORDER } from "~/modules/customize-toolbar/constant"
@ -20,8 +17,6 @@ export const createDefaultUISettings = (): UISettings => ({
accentColor: "orange",
})
const zenModeAtom = atom(false)
const {
useSettingKey: useUISettingKeyInternal,
useSettingSelector: useUISettingSelectorInternal,
@ -64,27 +59,3 @@ export const uiServerSyncWhiteListKeys: (keyof UISettings)[] = [
"accentColor",
// "customCSS",
]
export const useIsZenMode = () => useAtomValue(zenModeAtom)
export const getIsZenMode = () => jotaiStore.get(zenModeAtom)
export const useSetZenMode = () => {
return setZenMode
}
export const setZenMode = (checked: boolean) => {
jotaiStore.set(zenModeAtom, checked)
}
export const useToggleZenMode = () => {
const setZenMode = useSetZenMode()
const isZenMode = useIsZenMode()
return useEventCallback(() => {
setZenMode(!isZenMode)
})
}
export const useRealInWideMode = () => {
const wideMode = useUISettingKey("wideMode")
const isZenMode = useIsZenMode()
return wideMode || isZenMode
}

View File

@ -2,8 +2,6 @@ import { atom } from "jotai"
import { createAtomHooks } from "~/lib/jotai"
import { getIsZenMode, useIsZenMode } from "./settings/ui"
const [
,
,
@ -14,13 +12,11 @@ const [
] = createAtomHooks(atom(true))
export const useSubscriptionColumnShow = () => {
const isZenMode = useIsZenMode()
return internal_useSubscriptionColumnShow() && !isZenMode
return internal_useSubscriptionColumnShow()
}
export const getSubscriptionColumnShow = () => {
const isZenMode = getIsZenMode()
return internal_getSubscriptionShow() && !isZenMode
return internal_getSubscriptionShow()
}
export { setTimelineColumnShow }

View File

@ -7,7 +7,6 @@ import * as HoverCard from "@radix-ui/react-hover-card"
import { AnimatePresence, m } from "motion/react"
import { memo, use, useCallback, useEffect, useImperativeHandle, useRef, useState } from "react"
import { useRealInWideMode } from "~/atoms/settings/ui"
import { COMMAND_ID } from "~/modules/command/commands/id"
import {
useWrappedElementPosition,
@ -60,7 +59,7 @@ export const Toc = ({
const renderContentElementPosition = useWrappedElementPosition()
const renderContentElementSize = useWrappedElementSize()
const entryContentInWideMode = useRealInWideMode()
const entryContentInWideMode = false
const shouldShowTitle = useViewport((v) => {
if (!entryContentInWideMode) return false
const { w } = v

View File

@ -8,7 +8,6 @@ import { useResizable } from "react-resizable-layout"
import { useParams } from "react-router"
import { AIChatPanelStyle, useAIChatPanelStyle } from "~/atoms/settings/ai"
import { useRealInWideMode } from "~/atoms/settings/ui"
import { useSubscriptionColumnShow, useSubscriptionColumnTempShow } from "~/atoms/sidebar"
import { m } from "~/components/common/Motion"
import { FixedModalCloseButton } from "~/components/ui/modal/components/close"
@ -26,7 +25,7 @@ const EntryLayoutContentLegacy = () => {
const { view } = useRouteParams()
const navigate = useNavigateEntry()
const settingWideMode = useRealInWideMode()
const settingWideMode = false
const realEntryId = entryId === ROUTE_ENTRY_PENDING ? "" : entryId
const showEntryContent = !(
@ -73,7 +72,7 @@ export const EntryLayoutContentWithAI = () => {
const { entryId, view } = useRouteParams()
const navigate = useNavigateEntry()
const settingWideMode = useRealInWideMode()
const settingWideMode = false
const realEntryId = entryId === ROUTE_ENTRY_PENDING ? "" : entryId
const wideMode = !!(settingWideMode && realEntryId)
@ -101,7 +100,7 @@ export const EntryLayoutContent = () => {
return <EntryLayoutContentLegacy />
}
const Grid = ({ entryId }) => {
const settingWideMode = useRealInWideMode()
const settingWideMode = false
const wideMode = !!(settingWideMode && entryId)
const feedColumnTempShow = useSubscriptionColumnTempShow()

View File

@ -14,7 +14,7 @@ import { useEffect, useRef, useState } from "react"
import { Trans } from "react-i18next"
import { useResizable } from "react-resizable-layout"
import { getIsZenMode, getUISettings, setUISetting } from "~/atoms/settings/ui"
import { getUISettings, setUISetting } from "~/atoms/settings/ui"
import {
getSubscriptionColumnTempShow,
setSubscriptionColumnTempShow,
@ -117,7 +117,7 @@ const FeedResponsiveResizerContainer = ({
const uiSettings = getUISettings()
const feedColumnTempShow = getSubscriptionColumnTempShow()
const isInEntryContentWideMode = uiSettings.wideMode || getIsZenMode()
const isInEntryContentWideMode = false
const feedWidth = uiSettings.feedColWidth
if (mouseY < 200 && isInEntryContentWideMode && mouseX < feedWidth) return
const threshold = feedColumnTempShow ? uiSettings.feedColWidth : 100

View File

@ -6,12 +6,7 @@ import { useMemo, useRef } from "react"
import { useResizable } from "react-resizable-layout"
import { Outlet } from "react-router"
import {
getUISettings,
setUISetting,
useRealInWideMode,
useUISettingKey,
} from "~/atoms/settings/ui"
import { getUISettings, setUISetting, useUISettingKey } from "~/atoms/settings/ui"
import { useRouteParams } from "~/hooks/biz/useRouteParams"
import { EntryColumn } from "~/modules/entry-column"
import { AppLayoutGridContainerProvider } from "~/providers/app-grid-layout-container-provider"
@ -21,11 +16,9 @@ export function TimelineColumnLayout() {
// Memo this initial value to avoid re-render
const settingWideMode = useRealInWideMode()
const entryColWidth = useMemo(() => getUISettings().entryColWidth, [])
const { view } = useRouteParams()
const inWideMode =
(view ? views.find((v) => v.view === view)?.wideMode : false) || settingWideMode
const inWideMode = (view ? views.find((v) => v.view === view)?.wideMode : false) || false
const feedColumnWidth = useUISettingKey("feedColWidth")
const startDragPosition = useRef(0)
const { position, separatorProps, isDragging, separatorCursor, setPosition } = useResizable({

View File

@ -57,8 +57,6 @@ export const COMMAND_ID = {
focusToTimeline: "layout:focus-to-timeline",
focusToSubscription: "layout:focus-to-subscription",
focusToEntryRender: "layout:focus-to-entry-render",
toggleWideMode: "layout:toggle-wide-mode",
toggleZenMode: "layout:toggle-zen-mode",
},
timeline: {
switchToNext: "timeline:switch-to-next",

View File

@ -1,7 +1,6 @@
import { EventBus } from "@follow/utils/event-bus"
import { useTranslation } from "react-i18next"
import { getIsZenMode, getUISettings, setUISetting, setZenMode } from "~/atoms/settings/ui"
import { setTimelineColumnShow } from "~/atoms/sidebar"
import { useRegisterCommandEffect } from "../hooks/use-register-command"
@ -58,29 +57,6 @@ export const useRegisterLayoutCommands = () => {
EventBus.dispatch(COMMAND_ID.layout.focusToEntryRender, { highlightBoundary: true })
},
},
{
id: COMMAND_ID.layout.toggleWideMode,
label: {
title: t("command.layout.toggle_wide_mode.title"),
description: t("command.layout.toggle_wide_mode.description"),
},
category,
run: () => {
const { wideMode } = getUISettings()
setUISetting("wideMode", !wideMode)
},
},
{
id: COMMAND_ID.layout.toggleZenMode,
label: {
title: t("command.layout.toggle_zen_mode.title"),
description: t("command.layout.toggle_zen_mode.description"),
},
category,
run: () => {
setZenMode(!getIsZenMode())
},
},
])
}
@ -103,20 +79,8 @@ export type FocusToEntryRenderCommand = Command<{
fn: () => void
}>
export type ToggleWideModeCommand = Command<{
id: typeof COMMAND_ID.layout.toggleWideMode
fn: () => void
}>
export type ToggleZenModeCommand = Command<{
id: typeof COMMAND_ID.layout.toggleZenMode
fn: () => void
}>
export type LayoutCommand =
| ToggleTimelineColumnCommand
| FocusToTimelineCommand
| FocusToSubscriptionCommand
| FocusToEntryRenderCommand
| ToggleWideModeCommand
| ToggleZenModeCommand

View File

@ -13,8 +13,6 @@ import { useCommandHotkey } from "./use-register-hotkey"
export const defaultCommandShortcuts = {
// Layout commands
[COMMAND_ID.layout.toggleSubscriptionColumn]: transformShortcut("$mod+B"),
[COMMAND_ID.layout.toggleWideMode]: transformShortcut("$mod+["),
[COMMAND_ID.layout.toggleZenMode]: transformShortcut("Shift+$mod+Z"),
// Subscription commands
[COMMAND_ID.subscription.markAllAsRead]: transformShortcut("Shift+$mod+A"),
@ -83,8 +81,6 @@ export const useCommandShortcutItems = () => {
}
export const allowCustomizeCommands = new Set([
COMMAND_ID.layout.toggleSubscriptionColumn,
COMMAND_ID.layout.toggleWideMode,
COMMAND_ID.layout.toggleZenMode,
COMMAND_ID.subscription.markAllAsRead,

View File

@ -2,7 +2,6 @@ import { ScrollArea } from "@follow/components/ui/scroll-area/ScrollArea.js"
import { views } from "@follow/constants"
import { cn } from "@follow/utils/utils"
import { useIsZenMode } from "~/atoms/settings/ui"
import { useRouteParamsSelector } from "~/hooks/biz/useRouteParams"
import type { EntryColumnWrapperProps } from "./types"
@ -13,8 +12,6 @@ const animationStyles = tw`duration-300 ease-in-out animate-in fade-in slide-in-
export const EntryColumnWrapper = ({ ref, children, onScroll }: EntryColumnWrapperProps) => {
const view = useRouteParamsSelector((state) => state.view)
const isZenMode = useIsZenMode()
return (
<div className={cn(styles, animationStyles)}>
<ScrollArea
@ -24,7 +21,7 @@ export const EntryColumnWrapper = ({ ref, children, onScroll }: EntryColumnWrapp
)}
mask={false}
ref={ref}
rootClassName={cn("h-full", isZenMode ? "max-w-[80ch] mx-auto" : "")}
rootClassName="h-full"
viewportClassName={"[&>div]:grow flex"}
onScroll={onScroll}
>

View File

@ -1,48 +1,3 @@
import { MdiMeditation } from "@follow/components/icons/Meditation.js"
import { ActionButton } from "@follow/components/ui/button/index.js"
import { tracker } from "@follow/tracker"
import { cn } from "@follow/utils/utils"
import { useTranslation } from "react-i18next"
import { setUISetting, useIsZenMode, useRealInWideMode, useSetZenMode } from "~/atoms/settings/ui"
import { COMMAND_ID } from "~/modules/command/commands/id"
import { useCommandShortcuts } from "~/modules/command/hooks/use-command-binding"
export const WideModeButton = () => {
const isWideMode = useRealInWideMode()
const isZenMode = useIsZenMode()
const { t } = useTranslation()
const setIsZenMode = useSetZenMode()
const shortcuts = useCommandShortcuts()
return (
<ActionButton
shortcut={shortcuts[COMMAND_ID.layout.toggleWideMode]}
onClick={() => {
if (isZenMode) {
setIsZenMode(false)
} else {
setUISetting("wideMode", !isWideMode)
// TODO: Remove this after useMeasure can get bounds in time
window.dispatchEvent(new Event("resize"))
}
tracker.wideMode({ mode: isWideMode ? "wide" : "normal" })
}}
tooltip={
isZenMode
? t("zen.exit")
: !isWideMode
? t("entry_list_header.switch_to_widemode")
: t("entry_list_header.switch_to_normalmode")
}
>
{isZenMode ? (
<MdiMeditation />
) : (
<i
className={cn(isWideMode ? "i-mgc-align-justify-cute-re" : "i-mgc-align-left-cute-re")}
/>
)}
</ActionButton>
)
return null
}

View File

@ -11,7 +11,7 @@ import { titleCase } from "title-case"
import { AudioPlayer, useAudioPlayerAtomSelector } from "~/atoms/player"
import { useGeneralSettingKey } from "~/atoms/settings/general"
import { useRealInWideMode, useUISettingKey } from "~/atoms/settings/ui"
import { useUISettingKey } from "~/atoms/settings/ui"
import { RelativeTime } from "~/components/ui/datetime"
import { Media } from "~/components/ui/media/Media"
import { FEED_COLLECTION_LIST } from "~/constants"
@ -86,7 +86,7 @@ export function ListItem({
const inbox = useInboxById(entry?.inboxId)
const settingWideMode = useRealInWideMode()
const settingWideMode = false
const thumbnailRatio = useUISettingKey("thumbnailRatio")
const rid = `list-item-${entryId}`

View File

@ -4,23 +4,18 @@ import { cn } from "@follow/utils/utils"
import type { TargetAndTransition } from "motion/react"
import { m } from "motion/react"
import { useIsZenMode } from "~/atoms/settings/ui"
import { useEntryIsRead } from "~/hooks/biz/useAsRead"
import { useNavigateEntry } from "~/hooks/biz/useNavigateEntry"
import { useRouteParamsSelector } from "~/hooks/biz/useRouteParams"
import { useGetEntryIdInRange } from "~/modules/entry-column/hooks/useEntryIdListSnap"
export const EntryTimelineSidebar = ({ entryId }: { entryId: string }) => {
const isZenMode = useIsZenMode()
if (!isZenMode) {
return null
}
return <EntryTimeline entryId={entryId} />
}
export const EntryTimeline = ({ entryId, className }: { entryId: string; className?: string }) => {
export const EntryTimelineSidebar = ({
entryId,
className,
}: {
entryId: string
className?: string
}) => {
const entryIds = useGetEntryIdInRange(entryId, [5, 5])
return (

View File

@ -19,7 +19,6 @@ import * as React from "react"
import { memo, useEffect, useRef, useState } from "react"
import { useEntryIsInReadability } from "~/atoms/readability"
import { useIsZenMode } from "~/atoms/settings/ui"
import { Focusable } from "~/components/common/Focusable"
import { m } from "~/components/common/Motion"
import { HotkeyScope } from "~/constants"
@ -77,8 +76,6 @@ const EntryContentImpl: Component<EntryContentProps> = ({
const [scrollerRef, setScrollerRef] = useState<HTMLDivElement | null>(null)
const safeUrl = useFeedSafeUrl(entryId)
const isZenMode = useIsZenMode()
const [panelPortalElement, setPanelPortalElement] = useState<HTMLDivElement | null>(null)
const scrollAnimationRef = useRef<JSAnimation<any> | null>(null)
@ -152,7 +149,7 @@ const EntryContentImpl: Component<EntryContentProps> = ({
<EntryScrollArea scrollerRef={setScrollerRef}>
{/* <EntryNavigationHandler entryId={entryId} /> */}
{/* Indicator for the entry */}
{!isZenMode && isInHasTimelineView && (
{isInHasTimelineView && (
<>
<div className="absolute inset-y-0 left-0 z-[9] flex w-12 items-center justify-center opacity-40 duration-200 hover:opacity-100">
<MotionButtonBase

View File

@ -21,7 +21,7 @@ import * as React from "react"
import { memo, useEffect, useMemo, useRef, useState } from "react"
import { useEntryIsInReadability } from "~/atoms/readability"
import { useIsZenMode, useUISettingKey } from "~/atoms/settings/ui"
import { useUISettingKey } from "~/atoms/settings/ui"
import { Focusable, FocusablePresets } from "~/components/common/Focusable"
import { ShadowDOM } from "~/components/common/ShadowDOM"
import type { TocRef } from "~/components/ui/markdown/components/Toc"
@ -42,7 +42,6 @@ import { useEntryContent, useEntryMediaInfo } from "../../hooks"
import { useEntryNavigationHints } from "../../hooks/useEntryNavigationHints"
import { EntryHeader } from "../entry-header"
import { EntryAttachments } from "../EntryAttachments"
import { EntryTimelineSidebar } from "../EntryTimelineSidebar"
import { EntryTitle } from "../EntryTitle"
import { SourceContentPanel } from "../SourceContentView"
import { SupportCreator } from "../SupportCreator"
@ -93,7 +92,6 @@ const EntryContentImpl: Component<EntryContentProps> = ({
const customCSS = useUISettingKey("customCSS")
const isInPeekModal = useInPeekModal()
const isZenMode = useIsZenMode()
const [panelPortalElement, setPanelPortalElement] = useState<HTMLDivElement | null>(null)
@ -141,7 +139,7 @@ const EntryContentImpl: Component<EntryContentProps> = ({
scrollerRef={scrollerRef}
/>
</RootPortal>
<EntryTimelineSidebar entryId={entryId} />
<EntryScrollArea className={className} scrollerRef={scrollerRef}>
<EntryNavigationHandler entryId={entryId} />
{/* Indicator for the entry */}
@ -151,7 +149,7 @@ const EntryContentImpl: Component<EntryContentProps> = ({
transition={Spring.presets.bouncy}
className="select-text"
>
{!isZenMode && isInHasTimelineView && !isInPeekModal && (
{isInHasTimelineView && !isInPeekModal && (
<>
<div className="absolute inset-y-0 left-0 flex w-12 items-center justify-center opacity-0 duration-200 hover:opacity-100">
<MotionButtonBase

View File

@ -16,8 +16,6 @@ import { bundledThemesInfo } from "shiki/themes"
import {
getUISettings,
setUISetting,
useIsZenMode,
useToggleZenMode,
useUISettingKey,
useUISettingSelector,
useUISettingValue,
@ -27,12 +25,7 @@ import { useSetTheme } from "~/hooks/common"
import { useShowCustomizeToolbarModal } from "~/modules/customize-toolbar/modal"
import { SETTING_MODAL_ID } from "../constants"
import {
SettingActionItem,
SettingDescription,
SettingSwitch,
SettingTabbedSegment,
} from "../control"
import { SettingActionItem, SettingDescription, SettingTabbedSegment } from "../control"
import { createDefineSettingItem } from "../helper/builder"
import { createSettingBuilder } from "../helper/setting-builder"
import {
@ -85,8 +78,6 @@ export const SettingAppearance = () => {
value: t("appearance.reading_view.title"),
},
!isMobile && ZenMode,
{
type: "title",
value: t("appearance.interface_window.title"),
@ -317,23 +308,6 @@ export const AppThemeSegment = () => {
)
}
const ZenMode = () => {
const { t } = useTranslation("settings")
const isZenMode = useIsZenMode()
const toggleZenMode = useToggleZenMode()
return (
<SettingItemGroup>
<SettingSwitch
checked={isZenMode}
className="mt-4"
onCheckedChange={toggleZenMode}
label={t("appearance.zen_mode.label")}
/>
<SettingDescription>{t("appearance.zen_mode.description_simple")}</SettingDescription>
</SettingItemGroup>
)
}
const ThumbnailRatio = () => {
const { t } = useTranslation("settings")

View File

@ -1,6 +1,5 @@
import { Folo } from "@follow/components/icons/folo.js"
import { Logo } from "@follow/components/icons/logo.jsx"
import { MdiMeditation } from "@follow/components/icons/Meditation.js"
import { ActionButton } from "@follow/components/ui/button/index.js"
import { stopPropagation } from "@follow/utils/dom"
import { cn } from "@follow/utils/utils"
@ -11,7 +10,6 @@ import { useTranslation } from "react-i18next"
import { Link } from "react-router"
import { toast } from "sonner"
import { useIsZenMode, useSetZenMode } from "~/atoms/settings/ui"
import { setTimelineColumnShow, useSubscriptionColumnShow } from "~/atoms/sidebar"
import {
DropdownMenu,
@ -71,8 +69,6 @@ const LayoutActionButton = () => {
const feedColumnShow = useSubscriptionColumnShow()
const [animation, setAnimation] = useState({ width: !feedColumnShow ? "auto" : 0 })
const isZenMode = useIsZenMode()
const setIsZenMode = useSetZenMode()
useEffect(() => {
setAnimation({ width: !feedColumnShow ? "auto" : 0 })
}, [feedColumnShow])
@ -84,27 +80,19 @@ const LayoutActionButton = () => {
return (
<m.div initial={animation} animate={animation} className="overflow-hidden">
<ActionButton
tooltip={isZenMode ? t("zen.exit") : t("app.toggle_sidebar")}
tooltip={t("app.toggle_sidebar")}
icon={
isZenMode ? (
<MdiMeditation />
) : (
<i
className={cn(
!feedColumnShow
? "i-mgc-layout-leftbar-open-cute-re"
: "i-mgc-layout-leftbar-close-cute-re",
"text-text-secondary",
)}
/>
)
<i
className={cn(
!feedColumnShow
? "i-mgc-layout-leftbar-open-cute-re"
: "i-mgc-layout-leftbar-close-cute-re",
"text-text-secondary",
)}
/>
}
onClick={() => {
if (isZenMode) {
setIsZenMode(false)
} else {
setTimelineColumnShow(!feedColumnShow)
}
setTimelineColumnShow(!feedColumnShow)
}}
/>
</m.div>

View File

@ -1,4 +1,3 @@
import { MdiMeditation } from "@follow/components/icons/Meditation.js"
import { ActionButton } from "@follow/components/ui/button/index.js"
import { RSSHubLogo } from "@follow/components/ui/platform-icon/icons.js"
import { RootPortal } from "@follow/components/ui/portal/index.js"
@ -14,7 +13,6 @@ import { useTranslation } from "react-i18next"
import { useNavigate } from "react-router"
import { useIsInMASReview, useServerConfigs } from "~/atoms/server-configs"
import { useIsZenMode, useSetZenMode } from "~/atoms/settings/ui"
import {
DropdownMenu,
DropdownMenuContent,
@ -30,8 +28,6 @@ import { useSettingModal } from "~/modules/settings/modal/use-setting-modal-hack
import { signOut, useSession } from "~/queries/auth"
import { useActivationModal } from "../activation"
import { COMMAND_ID } from "../command/commands/id"
import { useCommandShortcuts } from "../command/hooks/use-command-binding"
import type { LoginProps } from "./LoginButton"
import { LoginButton } from "./LoginButton"
import { UserAvatar } from "./UserAvatar"
@ -56,12 +52,8 @@ export const ProfileButton: FC<ProfileButtonProps> = memo((props) => {
const role = useUserRole()
const presentActivationModal = useActivationModal()
const zenModeSetting = useIsZenMode()
const setZenMode = useSetZenMode()
const isInMASReview = useIsInMASReview()
const shortcuts = useCommandShortcuts()
if (status === "unauthenticated") {
return <LoginButton {...props} />
}
@ -162,18 +154,6 @@ export const ProfileButton: FC<ProfileButtonProps> = memo((props) => {
<DropdownMenuSeparator />
{!zenModeSetting && (
<DropdownMenuItem
className="pl-3"
onClick={() => {
setZenMode(true)
}}
icon={<MdiMeditation className="size-4" />}
shortcut={shortcuts[COMMAND_ID.layout.toggleZenMode]}
>
{t("user_button.zen_mode")}
</DropdownMenuItem>
)}
<DropdownMenuItem
className="pl-3"
onClick={() => {

View File

@ -9,7 +9,7 @@ import { toast } from "sonner"
import { setWindowState } from "~/atoms/app"
import { getGeneralSettings } from "~/atoms/settings/general"
import { getUISettings, useToggleZenMode } from "~/atoms/settings/ui"
import { getUISettings } from "~/atoms/settings/ui"
import { setUpdaterStatus, useUpdaterStatus } from "~/atoms/updater"
import { useDialog, useModalStack } from "~/components/ui/modal/stacked/hooks"
import { useDiscoverRSSHubRouteModal } from "~/hooks/biz/useDiscoverRSSHubRoute"
@ -118,13 +118,6 @@ export const ExtensionExposeProvider = () => {
})
}, [follow, present, presentDiscoverRSSHubRoute, presentUserProfile, t])
const toggleZenMode = useToggleZenMode()
useEffect(() => {
registerGlobalContext({
zenMode: toggleZenMode,
})
}, [toggleZenMode])
const dialog = useDialog()
useEffect(() => {
registerGlobalContext({

View File

@ -72,11 +72,6 @@ export const GlobalHotkeysProvider = () => {
preHandler(e)
highlightElement(document.activeElement as HTMLElement)
},
[commandShortcuts[COMMAND_ID.layout.toggleZenMode]]: (e) => {
if (!isNormalLayer) return
preHandler(e)
runCommandFn(COMMAND_ID.layout.toggleZenMode, [])()
},
})
}, [commandShortcuts, runCommandFn, isNormalLayer])

View File

@ -8,7 +8,7 @@ import i18next from "i18next"
import { useEffect, useInsertionEffect, useLayoutEffect, useRef } from "react"
import { useGeneralSettingKey } from "~/atoms/settings/general"
import { useIsZenMode, useUISettingValue } from "~/atoms/settings/ui"
import { useUISettingValue } from "~/atoms/settings/ui"
import { useSubscriptionColumnShow } from "~/atoms/sidebar"
import { I18N_LOCALE_KEY } from "~/constants"
import { useReduceMotion } from "~/hooks/biz/useReduceMotion"
@ -83,12 +83,10 @@ const useUISettingSync = () => {
}
const useDataAttrSync = () => {
const isZenMode = useIsZenMode()
const columnShow = useSubscriptionColumnShow()
useEffect(() => {
document.documentElement.dataset.zenMode = isZenMode.toString()
document.documentElement.dataset.leftColumnHidden = (!columnShow).toString()
}, [isZenMode, columnShow])
}, [columnShow])
}
const useUXSettingSync = () => {

View File

@ -104,16 +104,12 @@ export default extendConfig({
addVariant("group-motion-reduce", ':merge(.group)[data-motion-reduce="true"] &')
addVariant("peer-motion-reduce", ':merge(.peer)[data-motion-reduce="true"] ~ &')
addVariant("zen-mode-macos", "html[data-zen-mode='true'][data-os='macOS'] &")
addVariant("zen-mode-windows", "html[data-zen-mode='true'][data-os='Windows'] &")
addVariant("left-column-hidden", "html[data-left-column-hidden='true'] &")
addVariant(
"macos-left-column-hidden",
"html[data-os='macOS'][data-left-column-hidden='true'] &",
)
addVariant("zen-mode", "html[data-zen-mode='true'] &")
addVariant("macos", "html[data-os='macOS'] &")
addVariant("windows", "html[data-os='Windows'] &")
}),

View File

@ -195,8 +195,6 @@
"entry_list_header.refresh": "Refresh",
"entry_list_header.show_all": "Show all",
"entry_list_header.show_unread_only": "Show unread Only",
"entry_list_header.switch_to_normalmode": "Switch to Double Column Mode",
"entry_list_header.switch_to_widemode": "Switch to Wide Mode",
"entry_list_header.unread": "unread",
"feed.actions.follow": "Follow",
"feed.actions.followed": "Followed",
@ -448,7 +446,6 @@
"user_button.power": "Power",
"user_button.preferences": "Preferences",
"user_button.profile": "Profile",
"user_button.zen_mode": "Zen Mode",
"user_profile.about": "About",
"user_profile.close": "Close",
"user_profile.created_lists": "Created Lists",
@ -493,6 +490,5 @@
"words.user": "User",
"words.view": "View",
"words.which.all": "all",
"words.zero_items": "Zero items",
"zen.exit": "Exit Zen Mode"
"words.zero_items": "Zero items"
}

View File

@ -193,8 +193,6 @@
"entry_list_header.refresh": "更新",
"entry_list_header.show_all": "すべて表示",
"entry_list_header.show_unread_only": "未読のみ表示",
"entry_list_header.switch_to_normalmode": "2 列モードに切り替え",
"entry_list_header.switch_to_widemode": "ワイドモードに切り替え",
"entry_list_header.unread": "未読",
"feed.actions.follow": "フォロー",
"feed.actions.followed": "フォロー済み",
@ -443,7 +441,6 @@
"user_button.power": "Power",
"user_button.preferences": "設定",
"user_button.profile": "プロフィール",
"user_button.zen_mode": "Zen モード",
"user_profile.about": "About",
"user_profile.close": "閉じる",
"user_profile.created_lists": "作成したリスト",
@ -488,6 +485,5 @@
"words.user": "ユーザー",
"words.view": "表示",
"words.which.all": "すべて",
"words.zero_items": "アイテムがありません",
"zen.exit": "Zen モードを終了"
"words.zero_items": "アイテムがありません"
}

View File

@ -193,8 +193,6 @@
"entry_list_header.refresh": "刷新",
"entry_list_header.show_all": "显示全部",
"entry_list_header.show_unread_only": "仅显示未读",
"entry_list_header.switch_to_normalmode": "切换到双列模式",
"entry_list_header.switch_to_widemode": "切换到宽屏模式",
"entry_list_header.unread": "未读",
"feed.actions.follow": "订阅",
"feed.actions.followed": "已订阅",
@ -445,7 +443,6 @@
"user_button.power": "Power",
"user_button.preferences": "设置",
"user_button.profile": "个人资料",
"user_button.zen_mode": "禅定模式",
"user_profile.about": "关于",
"user_profile.close": "关闭",
"user_profile.created_lists": "创建的列表",
@ -490,6 +487,5 @@
"words.user": "用户",
"words.view": "视图",
"words.which.all": "全部",
"words.zero_items": "没有内容",
"zen.exit": "退出禅定模式"
"words.zero_items": "没有内容"
}

View File

@ -178,8 +178,6 @@
"entry_list_header.refresh": "重新整理",
"entry_list_header.show_all": "顯示全部",
"entry_list_header.show_unread_only": "僅顯示未讀",
"entry_list_header.switch_to_normalmode": "切換到正常模式",
"entry_list_header.switch_to_widemode": "切換到寬螢幕模式",
"entry_list_header.unread": "未讀",
"feed.actions.follow": "跟隨",
"feed.actions.followed": "已跟隨",
@ -409,7 +407,6 @@
"user_button.power": "Power",
"user_button.preferences": "偏好設定",
"user_button.profile": "個人檔案",
"user_button.zen_mode": "禪定模式",
"user_profile.close": "關閉",
"user_profile.edit": "編輯",
"user_profile.loading": "載入中",
@ -451,6 +448,5 @@
"words.user": "使用者",
"words.view": "視圖",
"words.which.all": "全部",
"words.zero_items": "沒有內容",
"zen.exit": "退出禪定模式"
"words.zero_items": "沒有內容"
}

View File

@ -68,7 +68,6 @@
"menu.unread": "Unread",
"menu.view": "View",
"menu.window": "Window",
"menu.zenMode": "Zen Mode",
"menu.zoom": "Zoom",
"menu.zoomIn": "Zoom In",
"menu.zoomOut": "Zoom Out"

View File

@ -68,7 +68,6 @@
"menu.unread": "未読",
"menu.view": "表示",
"menu.window": "ウィンドウ",
"menu.zenMode": "Zen モード",
"menu.zoom": "ズーム",
"menu.zoomIn": "拡大",
"menu.zoomOut": "縮小"

View File

@ -68,7 +68,6 @@
"menu.unread": "未读",
"menu.view": "视图",
"menu.window": "窗口",
"menu.zenMode": "禅定模式",
"menu.zoom": "缩放",
"menu.zoomIn": "放大",
"menu.zoomOut": "缩小"

View File

@ -68,7 +68,6 @@
"menu.unread": "未讀",
"menu.view": "檢視",
"menu.window": "視窗",
"menu.zenMode": "禪定模式",
"menu.zoom": "縮放",
"menu.zoomIn": "放大",
"menu.zoomOut": "縮小"

View File

@ -190,9 +190,6 @@
"appearance.unread_count.view_and_subscription.label": "Show in View and Subscription",
"appearance.use_pointer_cursor.description": "When the mouse hovers over any interactive element, the cursor appears as a hand.",
"appearance.use_pointer_cursor.label": "Use Hand Cursor",
"appearance.zen_mode.description": "Zen mode is an undisturbed reading mode that allows you to focus on the content without any interference. Enabling Zen mode will hide the sidebar.",
"appearance.zen_mode.description_simple": "Undisturbed reading mode (hides sidebar)",
"appearance.zen_mode.label": "Zen Mode",
"common.give_star": "<HeartIcon />Love our product? <Link>Give us a star on GitHub!</Link>",
"customizeToolbar.more_actions.description": "Will be shown in the dropdown menu",
"customizeToolbar.more_actions.title": "More Actions",

View File

@ -190,9 +190,6 @@
"appearance.unread_count.view_and_subscription.label": "サイドバーに表示",
"appearance.use_pointer_cursor.description": "マウスがインタラクティブな要素の上にあるとき、カーソルは手の形になります。",
"appearance.use_pointer_cursor.label": "手の形のカーソルを使用する",
"appearance.zen_mode.description": "Zen モードは、邪魔されることなくコンテンツに集中できる読書モードです。Zenモードを有効にすると、サイドバーが非表示になります。",
"appearance.zen_mode.description_simple": "邪魔されない読書モード(サイドバーを非表示)",
"appearance.zen_mode.label": "Zen モード",
"common.give_star": "<HeartIcon />私たちの製品が好きですか?<Link>GitHub で Star を付けましょう!</Link>",
"customizeToolbar.more_actions.description": "ドロップダウンメニューに表示されます",
"customizeToolbar.more_actions.title": "その他のアクション",

View File

@ -190,9 +190,6 @@
"appearance.unread_count.view_and_subscription.label": "在视图和订阅源上显示",
"appearance.use_pointer_cursor.description": "当鼠标悬停在任何可交互元素上时,光标会显示为手型光标。",
"appearance.use_pointer_cursor.label": "使用手型光标",
"appearance.zen_mode.description": "禅定模式是一种不受干扰的阅读模式,让你能够专注于内容而不受任何干扰。启用禅定模式将会隐藏侧边栏。",
"appearance.zen_mode.description_simple": "不受干扰的阅读模式(隐藏侧边栏)",
"appearance.zen_mode.label": "禅定模式",
"common.give_star": "<HeartIcon />喜欢我们的产品吗? <Link>在 GitHub 上给我们「Star」吧</Link>",
"customizeToolbar.more_actions.description": "将显示在下拉菜单中",
"customizeToolbar.more_actions.title": "更多操作",

View File

@ -172,9 +172,6 @@
"appearance.unread_count.view_and_subscription.label": "在側邊欄中顯示",
"appearance.use_pointer_cursor.description": "當滑鼠懸停在任何互動元素上時,游標會顯示為手型游標。",
"appearance.use_pointer_cursor.label": "使用手型游標",
"appearance.zen_mode.description": "禪定模式是一種防干擾的閱讀模式,你可以專注於內容而不受其他干擾。啟用禪定模式將會隱藏側邊欄。",
"appearance.zen_mode.description_simple": "防干擾的閱讀模式(隱藏側邊欄)",
"appearance.zen_mode.label": "禪定模式",
"common.give_star": "<HeartIcon />喜歡我們的產品嗎? <Link>在 GitHub 上給我們 Star 吧!</Link>",
"customizeToolbar.more_actions.description": "將顯示在下拉選單中",
"customizeToolbar.more_actions.title": "更多操作",

View File

@ -31,10 +31,6 @@
"command.layout.focus_to_timeline.title": "Focus to Timeline",
"command.layout.toggle_subscription_column.description": "Show/Hide the Subscription column in the layout",
"command.layout.toggle_subscription_column.title": "Toggle Subscription Column",
"command.layout.toggle_wide_mode.description": "Enable/Disable the wide mode in the layout",
"command.layout.toggle_wide_mode.title": "Toggle Wide Mode",
"command.layout.toggle_zen_mode.description": "Enable/Disable the zen mode in the layout",
"command.layout.toggle_zen_mode.title": "Toggle Zen Mode",
"command.subscription.mark_all_as_read.title": "Mark All as Read",
"command.subscription.next_subscription.description": "Next Subscription",
"command.subscription.next_subscription.title": "Next Subscription",

View File

@ -29,10 +29,6 @@
"command.layout.focus_to_timeline.title": "タイムラインにフォーカス",
"command.layout.toggle_subscription_column.description": "レイアウト内のサブスクリプション列を表示/非表示にします",
"command.layout.toggle_subscription_column.title": "サブスクリプション列の切り替え",
"command.layout.toggle_wide_mode.description": "レイアウト内のワイドモードを有効/無効にします",
"command.layout.toggle_wide_mode.title": "ワイドモードの切り替え",
"command.layout.toggle_zen_mode.description": "レイアウト内の禅モードを有効/無効にします",
"command.layout.toggle_zen_mode.title": "禅モードの切り替え",
"command.subscription.mark_all_as_read.title": "すべてを既読にマーク",
"command.subscription.next_subscription.description": "次のサブスクリプション",
"command.subscription.next_subscription.title": "次のサブスクリプション",

View File

@ -27,10 +27,6 @@
"command.layout.focus_to_timeline.title": "聚焦到时间线",
"command.layout.toggle_subscription_column.description": "在布局中显示或隐藏订阅栏。",
"command.layout.toggle_subscription_column.title": "切换订阅栏",
"command.layout.toggle_wide_mode.description": "在布局中启用或停用宽屏模式。",
"command.layout.toggle_wide_mode.title": "切换宽屏模式",
"command.layout.toggle_zen_mode.description": "在布局中启用或停用禅定模式。",
"command.layout.toggle_zen_mode.title": "切换禅定模式",
"command.subscription.mark_all_as_read.title": "全部标记为已读",
"command.subscription.next_subscription.description": "切换到下一个订阅。",
"command.subscription.next_subscription.title": "下一个订阅",

View File

@ -27,10 +27,6 @@
"command.layout.focus_to_timeline.title": "聚焦到時間軸",
"command.layout.toggle_subscription_column.description": "在版面配置中顯示或隱藏訂閱欄。",
"command.layout.toggle_subscription_column.title": "切換訂閱欄",
"command.layout.toggle_wide_mode.description": "在版面配置中啟用或停用寬螢幕模式。",
"command.layout.toggle_wide_mode.title": "切換寬螢幕模式",
"command.layout.toggle_zen_mode.description": "在版面配置中啟用或停用禪定模式。",
"command.layout.toggle_zen_mode.title": "切換禪定模式",
"command.subscription.mark_all_as_read.title": "全部標記為已讀",
"command.subscription.next_subscription.description": "切換到下一個訂閱。",
"command.subscription.next_subscription.title": "下一個訂閱",