Bluesky app fork with some witchin' additions 💫 witchsky.app
bluesky fork client
122
fork

Configure Feed

Select the types of activity you want to include in your feed.

Combine SubtleWebHover and SubtleHover, default to web only for all cases (#9188)

authored by

Eric Bailey and committed by
GitHub
8a301316 69421d1f

+49 -79
+2 -2
src/components/Post/Embed/index.tsx
··· 23 23 import {PostAlerts} from '#/components/moderation/PostAlerts' 24 24 import {RichText} from '#/components/RichText' 25 25 import {Embed as StarterPackCard} from '#/components/StarterPack/StarterPackCard' 26 - import {SubtleWebHover} from '#/components/SubtleWebHover' 26 + import {SubtleHover} from '#/components/SubtleHover' 27 27 import * as bsky from '#/types/bsky' 28 28 import { 29 29 type Embed as TEmbed, ··· 284 284 childContainerStyle={[a.pt_sm]}> 285 285 {({active}) => ( 286 286 <> 287 - {!active && <SubtleWebHover hover={hover} style={[a.rounded_md]} />} 287 + {!active && <SubtleHover hover={hover} style={[a.rounded_md]} />} 288 288 <Link 289 289 style={[!active && a.p_md]} 290 290 hoverStyle={{borderColor: pal.colors.borderLinkHover}}
+27 -3
src/components/SubtleHover.tsx
··· 1 1 import {View} from 'react-native' 2 2 3 + import {isTouchDevice} from '#/lib/browser' 4 + import {isNative, isWeb} from '#/platform/detection' 3 5 import {atoms as a, useTheme, type ViewStyleProp} from '#/alf' 4 6 5 - export function SubtleHover({style, hover}: ViewStyleProp & {hover: boolean}) { 7 + export function SubtleHover({ 8 + style, 9 + hover, 10 + web = true, 11 + native = false, 12 + }: ViewStyleProp & {hover: boolean; web?: boolean; native?: boolean}) { 6 13 const t = useTheme() 7 14 8 15 let opacity: number ··· 18 25 break 19 26 } 20 27 21 - return ( 28 + const el = ( 22 29 <View 23 30 style={[ 24 31 a.absolute, 25 32 a.inset_0, 26 33 a.pointer_events_none, 27 34 a.transition_opacity, 28 - t.atoms.bg_contrast_25, 35 + t.atoms.bg_contrast_50, 29 36 style, 30 37 {opacity: hover ? opacity : 0}, 31 38 ]} 32 39 /> 33 40 ) 41 + 42 + if (hover) { 43 + console.log({ 44 + isWeb, 45 + web, 46 + isNative, 47 + native, 48 + }) 49 + } 50 + 51 + if (isWeb && web) { 52 + return isTouchDevice ? null : el 53 + } else if (isNative && native) { 54 + return el 55 + } 56 + 57 + return null 34 58 }
-5
src/components/SubtleWebHover.tsx
··· 1 - import {type ViewStyleProp} from '#/alf' 2 - 3 - export function SubtleWebHover({}: ViewStyleProp & {hover: boolean}) { 4 - return null 5 - }
-49
src/components/SubtleWebHover.web.tsx
··· 1 - import {StyleSheet, View} from 'react-native' 2 - 3 - import {isTouchDevice} from '#/lib/browser' 4 - import {useTheme, type ViewStyleProp} from '#/alf' 5 - 6 - export function SubtleWebHover({ 7 - style, 8 - hover, 9 - }: ViewStyleProp & {hover: boolean}) { 10 - const t = useTheme() 11 - if (isTouchDevice) { 12 - return null 13 - } 14 - let opacity = 0.5 15 - switch (t.name) { 16 - case 'dark': 17 - opacity = 0.4 18 - break 19 - case 'dim': 20 - opacity = 0.45 21 - break 22 - case 'light': 23 - opacity = 0.5 24 - break 25 - } 26 - return ( 27 - <View 28 - style={[ 29 - t.atoms.bg_contrast_25, 30 - styles.container, 31 - {opacity: hover ? opacity : 0}, 32 - style, 33 - ]} 34 - /> 35 - ) 36 - } 37 - 38 - const styles = StyleSheet.create({ 39 - container: { 40 - position: 'absolute', 41 - left: 0, 42 - right: 0, 43 - bottom: 0, 44 - top: 0, 45 - pointerEvents: 'none', 46 - // @ts-ignore web only 47 - transition: '0.15s ease-in-out opacity', 48 - }, 49 - })
+5 -5
src/screens/PostThread/components/ThreadItemPost.tsx
··· 41 41 import {PostControls} from '#/components/PostControls' 42 42 import {RichText} from '#/components/RichText' 43 43 import * as Skele from '#/components/Skeleton' 44 - import {SubtleWebHover} from '#/components/SubtleWebHover' 44 + import {SubtleHover} from '#/components/SubtleHover' 45 45 import {Text} from '#/components/Typography' 46 46 47 47 export type ThreadItemPostProps = { ··· 246 246 const {isActive: live} = useActorStatus(post.author) 247 247 248 248 return ( 249 - <SubtleHover> 249 + <SubtleHoverWrapper> 250 250 <ThreadItemPostOuterWrapper item={item} overrides={overrides}> 251 251 <PostHider 252 252 testID={`postThreadItem-by-${post.author.handle}`} ··· 339 339 </View> 340 340 </PostHider> 341 341 </ThreadItemPostOuterWrapper> 342 - </SubtleHover> 342 + </SubtleHoverWrapper> 343 343 ) 344 344 }) 345 345 346 - function SubtleHover({children}: {children: ReactNode}) { 346 + function SubtleHoverWrapper({children}: {children: ReactNode}) { 347 347 const { 348 348 state: hover, 349 349 onIn: onHoverIn, ··· 354 354 onPointerEnter={onHoverIn} 355 355 onPointerLeave={onHoverOut} 356 356 style={a.pointer}> 357 - <SubtleWebHover hover={hover} /> 357 + <SubtleHover hover={hover} /> 358 358 {children} 359 359 </View> 360 360 )
+5 -5
src/screens/PostThread/components/ThreadItemTreePost.tsx
··· 40 40 import {PostControls} from '#/components/PostControls' 41 41 import {RichText} from '#/components/RichText' 42 42 import * as Skele from '#/components/Skeleton' 43 - import {SubtleWebHover} from '#/components/SubtleWebHover' 43 + import {SubtleHover} from '#/components/SubtleHover' 44 44 import {Text} from '#/components/Typography' 45 45 46 46 /** ··· 310 310 311 311 return ( 312 312 <ThreadItemTreePostOuterWrapper item={item}> 313 - <SubtleHover> 313 + <SubtleHoverWrapper> 314 314 <PostHider 315 315 testID={`postThreadItem-by-${post.author.handle}`} 316 316 href={postHref} ··· 381 381 </View> 382 382 </ThreadItemTreePostInnerWrapper> 383 383 </PostHider> 384 - </SubtleHover> 384 + </SubtleHoverWrapper> 385 385 </ThreadItemTreePostOuterWrapper> 386 386 ) 387 387 }) 388 388 389 - function SubtleHover({children}: {children: React.ReactNode}) { 389 + function SubtleHoverWrapper({children}: {children: React.ReactNode}) { 390 390 const { 391 391 state: hover, 392 392 onIn: onHoverIn, ··· 397 397 onPointerEnter={onHoverIn} 398 398 onPointerLeave={onHoverOut} 399 399 style={[a.flex_1, a.pointer]}> 400 - <SubtleWebHover hover={hover} /> 400 + <SubtleHover hover={hover} /> 401 401 {children} 402 402 </View> 403 403 )
+2 -2
src/view/com/notifications/NotificationFeedItem.tsx
··· 66 66 import * as MediaPreview from '#/components/MediaPreview' 67 67 import {ProfileHoverCard} from '#/components/ProfileHoverCard' 68 68 import {Notification as StarterPackCard} from '#/components/StarterPack/StarterPackCard' 69 - import {SubtleWebHover} from '#/components/SubtleWebHover' 69 + import {SubtleHover} from '#/components/SubtleHover' 70 70 import {Text} from '#/components/Typography' 71 71 import {useSimpleVerificationState} from '#/components/verification' 72 72 import {VerificationCheck} from '#/components/verification/VerificationCheck' ··· 613 613 }}> 614 614 {({hovered}) => ( 615 615 <> 616 - <SubtleWebHover hover={hovered} /> 616 + <SubtleHover hover={hovered} /> 617 617 <View style={[styles.layoutIcon, a.pr_sm]}> 618 618 {/* TODO: Prevent conditional rendering and move toward composable 619 619 notifications for clearer accessibility labeling */}
+2 -2
src/view/com/post/Post.tsx
··· 35 35 import {ShowMoreTextButton} from '#/components/Post/ShowMoreTextButton' 36 36 import {PostControls} from '#/components/PostControls' 37 37 import {RichText} from '#/components/RichText' 38 - import {SubtleWebHover} from '#/components/SubtleWebHover' 38 + import {SubtleHover} from '#/components/SubtleHover' 39 39 import * as bsky from '#/types/bsky' 40 40 41 41 export function Post({ ··· 167 167 onPointerLeave={() => { 168 168 setHover(false) 169 169 }}> 170 - <SubtleWebHover hover={hover} /> 170 + <SubtleHover hover={hover} /> 171 171 {showReplyLine && <View style={styles.replyLine} />} 172 172 <View style={styles.layout}> 173 173 <View style={styles.layoutAvi}>
+2 -2
src/view/com/posts/PostFeedItem.tsx
··· 58 58 import {DiscoverDebug} from '#/components/PostControls/DiscoverDebug' 59 59 import {ProfileHoverCard} from '#/components/ProfileHoverCard' 60 60 import {RichText} from '#/components/RichText' 61 - import {SubtleWebHover} from '#/components/SubtleWebHover' 61 + import {SubtleHover} from '#/components/SubtleHover' 62 62 import * as bsky from '#/types/bsky' 63 63 64 64 interface FeedItemProps { ··· 317 317 onPointerLeave={() => { 318 318 setHover(false) 319 319 }}> 320 - <SubtleWebHover hover={hover} /> 320 + <SubtleHover hover={hover} /> 321 321 <View style={{flexDirection: 'row', gap: 10, paddingLeft: 8}}> 322 322 <View style={{width: 42}}> 323 323 {isThreadChild && (
+2 -2
src/view/com/posts/ViewFullThread.tsx
··· 8 8 import {usePalette} from '#/lib/hooks/usePalette' 9 9 import {makeProfileLink} from '#/lib/routes/links' 10 10 import {useInteractionState} from '#/components/hooks/useInteractionState' 11 - import {SubtleWebHover} from '#/components/SubtleWebHover' 11 + import {SubtleHover} from '#/components/SubtleHover' 12 12 import {Link} from '../util/Link' 13 13 import {Text} from '../util/text/Text' 14 14 ··· 33 33 noFeedback 34 34 onPointerEnter={onHoverIn} 35 35 onPointerLeave={onHoverOut}> 36 - <SubtleWebHover 36 + <SubtleHover 37 37 hover={hover} 38 38 // adjust position for visual alignment - the actual box has lots of top padding and not much bottom padding -sfn 39 39 style={{top: 8, bottom: -5}}
+2 -2
src/view/com/util/load-latest/LoadLatestBtn.tsx
··· 14 14 import {useInteractionState} from '#/components/hooks/useInteractionState' 15 15 import {ArrowTop_Stroke2_Corner0_Rounded as ArrowIcon} from '#/components/icons/Arrow' 16 16 import {CENTER_COLUMN_OFFSET} from '#/components/Layout' 17 - import {SubtleWebHover} from '#/components/SubtleWebHover' 17 + import {SubtleHover} from '#/components/SubtleHover' 18 18 19 19 export function LoadLatestBtn({ 20 20 onPress, ··· 91 91 targetScale={0.9} 92 92 onPointerEnter={onHoverIn} 93 93 onPointerLeave={onHoverOut}> 94 - <SubtleWebHover hover={hovered} style={[a.rounded_full]} /> 94 + <SubtleHover hover={hovered} style={[a.rounded_full]} /> 95 95 <ArrowIcon 96 96 size="md" 97 97 style={[