From 3e19a911e1f0f6a82ca757345f0f45726c3a6a19 Mon Sep 17 00:00:00 2001 From: zubiden <19638254+zubiden@users.noreply.github.com> Date: Tue, 30 Sep 2025 16:52:24 +0200 Subject: [PATCH] Profile: Design tweaks (#6299) --- src/components/common/Avatar.tsx | 7 +++--- src/components/common/profile/ProfileInfo.tsx | 7 ++++-- .../RadialPatternBackground.module.scss | 11 ++++++++++ .../profile/RadialPatternBackground.tsx | 22 ++++++++++++++----- 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/components/common/Avatar.tsx b/src/components/common/Avatar.tsx index 6629d44d3..2becd03a0 100644 --- a/src/components/common/Avatar.tsx +++ b/src/components/common/Avatar.tsx @@ -35,7 +35,7 @@ import renderText from './helpers/renderText'; import { useFastClick } from '../../hooks/useFastClick'; import useLastCallback from '../../hooks/useLastCallback'; import useMedia from '../../hooks/useMedia'; -import useMediaTransitionDeprecated from '../../hooks/useMediaTransitionDeprecated'; +import useMediaTransition from '../../hooks/useMediaTransition'; import useOldLang from '../../hooks/useOldLang'; import OptimizedVideo from '../ui/OptimizedVideo'; @@ -189,7 +189,7 @@ const Avatar: FC = ({ // `videoBlobUrl` can be taken from memory cache, so we need to check `shouldLoadVideo` again const shouldPlayVideo = Boolean(videoBlobUrl && shouldLoadVideo); - const transitionClassNames = useMediaTransitionDeprecated(hasBlobUrl); + const { ref: mediaRef } = useMediaTransition({ hasMediaData: hasBlobUrl }); const handleVideoEnded = useLastCallback((e) => { const video = e.currentTarget; @@ -221,8 +221,9 @@ const Avatar: FC = ({ content = ( <> {author} )} {pinnedGifts && ( diff --git a/src/components/common/profile/RadialPatternBackground.module.scss b/src/components/common/profile/RadialPatternBackground.module.scss index 95ecf3870..9c430468a 100644 --- a/src/components/common/profile/RadialPatternBackground.module.scss +++ b/src/components/common/profile/RadialPatternBackground.module.scss @@ -16,8 +16,19 @@ } .canvas { + pointer-events: none; + position: relative; + width: 100%; height: 100%; + + opacity: 0; object-fit: cover; + + transition: opacity 0.15s ease-out; + + &.showing { + opacity: 1; + } } diff --git a/src/components/common/profile/RadialPatternBackground.tsx b/src/components/common/profile/RadialPatternBackground.tsx index ad148bdb1..4ba99b468 100644 --- a/src/components/common/profile/RadialPatternBackground.tsx +++ b/src/components/common/profile/RadialPatternBackground.tsx @@ -9,6 +9,7 @@ import { getStickerMediaHash } from '../../../global/helpers'; import buildClassName from '../../../util/buildClassName'; import buildStyle from '../../../util/buildStyle'; import { preloadImage } from '../../../util/files'; +import { clamp } from '../../../util/math'; import useLastCallback from '../../../hooks/useLastCallback'; import useMedia from '../../../hooks/useMedia'; @@ -24,6 +25,7 @@ type OwnProps = { className?: string; clearBottomSector?: boolean; patternSize?: number; + patternOpacity?: number; }; const RINGS = 3; @@ -39,6 +41,7 @@ const RadialPatternBackground = ({ backgroundColors, patternColor, patternIcon, + patternOpacity, clearBottomSector, className, patternSize = 1, @@ -140,8 +143,11 @@ const RadialPatternBackground = ({ } const radialGradient = ctx.createRadialGradient(width / 2, height / 2, 0, width / 2, height / 2, width / 2); - radialGradient.addColorStop(0, '#FFFFFF77'); - radialGradient.addColorStop(1, '#FFFFFF'); + + const alpha = clamp(0.6 * (patternOpacity ?? 1), 0, 1); + + radialGradient.addColorStop(0, `rgb(255 255 255 / ${1 - alpha})`); + radialGradient.addColorStop(1, `rgb(255 255 255 / 1)`); // Alpha mask ctx.save(); @@ -153,12 +159,12 @@ const RadialPatternBackground = ({ useEffect(() => { draw(); - }, [emojiImage]); + }, [emojiImage, patternOpacity, patternSize, patternColor, patternPositions]); useEffect(() => { const { width, height } = getContainerSize(); - const canvas = canvasRef.current!; - if (!width || !height) { + const canvas = canvasRef.current; + if (!width || !height || !canvas) { return; } @@ -180,7 +186,11 @@ const RadialPatternBackground = ({ `--_bg-2: ${backgroundColors[1] || backgroundColors[0]}`, )} > - +