diff --git a/apps/desktop/layer/renderer/src/modules/feed/feed-icon.tsx b/apps/desktop/layer/renderer/src/modules/feed/feed-icon.tsx index 242ae06be..73cdcd8d9 100644 --- a/apps/desktop/layer/renderer/src/modules/feed/feed-icon.tsx +++ b/apps/desktop/layer/renderer/src/modules/feed/feed-icon.tsx @@ -142,7 +142,7 @@ export function FeedIcon({ + ) @@ -189,11 +185,7 @@ export function FeedIcon({ isIconLoadedSet.add(finalSrc) ImageElement = ( - +
- + {getPreferredTitle(list)} diff --git a/apps/ssr/client/components/items/normal.tsx b/apps/ssr/client/components/items/normal.tsx index 811f83e07..81e2c1b10 100644 --- a/apps/ssr/client/components/items/normal.tsx +++ b/apps/ssr/client/components/items/normal.tsx @@ -1,5 +1,4 @@ import { RelativeTime } from "@follow/components/ui/datetime/index.jsx" -import { MagneticHoverEffect } from "@follow/components/ui/effect/MagneticHoverEffect.js" import { EllipsisHorizontalTextWithTooltip } from "@follow/components/ui/typography/index.js" import { cn } from "@follow/utils/utils" import { memo } from "react" @@ -23,7 +22,11 @@ function NormalListItemImpl({ const displayTime = entry.entries.publishedAt return ( - +
@@ -59,7 +62,7 @@ function NormalListItemImpl({ />
)} - +
) } diff --git a/packages/internal/components/src/ui/effect/MagneticHoverEffect.tsx b/packages/internal/components/src/ui/effect/MagneticHoverEffect.tsx index 33514d189..bf2c363cc 100644 --- a/packages/internal/components/src/ui/effect/MagneticHoverEffect.tsx +++ b/packages/internal/components/src/ui/effect/MagneticHoverEffect.tsx @@ -1,6 +1,6 @@ import { cn } from "@follow/utils/utils" import * as React from "react" -import { useImperativeHandle, useRef } from "react" +import { useCallback, useImperativeHandle, useRef } from "react" type MagneticHoverEffectProps = { as?: T @@ -22,14 +22,48 @@ export const MagneticHoverEffect = ({ return itemRef.current as unknown as T }) + const handleMouseEnter = (e: React.MouseEvent) => { + if (!itemRef.current) return + const rect = itemRef.current.getBoundingClientRect() + + const x = ((e.clientX - rect.left) / rect.width) * 100 + const y = ((e.clientY - rect.top) / rect.height) * 100 + + itemRef.current.style.transition = "transform 0.2s cubic-bezier(0.33, 1, 0.68, 1)" + itemRef.current.style.setProperty("--origin-x", `${x}%`) + itemRef.current.style.setProperty("--origin-y", `${y}%`) + } + + const handleMouseLeave = () => { + if (!itemRef.current) return + itemRef.current.style.transform = "translate(0px, 0px)" + itemRef.current.style.transition = "transform 0.4s cubic-bezier(0.33, 1, 0.68, 1)" + } + + const handleMouseMove = useCallback((e: React.MouseEvent) => { + if (!itemRef.current) return + const rect = itemRef.current.getBoundingClientRect() + + const centerX = rect.left + rect.width / 2 + const centerY = rect.top + rect.height / 2 + + const distanceX = (e.clientX - centerX) * 0.05 + const distanceY = (e.clientY - centerY) * 0.05 + + itemRef.current.style.transform = `translate(${distanceX}px, ${distanceY}px)` + }, []) + return (