···11import {StyleSheet, TextProps} from 'react-native'
22-import type {SvgProps, PathProps} from 'react-native-svg'
22+import type {PathProps, SvgProps} from 'react-native-svg'
3344import {tokens} from '#/alf'
55
···88import {msg} from '@lingui/macro'
99import {useLingui} from '@lingui/react'
10101111+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
1112import {usePalette} from '#/lib/hooks/usePalette'
1313+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
1214import {cleanError} from '#/lib/strings/errors'
1515+import {s} from '#/lib/styles'
1316import {logger} from '#/logger'
1417import {useModerationOpts} from '#/state/preferences/moderation-opts'
1518import {useNotificationFeedQuery} from '#/state/queries/notifications/feed'
1619import {useUnreadNotificationsApi} from '#/state/queries/notifications/unread'
1717-import {s} from 'lib/styles'
1818-import {EmptyState} from '../util/EmptyState'
1919-import {ErrorMessage} from '../util/error/ErrorMessage'
2020-import {List, ListRef} from '../util/List'
2121-import {NotificationFeedLoadingPlaceholder} from '../util/LoadingPlaceholder'
2222-import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
2323-import {CenteredView} from '../util/Views'
2020+import {EmptyState} from '#/view/com/util/EmptyState'
2121+import {ErrorMessage} from '#/view/com/util/error/ErrorMessage'
2222+import {List, ListRef} from '#/view/com/util/List'
2323+import {NotificationFeedLoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder'
2424+import {LoadMoreRetryBtn} from '#/view/com/util/LoadMoreRetryBtn'
2525+import {CenteredView} from '#/view/com/util/Views'
2426import {FeedItem} from './FeedItem'
2527import hairlineWidth = StyleSheet.hairlineWidth
2626-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
2727-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
28282929const EMPTY_FEED_ITEM = {_reactKey: '__empty__'}
3030const LOAD_MORE_ERROR_ITEM = {_reactKey: '__load_more_error__'}
+27-38
src/view/com/notifications/FeedItem.tsx
···1717 ModerationOpts,
1818} from '@atproto/api'
1919import {AtUri} from '@atproto/api'
2020-import {
2121- FontAwesomeIcon,
2222- FontAwesomeIconStyle,
2323- Props,
2424-} from '@fortawesome/react-native-fontawesome'
2520import {msg, plural, Trans} from '@lingui/macro'
2621import {useLingui} from '@lingui/react'
2722import {useQueryClient} from '@tanstack/react-query'
···2924import {FeedNotification} from '#/state/queries/notifications/feed'
3025import {useAnimatedValue} from 'lib/hooks/useAnimatedValue'
3126import {usePalette} from 'lib/hooks/usePalette'
3232-import {HeartIconSolid} from 'lib/icons'
3327import {makeProfileLink} from 'lib/routes/links'
3428import {sanitizeDisplayName} from 'lib/strings/display-names'
3529import {sanitizeHandle} from 'lib/strings/handles'
···3731import {colors, s} from 'lib/styles'
3832import {isWeb} from 'platform/detection'
3933import {precacheProfile} from 'state/queries/profile'
3434+import {atoms as a, useTheme} from '#/alf'
3535+import {
3636+ ChevronBottom_Stroke2_Corner0_Rounded as ChevronDownIcon,
3737+ ChevronTop_Stroke2_Corner0_Rounded as ChevronUpIcon,
3838+} from '#/components/icons/Chevron'
3939+import {Heart2_Filled_Stroke2_Corner0_Rounded as HeartIconFilled} from '#/components/icons/Heart2'
4040+import {PersonPlus_Filled_Stroke2_Corner0_Rounded as PersonPlusIcon} from '#/components/icons/Person'
4141+import {Repost_Stroke2_Corner2_Rounded as RepostIcon} from '#/components/icons/Repost'
4042import {Link as NewLink} from '#/components/Link'
4143import {ProfileHoverCard} from '#/components/ProfileHoverCard'
4244import {FeedSourceCard} from '../feeds/FeedSourceCard'
···4749import {Text} from '../util/text/Text'
4850import {TimeElapsed} from '../util/TimeElapsed'
4951import {PreviewableUserAvatar, UserAvatar} from '../util/UserAvatar'
5252+5053import hairlineWidth = StyleSheet.hairlineWidth
51545255const MAX_AUTHORS = 5
···7174 const queryClient = useQueryClient()
7275 const pal = usePalette('default')
7376 const {_} = useLingui()
7777+ const t = useTheme()
7478 const [isAuthorsExpanded, setAuthorsExpanded] = useState<boolean>(false)
7579 const itemHref = useMemo(() => {
7680 if (item.type === 'post-like' || item.type === 'repost') {
···150154 }
151155152156 let action = ''
153153- let icon: Props['icon'] | 'HeartIconSolid'
154154- let iconStyle: Props['style'] = []
157157+ let icon = (
158158+ <HeartIconFilled
159159+ size="xl"
160160+ style={[
161161+ s.likeColor,
162162+ // {position: 'relative', top: -4}
163163+ ]}
164164+ />
165165+ )
155166 if (item.type === 'post-like') {
156167 action = _(msg`liked your post`)
157157- icon = 'HeartIconSolid'
158158- iconStyle = [
159159- s.likeColor as FontAwesomeIconStyle,
160160- {position: 'relative', top: -4},
161161- ]
162168 } else if (item.type === 'repost') {
163169 action = _(msg`reposted your post`)
164164- icon = 'retweet'
165165- iconStyle = [s.green3 as FontAwesomeIconStyle]
170170+ icon = <RepostIcon size="xl" style={{color: t.palette.positive_600}} />
166171 } else if (item.type === 'follow') {
167172 action = _(msg`followed you`)
168168- icon = 'user-plus'
169169- iconStyle = [s.blue3 as FontAwesomeIconStyle]
173173+ icon = <PersonPlusIcon size="xl" style={{color: t.palette.primary_500}} />
170174 } else if (item.type === 'feedgen-like') {
171175 action = _(msg`liked your custom feed`)
172172- icon = 'HeartIconSolid'
173173- iconStyle = [
174174- s.likeColor as FontAwesomeIconStyle,
175175- {position: 'relative', top: -4},
176176- ]
177176 } else {
178177 return null
179178 }
···200199 item.type === 'repost'
201200 }
202201 onBeforePress={onBeforePress}>
203203- <View style={styles.layoutIcon}>
202202+ <View style={[styles.layoutIcon, a.pr_sm]}>
204203 {/* TODO: Prevent conditional rendering and move toward composable
205204 notifications for clearer accessibility labeling */}
206206- {icon === 'HeartIconSolid' ? (
207207- <HeartIconSolid size={28} style={[styles.icon, ...iconStyle]} />
208208- ) : (
209209- <FontAwesomeIcon
210210- icon={icon}
211211- size={24}
212212- style={[styles.icon, ...iconStyle]}
213213- />
214214- )}
205205+ {icon}
215206 </View>
216207 <View style={styles.layoutContent}>
217208 <ExpandListPressable
···322313 accessibilityHint={_(
323314 msg`Collapses list of users for a given notification`,
324315 )}>
325325- <FontAwesomeIcon
326326- icon="angle-up"
327327- size={18}
316316+ <ChevronUpIcon
317317+ size="md"
328318 style={[styles.expandedAuthorsCloseBtnIcon, pal.text]}
329319 />
330320 <Text type="sm-medium" style={pal.text}>
···369359 +{authors.length - MAX_AUTHORS}
370360 </Text>
371361 ) : undefined}
372372- <FontAwesomeIcon
373373- icon="angle-down"
374374- size={18}
362362+ <ChevronDownIcon
363363+ size="md"
375364 style={[styles.expandedAuthorsCloseBtnIcon, pal.textLight]}
376365 />
377366 </View>
+10-8
src/view/com/util/LoadingPlaceholder.tsx
···88} from 'react-native'
991010import {usePalette} from 'lib/hooks/usePalette'
1111-import {HeartIconSolid} from 'lib/icons'
1211import {s} from 'lib/styles'
1312import {useTheme} from 'lib/ThemeContext'
1414-import {useTheme as useTheme_NEW} from '#/alf'
1313+import {atoms as a, useTheme as useTheme_NEW} from '#/alf'
1514import {Bubble_Stroke2_Corner2_Rounded as Bubble} from '#/components/icons/Bubble'
1616-import {Heart2_Stroke2_Corner0_Rounded as HeartIconOutline} from '#/components/icons/Heart2'
1515+import {
1616+ Heart2_Filled_Stroke2_Corner0_Rounded as HeartIconFilled,
1717+ Heart2_Stroke2_Corner0_Rounded as HeartIconOutline,
1818+} from '#/components/icons/Heart2'
1719import {Repost_Stroke2_Corner2_Rounded as Repost} from '#/components/icons/Repost'
1820import hairlineWidth = StyleSheet.hairlineWidth
1921···139141 const pal = usePalette('default')
140142 return (
141143 <View style={[styles.notification, pal.view, style]}>
142142- <View style={{paddingLeft: 30, paddingRight: 10}}>
143143- <HeartIconSolid
144144- style={{color: pal.colors.backgroundLight} as ViewStyle}
145145- size={30}
144144+ <View style={[{width: 70}, a.align_end, a.pr_sm, a.pt_2xs]}>
145145+ <HeartIconFilled
146146+ size="xl"
147147+ style={{color: pal.colors.backgroundLight}}
146148 />
147149 </View>
148150 <View style={{flex: 1}}>
149149- <View style={[s.flexRow, s.mb10]}>
151151+ <View style={[a.flex_row, s.mb10]}>
150152 <LoadingPlaceholder
151153 width={30}
152154 height={30}