Skip to content

Commit f36cfd3

Browse files
committed
fix: safari entry colmun styles
Signed-off-by: Innei <i@innei.in>
1 parent 4bfa5f0 commit f36cfd3

File tree

8 files changed

+50
-35
lines changed

8 files changed

+50
-35
lines changed

src/renderer/src/atoms/settings/ui.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { createSettingAtom } from "./helper"
44

55
const createDefaultSettings = (): UISettings => ({
66
// Sidebar
7-
entryColWidth: 340,
7+
entryColWidth: 356,
88
feedColWidth: 256,
99

1010
opaqueSidebar: false,

src/renderer/src/lib/utils.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ export const getOS = memoize((): OS => {
6262
return os as OS
6363
})
6464

65+
export const isSafari = memoize(() => {
66+
if (ELECTRON) return false
67+
const ua = window.navigator.userAgent
68+
return ua.includes("Safari") && !ua.includes("Chrome")
69+
})
70+
6571
// eslint-disable-next-line no-control-regex
6672
export const isASCII = (str) => /^[\u0000-\u007F]*$/.test(str)
6773

src/renderer/src/modules/app/EnvironmentIndicator.tsx

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,17 @@ import {
66
TooltipTrigger,
77
} from "@renderer/components/ui/tooltip"
88

9-
export const EnvironmentIndicator = () => {
10-
const show = !import.meta.env.PROD || globalThis["__DEBUG_PROXY__"]
11-
if (!show) return null
12-
return (
13-
<Tooltip>
14-
<TooltipTrigger asChild>
15-
<div className="fixed bottom-0 left-0 rounded-tr bg-theme-accent px-1 py-0.5 text-xs text-white">
16-
{import.meta.env.MODE}
17-
</div>
18-
</TooltipTrigger>
19-
<TooltipPortal>
20-
<TooltipContent className="max-w-max break-all" side="top">
21-
<pre>{JSON.stringify({ ...env }, null, 2)}</pre>
22-
</TooltipContent>
23-
</TooltipPortal>
24-
</Tooltip>
25-
)
26-
}
9+
export const EnvironmentIndicator = () => (
10+
<Tooltip>
11+
<TooltipTrigger asChild>
12+
<div className="fixed bottom-0 left-0 rounded-tr bg-theme-accent px-1 py-0.5 text-xs text-white">
13+
{import.meta.env.MODE}
14+
</div>
15+
</TooltipTrigger>
16+
<TooltipPortal>
17+
<TooltipContent className="max-w-max break-all" side="top">
18+
<pre>{JSON.stringify({ ...env }, null, 2)}</pre>
19+
</TooltipContent>
20+
</TooltipPortal>
21+
</Tooltip>
22+
)

src/renderer/src/modules/entry-column/article-item.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export const ArticleItemSkeleton = (
2323
<div className="relative z-[1]">
2424
<div className="group relative flex py-4 pl-3 pr-2">
2525
<Skeleton className="mr-2 size-5 rounded-sm" />
26-
<div className="-mt-0.5 line-clamp-4 flex-1 text-sm leading-tight">
26+
<div className="-mt-0.5 flex-1 text-sm leading-tight">
2727
<div className="flex gap-1 text-[10px] font-bold text-zinc-400 dark:text-neutral-500">
2828
<Skeleton className="h-3 w-24" />
2929
<span>·</span>

src/renderer/src/modules/entry-column/list-item-template.tsx

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
1-
import {
2-
Player,
3-
usePlayerAtomSelector,
4-
} from "@renderer/atoms/player"
1+
import { Player, usePlayerAtomSelector } from "@renderer/atoms/player"
52
import { FeedIcon } from "@renderer/components/feed-icon"
63
import { RelativeTime } from "@renderer/components/ui/datetime"
74
import { Media } from "@renderer/components/ui/media"
85
import { FEED_COLLECTION_LIST } from "@renderer/constants"
96
import { useAsRead } from "@renderer/hooks/biz/useAsRead"
107
import { useRouteParamsSelector } from "@renderer/hooks/biz/useRouteParams"
11-
import { cn } from "@renderer/lib/utils"
8+
import { cn, isSafari } from "@renderer/lib/utils"
129
import { EntryTranslation } from "@renderer/modules/entry-column/translation"
1310
import { useEntry } from "@renderer/store/entry/hooks"
1411
import { useFeedById } from "@renderer/store/feed"
@@ -43,6 +40,7 @@ export function ListItem({
4340
const displayTime = inInCollection ?
4441
entry.collections?.createdAt :
4542
entry.entries.publishedAt
43+
const envIsSafari = isSafari()
4644
return (
4745
<div
4846
className={cn(
@@ -52,7 +50,14 @@ export function ListItem({
5250
)}
5351
>
5452
{!withAudio && <FeedIcon feed={feed} fallback entry={entry.entries} />}
55-
<div className="-mt-0.5 line-clamp-4 flex-1 text-sm leading-tight">
53+
<div
54+
className={cn(
55+
"-mt-0.5 flex-1 text-sm leading-tight",
56+
57+
// FIXME: Safari bug, not support line-clamp cross elements
58+
!envIsSafari && "line-clamp-4",
59+
)}
60+
>
5661
<div
5762
className={cn(
5863
"flex gap-1 text-[10px] font-bold",
@@ -79,6 +84,7 @@ export function ListItem({
7984
>
8085
{entry.entries.title ? (
8186
<EntryTranslation
87+
className={envIsSafari ? "line-clamp-2 break-all" : undefined}
8288
source={entry.entries.title}
8389
target={translation?.title}
8490
/>
@@ -100,6 +106,7 @@ export function ListItem({
100106
)}
101107
>
102108
<EntryTranslation
109+
className={envIsSafari ? "line-clamp-2 break-all" : undefined}
103110
source={entry.entries.description}
104111
target={translation?.description}
105112
/>
@@ -115,7 +122,14 @@ export function ListItem({
115122
String(entry.entries?.attachments?.[0].duration_in_seconds ?? 0),
116123
10,
117124
)}
118-
feedIcon={<FeedIcon feed={feed} entry={entry.entries} size={80} className="m-0" />}
125+
feedIcon={(
126+
<FeedIcon
127+
feed={feed}
128+
entry={entry.entries}
129+
size={80}
130+
className="m-0"
131+
/>
132+
)}
119133
/>
120134
)}
121135

@@ -187,12 +201,10 @@ function AudioCover({
187201
>
188202
<i
189203
className={cn("size-6", {
190-
"i-mingcute-pause-fill":
191-
playStatus && playStatus === "playing",
204+
"i-mingcute-pause-fill": playStatus && playStatus === "playing",
192205
"i-mingcute-loading-fill animate-spin":
193206
playStatus && playStatus === "loading",
194-
"i-mingcute-play-fill":
195-
!playStatus || playStatus === "paused",
207+
"i-mingcute-play-fill": !playStatus || playStatus === "paused",
196208
})}
197209
/>
198210
</button>

src/renderer/src/pages/(main)/(layer)/feeds/[feedId]/layout.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { getUISettings, setUISetting } from "@renderer/atoms/settings/ui"
22
import { PanelSplitter } from "@renderer/components/ui/divider"
33
import { views } from "@renderer/constants"
44
import { useRouteParms } from "@renderer/hooks/biz/useRouteParams"
5-
import { cn } from "@renderer/lib/utils"
5+
import { cn, isSafari } from "@renderer/lib/utils"
66
import { EntryColumn } from "@renderer/modules/entry-column"
77
import { useMemo, useRef } from "react"
88
import { useResizable } from "react-resizable-layout"
@@ -18,7 +18,8 @@ export function Component() {
1818
const inWideMode = view ? views[view].wideMode : false
1919
const { position, separatorProps } = useResizable({
2020
axis: "x",
21-
min: 300,
21+
// FIXME: Less than this width causes grid images to overflow on safari
22+
min: isSafari() ? 356 : 300,
2223
max: 450,
2324
initial: entryColWidth,
2425
containerRef,

src/renderer/src/pages/(main)/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export function Component() {
5050
{ELECTRON && <AutoUpdater />}
5151

5252
<NetworkStatusIndicator />
53-
<EnvironmentIndicator />
53+
{!import.meta.env.PROD && <EnvironmentIndicator />}
5454
</FeedColumn>
5555
</FeedResponsiveResizerContainer>
5656
<main

src/renderer/src/router.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { buildGlobRoutes } from "./lib/route-builder"
99
const globTree = import.meta.glob("./pages/**/*.tsx")
1010
const tree = buildGlobRoutes(globTree)
1111

12-
let routerCreator = window.electron ? createHashRouter : createBrowserRouter
12+
let routerCreator = window.electron || globalThis["__DEBUG_PROXY__"] ? createHashRouter : createBrowserRouter
1313
if (window.SENTRY_RELEASE) {
1414
routerCreator = wrapCreateBrowserRouter(routerCreator)
1515
}

0 commit comments

Comments
 (0)