···42 ],
43 'bsky-internal/use-exact-imports': 'error',
44 'bsky-internal/use-typed-gates': 'error',
45- 'bsky-internal/use-prefixed-imports': 'warn',
46 'simple-import-sort/imports': [
47- 'warn',
48 {
49 groups: [
50 // Side effect imports.
···78 ],
79 },
80 ],
81- 'simple-import-sort/exports': 'warn',
82 // TODO: Reenable when we figure out why it gets stuck on CI.
83 // 'react-compiler/react-compiler': 'error',
84 'no-restricted-imports': [
···42 ],
43 'bsky-internal/use-exact-imports': 'error',
44 'bsky-internal/use-typed-gates': 'error',
45+ 'bsky-internal/use-prefixed-imports': 'error',
46 'simple-import-sort/imports': [
47+ 'error',
48 {
49 groups: [
50 // Side effect imports.
···78 ],
79 },
80 ],
81+ 'simple-import-sort/exports': 'error',
82 // TODO: Reenable when we figure out why it gets stuck on CI.
83 // 'react-compiler/react-compiler': 'error',
84 'no-restricted-imports': [
+2-1
src/components/Divider.tsx
···1import React from 'react'
2import {View} from 'react-native'
3-import {atoms as a, useTheme, ViewStyleProp, flatten} from '#/alf'
045export function Divider({style}: ViewStyleProp) {
6 const t = useTheme()
···1import React from 'react'
2import {View} from 'react-native'
3+4+import {atoms as a, flatten, useTheme, ViewStyleProp} from '#/alf'
56export function Divider({style}: ViewStyleProp) {
7 const t = useTheme()
+2-2
src/components/Error.tsx
···3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56-import {useGoBack} from 'lib/hooks/useGoBack'
7-import {CenteredView} from 'view/com/util/Views'
8import {atoms as a, useBreakpoints, useTheme} from '#/alf'
9import {Button, ButtonText} from '#/components/Button'
10import {Text} from '#/components/Typography'
···3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {useGoBack} from '#/lib/hooks/useGoBack'
7+import {CenteredView} from '#/view/com/util/Views'
8import {atoms as a, useBreakpoints, useTheme} from '#/alf'
9import {Button, ButtonText} from '#/components/Button'
10import {Text} from '#/components/Typography'
+2-2
src/components/LikedByList.tsx
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5006import {logger} from '#/logger'
7import {useLikedByQuery} from '#/state/queries/post-liked-by'
8import {useResolveUriQuery} from '#/state/queries/resolve-uri'
9-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
10-import {cleanError} from 'lib/strings/errors'
11import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard'
12import {List} from '#/view/com/util/List'
13import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
7+import {cleanError} from '#/lib/strings/errors'
8import {logger} from '#/logger'
9import {useLikedByQuery} from '#/state/queries/post-liked-by'
10import {useResolveUriQuery} from '#/state/queries/resolve-uri'
0011import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard'
12import {List} from '#/view/com/util/List'
13import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
+2-2
src/components/Lists.tsx
···3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56-import {cleanError} from 'lib/strings/errors'
7-import {CenteredView} from 'view/com/util/Views'
8import {atoms as a, flatten, useBreakpoints, useTheme} from '#/alf'
9import {Button, ButtonText} from '#/components/Button'
10import {Error} from '#/components/Error'
···3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {cleanError} from '#/lib/strings/errors'
7+import {CenteredView} from '#/view/com/util/Views'
8import {atoms as a, flatten, useBreakpoints, useTheme} from '#/alf'
9import {Button, ButtonText} from '#/components/Button'
10import {Error} from '#/components/Error'
+2-2
src/components/ProfileHoverCard/index.web.tsx
···5import {msg, plural} from '@lingui/macro'
6import {useLingui} from '@lingui/react'
708import {getModerationCauseKey} from '#/lib/moderation'
9import {makeProfileLink} from '#/lib/routes/links'
10import {sanitizeDisplayName} from '#/lib/strings/display-names'
11import {sanitizeHandle} from '#/lib/strings/handles'
012import {useModerationOpts} from '#/state/preferences/moderation-opts'
13import {usePrefetchProfileQuery, useProfileQuery} from '#/state/queries/profile'
14import {useSession} from '#/state/session'
15-import {isTouchDevice} from 'lib/browser'
16-import {useProfileShadow} from 'state/cache/profile-shadow'
17import {formatCount} from '#/view/com/util/numeric/format'
18import {UserAvatar} from '#/view/com/util/UserAvatar'
19import {ProfileHeaderHandle} from '#/screens/Profile/Header/Handle'
···5import {msg, plural} from '@lingui/macro'
6import {useLingui} from '@lingui/react'
78+import {isTouchDevice} from '#/lib/browser'
9import {getModerationCauseKey} from '#/lib/moderation'
10import {makeProfileLink} from '#/lib/routes/links'
11import {sanitizeDisplayName} from '#/lib/strings/display-names'
12import {sanitizeHandle} from '#/lib/strings/handles'
13+import {useProfileShadow} from '#/state/cache/profile-shadow'
14import {useModerationOpts} from '#/state/preferences/moderation-opts'
15import {usePrefetchProfileQuery, useProfileQuery} from '#/state/queries/profile'
16import {useSession} from '#/state/session'
0017import {formatCount} from '#/view/com/util/numeric/format'
18import {UserAvatar} from '#/view/com/util/UserAvatar'
19import {ProfileHeaderHandle} from '#/screens/Profile/Header/Handle'
+3-3
src/components/StarterPack/Main/FeedsList.tsx
···3import {AppBskyFeedDefs} from '@atproto/api'
4import {GeneratorView} from '@atproto/api/dist/client/types/app/bsky/feed/defs'
56-import {useBottomBarOffset} from 'lib/hooks/useBottomBarOffset'
7-import {isNative, isWeb} from 'platform/detection'
8-import {List, ListRef} from 'view/com/util/List'
9import {SectionRef} from '#/screens/Profile/Sections/types'
10import {atoms as a, useTheme} from '#/alf'
11import * as FeedCard from '#/components/FeedCard'
···3import {AppBskyFeedDefs} from '@atproto/api'
4import {GeneratorView} from '@atproto/api/dist/client/types/app/bsky/feed/defs'
56+import {useBottomBarOffset} from '#/lib/hooks/useBottomBarOffset'
7+import {isNative, isWeb} from '#/platform/detection'
8+import {List, ListRef} from '#/view/com/util/List'
9import {SectionRef} from '#/screens/Profile/Sections/types'
10import {atoms as a, useTheme} from '#/alf'
11import * as FeedCard from '#/components/FeedCard'
+4-4
src/components/StarterPack/Main/PostsList.tsx
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
506import {FeedDescriptor} from '#/state/queries/post-feed'
7-import {isNative} from 'platform/detection'
8-import {Feed} from 'view/com/posts/Feed'
9-import {EmptyState} from 'view/com/util/EmptyState'
10-import {ListRef} from 'view/com/util/List'
11import {SectionRef} from '#/screens/Profile/Sections/types'
1213interface ProfilesListProps {
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {isNative} from '#/platform/detection'
7import {FeedDescriptor} from '#/state/queries/post-feed'
8+import {Feed} from '#/view/com/posts/Feed'
9+import {EmptyState} from '#/view/com/util/EmptyState'
10+import {ListRef} from '#/view/com/util/List'
011import {SectionRef} from '#/screens/Profile/Sections/types'
1213interface ProfilesListProps {
+7-7
src/components/StarterPack/Main/ProfilesList.tsx
···8} from '@atproto/api'
9import {InfiniteData, UseInfiniteQueryResult} from '@tanstack/react-query'
1011-import {useBottomBarOffset} from 'lib/hooks/useBottomBarOffset'
12-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
13-import {isBlockedOrBlocking} from 'lib/moderation/blocked-and-muted'
14-import {isNative, isWeb} from 'platform/detection'
15-import {useAllListMembersQuery} from 'state/queries/list-members'
16-import {useSession} from 'state/session'
17-import {List, ListRef} from 'view/com/util/List'
18import {SectionRef} from '#/screens/Profile/Sections/types'
19import {atoms as a, useTheme} from '#/alf'
20import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
···8} from '@atproto/api'
9import {InfiniteData, UseInfiniteQueryResult} from '@tanstack/react-query'
1011+import {useBottomBarOffset} from '#/lib/hooks/useBottomBarOffset'
12+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
13+import {isBlockedOrBlocking} from '#/lib/moderation/blocked-and-muted'
14+import {isNative, isWeb} from '#/platform/detection'
15+import {useAllListMembersQuery} from '#/state/queries/list-members'
16+import {useSession} from '#/state/session'
17+import {List, ListRef} from '#/view/com/util/List'
18import {SectionRef} from '#/screens/Profile/Sections/types'
19import {atoms as a, useTheme} from '#/alf'
20import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
···7 SlideInRight,
8} from 'react-native-reanimated'
910-import {isWeb} from 'platform/detection'
1112export function ScreenTransition({
13 direction,
···7 SlideInRight,
8} from 'react-native-reanimated'
910+import {isWeb} from '#/platform/detection'
1112export function ScreenTransition({
13 direction,
+2-2
src/components/dms/ActionsWrapper.tsx
···12import {msg} from '@lingui/macro'
13import {useLingui} from '@lingui/react'
1415-import {HITSLOP_10} from 'lib/constants'
16-import {useHaptics} from 'lib/haptics'
17import {atoms as a} from '#/alf'
18import {MessageMenu} from '#/components/dms/MessageMenu'
19import {useMenuControl} from '#/components/Menu'
···12import {msg} from '@lingui/macro'
13import {useLingui} from '@lingui/react'
1415+import {HITSLOP_10} from '#/lib/constants'
16+import {useHaptics} from '#/lib/haptics'
17import {atoms as a} from '#/alf'
18import {MessageMenu} from '#/components/dms/MessageMenu'
19import {useMenuControl} from '#/components/Menu'
+1-1
src/components/dms/BlockedByListDialog.tsx
···4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67-import {listUriToHref} from 'lib/strings/url-helpers'
8import {atoms as a, useTheme} from '#/alf'
9import * as Dialog from '#/components/Dialog'
10import {DialogControlProps} from '#/components/Dialog'
···4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67+import {listUriToHref} from '#/lib/strings/url-helpers'
8import {atoms as a, useTheme} from '#/alf'
9import * as Dialog from '#/components/Dialog'
10import {DialogControlProps} from '#/components/Dialog'
+4-4
src/components/dms/ChatEmptyPill.tsx
···9import {msg} from '@lingui/macro'
10import {useLingui} from '@lingui/react'
1112-import {ScaleAndFadeIn} from 'lib/custom-animations/ScaleAndFade'
13-import {ShrinkAndPop} from 'lib/custom-animations/ShrinkAndPop'
14-import {useHaptics} from 'lib/haptics'
15-import {isWeb} from 'platform/detection'
16import {atoms as a, useTheme} from '#/alf'
17import {Text} from '#/components/Typography'
18
···9import {msg} from '@lingui/macro'
10import {useLingui} from '@lingui/react'
1112+import {ScaleAndFadeIn} from '#/lib/custom-animations/ScaleAndFade'
13+import {ShrinkAndPop} from '#/lib/custom-animations/ShrinkAndPop'
14+import {useHaptics} from '#/lib/haptics'
15+import {isWeb} from '#/platform/detection'
16import {atoms as a, useTheme} from '#/alf'
17import {Text} from '#/components/Typography'
18
+4-4
src/components/dms/LeaveConvoPrompt.tsx
···3import {useLingui} from '@lingui/react'
4import {useNavigation} from '@react-navigation/native'
56-import {NavigationProp} from 'lib/routes/types'
7-import {isNative} from 'platform/detection'
8-import {useLeaveConvo} from 'state/queries/messages/leave-conversation'
9-import * as Toast from 'view/com/util/Toast'
10import {DialogOuterProps} from '#/components/Dialog'
11import * as Prompt from '#/components/Prompt'
12
···3import {useLingui} from '@lingui/react'
4import {useNavigation} from '@react-navigation/native'
56+import {NavigationProp} from '#/lib/routes/types'
7+import {isNative} from '#/platform/detection'
8+import {useLeaveConvo} from '#/state/queries/messages/leave-conversation'
9+import * as Toast from '#/view/com/util/Toast'
10import {DialogOuterProps} from '#/components/Dialog'
11import * as Prompt from '#/components/Prompt'
12
+2-2
src/components/dms/MessagesListBlockedFooter.tsx
···4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67-import {useProfileShadow} from 'state/cache/profile-shadow'
8-import {useProfileBlockMutationQueue} from 'state/queries/profile'
9import {atoms as a, useBreakpoints, useTheme} from '#/alf'
10import {Button, ButtonText} from '#/components/Button'
11import {useDialogControl} from '#/components/Dialog'
···4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67+import {useProfileShadow} from '#/state/cache/profile-shadow'
8+import {useProfileBlockMutationQueue} from '#/state/queries/profile'
9import {atoms as a, useBreakpoints, useTheme} from '#/alf'
10import {Button, ButtonText} from '#/components/Button'
11import {useDialogControl} from '#/components/Dialog'
+3-3
src/components/dms/NewMessagesPill.tsx
···12import {
13 ScaleAndFadeIn,
14 ScaleAndFadeOut,
15-} from 'lib/custom-animations/ScaleAndFade'
16-import {useHaptics} from 'lib/haptics'
17-import {isAndroid, isIOS, isWeb} from 'platform/detection'
18import {atoms as a, useTheme} from '#/alf'
19import {Text} from '#/components/Typography'
20
···12import {
13 ScaleAndFadeIn,
14 ScaleAndFadeOut,
15+} from '#/lib/custom-animations/ScaleAndFade'
16+import {useHaptics} from '#/lib/haptics'
17+import {isAndroid, isIOS, isWeb} from '#/platform/detection'
18import {atoms as a, useTheme} from '#/alf'
19import {Text} from '#/components/Typography'
20
···3import {
4 createStarterPackLinkFromAndroidReferrer,
5 httpStarterPackUriToAtUri,
6-} from 'lib/strings/starter-pack'
7-import {isAndroid} from 'platform/detection'
8-import {useHasCheckedForStarterPack} from 'state/preferences/used-starter-packs'
9-import {useSetActiveStarterPack} from 'state/shell/starter-pack'
10import {Referrer, SharedPrefs} from '../../../modules/expo-bluesky-swiss-army'
1112export function useStarterPackEntry() {
···3import {
4 createStarterPackLinkFromAndroidReferrer,
5 httpStarterPackUriToAtUri,
6+} from '#/lib/strings/starter-pack'
7+import {isAndroid} from '#/platform/detection'
8+import {useHasCheckedForStarterPack} from '#/state/preferences/used-starter-packs'
9+import {useSetActiveStarterPack} from '#/state/shell/starter-pack'
10import {Referrer, SharedPrefs} from '../../../modules/expo-bluesky-swiss-army'
1112export function useStarterPackEntry() {
+2-2
src/components/hooks/useStarterPackEntry.ts
···1import React from 'react'
23-import {httpStarterPackUriToAtUri} from 'lib/strings/starter-pack'
4-import {useSetActiveStarterPack} from 'state/shell/starter-pack'
56export function useStarterPackEntry() {
7 const [ready, setReady] = React.useState(false)
···1import React from 'react'
23+import {httpStarterPackUriToAtUri} from '#/lib/strings/starter-pack'
4+import {useSetActiveStarterPack} from '#/state/shell/starter-pack'
56export function useStarterPackEntry() {
7 const [ready, setReady] = React.useState(false)
+2-2
src/components/moderation/PostHider.tsx
···6import {useQueryClient} from '@tanstack/react-query'
78import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
9-import {addStyle} from 'lib/styles'
10-import {precacheProfile} from 'state/queries/profile'
11// import {Link} from '#/components/Link' TODO this imposes some styles that screw things up
12import {Link} from '#/view/com/util/Link'
13import {atoms as a, useTheme} from '#/alf'
···6import {useQueryClient} from '@tanstack/react-query'
78import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
9+import {addStyle} from '#/lib/styles'
10+import {precacheProfile} from '#/state/queries/profile'
11// import {Link} from '#/components/Link' TODO this imposes some styles that screw things up
12import {Link} from '#/view/com/util/Link'
13import {atoms as a, useTheme} from '#/alf'
+1-1
src/components/moderation/ProfileHeaderAlerts.tsx
···2import {StyleProp, ViewStyle} from 'react-native'
3import {ModerationDecision} from '@atproto/api'
45-import {getModerationCauseKey} from 'lib/moderation'
6import * as Pills from '#/components/Pills'
78export function ProfileHeaderAlerts({
···2import {StyleProp, ViewStyle} from 'react-native'
3import {ModerationDecision} from '@atproto/api'
45+import {getModerationCauseKey} from '#/lib/moderation'
6import * as Pills from '#/components/Pills'
78export function ProfileHeaderAlerts({
+3-3
src/lib/api/feed/merge.ts
···1import {AppBskyFeedDefs, AppBskyFeedGetTimeline, BskyAgent} from '@atproto/api'
2import shuffle from 'lodash.shuffle'
30004import {getContentLanguages} from '#/state/preferences/languages'
5import {FeedParams} from '#/state/queries/post-feed'
6-import {bundleAsync} from 'lib/async/bundle'
7-import {timeout} from 'lib/async/timeout'
8-import {feedUriToHref} from 'lib/strings/url-helpers'
9import {FeedTuner} from '../feed-manip'
10import {FeedTunerFn} from '../feed-manip'
11import {FeedAPI, FeedAPIResponse, ReasonFeedSource} from './types'
···1import {AppBskyFeedDefs, AppBskyFeedGetTimeline, BskyAgent} from '@atproto/api'
2import shuffle from 'lodash.shuffle'
34+import {bundleAsync} from '#/lib/async/bundle'
5+import {timeout} from '#/lib/async/timeout'
6+import {feedUriToHref} from '#/lib/strings/url-helpers'
7import {getContentLanguages} from '#/state/preferences/languages'
8import {FeedParams} from '#/state/queries/post-feed'
0009import {FeedTuner} from '../feed-manip'
10import {FeedTunerFn} from '../feed-manip'
11import {FeedAPI, FeedAPIResponse, ReasonFeedSource} from './types'
+1-1
src/lib/async/retry.ts
···1-import {isNetworkError} from 'lib/strings/errors'
23export async function retry<P>(
4 retries: number,
···1+import {isNetworkError} from '#/lib/strings/errors'
23export async function retry<P>(
4 retries: number,
+4-4
src/lib/custom-animations/CountWheel.tsx
···8} from 'react-native-reanimated'
9import {i18n} from '@lingui/core'
1011-import {decideShouldRoll} from 'lib/custom-animations/util'
12-import {s} from 'lib/styles'
13-import {formatCount} from 'view/com/util/numeric/format'
14-import {Text} from 'view/com/util/text/Text'
15import {atoms as a, useTheme} from '#/alf'
1617const animationConfig = {
···8} from 'react-native-reanimated'
9import {i18n} from '@lingui/core'
1011+import {decideShouldRoll} from '#/lib/custom-animations/util'
12+import {s} from '#/lib/styles'
13+import {formatCount} from '#/view/com/util/numeric/format'
14+import {Text} from '#/view/com/util/text/Text'
15import {atoms as a, useTheme} from '#/alf'
1617const animationConfig = {
+4-4
src/lib/custom-animations/CountWheel.web.tsx
···3import {useReducedMotion} from 'react-native-reanimated'
4import {i18n} from '@lingui/core'
56-import {decideShouldRoll} from 'lib/custom-animations/util'
7-import {s} from 'lib/styles'
8-import {formatCount} from 'view/com/util/numeric/format'
9-import {Text} from 'view/com/util/text/Text'
10import {atoms as a, useTheme} from '#/alf'
1112const animationConfig = {
···3import {useReducedMotion} from 'react-native-reanimated'
4import {i18n} from '@lingui/core'
56+import {decideShouldRoll} from '#/lib/custom-animations/util'
7+import {s} from '#/lib/styles'
8+import {formatCount} from '#/view/com/util/numeric/format'
9+import {Text} from '#/view/com/util/text/Text'
10import {atoms as a, useTheme} from '#/alf'
1112const animationConfig = {
+1-1
src/lib/custom-animations/LikeIcon.tsx
···6 useReducedMotion,
7} from 'react-native-reanimated'
89-import {s} from 'lib/styles'
10import {useTheme} from '#/alf'
11import {
12 Heart2_Filled_Stroke2_Corner0_Rounded as HeartIconFilled,
···6 useReducedMotion,
7} from 'react-native-reanimated'
89+import {s} from '#/lib/styles'
10import {useTheme} from '#/alf'
11import {
12 Heart2_Filled_Stroke2_Corner0_Rounded as HeartIconFilled,
+1-1
src/lib/custom-animations/LikeIcon.web.tsx
···2import {View} from 'react-native'
3import {useReducedMotion} from 'react-native-reanimated'
45-import {s} from 'lib/styles'
6import {useTheme} from '#/alf'
7import {
8 Heart2_Filled_Stroke2_Corner0_Rounded as HeartIconFilled,
···2import {View} from 'react-native'
3import {useReducedMotion} from 'react-native-reanimated'
45+import {s} from '#/lib/styles'
6import {useTheme} from '#/alf'
7import {
8 Heart2_Filled_Stroke2_Corner0_Rounded as HeartIconFilled,
+5-5
src/lib/generate-starterpack.ts
···8import {useLingui} from '@lingui/react'
9import {useMutation} from '@tanstack/react-query'
1011-import {until} from 'lib/async/until'
12-import {sanitizeDisplayName} from 'lib/strings/display-names'
13-import {sanitizeHandle} from 'lib/strings/handles'
14-import {enforceLen} from 'lib/strings/helpers'
15-import {useAgent} from 'state/session'
1617export const createStarterPackList = async ({
18 name,
···8import {useLingui} from '@lingui/react'
9import {useMutation} from '@tanstack/react-query'
1011+import {until} from '#/lib/async/until'
12+import {sanitizeDisplayName} from '#/lib/strings/display-names'
13+import {sanitizeHandle} from '#/lib/strings/handles'
14+import {enforceLen} from '#/lib/strings/helpers'
15+import {useAgent} from '#/state/session'
1617export const createStarterPackList = async ({
18 name,
···1-import {useRef, useEffect} from 'react'
2import {useAnimatedScrollHandler as useAnimatedScrollHandler_BUGGY} from 'react-native-reanimated'
34export const useAnimatedScrollHandler: typeof useAnimatedScrollHandler_BUGGY = (
···1+import {useEffect, useRef} from 'react'
2import {useAnimatedScrollHandler as useAnimatedScrollHandler_BUGGY} from 'react-native-reanimated'
34export const useAnimatedScrollHandler: typeof useAnimatedScrollHandler_BUGGY = (
+3-3
src/lib/hooks/useBottomBarOffset.ts
···1import {useSafeAreaInsets} from 'react-native-safe-area-context'
23-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
4-import {clamp} from 'lib/numbers'
5-import {isWeb} from 'platform/detection'
67export function useBottomBarOffset(modifier: number = 0) {
8 const {isTabletOrDesktop} = useWebMediaQueries()
···1import {useSafeAreaInsets} from 'react-native-safe-area-context'
23+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
4+import {clamp} from '#/lib/numbers'
5+import {isWeb} from '#/platform/detection'
67export function useBottomBarOffset(modifier: number = 0) {
8 const {isTabletOrDesktop} = useWebMediaQueries()
+1-1
src/lib/hooks/useColorSchemeStyle.ts
···1-import {useTheme} from 'lib/ThemeContext'
23export function useColorSchemeStyle<T>(lightStyle: T, darkStyle: T) {
4 const colorScheme = useTheme().colorScheme
···1+import {useTheme} from '#/lib/ThemeContext'
23export function useColorSchemeStyle<T>(lightStyle: T, darkStyle: T) {
4 const colorScheme = useTheme().colorScheme
+3-2
src/lib/hooks/useCustomPalette.ts
···1import React from 'react'
2-import {useTheme} from 'lib/ThemeContext'
3-import {choose} from 'lib/functions'
045export function useCustomPalette<T>({light, dark}: {light: T; dark: T}) {
6 const theme = useTheme()
···1import React from 'react'
2+3+import {choose} from '#/lib/functions'
4+import {useTheme} from '#/lib/ThemeContext'
56export function useCustomPalette<T>({light, dark}: {light: T; dark: T}) {
7 const theme = useTheme()
+4-3
src/lib/hooks/useDraggableScrollView.ts
···1-import {useEffect, useRef, useMemo, ForwardedRef} from 'react'
2-import {Platform, findNodeHandle} from 'react-native'
3import type {ScrollView} from 'react-native'
4-import {mergeRefs} from 'lib/merge-refs'
0056type Props<Scrollable extends ScrollView = ScrollView> = {
7 cursor?: string
···1+import {ForwardedRef, useEffect, useMemo, useRef} from 'react'
02import type {ScrollView} from 'react-native'
3+import {findNodeHandle, Platform} from 'react-native'
4+5+import {mergeRefs} from '#/lib/merge-refs'
67type Props<Scrollable extends ScrollView = ScrollView> = {
8 cursor?: string
+1-1
src/lib/hooks/useGoBack.ts
···1import {StackActions, useNavigation} from '@react-navigation/native'
23-import {NavigationProp} from 'lib/routes/types'
4import {router} from '#/routes'
56export function useGoBack(onGoBack?: () => unknown) {
···1import {StackActions, useNavigation} from '@react-navigation/native'
23+import {NavigationProp} from '#/lib/routes/types'
4import {router} from '#/routes'
56export function useGoBack(onGoBack?: () => unknown) {
+1-1
src/lib/hooks/useInitialNumToRender.ts
···1import {useWindowDimensions} from 'react-native'
2import {useSafeAreaInsets} from 'react-native-safe-area-context'
34-import {useBottomBarOffset} from 'lib/hooks/useBottomBarOffset'
56const MIN_POST_HEIGHT = 100
7
···1import {useWindowDimensions} from 'react-native'
2import {useSafeAreaInsets} from 'react-native-safe-area-context'
34+import {useBottomBarOffset} from '#/lib/hooks/useBottomBarOffset'
56const MIN_POST_HEIGHT = 100
7
+3-2
src/lib/hooks/useIsKeyboardVisible.ts
···1-import {useState, useEffect} from 'react'
2import {Keyboard} from 'react-native'
3-import {isIOS} from 'platform/detection'
045export function useIsKeyboardVisible({
6 iosUseWillEvents,
···1+import {useEffect, useState} from 'react'
2import {Keyboard} from 'react-native'
3+4+import {isIOS} from '#/platform/detection'
56export function useIsKeyboardVisible({
7 iosUseWillEvents,
+4-3
src/lib/hooks/useNavigationDeduped.ts
···1import React from 'react'
2import {useNavigation} from '@react-navigation/core'
3-import {AllNavigatorParams, NavigationProp} from 'lib/routes/types'
4import type {NavigationAction} from '@react-navigation/routers'
5-import {NavigationState} from '@react-navigation/native'
6-import {useDedupe} from 'lib/hooks/useDedupe'
078export type DebouncedNavigationProp = Pick<
9 NavigationProp,
···1import React from 'react'
2import {useNavigation} from '@react-navigation/core'
3+import {NavigationState} from '@react-navigation/native'
4import type {NavigationAction} from '@react-navigation/routers'
5+6+import {useDedupe} from '#/lib/hooks/useDedupe'
7+import {AllNavigatorParams, NavigationProp} from '#/lib/routes/types'
89export type DebouncedNavigationProp = Pick<
10 NavigationProp,
+1-1
src/lib/hooks/useNavigationTabState.ts
···1import {useNavigationState} from '@react-navigation/native'
23-import {getTabState, TabState} from 'lib/routes/helpers'
45export function useNavigationTabState() {
6 return useNavigationState(state => {
···1import {useNavigationState} from '@react-navigation/native'
23+import {getTabState, TabState} from '#/lib/routes/helpers'
45export function useNavigationTabState() {
6 return useNavigationState(state => {
+1-1
src/lib/hooks/useNavigationTabState.web.ts
···1import {useNavigationState} from '@react-navigation/native'
23-import {getCurrentRoute} from 'lib/routes/helpers'
45export function useNavigationTabState() {
6 return useNavigationState(state => {
···1import {useNavigationState} from '@react-navigation/native'
23+import {getCurrentRoute} from '#/lib/routes/helpers'
45export function useNavigationTabState() {
6 return useNavigationState(state => {
+2-2
src/lib/hooks/useOTAUpdates.ts
···10 useUpdates,
11} from 'expo-updates'
12013import {logger} from '#/logger'
14-import {IS_TESTFLIGHT} from 'lib/app-info'
15-import {isIOS} from 'platform/detection'
1617const MINIMUM_MINIMIZE_TIME = 15 * 60e3
18
···10 useUpdates,
11} from 'expo-updates'
1213+import {IS_TESTFLIGHT} from '#/lib/app-info'
14import {logger} from '#/logger'
15+import {isIOS} from '#/platform/detection'
01617const MINIMUM_MINIMIZE_TIME = 15 * 60e3
18
+2-1
src/lib/hooks/usePalette.ts
···1import {useMemo} from 'react'
2import {TextStyle, ViewStyle} from 'react-native'
3-import {useTheme, PaletteColorName, PaletteColor} from '../ThemeContext'
045export interface UsePaletteValue {
6 colors: PaletteColor
···1import {useMemo} from 'react'
2import {TextStyle, ViewStyle} from 'react-native'
3+4+import {PaletteColor, PaletteColorName, useTheme} from '../ThemeContext'
56export interface UsePaletteValue {
7 colors: PaletteColor
+2-2
src/lib/hooks/usePermissions.ts
···2import {Camera} from 'expo-camera/legacy' // TODO: Migrate to the new one.
3import * as MediaLibrary from 'expo-media-library'
45-import {isWeb} from 'platform/detection'
6-import {Alert} from 'view/com/util/Alert'
78const openPermissionAlert = (perm: string) => {
9 Alert.alert(
···2import {Camera} from 'expo-camera/legacy' // TODO: Migrate to the new one.
3import * as MediaLibrary from 'expo-media-library'
45+import {isWeb} from '#/platform/detection'
6+import {Alert} from '#/view/com/util/Alert'
78const openPermissionAlert = (perm: string) => {
9 Alert.alert(
+2-2
src/lib/hooks/useSetTitle.ts
···1import {useEffect} from 'react'
2import {useNavigation} from '@react-navigation/native'
34-import {NavigationProp} from 'lib/routes/types'
5-import {bskyTitle} from 'lib/strings/headings'
6import {useUnreadNotifications} from '#/state/queries/notifications/unread'
78export function useSetTitle(title?: string) {
···1import {useEffect} from 'react'
2import {useNavigation} from '@react-navigation/native'
34+import {NavigationProp} from '#/lib/routes/types'
5+import {bskyTitle} from '#/lib/strings/headings'
6import {useUnreadNotifications} from '#/state/queries/notifications/unread'
78export function useSetTitle(title?: string) {
+2-1
src/lib/hooks/useTabFocusEffect.ts
···1import {useEffect, useState} from 'react'
2import {useNavigation} from '@react-navigation/native'
3-import {getTabState, TabState} from 'lib/routes/helpers'
045export function useTabFocusEffect(
6 tabName: string,
···1import {useEffect, useState} from 'react'
2import {useNavigation} from '@react-navigation/native'
3+4+import {getTabState, TabState} from '#/lib/routes/helpers'
56export function useTabFocusEffect(
7 tabName: string,
···1import {useMediaQuery} from 'react-responsive'
2-import {isNative} from 'platform/detection'
034export function useWebMediaQueries() {
5 const isDesktop = useMediaQuery({minWidth: 1300})
···1import {useMediaQuery} from 'react-responsive'
2+3+import {isNative} from '#/platform/detection'
45export function useWebMediaQueries() {
6 const isDesktop = useMediaQuery({minWidth: 1300})
+1-1
src/lib/hooks/useWebScrollRestoration.ts
···1-import {useMemo, useState, useEffect} from 'react'
2import {EventArg, useNavigation} from '@react-navigation/core'
34if ('scrollRestoration' in history) {
···1+import {useEffect, useMemo, useState} from 'react'
2import {EventArg, useNavigation} from '@react-navigation/core'
34if ('scrollRestoration' in history) {
+2-1
src/lib/media/image-sizes.ts
···1import {Image} from 'react-native'
2-import type {Dimensions} from 'lib/media/types'
034const sizes: Map<string, Dimensions> = new Map()
5const activeRequests: Map<string, Promise<Dimensions>> = new Map()
···1import {Image} from 'react-native'
2+3+import type {Dimensions} from '#/lib/media/types'
45const sizes: Map<string, Dimensions> = new Map()
6const activeRequests: Map<string, Promise<Dimensions>> = new Map()
+1-1
src/lib/media/video/compress.web.ts
···1import {ImagePickerAsset} from 'expo-image-picker'
23-import {VideoTooLargeError} from 'lib/media/video/errors'
4import {CompressedVideo} from './types'
56const MAX_VIDEO_SIZE = 1024 * 1024 * 50 // 50mb
···1import {ImagePickerAsset} from 'expo-image-picker'
23+import {VideoTooLargeError} from '#/lib/media/video/errors'
4import {CompressedVideo} from './types'
56const MAX_VIDEO_SIZE = 1024 * 1024 * 50 // 50mb
···1import {AppBskyActorDefs} from '@atproto/api'
23-import {sanitizeDisplayName} from 'lib/strings/display-names'
4-import {sanitizeHandle} from 'lib/strings/handles'
56export function createSanitizedDisplayName(
7 profile:
···1import {AppBskyActorDefs} from '@atproto/api'
23+import {sanitizeDisplayName} from '#/lib/strings/display-names'
4+import {sanitizeHandle} from '#/lib/strings/handles'
56export function createSanitizedDisplayName(
7 profile:
+1-1
src/lib/moderation/useLabelBehaviorDescription.ts
···1import {InterpretedLabelValueDefinition, LabelPreference} from '@atproto/api'
2-import {useLingui} from '@lingui/react'
3import {msg} from '@lingui/macro'
045export function useLabelBehaviorDescription(
6 labelValueDef: InterpretedLabelValueDefinition,
···1import {InterpretedLabelValueDefinition, LabelPreference} from '@atproto/api'
02import {msg} from '@lingui/macro'
3+import {useLingui} from '@lingui/react'
45export function useLabelBehaviorDescription(
6 labelValueDef: InterpretedLabelValueDefinition,
+2-2
src/lib/notifications/notifications.ts
···3import {getBadgeCountAsync, setBadgeCountAsync} from 'expo-notifications'
4import {BskyAgent} from '@atproto/api'
506import {logger} from '#/logger'
07import {SessionAccount, useAgent, useSession} from '#/state/session'
8-import {logEvent} from 'lib/statsig/statsig'
9-import {devicePlatform, isAndroid, isNative} from 'platform/detection'
10import BackgroundNotificationHandler from '../../../modules/expo-background-notification-handler'
1112const SERVICE_DID = (serviceUrl?: string) =>
···3import {getBadgeCountAsync, setBadgeCountAsync} from 'expo-notifications'
4import {BskyAgent} from '@atproto/api'
56+import {logEvent} from '#/lib/statsig/statsig'
7import {logger} from '#/logger'
8+import {devicePlatform, isAndroid, isNative} from '#/platform/detection'
9import {SessionAccount, useAgent, useSession} from '#/state/session'
0010import BackgroundNotificationHandler from '../../../modules/expo-background-notification-handler'
1112const SERVICE_DID = (serviceUrl?: string) =>
+1-1
src/lib/routes/links.ts
···1import {AppBskyGraphDefs, AtUri} from '@atproto/api'
23-import {isInvalidHandle} from 'lib/strings/handles'
45export function makeProfileLink(
6 info: {
···1import {AppBskyGraphDefs, AtUri} from '@atproto/api'
23+import {isInvalidHandle} from '#/lib/strings/handles'
45export function makeProfileLink(
6 info: {
+1-1
src/lib/sentry.ts
···7import {nativeApplicationVersion, nativeBuildVersion} from 'expo-application'
8import {init} from '@sentry/react-native'
910-import {BUILD_ENV, IS_DEV, IS_TESTFLIGHT} from 'lib/app-info'
1112/**
13 * Examples:
···7import {nativeApplicationVersion, nativeBuildVersion} from 'expo-application'
8import {init} from '@sentry/react-native'
910+import {BUILD_ENV, IS_DEV, IS_TESTFLIGHT} from '#/lib/app-info'
1112/**
13 * Examples:
+1-1
src/lib/strings/handles.ts
···1// Regex from the go implementation
2// https://github.com/bluesky-social/indigo/blob/main/atproto/syntax/handle.go#L10
3-import {forceLTR} from 'lib/strings/bidi'
45const VALIDATE_REGEX =
6 /^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/
···1// Regex from the go implementation
2// https://github.com/bluesky-social/indigo/blob/main/atproto/syntax/handle.go#L10
3+import {forceLTR} from '#/lib/strings/bidi'
45const VALIDATE_REGEX =
6 /^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/
+1
src/lib/strings/rich-text-helpers.ts
···1import {AppBskyRichtextFacet, RichText} from '@atproto/api'
02import {linkRequiresWarning} from './url-helpers'
34export function richTextToString(rt: RichText, loose: boolean): string {
···1import {AppBskyRichtextFacet, RichText} from '@atproto/api'
2+3import {linkRequiresWarning} from './url-helpers'
45export function richTextToString(rt: RichText, loose: boolean): string {
+3-3
src/lib/strings/url-helpers.ts
···2import psl from 'psl'
3import TLDs from 'tlds'
40005import {logger} from '#/logger'
6-import {BSKY_SERVICE} from 'lib/constants'
7-import {isInvalidHandle} from 'lib/strings/handles'
8-import {startUriToStarterPackUri} from 'lib/strings/starter-pack'
910export const BSKY_APP_HOST = 'https://bsky.app'
11const BSKY_TRUSTED_HOSTS = [
···2import psl from 'psl'
3import TLDs from 'tlds'
45+import {BSKY_SERVICE} from '#/lib/constants'
6+import {isInvalidHandle} from '#/lib/strings/handles'
7+import {startUriToStarterPackUri} from '#/lib/strings/starter-pack'
8import {logger} from '#/logger'
000910export const BSKY_APP_HOST = 'https://bsky.app'
11const BSKY_TRUSTED_HOSTS = [
+1-1
src/locale/__tests__/helpers.test.ts
···1-import {test, expect} from '@jest/globals'
23import {sanitizeAppLanguageSetting} from '#/locale/helpers'
4import {AppLanguage} from '#/locale/languages'
···1+import {expect, test} from '@jest/globals'
23import {sanitizeAppLanguageSetting} from '#/locale/helpers'
4import {AppLanguage} from '#/locale/languages'
+1-1
src/locale/helpers.ts
···2import * as bcp47Match from 'bcp-47-match'
3import lande from 'lande'
45-import {hasProp} from 'lib/type-guards'
6import {
7 AppLanguage,
8 LANGUAGES_MAP_CODE2,
···2import * as bcp47Match from 'bcp-47-match'
3import lande from 'lande'
45+import {hasProp} from '#/lib/type-guards'
6import {
7 AppLanguage,
8 LANGUAGES_MAP_CODE2,
+2-1
src/locale/i18nProvider.tsx
···1import React from 'react'
02import {I18nProvider as DefaultI18nProvider} from '@lingui/react'
3-import {i18n} from '@lingui/core'
4import {useLocaleLanguage} from './i18n'
56export default function I18nProvider({children}: {children: React.ReactNode}) {
···1import React from 'react'
2+import {i18n} from '@lingui/core'
3import {I18nProvider as DefaultI18nProvider} from '@lingui/react'
4+5import {useLocaleLanguage} from './i18n'
67export default function I18nProvider({children}: {children: React.ReactNode}) {
+7-7
src/screens/List/ListHiddenScreen.tsx
···5import {useLingui} from '@lingui/react'
6import {useQueryClient} from '@tanstack/react-query'
7008import {logger} from '#/logger'
9import {RQKEY_ROOT as listQueryRoot} from '#/state/queries/list'
10-import {useGoBack} from 'lib/hooks/useGoBack'
11-import {sanitizeHandle} from 'lib/strings/handles'
12-import {useListBlockMutation, useListMuteMutation} from 'state/queries/list'
13import {
14 UsePreferencesQueryResponse,
15 useRemoveFeedMutation,
16-} from 'state/queries/preferences'
17-import {useSession} from 'state/session'
18-import * as Toast from 'view/com/util/Toast'
19-import {CenteredView} from 'view/com/util/Views'
20import {atoms as a, useBreakpoints, useTheme} from '#/alf'
21import {Button, ButtonIcon, ButtonText} from '#/components/Button'
22import {EyeSlash_Stroke2_Corner0_Rounded as EyeSlash} from '#/components/icons/EyeSlash'
···5import {useLingui} from '@lingui/react'
6import {useQueryClient} from '@tanstack/react-query'
78+import {useGoBack} from '#/lib/hooks/useGoBack'
9+import {sanitizeHandle} from '#/lib/strings/handles'
10import {logger} from '#/logger'
11import {RQKEY_ROOT as listQueryRoot} from '#/state/queries/list'
12+import {useListBlockMutation, useListMuteMutation} from '#/state/queries/list'
0013import {
14 UsePreferencesQueryResponse,
15 useRemoveFeedMutation,
16+} from '#/state/queries/preferences'
17+import {useSession} from '#/state/session'
18+import * as Toast from '#/view/com/util/Toast'
19+import {CenteredView} from '#/view/com/util/Views'
20import {atoms as a, useBreakpoints, useTheme} from '#/alf'
21import {Button, ButtonIcon, ButtonText} from '#/components/Button'
22import {EyeSlash_Stroke2_Corner0_Rounded as EyeSlash} from '#/components/icons/EyeSlash'
+4-4
src/screens/Profile/ErrorState.tsx
···1import React from 'react'
2import {View} from 'react-native'
3-import {Trans, msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {useNavigation} from '@react-navigation/native'
67-import {useTheme, atoms as a} from '#/alf'
8-import {Text} from '#/components/Typography'
9import {Button, ButtonText} from '#/components/Button'
10import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
11-import {NavigationProp} from '#/lib/routes/types'
1213export function ErrorState({error}: {error: string}) {
14 const t = useTheme()
···1import React from 'react'
2import {View} from 'react-native'
3+import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {useNavigation} from '@react-navigation/native'
67+import {NavigationProp} from '#/lib/routes/types'
8+import {atoms as a, useTheme} from '#/alf'
9import {Button, ButtonText} from '#/components/Button'
10import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
11+import {Text} from '#/components/Typography'
1213export function ErrorState({error}: {error: string}) {
14 const t = useTheme()
+2-2
src/screens/Profile/Header/Metrics.tsx
···4import {msg, plural} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
607import {Shadow} from '#/state/cache/types'
8-import {makeProfileLink} from 'lib/routes/links'
9-import {formatCount} from 'view/com/util/numeric/format'
10import {atoms as a, useTheme} from '#/alf'
11import {InlineLinkText} from '#/components/Link'
12import {Text} from '#/components/Typography'
···4import {msg, plural} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67+import {makeProfileLink} from '#/lib/routes/links'
8import {Shadow} from '#/state/cache/types'
9+import {formatCount} from '#/view/com/util/numeric/format'
010import {atoms as a, useTheme} from '#/alf'
11import {InlineLinkText} from '#/components/Link'
12import {Text} from '#/components/Typography'
+1-1
src/screens/Signup/StepCaptcha/index.tsx
···4import {useLingui} from '@lingui/react'
5import {nanoid} from 'nanoid/non-secure'
607import {createFullHandle} from '#/lib/strings/handles'
8import {logger} from '#/logger'
9-import {logEvent} from 'lib/statsig/statsig'
10import {ScreenTransition} from '#/screens/Login/ScreenTransition'
11import {useSignupContext} from '#/screens/Signup/state'
12import {CaptchaWebView} from '#/screens/Signup/StepCaptcha/CaptchaWebView'
···4import {useLingui} from '@lingui/react'
5import {nanoid} from 'nanoid/non-secure'
67+import {logEvent} from '#/lib/statsig/statsig'
8import {createFullHandle} from '#/lib/strings/handles'
9import {logger} from '#/logger'
010import {ScreenTransition} from '#/screens/Login/ScreenTransition'
11import {useSignupContext} from '#/screens/Signup/state'
12import {CaptchaWebView} from '#/screens/Signup/StepCaptcha/CaptchaWebView'
+2-2
src/screens/StarterPack/Wizard/State.tsx
···7import {GeneratorView} from '@atproto/api/dist/client/types/app/bsky/feed/defs'
8import {msg} from '@lingui/macro'
910-import {STARTER_PACK_MAX_SIZE} from 'lib/constants'
11-import {useSession} from 'state/session'
12import * as Toast from '#/view/com/util/Toast'
1314const steps = ['Details', 'Profiles', 'Feeds'] as const
···7import {GeneratorView} from '@atproto/api/dist/client/types/app/bsky/feed/defs'
8import {msg} from '@lingui/macro'
910+import {STARTER_PACK_MAX_SIZE} from '#/lib/constants'
11+import {useSession} from '#/state/session'
12import * as Toast from '#/view/com/util/Toast'
1314const steps = ['Details', 'Profiles', 'Feeds'] as const
+2-2
src/screens/StarterPack/Wizard/StepDetails.tsx
···3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56-import {useProfileQuery} from 'state/queries/profile'
7-import {useSession} from 'state/session'
8import {useWizardState} from '#/screens/StarterPack/Wizard/State'
9import {atoms as a, useTheme} from '#/alf'
10import * as TextField from '#/components/forms/TextField'
···3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {useProfileQuery} from '#/state/queries/profile'
7+import {useSession} from '#/state/session'
8import {useWizardState} from '#/screens/StarterPack/Wizard/State'
9import {atoms as a, useTheme} from '#/alf'
10import * as TextField from '#/components/forms/TextField'
+1-1
src/state/preferences/external-embeds-prefs.tsx
···1import React from 'react'
203import * as persisted from '#/state/persisted'
4-import {EmbedPlayerSource} from 'lib/strings/embed-player'
56type StateContext = persisted.Schema['externalEmbeds']
7type SetContext = (
···1import React from 'react'
23+import {EmbedPlayerSource} from '#/lib/strings/embed-player'
4import * as persisted from '#/state/persisted'
056type StateContext = persisted.Schema['externalEmbeds']
7type SetContext = (
+1-1
src/state/queries/messages/conversation.ts
···1import {ChatBskyConvoDefs} from '@atproto/api'
2import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
304import {DM_SERVICE_HEADERS} from '#/state/queries/messages/const'
5import {useOnMarkAsRead} from '#/state/queries/messages/list-converations'
6import {useAgent} from '#/state/session'
7-import {STALE} from 'state/queries'
8import {RQKEY as LIST_CONVOS_KEY} from './list-converations'
910const RQKEY_ROOT = 'convo'
···1import {ChatBskyConvoDefs} from '@atproto/api'
2import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
34+import {STALE} from '#/state/queries'
5import {DM_SERVICE_HEADERS} from '#/state/queries/messages/const'
6import {useOnMarkAsRead} from '#/state/queries/messages/list-converations'
7import {useAgent} from '#/state/session'
08import {RQKEY as LIST_CONVOS_KEY} from './list-converations'
910const RQKEY_ROOT = 'convo'
+1-1
src/state/queries/notifications/unread.tsx
···8import EventEmitter from 'eventemitter3'
910import BroadcastChannel from '#/lib/broadcast'
011import {logger} from '#/logger'
12import {useAgent, useSession} from '#/state/session'
13-import {resetBadgeCount} from 'lib/notifications/notifications'
14import {useModerationOpts} from '../../preferences/moderation-opts'
15import {truncateAndInvalidate} from '../util'
16import {RQKEY as RQKEY_NOTIFS} from './feed'
···8import EventEmitter from 'eventemitter3'
910import BroadcastChannel from '#/lib/broadcast'
11+import {resetBadgeCount} from '#/lib/notifications/notifications'
12import {logger} from '#/logger'
13import {useAgent, useSession} from '#/state/session'
014import {useModerationOpts} from '../../preferences/moderation-opts'
15import {truncateAndInvalidate} from '../util'
16import {RQKEY as RQKEY_NOTIFS} from './feed'
+3-3
src/state/queries/post-thread.ts
···11import {QueryClient, useQuery, useQueryClient} from '@tanstack/react-query'
1213import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
014import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types'
15-import {useAgent} from '#/state/session'
16-import {findAllPostsInQueryData as findAllPostsInQuoteQueryData} from 'state/queries/post-quotes'
17import {
18 findAllPostsInQueryData as findAllPostsInSearchQueryData,
19 findAllProfilesInQueryData as findAllProfilesInSearchQueryData,
20-} from 'state/queries/search-posts'
021import {
22 findAllPostsInQueryData as findAllPostsInNotifsQueryData,
23 findAllProfilesInQueryData as findAllProfilesInNotifsQueryData,
···11import {QueryClient, useQuery, useQueryClient} from '@tanstack/react-query'
1213import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
14+import {findAllPostsInQueryData as findAllPostsInQuoteQueryData} from '#/state/queries/post-quotes'
15import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types'
0016import {
17 findAllPostsInQueryData as findAllPostsInSearchQueryData,
18 findAllProfilesInQueryData as findAllProfilesInSearchQueryData,
19+} from '#/state/queries/search-posts'
20+import {useAgent} from '#/state/session'
21import {
22 findAllPostsInQueryData as findAllPostsInNotifsQueryData,
23 findAllProfilesInQueryData as findAllProfilesInNotifsQueryData,
+3-3
src/state/queries/resolve-short-link.ts
···1import {useQuery} from '@tanstack/react-query'
23-import {resolveShortLink} from 'lib/link-meta/resolve-short-link'
4-import {parseStarterPackUri} from 'lib/strings/starter-pack'
5-import {STALE} from 'state/queries/index'
67const ROOT_URI = 'https://go.bsky.app/'
8
···1import {useQuery} from '@tanstack/react-query'
23+import {resolveShortLink} from '#/lib/link-meta/resolve-short-link'
4+import {parseStarterPackUri} from '#/lib/strings/starter-pack'
5+import {STALE} from '#/state/queries/index'
67const ROOT_URI = 'https://go.bsky.app/'
8
+7-7
src/state/queries/starter-packs.ts
···18} from '@tanstack/react-query'
19import chunk from 'lodash.chunk'
2021-import {until} from 'lib/async/until'
22-import {createStarterPackList} from 'lib/generate-starterpack'
23import {
24 createStarterPackUri,
25 httpStarterPackUriToAtUri,
26 parseStarterPackUri,
27-} from 'lib/strings/starter-pack'
28-import {invalidateActorStarterPacksQuery} from 'state/queries/actor-starter-packs'
29-import {STALE} from 'state/queries/index'
30-import {invalidateListMembersQuery} from 'state/queries/list-members'
31-import {useAgent} from 'state/session'
3233const RQKEY_ROOT = 'starter-pack'
34const RQKEY = ({
···18} from '@tanstack/react-query'
19import chunk from 'lodash.chunk'
2021+import {until} from '#/lib/async/until'
22+import {createStarterPackList} from '#/lib/generate-starterpack'
23import {
24 createStarterPackUri,
25 httpStarterPackUriToAtUri,
26 parseStarterPackUri,
27+} from '#/lib/strings/starter-pack'
28+import {invalidateActorStarterPacksQuery} from '#/state/queries/actor-starter-packs'
29+import {STALE} from '#/state/queries/index'
30+import {invalidateListMembersQuery} from '#/state/queries/list-members'
31+import {useAgent} from '#/state/session'
3233const RQKEY_ROOT = 'starter-pack'
34const RQKEY = ({
+5-4
src/view/com/auth/util/HelpTip.tsx
···1import React from 'react'
2import {StyleSheet, View} from 'react-native'
3-import {Text} from 'view/com/util/text/Text'
4-import {InfoCircleIcon} from 'lib/icons'
5-import {s, colors} from 'lib/styles'
6-import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
078export function HelpTip({text}: {text: string}) {
9 const bg = useColorSchemeStyle(
···1import React from 'react'
2import {StyleSheet, View} from 'react-native'
3+4+import {useColorSchemeStyle} from '#/lib/hooks/useColorSchemeStyle'
5+import {InfoCircleIcon} from '#/lib/icons'
6+import {colors, s} from '#/lib/styles'
7+import {Text} from '#/view/com/util/text/Text'
89export function HelpTip({text}: {text: string}) {
10 const bg = useColorSchemeStyle(
+4-3
src/view/com/auth/util/TextInput.tsx
···1import React, {ComponentProps} from 'react'
2import {StyleSheet, TextInput as RNTextInput, View} from 'react-native'
03import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
4-import {IconProp} from '@fortawesome/fontawesome-svg-core'
5-import {usePalette} from 'lib/hooks/usePalette'
6-import {useTheme} from 'lib/ThemeContext'
78interface Props extends Omit<ComponentProps<typeof RNTextInput>, 'onChange'> {
9 testID?: string
···1import React, {ComponentProps} from 'react'
2import {StyleSheet, TextInput as RNTextInput, View} from 'react-native'
3+import {IconProp} from '@fortawesome/fontawesome-svg-core'
4import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
5+6+import {usePalette} from '#/lib/hooks/usePalette'
7+import {useTheme} from '#/lib/ThemeContext'
89interface Props extends Omit<ComponentProps<typeof RNTextInput>, 'onChange'> {
10 testID?: string
···14 * the facet-set.
15 */
16017import {Mark} from '@tiptap/core'
18-import {Plugin, PluginKey} from '@tiptap/pm/state'
19import {Node as ProsemirrorNode} from '@tiptap/pm/model'
020import {Decoration, DecorationSet} from '@tiptap/pm/view'
21-import {TAG_REGEX, TRAILING_PUNCTUATION_REGEX} from '@atproto/api'
2223function getDecorations(doc: ProsemirrorNode) {
24 const decorations: Decoration[] = []
···14 * the facet-set.
15 */
1617+import {TAG_REGEX, TRAILING_PUNCTUATION_REGEX} from '@atproto/api'
18import {Mark} from '@tiptap/core'
019import {Node as ProsemirrorNode} from '@tiptap/pm/model'
20+import {Plugin, PluginKey} from '@tiptap/pm/state'
21import {Decoration, DecorationSet} from '@tiptap/pm/view'
02223function getDecorations(doc: ProsemirrorNode) {
24 const decorations: Decoration[] = []
+1-1
src/view/com/composer/videos/VideoPreview.tsx
···6import {CompressedVideo} from '#/lib/media/video/types'
7import {clamp} from '#/lib/numbers'
8import {useAutoplayDisabled} from '#/state/preferences'
9-import {ExternalEmbedRemoveBtn} from 'view/com/composer/ExternalEmbedRemoveBtn'
10import {atoms as a, useTheme} from '#/alf'
11import {PlayButtonIcon} from '#/components/video/PlayButtonIcon'
12
···6import {CompressedVideo} from '#/lib/media/video/types'
7import {clamp} from '#/lib/numbers'
8import {useAutoplayDisabled} from '#/state/preferences'
9+import {ExternalEmbedRemoveBtn} from '#/view/com/composer/ExternalEmbedRemoveBtn'
10import {atoms as a, useTheme} from '#/alf'
11import {PlayButtonIcon} from '#/components/video/PlayButtonIcon'
12
+1-1
src/view/com/composer/videos/VideoPreview.web.tsx
···7import {CompressedVideo} from '#/lib/media/video/types'
8import {clamp} from '#/lib/numbers'
9import {useAutoplayDisabled} from '#/state/preferences'
010import * as Toast from '#/view/com/util/Toast'
11-import {ExternalEmbedRemoveBtn} from 'view/com/composer/ExternalEmbedRemoveBtn'
12import {atoms as a} from '#/alf'
13import {PlayButtonIcon} from '#/components/video/PlayButtonIcon'
14
···7import {CompressedVideo} from '#/lib/media/video/types'
8import {clamp} from '#/lib/numbers'
9import {useAutoplayDisabled} from '#/state/preferences'
10+import {ExternalEmbedRemoveBtn} from '#/view/com/composer/ExternalEmbedRemoveBtn'
11import * as Toast from '#/view/com/util/Toast'
012import {atoms as a} from '#/alf'
13import {PlayButtonIcon} from '#/components/video/PlayButtonIcon'
14
+2-2
src/view/com/home/HomeHeader.tsx
···2import {useNavigation} from '@react-navigation/native'
34import {usePalette} from '#/lib/hooks/usePalette'
05import {FeedSourceInfo} from '#/state/queries/feed'
6import {useSession} from '#/state/session'
7-import {NavigationProp} from 'lib/routes/types'
8-import {RenderTabBarFnProps} from 'view/com/pager/Pager'
9import {TabBar} from '../pager/TabBar'
10import {HomeHeaderLayout} from './HomeHeaderLayout'
11
···2import {useNavigation} from '@react-navigation/native'
34import {usePalette} from '#/lib/hooks/usePalette'
5+import {NavigationProp} from '#/lib/routes/types'
6import {FeedSourceInfo} from '#/state/queries/feed'
7import {useSession} from '#/state/session'
8+import {RenderTabBarFnProps} from '#/view/com/pager/Pager'
09import {TabBar} from '../pager/TabBar'
10import {HomeHeaderLayout} from './HomeHeaderLayout'
11
···23import React from 'react'
4import {View} from 'react-native'
05import {ImageSource} from '../../@types'
67type Props = {
···23import React from 'react'
4import {View} from 'react-native'
5+6import {ImageSource} from '../../@types'
78type Props = {
+6-7
src/view/com/lightbox/ImageViewing/index.tsx
···9// https://github.com/jobtoday/react-native-image-viewing
1011import React, {ComponentType, useCallback, useMemo, useState} from 'react'
12-import {StyleSheet, View, Platform} from 'react-native'
000130014import ImageItem from './components/ImageItem/ImageItem'
15-import ImageDefaultHeader from './components/ImageDefaultHeader'
16-17-import {ImageSource} from './@types'
18-import Animated, {useAnimatedStyle, withSpring} from 'react-native-reanimated'
19-import {Edge, SafeAreaView} from 'react-native-safe-area-context'
20-import PagerView from 'react-native-pager-view'
2122type Props = {
23 images: ImageSource[]
···9// https://github.com/jobtoday/react-native-image-viewing
1011import React, {ComponentType, useCallback, useMemo, useState} from 'react'
12+import {Platform, StyleSheet, View} from 'react-native'
13+import PagerView from 'react-native-pager-view'
14+import Animated, {useAnimatedStyle, withSpring} from 'react-native-reanimated'
15+import {Edge, SafeAreaView} from 'react-native-safe-area-context'
1617+import {ImageSource} from './@types'
18+import ImageDefaultHeader from './components/ImageDefaultHeader'
19import ImageItem from './components/ImageItem/ImageItem'
0000002021type Props = {
22 images: ImageSource[]
+5-5
src/view/com/modals/ChangeEmail.tsx
···3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5000006import {useModalControls} from '#/state/modals'
7import {useAgent, useSession} from '#/state/session'
8-import {usePalette} from 'lib/hooks/usePalette'
9-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
10-import {cleanError} from 'lib/strings/errors'
11-import {colors, s} from 'lib/styles'
12-import {isWeb} from 'platform/detection'
13import {ErrorMessage} from '../util/error/ErrorMessage'
14import {Button} from '../util/forms/Button'
15import {Text} from '../util/text/Text'
···3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {usePalette} from '#/lib/hooks/usePalette'
7+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
8+import {cleanError} from '#/lib/strings/errors'
9+import {colors, s} from '#/lib/styles'
10+import {isWeb} from '#/platform/detection'
11import {useModalControls} from '#/state/modals'
12import {useAgent, useSession} from '#/state/session'
0000013import {ErrorMessage} from '../util/error/ErrorMessage'
14import {Button} from '../util/forms/Button'
15import {Text} from '../util/text/Text'
+6-6
src/view/com/modals/ChangePassword.tsx
···11import {useLingui} from '@lingui/react'
12import * as EmailValidator from 'email-validator'
130000014import {logger} from '#/logger'
015import {useModalControls} from '#/state/modals'
16import {useAgent, useSession} from '#/state/session'
17-import {usePalette} from 'lib/hooks/usePalette'
18-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
19-import {cleanError, isNetworkError} from 'lib/strings/errors'
20-import {checkAndFormatResetCode} from 'lib/strings/password'
21-import {colors, s} from 'lib/styles'
22-import {isAndroid, isWeb} from 'platform/detection'
23import {ErrorMessage} from '../util/error/ErrorMessage'
24import {Button} from '../util/forms/Button'
25import {Text} from '../util/text/Text'
···11import {useLingui} from '@lingui/react'
12import * as EmailValidator from 'email-validator'
1314+import {usePalette} from '#/lib/hooks/usePalette'
15+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
16+import {cleanError, isNetworkError} from '#/lib/strings/errors'
17+import {checkAndFormatResetCode} from '#/lib/strings/password'
18+import {colors, s} from '#/lib/styles'
19import {logger} from '#/logger'
20+import {isAndroid, isWeb} from '#/platform/detection'
21import {useModalControls} from '#/state/modals'
22import {useAgent, useSession} from '#/state/session'
00000023import {ErrorMessage} from '../util/error/ErrorMessage'
24import {Button} from '../util/forms/Button'
25import {Text} from '../util/text/Text'
+4-4
src/view/com/modals/InviteCodes.tsx
···14import {msg, Trans} from '@lingui/macro'
15import {useLingui} from '@lingui/react'
160017import {makeProfileLink} from '#/lib/routes/links'
0018import {useInvitesAPI, useInvitesState} from '#/state/invites'
19import {useModalControls} from '#/state/modals'
20import {
21 InviteCodesQueryResponse,
22 useInviteCodesQuery,
23} from '#/state/queries/invites'
24-import {usePalette} from 'lib/hooks/usePalette'
25-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
26-import {cleanError} from 'lib/strings/errors'
27-import {isWeb} from 'platform/detection'
28import {ErrorMessage} from '../util/error/ErrorMessage'
29import {Button} from '../util/forms/Button'
30import {Link} from '../util/Link'
···14import {msg, Trans} from '@lingui/macro'
15import {useLingui} from '@lingui/react'
1617+import {usePalette} from '#/lib/hooks/usePalette'
18+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
19import {makeProfileLink} from '#/lib/routes/links'
20+import {cleanError} from '#/lib/strings/errors'
21+import {isWeb} from '#/platform/detection'
22import {useInvitesAPI, useInvitesState} from '#/state/invites'
23import {useModalControls} from '#/state/modals'
24import {
25 InviteCodesQueryResponse,
26 useInviteCodesQuery,
27} from '#/state/queries/invites'
000028import {ErrorMessage} from '../util/error/ErrorMessage'
29import {Button} from '../util/forms/Button'
30import {Link} from '../util/Link'
+8-8
src/view/com/modals/ListAddRemoveUsers.tsx
···12import {useLingui} from '@lingui/react'
1314import {HITSLOP_20} from '#/lib/constants'
0000000015import {useModalControls} from '#/state/modals'
16import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete'
17import {
···21 useListMembershipAddMutation,
22 useListMembershipRemoveMutation,
23} from '#/state/queries/list-memberships'
24-import {useIsKeyboardVisible} from 'lib/hooks/useIsKeyboardVisible'
25-import {usePalette} from 'lib/hooks/usePalette'
26-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
27-import {sanitizeDisplayName} from 'lib/strings/display-names'
28-import {cleanError} from 'lib/strings/errors'
29-import {sanitizeHandle} from 'lib/strings/handles'
30-import {colors, s} from 'lib/styles'
31-import {isWeb} from 'platform/detection'
32import {Button} from '../util/forms/Button'
33import {Text} from '../util/text/Text'
34import * as Toast from '../util/Toast'
···12import {useLingui} from '@lingui/react'
1314import {HITSLOP_20} from '#/lib/constants'
15+import {useIsKeyboardVisible} from '#/lib/hooks/useIsKeyboardVisible'
16+import {usePalette} from '#/lib/hooks/usePalette'
17+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
18+import {sanitizeDisplayName} from '#/lib/strings/display-names'
19+import {cleanError} from '#/lib/strings/errors'
20+import {sanitizeHandle} from '#/lib/strings/handles'
21+import {colors, s} from '#/lib/styles'
22+import {isWeb} from '#/platform/detection'
23import {useModalControls} from '#/state/modals'
24import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete'
25import {
···29 useListMembershipAddMutation,
30 useListMembershipRemoveMutation,
31} from '#/state/queries/list-memberships'
0000000032import {Button} from '../util/forms/Button'
33import {Text} from '../util/text/Text'
34import * as Toast from '../util/Toast'
+5-5
src/view/com/modals/VerifyEmail.tsx
···11import {msg, Trans} from '@lingui/macro'
12import {useLingui} from '@lingui/react'
13000014import {logger} from '#/logger'
015import {useModalControls} from '#/state/modals'
16import {useAgent, useSession} from '#/state/session'
17-import {usePalette} from 'lib/hooks/usePalette'
18-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
19-import {cleanError} from 'lib/strings/errors'
20-import {colors, s} from 'lib/styles'
21-import {isWeb} from 'platform/detection'
22import {ErrorMessage} from '../util/error/ErrorMessage'
23import {Button} from '../util/forms/Button'
24import {Text} from '../util/text/Text'
···11import {msg, Trans} from '@lingui/macro'
12import {useLingui} from '@lingui/react'
1314+import {usePalette} from '#/lib/hooks/usePalette'
15+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
16+import {cleanError} from '#/lib/strings/errors'
17+import {colors, s} from '#/lib/styles'
18import {logger} from '#/logger'
19+import {isWeb} from '#/platform/detection'
20import {useModalControls} from '#/state/modals'
21import {useAgent, useSession} from '#/state/session'
0000022import {ErrorMessage} from '../util/error/ErrorMessage'
23import {Button} from '../util/forms/Button'
24import {Text} from '../util/text/Text'
···1import React from 'react'
2import {StyleSheet} from 'react-native'
3-import {usePalette} from 'lib/hooks/usePalette'
4-import {ToggleButton} from 'view/com/util/forms/ToggleButton'
5-import {useLanguagePrefs, toPostLanguages} from '#/state/preferences/languages'
067export function LanguageToggle({
8 code2,
···1import React from 'react'
2import {StyleSheet} from 'react-native'
3+4+import {usePalette} from '#/lib/hooks/usePalette'
5+import {toPostLanguages, useLanguagePrefs} from '#/state/preferences/languages'
6+import {ToggleButton} from '#/view/com/util/forms/ToggleButton'
78export function LanguageToggle({
9 code2,
+2-1
src/view/com/pager/DraggableScrollView.tsx
···1-import {useDraggableScroll} from 'lib/hooks/useDraggableScrollView'
2import React, {ComponentProps} from 'react'
3import {ScrollView} from 'react-native'
0045export const DraggableScrollView = React.forwardRef<
6 ScrollView,
···01import React, {ComponentProps} from 'react'
2import {ScrollView} from 'react-native'
3+4+import {useDraggableScroll} from '#/lib/hooks/useDraggableScrollView'
56export const DraggableScrollView = React.forwardRef<
7 ScrollView,
+1-1
src/view/com/pager/Pager.web.tsx
···3import {flushSync} from 'react-dom'
45import {LogEvents} from '#/lib/statsig/events'
6-import {s} from 'lib/styles'
78export interface RenderTabBarFnProps {
9 selectedPage: number
···3import {flushSync} from 'react-dom'
45import {LogEvents} from '#/lib/statsig/events'
6+import {s} from '#/lib/styles'
78export interface RenderTabBarFnProps {
9 selectedPage: number
+2-2
src/view/com/post-thread/PostLikedBy.tsx
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
506import {cleanError} from '#/lib/strings/errors'
7import {logger} from '#/logger'
08import {useLikedByQuery} from '#/state/queries/post-liked-by'
9import {useResolveUriQuery} from '#/state/queries/resolve-uri'
10-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
11-import {isWeb} from 'platform/detection'
12import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard'
13import {List} from '#/view/com/util/List'
14import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
7import {cleanError} from '#/lib/strings/errors'
8import {logger} from '#/logger'
9+import {isWeb} from '#/platform/detection'
10import {useLikedByQuery} from '#/state/queries/post-liked-by'
11import {useResolveUriQuery} from '#/state/queries/resolve-uri'
0012import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard'
13import {List} from '#/view/com/util/List'
14import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
+3-3
src/view/com/post-thread/PostQuotes.tsx
···7import {msg} from '@lingui/macro'
8import {useLingui} from '@lingui/react'
9010import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
11import {cleanError} from '#/lib/strings/errors'
12import {logger} from '#/logger'
013import {useModerationOpts} from '#/state/preferences/moderation-opts'
14import {usePostQuotesQuery} from '#/state/queries/post-quotes'
15import {useResolveUriQuery} from '#/state/queries/resolve-uri'
16-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
17-import {isWeb} from 'platform/detection'
18-import {Post} from 'view/com/post/Post'
19import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
20import {List} from '../util/List'
21
···7import {msg} from '@lingui/macro'
8import {useLingui} from '@lingui/react'
910+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
11import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
12import {cleanError} from '#/lib/strings/errors'
13import {logger} from '#/logger'
14+import {isWeb} from '#/platform/detection'
15import {useModerationOpts} from '#/state/preferences/moderation-opts'
16import {usePostQuotesQuery} from '#/state/queries/post-quotes'
17import {useResolveUriQuery} from '#/state/queries/resolve-uri'
18+import {Post} from '#/view/com/post/Post'
0019import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
20import {List} from '../util/List'
21
+1-1
src/view/com/post-thread/PostRepostedBy.tsx
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
506import {cleanError} from '#/lib/strings/errors'
7import {logger} from '#/logger'
8import {usePostRepostedByQuery} from '#/state/queries/post-reposted-by'
9import {useResolveUriQuery} from '#/state/queries/resolve-uri'
10-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
11import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard'
12import {List} from '#/view/com/util/List'
13import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
7import {cleanError} from '#/lib/strings/errors'
8import {logger} from '#/logger'
9import {usePostRepostedByQuery} from '#/state/queries/post-reposted-by'
10import {useResolveUriQuery} from '#/state/queries/resolve-uri'
011import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard'
12import {List} from '#/view/com/util/List'
13import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
+7-7
src/view/com/post-thread/PostThread.tsx
···7import {msg, Trans} from '@lingui/macro'
8import {useLingui} from '@lingui/react'
9000010import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
11import {clamp} from '#/lib/numbers'
12import {ScrollProvider} from '#/lib/ScrollContext'
0013import {isAndroid, isNative, isWeb} from '#/platform/detection'
14import {useModerationOpts} from '#/state/preferences/moderation-opts'
15import {
···26import {useSession} from '#/state/session'
27import {useComposerControls} from '#/state/shell'
28import {useMergedThreadgateHiddenReplies} from '#/state/threadgate-hidden-replies'
29-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
30-import {useMinimalShellFabTransform} from 'lib/hooks/useMinimalShellTransform'
31-import {useSetTitle} from 'lib/hooks/useSetTitle'
32-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
33-import {sanitizeDisplayName} from 'lib/strings/display-names'
34-import {cleanError} from 'lib/strings/errors'
35-import {CenteredView} from 'view/com/util/Views'
36import {atoms as a, useTheme} from '#/alf'
37import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
38import {Text} from '#/components/Typography'
···7import {msg, Trans} from '@lingui/macro'
8import {useLingui} from '@lingui/react'
910+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
11+import {useMinimalShellFabTransform} from '#/lib/hooks/useMinimalShellTransform'
12+import {useSetTitle} from '#/lib/hooks/useSetTitle'
13+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
14import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
15import {clamp} from '#/lib/numbers'
16import {ScrollProvider} from '#/lib/ScrollContext'
17+import {sanitizeDisplayName} from '#/lib/strings/display-names'
18+import {cleanError} from '#/lib/strings/errors'
19import {isAndroid, isNative, isWeb} from '#/platform/detection'
20import {useModerationOpts} from '#/state/preferences/moderation-opts'
21import {
···32import {useSession} from '#/state/session'
33import {useComposerControls} from '#/state/shell'
34import {useMergedThreadgateHiddenReplies} from '#/state/threadgate-hidden-replies'
35+import {CenteredView} from '#/view/com/util/Views'
00000036import {atoms as a, useTheme} from '#/alf'
37import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
38import {Text} from '#/components/Typography'
+9-8
src/view/com/posts/CustomFeedEmptyState.tsx
···1import React from 'react'
2import {StyleSheet, View} from 'react-native'
3-import {useNavigation} from '@react-navigation/native'
4import {
5 FontAwesomeIcon,
6 FontAwesomeIconStyle,
7} from '@fortawesome/react-native-fontawesome'
8-import {Text} from '../util/text/Text'
00000009import {Button} from '../util/forms/Button'
10-import {MagnifyingGlassIcon} from 'lib/icons'
11-import {NavigationProp} from 'lib/routes/types'
12-import {usePalette} from 'lib/hooks/usePalette'
13-import {s} from 'lib/styles'
14-import {isWeb} from 'platform/detection'
15-import {Trans} from '@lingui/macro'
1617export function CustomFeedEmptyState() {
18 const pal = usePalette('default')
···1import React from 'react'
2import {StyleSheet, View} from 'react-native'
03import {
4 FontAwesomeIcon,
5 FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
7+import {Trans} from '@lingui/macro'
8+import {useNavigation} from '@react-navigation/native'
9+10+import {usePalette} from '#/lib/hooks/usePalette'
11+import {MagnifyingGlassIcon} from '#/lib/icons'
12+import {NavigationProp} from '#/lib/routes/types'
13+import {s} from '#/lib/styles'
14+import {isWeb} from '#/platform/detection'
15import {Button} from '../util/forms/Button'
16+import {Text} from '../util/text/Text'
000001718export function CustomFeedEmptyState() {
19 const pal = usePalette('default')
+3-2
src/view/com/posts/DiscoverFallbackHeader.tsx
···1import React from 'react'
2import {View} from 'react-native'
3import {Trans} from '@lingui/macro'
4-import {Text} from '../util/text/Text'
5import {usePalette} from '#/lib/hooks/usePalette'
06import {TextLink} from '../util/Link'
7-import {InfoCircleIcon} from '#/lib/icons'
89export function DiscoverFallbackHeader() {
10 const pal = usePalette('default')
···1import React from 'react'
2import {View} from 'react-native'
3import {Trans} from '@lingui/macro'
4+5import {usePalette} from '#/lib/hooks/usePalette'
6+import {InfoCircleIcon} from '#/lib/icons'
7import {TextLink} from '../util/Link'
8+import {Text} from '../util/text/Text'
910export function DiscoverFallbackHeader() {
11 const pal = usePalette('default')
+2-2
src/view/com/posts/FeedErrorMessage.tsx
···5import {useLingui} from '@lingui/react'
6import {useNavigation} from '@react-navigation/native'
7008import {cleanError} from '#/lib/strings/errors'
9import {logger} from '#/logger'
10import {FeedDescriptor} from '#/state/queries/post-feed'
11import {useRemoveFeedMutation} from '#/state/queries/preferences'
12-import {usePalette} from 'lib/hooks/usePalette'
13-import {NavigationProp} from 'lib/routes/types'
14import * as Prompt from '#/components/Prompt'
15import {EmptyState} from '../util/EmptyState'
16import {ErrorMessage} from '../util/error/ErrorMessage'
···5import {useLingui} from '@lingui/react'
6import {useNavigation} from '@react-navigation/native'
78+import {usePalette} from '#/lib/hooks/usePalette'
9+import {NavigationProp} from '#/lib/routes/types'
10import {cleanError} from '#/lib/strings/errors'
11import {logger} from '#/logger'
12import {FeedDescriptor} from '#/state/queries/post-feed'
13import {useRemoveFeedMutation} from '#/state/queries/preferences'
0014import * as Prompt from '#/components/Prompt'
15import {EmptyState} from '../util/EmptyState'
16import {ErrorMessage} from '../util/error/ErrorMessage'
+5-5
src/view/com/posts/FollowingEmptyState.tsx
···7import {Trans} from '@lingui/macro'
8import {useNavigation} from '@react-navigation/native'
910-import {usePalette} from 'lib/hooks/usePalette'
11-import {MagnifyingGlassIcon} from 'lib/icons'
12-import {NavigationProp} from 'lib/routes/types'
13-import {s} from 'lib/styles'
14-import {isWeb} from 'platform/detection'
15import {Button} from '../util/forms/Button'
16import {Text} from '../util/text/Text'
17
···7import {Trans} from '@lingui/macro'
8import {useNavigation} from '@react-navigation/native'
910+import {usePalette} from '#/lib/hooks/usePalette'
11+import {MagnifyingGlassIcon} from '#/lib/icons'
12+import {NavigationProp} from '#/lib/routes/types'
13+import {s} from '#/lib/styles'
14+import {isWeb} from '#/platform/detection'
15import {Button} from '../util/forms/Button'
16import {Text} from '../util/text/Text'
17
+4-4
src/view/com/posts/FollowingEndOfFeed.tsx
···7import {Trans} from '@lingui/macro'
8import {useNavigation} from '@react-navigation/native'
910-import {usePalette} from 'lib/hooks/usePalette'
11-import {NavigationProp} from 'lib/routes/types'
12-import {s} from 'lib/styles'
13-import {isWeb} from 'platform/detection'
14import {Button} from '../util/forms/Button'
15import {Text} from '../util/text/Text'
16
···7import {Trans} from '@lingui/macro'
8import {useNavigation} from '@react-navigation/native'
910+import {usePalette} from '#/lib/hooks/usePalette'
11+import {NavigationProp} from '#/lib/routes/types'
12+import {s} from '#/lib/styles'
13+import {isWeb} from '#/platform/detection'
14import {Button} from '../util/forms/Button'
15import {Text} from '../util/text/Text'
16
+3-3
src/view/com/profile/ProfileFollowers.tsx
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
506import {cleanError} from '#/lib/strings/errors'
7import {logger} from '#/logger'
08import {useProfileFollowersQuery} from '#/state/queries/profile-followers'
9import {useResolveDidQuery} from '#/state/queries/resolve-uri'
10-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
11-import {isWeb} from 'platform/detection'
12-import {useSession} from 'state/session'
13import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
14import {List} from '../util/List'
15import {ProfileCardWithFollowBtn} from './ProfileCard'
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
7import {cleanError} from '#/lib/strings/errors'
8import {logger} from '#/logger'
9+import {isWeb} from '#/platform/detection'
10import {useProfileFollowersQuery} from '#/state/queries/profile-followers'
11import {useResolveDidQuery} from '#/state/queries/resolve-uri'
12+import {useSession} from '#/state/session'
0013import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
14import {List} from '../util/List'
15import {ProfileCardWithFollowBtn} from './ProfileCard'
+3-3
src/view/com/profile/ProfileFollows.tsx
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
506import {cleanError} from '#/lib/strings/errors'
7import {logger} from '#/logger'
08import {useProfileFollowsQuery} from '#/state/queries/profile-follows'
9import {useResolveDidQuery} from '#/state/queries/resolve-uri'
10-import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
11-import {isWeb} from 'platform/detection'
12-import {useSession} from 'state/session'
13import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
14import {List} from '../util/List'
15import {ProfileCardWithFollowBtn} from './ProfileCard'
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
7import {cleanError} from '#/lib/strings/errors'
8import {logger} from '#/logger'
9+import {isWeb} from '#/platform/detection'
10import {useProfileFollowsQuery} from '#/state/queries/profile-follows'
11import {useResolveDidQuery} from '#/state/queries/resolve-uri'
12+import {useSession} from '#/state/session'
0013import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
14import {List} from '../util/List'
15import {ProfileCardWithFollowBtn} from './ProfileCard'
+2-2
src/view/com/util/AccountDropdownBtn.tsx
···7import {msg} from '@lingui/macro'
8import {useLingui} from '@lingui/react'
90010import {SessionAccount, useSessionApi} from '#/state/session'
11-import {usePalette} from 'lib/hooks/usePalette'
12-import {s} from 'lib/styles'
13import {useDialogControl} from '#/components/Dialog'
14import * as Prompt from '#/components/Prompt'
15import * as Toast from '../../com/util/Toast'
···7import {msg} from '@lingui/macro'
8import {useLingui} from '@lingui/react'
910+import {usePalette} from '#/lib/hooks/usePalette'
11+import {s} from '#/lib/styles'
12import {SessionAccount, useSessionApi} from '#/state/session'
0013import {useDialogControl} from '#/components/Dialog'
14import * as Prompt from '#/components/Prompt'
15import * as Toast from '../../com/util/Toast'
+3-3
src/view/com/util/EmptyState.tsx
···6 FontAwesomeIconStyle,
7} from '@fortawesome/react-native-fontawesome'
809import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
10-import {usePalette} from 'lib/hooks/usePalette'
11-import {UserGroupIcon} from 'lib/icons'
12-import {isWeb} from 'platform/detection'
13import {Growth_Stroke2_Corner0_Rounded as Growth} from '#/components/icons/Growth'
14import {Text} from './text/Text'
15
···6 FontAwesomeIconStyle,
7} from '@fortawesome/react-native-fontawesome'
89+import {usePalette} from '#/lib/hooks/usePalette'
10import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
11+import {UserGroupIcon} from '#/lib/icons'
12+import {isWeb} from '#/platform/detection'
013import {Growth_Stroke2_Corner0_Rounded as Growth} from '#/components/icons/Growth'
14import {Text} from './text/Text'
15
+5-4
src/view/com/util/EmptyStateWithButton.tsx
···1import React from 'react'
2import {StyleSheet, View} from 'react-native'
03import {
4 FontAwesomeIcon,
5 FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
7-import {IconProp} from '@fortawesome/fontawesome-svg-core'
0008import {Text} from './text/Text'
9-import {Button} from './forms/Button'
10-import {usePalette} from 'lib/hooks/usePalette'
11-import {s} from 'lib/styles'
1213interface Props {
14 testID?: string
···1import React from 'react'
2import {StyleSheet, View} from 'react-native'
3+import {IconProp} from '@fortawesome/fontawesome-svg-core'
4import {
5 FontAwesomeIcon,
6 FontAwesomeIconStyle,
7} from '@fortawesome/react-native-fontawesome'
8+9+import {usePalette} from '#/lib/hooks/usePalette'
10+import {s} from '#/lib/styles'
11+import {Button} from './forms/Button'
12import {Text} from './text/Text'
0001314interface Props {
15 testID?: string
+4-3
src/view/com/util/FeedInfoText.tsx
···1import React from 'react'
2import {StyleProp, StyleSheet, TextStyle} from 'react-native'
00003import {TextLinkOnWebOnly} from './Link'
4import {LoadingPlaceholder} from './LoadingPlaceholder'
5-import {TypographyVariant} from 'lib/ThemeContext'
6-import {sanitizeDisplayName} from 'lib/strings/display-names'
7-import {useFeedSourceInfoQuery} from '#/state/queries/feed'
89export function FeedNameText({
10 type = 'md',
···1import React from 'react'
2import {StyleProp, StyleSheet, TextStyle} from 'react-native'
3+4+import {sanitizeDisplayName} from '#/lib/strings/display-names'
5+import {TypographyVariant} from '#/lib/ThemeContext'
6+import {useFeedSourceInfoQuery} from '#/state/queries/feed'
7import {TextLinkOnWebOnly} from './Link'
8import {LoadingPlaceholder} from './LoadingPlaceholder'
000910export function FeedNameText({
11 type = 'md',
+2-1
src/view/com/util/LoadMoreRetryBtn.tsx
···4 FontAwesomeIcon,
5 FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
007import {Button} from './forms/Button'
8import {Text} from './text/Text'
9-import {usePalette} from 'lib/hooks/usePalette'
1011export function LoadMoreRetryBtn({
12 label,
···4 FontAwesomeIcon,
5 FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
7+8+import {usePalette} from '#/lib/hooks/usePalette'
9import {Button} from './forms/Button'
10import {Text} from './text/Text'
01112export function LoadMoreRetryBtn({
13 label,
+2-1
src/view/com/util/LoadingScreen.tsx
···1import React from 'react'
2import {ActivityIndicator, View} from 'react-native'
3-import {s} from 'lib/styles'
04import {CenteredView} from './Views'
56export function LoadingScreen() {
···1import React from 'react'
2import {ActivityIndicator, View} from 'react-native'
3+4+import {s} from '#/lib/styles'
5import {CenteredView} from './Views'
67export function LoadingScreen() {
+1-1
src/view/com/util/MainScrollProvider.tsx
···9import EventEmitter from 'eventemitter3'
1011import {ScrollProvider} from '#/lib/ScrollContext'
012import {useMinimalShellMode} from '#/state/shell'
13import {useShellLayout} from '#/state/shell/shell-layout'
14-import {isNative, isWeb} from 'platform/detection'
1516const WEB_HIDE_SHELL_THRESHOLD = 200
17
···9import EventEmitter from 'eventemitter3'
1011import {ScrollProvider} from '#/lib/ScrollContext'
12+import {isNative, isWeb} from '#/platform/detection'
13import {useMinimalShellMode} from '#/state/shell'
14import {useShellLayout} from '#/state/shell/shell-layout'
01516const WEB_HIDE_SHELL_THRESHOLD = 200
17
+5-4
src/view/com/util/Selector.tsx
···1-import React, {createRef, useState, useMemo, useRef} from 'react'
2import {Animated, Pressable, StyleSheet, View} from 'react-native'
00003import {Text} from './text/Text'
4-import {usePalette} from 'lib/hooks/usePalette'
5-import {useLingui} from '@lingui/react'
6-import {msg} from '@lingui/macro'
78interface Layout {
9 x: number
···1+import React, {createRef, useMemo, useRef, useState} from 'react'
2import {Animated, Pressable, StyleSheet, View} from 'react-native'
3+import {msg} from '@lingui/macro'
4+import {useLingui} from '@lingui/react'
5+6+import {usePalette} from '#/lib/hooks/usePalette'
7import {Text} from './text/Text'
00089interface Layout {
10 x: number
+9-8
src/view/com/util/ViewSelector.tsx
···1import React, {useEffect, useState} from 'react'
2import {
3- NativeSyntheticEvent,
4 NativeScrollEvent,
05 Pressable,
6 RefreshControl,
07 StyleSheet,
8 View,
9- ScrollView,
10} from 'react-native'
11-import {FlatList_INTERNAL} from './Views'
12-import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
000013import {Text} from './text/Text'
14-import {usePalette} from 'lib/hooks/usePalette'
15-import {clamp} from 'lib/numbers'
16-import {s, colors} from 'lib/styles'
17-import {isAndroid} from 'platform/detection'
1819const HEADER_ITEM = {_reactKey: '__header__'}
20const SELECTOR_ITEM = {_reactKey: '__selector__'}
···1import React, {useEffect, useState} from 'react'
2import {
03 NativeScrollEvent,
4+ NativeSyntheticEvent,
5 Pressable,
6 RefreshControl,
7+ ScrollView,
8 StyleSheet,
9 View,
010} from 'react-native'
11+12+import {useColorSchemeStyle} from '#/lib/hooks/useColorSchemeStyle'
13+import {usePalette} from '#/lib/hooks/usePalette'
14+import {clamp} from '#/lib/numbers'
15+import {colors, s} from '#/lib/styles'
16+import {isAndroid} from '#/platform/detection'
17import {Text} from './text/Text'
18+import {FlatList_INTERNAL} from './Views'
0001920const HEADER_ITEM = {_reactKey: '__header__'}
21const SELECTOR_ITEM = {_reactKey: '__selector__'}
+3-3
src/view/com/util/Views.web.tsx
···23} from 'react-native'
24import Animated from 'react-native-reanimated'
2526-import {usePalette} from 'lib/hooks/usePalette'
27-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
28-import {addStyle} from 'lib/styles'
2930interface AddedProps {
31 desktopFixedHeight?: boolean | number
···23} from 'react-native'
24import Animated from 'react-native-reanimated'
2526+import {usePalette} from '#/lib/hooks/usePalette'
27+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
28+import {addStyle} from '#/lib/styles'
2930interface AddedProps {
31 desktopFixedHeight?: boolean | number
+2-1
src/view/com/util/anim/TriggerableAnimated.tsx
···1import React from 'react'
2import {Animated, StyleProp, View, ViewStyle} from 'react-native'
3-import {useAnimatedValue} from 'lib/hooks/useAnimatedValue'
045type CreateAnimFn = (interp: Animated.Value) => Animated.CompositeAnimation
6type FinishCb = () => void
···1import React from 'react'
2import {Animated, StyleProp, View, ViewStyle} from 'react-native'
3+4+import {useAnimatedValue} from '#/lib/hooks/useAnimatedValue'
56type CreateAnimFn = (interp: Animated.Value) => Animated.CompositeAnimation
7type FinishCb = () => void
+6-5
src/view/com/util/error/ErrorMessage.tsx
···1import React from 'react'
2import {
03 StyleSheet,
4 TouchableOpacity,
5- StyleProp,
6 View,
7 ViewStyle,
8} from 'react-native'
···10 FontAwesomeIcon,
11 FontAwesomeIconStyle,
12} from '@fortawesome/react-native-fontawesome'
0000013import {Text} from '../text/Text'
14-import {useTheme} from 'lib/ThemeContext'
15-import {usePalette} from 'lib/hooks/usePalette'
16-import {useLingui} from '@lingui/react'
17-import {msg} from '@lingui/macro'
1819export function ErrorMessage({
20 message,
···1import React from 'react'
2import {
3+ StyleProp,
4 StyleSheet,
5 TouchableOpacity,
06 View,
7 ViewStyle,
8} from 'react-native'
···10 FontAwesomeIcon,
11 FontAwesomeIconStyle,
12} from '@fortawesome/react-native-fontawesome'
13+import {msg} from '@lingui/macro'
14+import {useLingui} from '@lingui/react'
15+16+import {usePalette} from '#/lib/hooks/usePalette'
17+import {useTheme} from '#/lib/ThemeContext'
18import {Text} from '../text/Text'
00001920export function ErrorMessage({
21 message,
+8-7
src/view/com/util/error/ErrorScreen.tsx
···4 FontAwesomeIcon,
5 FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
000000007import {Text} from '../text/Text'
8-import {useTheme} from 'lib/ThemeContext'
9-import {usePalette} from 'lib/hooks/usePalette'
10-import {Button} from '../forms/Button'
11import {CenteredView} from '../Views'
12-import {Trans, msg} from '@lingui/macro'
13-import {useLingui} from '@lingui/react'
14-import {ViewHeader} from 'view/com/util/ViewHeader'
15-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
1617export function ErrorScreen({
18 title,
···4 FontAwesomeIcon,
5 FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
7+import {msg, Trans} from '@lingui/macro'
8+import {useLingui} from '@lingui/react'
9+10+import {usePalette} from '#/lib/hooks/usePalette'
11+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
12+import {useTheme} from '#/lib/ThemeContext'
13+import {ViewHeader} from '#/view/com/util/ViewHeader'
14+import {Button} from '../forms/Button'
15import {Text} from '../text/Text'
00016import {CenteredView} from '../Views'
00001718export function ErrorScreen({
19 title,
+4-4
src/view/com/util/forms/DateInput.tsx
···7} from '@fortawesome/react-native-fontawesome'
8import {useLingui} from '@lingui/react'
910-import {usePalette} from 'lib/hooks/usePalette'
11-import {TypographyVariant} from 'lib/ThemeContext'
12-import {useTheme} from 'lib/ThemeContext'
13-import {isAndroid, isIOS} from 'platform/detection'
14import {Text} from '../text/Text'
15import {Button, ButtonType} from './Button'
16
···7} from '@fortawesome/react-native-fontawesome'
8import {useLingui} from '@lingui/react'
910+import {usePalette} from '#/lib/hooks/usePalette'
11+import {TypographyVariant} from '#/lib/ThemeContext'
12+import {useTheme} from '#/lib/ThemeContext'
13+import {isAndroid, isIOS} from '#/platform/detection'
14import {Text} from '../text/Text'
15import {Button, ButtonType} from './Button'
16
+3-2
src/view/com/util/forms/DateInput.web.tsx
···1-import React, {useState, useCallback} from 'react'
2import {StyleProp, StyleSheet, TextStyle, View, ViewStyle} from 'react-native'
3// @ts-ignore types not available -prf
4import {unstable_createElement} from 'react-native-web'
5-import {usePalette} from 'lib/hooks/usePalette'
067interface Props {
8 testID?: string
···1+import React, {useCallback, useState} from 'react'
2import {StyleProp, StyleSheet, TextStyle, View, ViewStyle} from 'react-native'
3// @ts-ignore types not available -prf
4import {unstable_createElement} from 'react-native-web'
5+6+import {usePalette} from '#/lib/hooks/usePalette'
78interface Props {
9 testID?: string
+1-1
src/view/com/util/forms/RadioGroup.tsx
···1import React, {useState} from 'react'
2import {View} from 'react-native'
34-import {s} from 'lib/styles'
5import {ButtonType} from './Button'
6import {RadioButton} from './RadioButton'
7
···1import React, {useState} from 'react'
2import {View} from 'react-native'
34+import {s} from '#/lib/styles'
5import {ButtonType} from './Button'
6import {RadioButton} from './RadioButton'
7
+4-3
src/view/com/util/forms/SelectableBtn.tsx
···1import React from 'react'
2-import {Pressable, ViewStyle, StyleProp, StyleSheet} from 'react-native'
0003import {Text} from '../text/Text'
4-import {usePalette} from 'lib/hooks/usePalette'
5-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
67interface SelectableBtnProps {
8 testID?: string
···1import React from 'react'
2+import {Pressable, StyleProp, StyleSheet, ViewStyle} from 'react-native'
3+4+import {usePalette} from '#/lib/hooks/usePalette'
5+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
6import {Text} from '../text/Text'
0078interface SelectableBtnProps {
9 testID?: string
+3-2
src/view/com/util/layouts/withBreakpoints.tsx
···1import React from 'react'
2-import {isNative} from 'platform/detection'
3-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
045export const withBreakpoints = <P extends object>(
6 Mobile: React.ComponentType<P>,
···1import React from 'react'
2+3+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
4+import {isNative} from '#/platform/detection'
56export const withBreakpoints = <P extends object>(
7 Mobile: React.ComponentType<P>,
+10-9
src/view/com/util/text/RichText.tsx
···1import React from 'react'
2-import {TextStyle, StyleProp} from 'react-native'
3-import {RichText as RichTextObj, AppBskyRichtextFacet} from '@atproto/api'
000000004import {TextLink} from '../Link'
5import {Text} from './Text'
6-import {lh} from 'lib/styles'
7-import {toShortUrl} from 'lib/strings/url-helpers'
8-import {useTheme, TypographyVariant} from 'lib/ThemeContext'
9-import {usePalette} from 'lib/hooks/usePalette'
10-import {makeTagLink} from 'lib/routes/links'
11-import {TagMenu, useTagMenuControl} from '#/components/TagMenu'
12-import {isNative} from '#/platform/detection'
1314const WORD_WRAP = {wordWrap: 1}
15
···1import React from 'react'
2+import {StyleProp, TextStyle} from 'react-native'
3+import {AppBskyRichtextFacet, RichText as RichTextObj} from '@atproto/api'
4+5+import {usePalette} from '#/lib/hooks/usePalette'
6+import {makeTagLink} from '#/lib/routes/links'
7+import {toShortUrl} from '#/lib/strings/url-helpers'
8+import {lh} from '#/lib/styles'
9+import {TypographyVariant, useTheme} from '#/lib/ThemeContext'
10+import {isNative} from '#/platform/detection'
11+import {TagMenu, useTagMenuControl} from '#/components/TagMenu'
12import {TextLink} from '../Link'
13import {Text} from './Text'
00000001415const WORD_WRAP = {wordWrap: 1}
16
+1-1
src/view/icons/Logotype.tsx
···1import React from 'react'
2-import Svg, {Path, SvgProps, PathProps} from 'react-native-svg'
34import {usePalette} from '#/lib/hooks/usePalette'
5
···1import React from 'react'
2+import Svg, {Path, PathProps, SvgProps} from 'react-native-svg'
34import {usePalette} from '#/lib/hooks/usePalette'
5
+1-1
src/view/screens/Settings/Email2FAToggle.tsx
···45import {useModalControls} from '#/state/modals'
6import {useAgent, useSession} from '#/state/session'
7-import {ToggleButton} from 'view/com/util/forms/ToggleButton'
8import {useDialogControl} from '#/components/Dialog'
9import {DisableEmail2FADialog} from './DisableEmail2FADialog'
10
···45import {useModalControls} from '#/state/modals'
6import {useAgent, useSession} from '#/state/session'
7+import {ToggleButton} from '#/view/com/util/forms/ToggleButton'
8import {useDialogControl} from '#/components/Dialog'
9import {DisableEmail2FADialog} from './DisableEmail2FADialog'
10
+2-2
src/view/screens/Storybook/Breakpoints.tsx
···1import React from 'react'
2import {View} from 'react-native'
34-import {atoms as a, useTheme, useBreakpoints} from '#/alf'
5-import {Text, H3} from '#/components/Typography'
67export function Breakpoints() {
8 const t = useTheme()
···1import React from 'react'
2import {View} from 'react-native'
34+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
5+import {H3, Text} from '#/components/Typography'
67export function Breakpoints() {
8 const t = useTheme()
+2-2
src/view/screens/Storybook/ListContained.tsx
···1import React from 'react'
2import {FlatList, View} from 'react-native'
34-import {ScrollProvider} from 'lib/ScrollContext'
5-import {List} from 'view/com/util/List'
6import {Button, ButtonText} from '#/components/Button'
7import * as Toggle from '#/components/forms/Toggle'
8import {Text} from '#/components/Typography'
···1import React from 'react'
2import {FlatList, View} from 'react-native'
34+import {ScrollProvider} from '#/lib/ScrollContext'
5+import {List} from '#/view/com/util/List'
6import {Button, ButtonText} from '#/components/Button'
7import * as Toggle from '#/components/forms/Toggle'
8import {Text} from '#/components/Typography'
+1-1
src/view/screens/Storybook/Spacing.tsx
···2import {View} from 'react-native'
34import {atoms as a, useTheme} from '#/alf'
5-import {Text, H1} from '#/components/Typography'
67export function Spacing() {
8 const t = useTheme()
···2import {View} from 'react-native'
34import {atoms as a, useTheme} from '#/alf'
5+import {H1, Text} from '#/components/Typography'
67export function Spacing() {
8 const t = useTheme()
+1-1
src/view/screens/Storybook/Typography.tsx
···2import {View} from 'react-native'
34import {atoms as a} from '#/alf'
5-import {Text} from '#/components/Typography'
6import {RichText} from '#/components/RichText'
078export function Typography() {
9 return (
···2import {View} from 'react-native'
34import {atoms as a} from '#/alf'
05import {RichText} from '#/components/RichText'
6+import {Text} from '#/components/Typography'
78export function Typography() {
9 return (
+3-3
src/view/shell/bottom-bar/BottomBarWeb.tsx
···13import {makeProfileLink} from '#/lib/routes/links'
14import {CommonNavigatorParams} from '#/lib/routes/types'
15import {s} from '#/lib/styles'
0016import {useSession} from '#/state/session'
17import {useLoggedOutViewControls} from '#/state/shell/logged-out'
18import {useCloseAllActiveElements} from '#/state/util'
19-import {useUnreadMessageCount} from 'state/queries/messages/list-converations'
20-import {useUnreadNotifications} from 'state/queries/notifications/unread'
21import {Button} from '#/view/com/util/forms/Button'
022import {Text} from '#/view/com/util/text/Text'
23import {Logo} from '#/view/icons/Logo'
24import {Logotype} from '#/view/icons/Logotype'
25-import {Link} from 'view/com/util/Link'
26import {
27 Bell_Filled_Corner0_Rounded as BellFilled,
28 Bell_Stroke2_Corner0_Rounded as Bell,
···13import {makeProfileLink} from '#/lib/routes/links'
14import {CommonNavigatorParams} from '#/lib/routes/types'
15import {s} from '#/lib/styles'
16+import {useUnreadMessageCount} from '#/state/queries/messages/list-converations'
17+import {useUnreadNotifications} from '#/state/queries/notifications/unread'
18import {useSession} from '#/state/session'
19import {useLoggedOutViewControls} from '#/state/shell/logged-out'
20import {useCloseAllActiveElements} from '#/state/util'
0021import {Button} from '#/view/com/util/forms/Button'
22+import {Link} from '#/view/com/util/Link'
23import {Text} from '#/view/com/util/text/Text'
24import {Logo} from '#/view/icons/Logo'
25import {Logotype} from '#/view/icons/Logotype'
026import {
27 Bell_Filled_Corner0_Rounded as BellFilled,
28 Bell_Stroke2_Corner0_Rounded as Bell,