diff --git a/src/components/FeedInterstitials.tsx b/src/components/FeedInterstitials.tsx
index a92e7be7f2..2a3a00ba7d 100644
--- a/src/components/FeedInterstitials.tsx
+++ b/src/components/FeedInterstitials.tsx
@@ -25,18 +25,17 @@ import {
type ViewStyleProp,
web,
} from '#/alf'
-import {Button} from '#/components/Button'
+import {Button, ButtonText} from '#/components/Button'
import * as FeedCard from '#/components/FeedCard'
import {ArrowRight_Stroke2_Corner0_Rounded as Arrow} from '#/components/icons/Arrow'
import {Hashtag_Stroke2_Corner0_Rounded as Hashtag} from '#/components/icons/Hashtag'
-import {PersonPlus_Stroke2_Corner0_Rounded as Person} from '#/components/icons/Person'
import {InlineLinkText} from '#/components/Link'
import * as ProfileCard from '#/components/ProfileCard'
import {Text} from '#/components/Typography'
import type * as bsky from '#/types/bsky'
import {ProgressGuideList} from './ProgressGuide/List'
-const MOBILE_CARD_WIDTH = 300
+const MOBILE_CARD_WIDTH = 165
function CardOuter({
children,
@@ -48,8 +47,8 @@ function CardOuter({
-
-
-
-
-
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
)
}
@@ -243,10 +258,9 @@ export function ProfileGrid({
const t = useTheme()
const {_} = useLingui()
const moderationOpts = useModerationOpts()
- const navigation = useNavigation()
const {gtMobile} = useBreakpoints()
const isLoading = isSuggestionsLoading || !moderationOpts
- const maxLength = gtMobile ? 4 : 6
+ const maxLength = gtMobile ? 3 : 6
const content = isLoading ? (
Array(maxLength)
@@ -254,7 +268,14 @@ export function ProfileGrid({
.map((_, i) => (
+ style={[
+ gtMobile &&
+ web([
+ a.flex_0,
+ a.flex_grow,
+ {width: `calc(30% - ${a.gap_md.gap / 2}px)`},
+ ]),
+ ]}>
))
@@ -276,44 +297,69 @@ export function ProfileGrid({
}}
style={[
a.flex_1,
- gtMobile && web([a.flex_0, {width: 'calc(50% - 6px)'}]),
+ gtMobile &&
+ web([
+ a.flex_0,
+ a.flex_grow,
+ {width: `calc(30% - ${a.gap_md.gap / 2}px)`},
+ ]),
]}>
{({hovered, pressed}) => (
-
+
-
- {
- logEvent('suggestedUser:follow', {
- logContext:
- viewContext === 'feed'
- ? 'InterstitialDiscover'
- : 'InterstitialProfile',
- location: 'Card',
- recId,
- position: index,
- })
- }}
- />
-
-
+
+
+
+
+
+
+ {
+ logEvent('suggestedUser:follow', {
+ logContext:
+ viewContext === 'feed'
+ ? 'InterstitialDiscover'
+ : 'InterstitialProfile',
+ location: 'Card',
+ recId,
+ position: index,
+ })
+ }}
+ />
)}
@@ -333,36 +379,30 @@ export function ProfileGrid({
-
+
{viewContext === 'profile' ? (
Similar accounts
) : (
Suggested for you
)}
-
+
+ See more
+
{gtMobile ? (
-
-
+
+
{content}
-
-
-
- Browse more suggestions
-
-
-
) : (
@@ -371,29 +411,12 @@ export function ProfileGrid({
horizontal
showsHorizontalScrollIndicator={false}
snapToInterval={MOBILE_CARD_WIDTH + a.gap_md.gap}
- decelerationRate="fast">
-
+ decelerationRate="fast"
+ style={[a.overflow_visible]}>
+
{content}
-
+
@@ -403,6 +426,32 @@ export function ProfileGrid({
)
}
+function SeeMoreSuggestedProfilesCard() {
+ const navigation = useNavigation()
+ const t = useTheme()
+ const {_} = useLingui()
+
+ return (
+
+ )
+}
+
export function SuggestedFeeds() {
const numFeedsToDisplay = 3
const t = useTheme()
diff --git a/src/components/ProfileCard.tsx b/src/components/ProfileCard.tsx
index e01c27655f..f12d922fd3 100644
--- a/src/components/ProfileCard.tsx
+++ b/src/components/ProfileCard.tsx
@@ -20,7 +20,13 @@ import {useProfileFollowMutationQueue} from '#/state/queries/profile'
import {useSession} from '#/state/session'
import * as Toast from '#/view/com/util/Toast'
import {PreviewableUserAvatar, UserAvatar} from '#/view/com/util/UserAvatar'
-import {atoms as a, platform, useTheme} from '#/alf'
+import {
+ atoms as a,
+ platform,
+ type TextStyleProp,
+ useTheme,
+ type ViewStyleProp,
+} from '#/alf'
import {
Button,
ButtonIcon,
@@ -136,12 +142,14 @@ export function Avatar({
onPress,
disabledPreview,
liveOverride,
+ size = 40,
}: {
profile: bsky.profile.AnyProfileView
moderationOpts: ModerationOpts
onPress?: () => void
disabledPreview?: boolean
liveOverride?: boolean
+ size?: number
}) {
const moderation = moderateProfile(profile, moderationOpts)
@@ -149,7 +157,7 @@ export function Avatar({
return disabledPreview ? (
) : (
@@ -274,7 +282,7 @@ export function Name({
)
const verification = useSimpleVerificationState({profile})
return (
-
+
+ )
+}
+
export function Description({
profile: profileUnshadowed,
numberOfLines = 3,
+ style,
}: {
profile: bsky.profile.AnyProfileView
numberOfLines?: number
-}) {
+} & TextStyleProp) {
const profile = useProfileShadow(profileUnshadowed)
const rt = useMemo(() => {
if (!('description' in profile)) return
@@ -369,7 +396,7 @@ export function Description({