about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorSamuel Newman <mozzius@protonmail.com>2025-09-09 18:38:21 +0300
committerGitHub <noreply@github.com>2025-09-09 08:38:21 -0700
commit53e43a957c2e0f3f020c34653cbf5029ec6dd8bb (patch)
tree71f93d1c41d64109e600bbe91056b4b4e07c83e1 /src
parentbb30b592d787870adc4b4d3e5029d8dc3125f7e7 (diff)
downloadvoidsky-53e43a957c2e0f3f020c34653cbf5029ec6dd8bb.tar.zst
run `yarn lint --fix` (#9013)
Diffstat (limited to 'src')
-rw-r--r--src/Splash.tsx2
-rw-r--r--src/alf/themes.ts2
-rw-r--r--src/alf/types.ts2
-rw-r--r--src/alf/util/themeSelector.ts2
-rw-r--r--src/alf/util/useColorModeTheme.ts4
-rw-r--r--src/alf/util/useGutters.ts2
-rw-r--r--src/components/Dialog/utils.ts2
-rw-r--r--src/components/Fill.tsx4
-rw-r--r--src/components/GradientFill.tsx2
-rw-r--r--src/components/IconCircle.tsx8
-rw-r--r--src/components/LabelingServiceCard/index.tsx8
-rw-r--r--src/components/LikedByList.tsx2
-rw-r--r--src/components/LinearGradientBackground.tsx4
-rw-r--r--src/components/Loader.tsx2
-rw-r--r--src/components/Loader.web.tsx2
-rw-r--r--src/components/MediaInsetBorder.tsx4
-rw-r--r--src/components/Menu/types.ts16
-rw-r--r--src/components/NewskieDialog.tsx2
-rw-r--r--src/components/Pills.tsx4
-rw-r--r--src/components/ProgressGuide/List.tsx2
-rw-r--r--src/components/ReportDialog/SelectLabelerView.tsx4
-rw-r--r--src/components/ReportDialog/SelectReportOptionView.tsx9
-rw-r--r--src/components/ReportDialog/SubmitView.tsx6
-rw-r--r--src/components/ReportDialog/index.tsx8
-rw-r--r--src/components/ReportDialog/types.ts2
-rw-r--r--src/components/RichTextTag.tsx4
-rw-r--r--src/components/StarterPack/Main/PostsList.tsx6
-rw-r--r--src/components/StarterPack/Main/ProfilesList.tsx17
-rw-r--r--src/components/StarterPack/QrCode.tsx2
-rw-r--r--src/components/StarterPack/Wizard/ScreenTransition.tsx4
-rw-r--r--src/components/SubtleWebHover.tsx2
-rw-r--r--src/components/TrendingTopics.tsx8
-rw-r--r--src/components/VideoPostCard.tsx8
-rw-r--r--src/components/anim/AnimatedCheck.tsx2
-rw-r--r--src/components/dialogs/Embed.tsx2
-rw-r--r--src/components/dialogs/MutedWords.tsx4
-rw-r--r--src/components/dms/BlockedByListDialog.tsx4
-rw-r--r--src/components/dms/LeaveConvoPrompt.tsx4
-rw-r--r--src/components/dms/MessagesListBlockedFooter.tsx4
-rw-r--r--src/components/dms/ReportConversationPrompt.tsx2
-rw-r--r--src/components/feeds/PostFeedVideoGridRow.tsx4
-rw-r--r--src/components/forms/DateField/index.web.tsx4
-rw-r--r--src/components/forms/SearchInput.tsx2
-rw-r--r--src/components/hooks/useFollowMethods.ts6
-rw-r--r--src/components/icons/TEMPLATE.tsx2
-rw-r--r--src/components/intents/VerifyEmailIntentDialog.tsx2
-rw-r--r--src/components/moderation/LabelsOnMe.tsx11
-rw-r--r--src/components/moderation/LabelsOnMeDialog.tsx2
-rw-r--r--src/components/moderation/ModerationDetailsDialog.tsx4
-rw-r--r--src/components/moderation/PostAlerts.tsx4
-rw-r--r--src/components/moderation/ProfileHeaderAlerts.tsx4
-rw-r--r--src/components/moderation/ReportDialog/action.ts10
-rw-r--r--src/components/moderation/ReportDialog/copy.ts2
-rw-r--r--src/components/moderation/ReportDialog/state.ts4
-rw-r--r--src/components/moderation/ReportDialog/types.ts12
-rw-r--r--src/components/moderation/ReportDialog/utils/parseReportSubject.ts4
-rw-r--r--src/components/moderation/ScreenHider.tsx8
-rw-r--r--src/lib/api/feed/custom.ts6
-rw-r--r--src/lib/api/feed/following.ts4
-rw-r--r--src/lib/api/feed/likes.ts8
-rw-r--r--src/lib/api/feed/merge.ts16
-rw-r--r--src/lib/api/feed/types.ts2
-rw-r--r--src/lib/api/feed/utils.ts2
-rw-r--r--src/lib/api/upload-blob.ts2
-rw-r--r--src/lib/api/upload-blob.web.ts2
-rw-r--r--src/lib/assets.native.ts2
-rw-r--r--src/lib/assets.ts2
-rw-r--r--src/lib/custom-animations/GestureActionView.web.tsx2
-rw-r--r--src/lib/custom-animations/PressableScale.tsx7
-rw-r--r--src/lib/hooks/useAccountSwitcher.ts4
-rw-r--r--src/lib/hooks/useGoBack.ts2
-rw-r--r--src/lib/hooks/useSetTitle.ts2
-rw-r--r--src/lib/hooks/useTimeAgo.ts2
-rw-r--r--src/lib/hooks/useWebScrollRestoration.ts2
-rw-r--r--src/lib/media/video/compress.web.ts4
-rw-r--r--src/lib/media/video/upload.shared.ts4
-rw-r--r--src/lib/media/video/upload.ts6
-rw-r--r--src/lib/media/video/upload.web.ts8
-rw-r--r--src/lib/media/video/util.ts2
-rw-r--r--src/lib/moderation/blocked-and-muted.ts2
-rw-r--r--src/lib/moderation/useLabelBehaviorDescription.ts5
-rw-r--r--src/lib/moderation/useLabelInfo.ts8
-rw-r--r--src/lib/react-query.tsx7
-rw-r--r--src/lib/routes/helpers.ts4
-rw-r--r--src/lib/strings/display-names.ts2
-rw-r--r--src/lib/strings/rich-text-helpers.ts2
-rw-r--r--src/lib/strings/rich-text-manip.ts2
-rw-r--r--src/lib/strings/time.ts2
-rw-r--r--src/lib/themes.ts2
-rw-r--r--src/locale/deviceLocales.ts2
-rw-r--r--src/locale/i18nProvider.tsx2
-rw-r--r--src/logger/__tests__/logDump.test.ts2
-rw-r--r--src/logger/logDump.ts2
-rw-r--r--src/logger/transports/bitdrift.ts2
-rw-r--r--src/logger/transports/console.ts2
-rw-r--r--src/logger/util.ts2
-rw-r--r--src/screens/Home/NoFeedsPinned.tsx2
-rw-r--r--src/screens/List/ListHiddenScreen.tsx2
-rw-r--r--src/screens/Login/ChooseAccountForm.tsx2
-rw-r--r--src/screens/Login/FormContainer.tsx2
-rw-r--r--src/screens/Login/ScreenTransition.tsx4
-rw-r--r--src/screens/Messages/components/ChatStatusInfo.tsx2
-rw-r--r--src/screens/Messages/components/MessageInputEmbed.tsx7
-rw-r--r--src/screens/Messages/components/MessageListError.tsx2
-rw-r--r--src/screens/ModerationInteractionSettings/index.tsx2
-rw-r--r--src/screens/Onboarding/StepInterests/InterestButton.tsx2
-rw-r--r--src/screens/Onboarding/StepProfile/AvatarCreatorCircle.tsx2
-rw-r--r--src/screens/Onboarding/StepProfile/AvatarCreatorItems.tsx6
-rw-r--r--src/screens/Post/PostLikedBy.tsx5
-rw-r--r--src/screens/Post/PostQuotes.tsx5
-rw-r--r--src/screens/Post/PostRepostedBy.tsx5
-rw-r--r--src/screens/Profile/ErrorState.tsx2
-rw-r--r--src/screens/Profile/Header/DisplayName.tsx4
-rw-r--r--src/screens/Profile/Header/GrowableAvatar.tsx6
-rw-r--r--src/screens/Profile/Header/GrowableBanner.tsx5
-rw-r--r--src/screens/Profile/Header/Metrics.tsx4
-rw-r--r--src/screens/Profile/Header/StatusBarShadow.tsx5
-rw-r--r--src/screens/Profile/Header/index.tsx10
-rw-r--r--src/screens/Profile/KnownFollowers.tsx7
-rw-r--r--src/screens/Profile/ProfileFollowers.tsx5
-rw-r--r--src/screens/Profile/ProfileFollows.tsx5
-rw-r--r--src/screens/Profile/ProfileLabelerLikedBy.tsx5
-rw-r--r--src/screens/Settings/AppIconSettings/AppIconImage.tsx2
-rw-r--r--src/screens/Settings/components/AddAppPasswordDialog.tsx2
-rw-r--r--src/screens/Settings/components/CopyButton.tsx4
-rw-r--r--src/screens/Settings/components/DeactivateAccountDialog.tsx2
-rw-r--r--src/screens/Settings/components/PwiOptOut.tsx2
-rw-r--r--src/screens/StarterPack/Wizard/StepFeeds.tsx4
-rw-r--r--src/screens/StarterPack/Wizard/StepProfiles.tsx6
-rw-r--r--src/screens/VideoFeed/components/Header.tsx8
-rw-r--r--src/screens/VideoFeed/types.ts2
-rw-r--r--src/state/messages/convo/util.ts10
-rw-r--r--src/state/messages/events/types.ts2
-rw-r--r--src/state/messages/index.tsx2
-rw-r--r--src/state/persisted/index.web.ts4
-rw-r--r--src/state/persisted/types.ts2
-rw-r--r--src/state/persisted/util.ts2
-rw-r--r--src/state/preferences/index.tsx2
-rw-r--r--src/state/queries/actor-autocomplete.ts6
-rw-r--r--src/state/queries/app-passwords.ts2
-rw-r--r--src/state/queries/invites.ts2
-rw-r--r--src/state/queries/known-followers.ts11
-rw-r--r--src/state/queries/my-blocked-accounts.ts8
-rw-r--r--src/state/queries/my-lists.ts4
-rw-r--r--src/state/queries/my-muted-accounts.ts8
-rw-r--r--src/state/queries/nuxs/types.ts2
-rw-r--r--src/state/queries/nuxs/util.ts6
-rw-r--r--src/state/queries/post-interaction-settings.ts2
-rw-r--r--src/state/queries/post-liked-by.ts8
-rw-r--r--src/state/queries/post-quotes.ts12
-rw-r--r--src/state/queries/post-reposted-by.ts11
-rw-r--r--src/state/queries/preferences/types.ts6
-rw-r--r--src/state/queries/profile-feedgens.ts11
-rw-r--r--src/state/queries/profile-followers.ts11
-rw-r--r--src/state/queries/profile-follows.ts8
-rw-r--r--src/state/queries/profile-lists.ts8
-rw-r--r--src/state/queries/resolve-link.ts8
-rw-r--r--src/state/queries/resolve-uri.ts6
-rw-r--r--src/state/queries/search-posts.ts12
-rw-r--r--src/state/queries/suggested-feeds.ts8
-rw-r--r--src/state/queries/threadgate/index.ts6
-rw-r--r--src/state/queries/threadgate/util.ts4
-rw-r--r--src/state/queries/unstable-profile-cache.ts4
-rw-r--r--src/state/queries/util.ts12
-rw-r--r--src/state/session/__tests__/session-test.ts2
-rw-r--r--src/state/session/moderation.ts2
-rw-r--r--src/state/session/util.ts2
-rw-r--r--src/state/shell/reminders.ts2
-rw-r--r--src/types/bsky/index.ts2
-rw-r--r--src/types/bsky/post.ts2
-rw-r--r--src/view/com/composer/AltTextCounterWrapper.tsx2
-rw-r--r--src/view/com/composer/KeyboardAccessory.tsx2
-rw-r--r--src/view/com/composer/char-progress/CharProgress.tsx7
-rw-r--r--src/view/com/composer/photos/SelectGifBtn.tsx2
-rw-r--r--src/view/com/composer/text-input/text-input-util.ts2
-rw-r--r--src/view/com/composer/text-input/web/LinkDecorator.ts2
-rw-r--r--src/view/com/composer/text-input/web/TagDecorator.ts2
-rw-r--r--src/view/com/composer/threadgate/ThreadgateBtn.tsx8
-rw-r--r--src/view/com/composer/videos/SubtitleFilePicker.tsx3
-rw-r--r--src/view/com/composer/videos/VideoPreview.web.tsx4
-rw-r--r--src/view/com/composer/videos/VideoTranscodeProgress.tsx2
-rw-r--r--src/view/com/composer/videos/pickVideo.web.ts2
-rw-r--r--src/view/com/lightbox/ImageViewing/@types/index.ts4
-rw-r--r--src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx2
-rw-r--r--src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx14
-rw-r--r--src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx10
-rw-r--r--src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx12
-rw-r--r--src/view/com/lightbox/ImageViewing/transforms.ts2
-rw-r--r--src/view/com/modals/InviteCodes.tsx6
-rw-r--r--src/view/com/modals/UserAddRemoveLists.tsx4
-rw-r--r--src/view/com/post-thread/PostLikedBy.tsx2
-rw-r--r--src/view/com/post-thread/PostQuotes.tsx4
-rw-r--r--src/view/com/post-thread/PostRepostedBy.tsx2
-rw-r--r--src/view/com/posts/CustomFeedEmptyState.tsx4
-rw-r--r--src/view/com/posts/FollowingEmptyState.tsx4
-rw-r--r--src/view/com/posts/FollowingEndOfFeed.tsx4
-rw-r--r--src/view/com/profile/ProfileFollowers.tsx2
-rw-r--r--src/view/com/profile/ProfileFollows.tsx2
-rw-r--r--src/view/com/util/Alert.web.tsx2
-rw-r--r--src/view/com/util/BottomSheetCustomBackdrop.tsx5
-rw-r--r--src/view/com/util/EmptyState.tsx6
-rw-r--r--src/view/com/util/EmptyStateWithButton.tsx4
-rw-r--r--src/view/com/util/ErrorBoundary.tsx4
-rw-r--r--src/view/com/util/FeedInfoText.tsx4
-rw-r--r--src/view/com/util/LoadMoreRetryBtn.tsx2
-rw-r--r--src/view/com/util/MainScrollProvider.tsx2
-rw-r--r--src/view/com/util/PressableWithHover.tsx11
-rw-r--r--src/view/com/util/Views.tsx6
-rw-r--r--src/view/com/util/WebAuxClickWrapper.tsx2
-rw-r--r--src/view/com/util/error/ErrorMessage.tsx6
-rw-r--r--src/view/com/util/error/ErrorScreen.tsx2
-rw-r--r--src/view/com/util/fab/FAB.web.tsx2
-rw-r--r--src/view/com/util/images/Image.tsx2
-rw-r--r--src/view/com/util/layouts/LoggedOutLayout.tsx2
-rw-r--r--src/view/icons/Logo.tsx6
-rw-r--r--src/view/icons/Logomark.tsx2
-rw-r--r--src/view/icons/Logotype.tsx2
-rw-r--r--src/view/screens/CommunityGuidelines.tsx5
-rw-r--r--src/view/screens/CopyrightPolicy.tsx5
-rw-r--r--src/view/screens/NotFound.tsx2
-rw-r--r--src/view/screens/PrivacyPolicy.tsx5
-rw-r--r--src/view/screens/ProfileFeedLikedBy.tsx5
-rw-r--r--src/view/screens/Storybook/ListContained.tsx2
-rw-r--r--src/view/screens/Support.tsx5
-rw-r--r--src/view/screens/TermsOfService.tsx5
225 files changed, 555 insertions, 433 deletions
diff --git a/src/Splash.tsx b/src/Splash.tsx
index c31723aaa..47e70b375 100644
--- a/src/Splash.tsx
+++ b/src/Splash.tsx
@@ -15,7 +15,7 @@ import Animated, {
   withTiming,
 } from 'react-native-reanimated'
 import {useSafeAreaInsets} from 'react-native-safe-area-context'
-import Svg, {Path, SvgProps} from 'react-native-svg'
+import Svg, {Path, type SvgProps} from 'react-native-svg'
 import {Image} from 'expo-image'
 import * as SplashScreen from 'expo-splash-screen'
 
diff --git a/src/alf/themes.ts b/src/alf/themes.ts
index 82b2e1b40..bb3c62c49 100644
--- a/src/alf/themes.ts
+++ b/src/alf/themes.ts
@@ -1,5 +1,5 @@
 import {atoms} from '#/alf/atoms'
-import {Palette, Theme} from '#/alf/types'
+import {type Palette, type Theme} from '#/alf/types'
 import {
   BLUE_HUE,
   defaultScale,
diff --git a/src/alf/types.ts b/src/alf/types.ts
index 5bac690e2..d2ac5dbaa 100644
--- a/src/alf/types.ts
+++ b/src/alf/types.ts
@@ -1,4 +1,4 @@
-import {StyleProp, TextStyle, ViewStyle} from 'react-native'
+import {type StyleProp, type TextStyle, type ViewStyle} from 'react-native'
 
 export type TextStyleProp = {
   style?: StyleProp<TextStyle>
diff --git a/src/alf/util/themeSelector.ts b/src/alf/util/themeSelector.ts
index e79f86387..c118b6506 100644
--- a/src/alf/util/themeSelector.ts
+++ b/src/alf/util/themeSelector.ts
@@ -1,4 +1,4 @@
-import {ThemeName} from '#/alf/types'
+import {type ThemeName} from '#/alf/types'
 
 export function select<T>(name: ThemeName, options: Record<ThemeName, T>) {
   switch (name) {
diff --git a/src/alf/util/useColorModeTheme.ts b/src/alf/util/useColorModeTheme.ts
index 561a504b2..b0b4f9e7c 100644
--- a/src/alf/util/useColorModeTheme.ts
+++ b/src/alf/util/useColorModeTheme.ts
@@ -1,10 +1,10 @@
 import React from 'react'
-import {ColorSchemeName, useColorScheme} from 'react-native'
+import {type ColorSchemeName, useColorScheme} from 'react-native'
 
 import {isWeb} from '#/platform/detection'
 import {useThemePrefs} from '#/state/shell'
 import {dark, dim, light} from '#/alf/themes'
-import {ThemeName} from '#/alf/types'
+import {type ThemeName} from '#/alf/types'
 
 export function useColorModeTheme(): ThemeName {
   const theme = useThemeName()
diff --git a/src/alf/util/useGutters.ts b/src/alf/util/useGutters.ts
index 57dd4e80b..265d0f23c 100644
--- a/src/alf/util/useGutters.ts
+++ b/src/alf/util/useGutters.ts
@@ -1,6 +1,6 @@
 import React from 'react'
 
-import {Breakpoint, useBreakpoints} from '#/alf/breakpoints'
+import {type Breakpoint, useBreakpoints} from '#/alf/breakpoints'
 import * as tokens from '#/alf/tokens'
 
 type Gutter = 'compact' | 'base' | 'wide' | 0
diff --git a/src/components/Dialog/utils.ts b/src/components/Dialog/utils.ts
index 058d6e804..812e8cca1 100644
--- a/src/components/Dialog/utils.ts
+++ b/src/components/Dialog/utils.ts
@@ -1,6 +1,6 @@
 import React from 'react'
 
-import {DialogControlProps} from '#/components/Dialog/types'
+import {type DialogControlProps} from '#/components/Dialog/types'
 
 export function useAutoOpen(control: DialogControlProps, showTimeout?: number) {
   React.useEffect(() => {
diff --git a/src/components/Fill.tsx b/src/components/Fill.tsx
index ac74f1660..8ad352473 100644
--- a/src/components/Fill.tsx
+++ b/src/components/Fill.tsx
@@ -1,7 +1,7 @@
-import React from 'react'
 import {View} from 'react-native'
+import type React from 'react'
 
-import {atoms as a, ViewStyleProp} from '#/alf'
+import {atoms as a, type ViewStyleProp} from '#/alf'
 
 export function Fill({
   children,
diff --git a/src/components/GradientFill.tsx b/src/components/GradientFill.tsx
index 9ad6ed7dc..863988171 100644
--- a/src/components/GradientFill.tsx
+++ b/src/components/GradientFill.tsx
@@ -1,6 +1,6 @@
 import {LinearGradient} from 'expo-linear-gradient'
 
-import {atoms as a, tokens, ViewStyleProp} from '#/alf'
+import {atoms as a, type tokens, type ViewStyleProp} from '#/alf'
 
 export function GradientFill({
   gradient,
diff --git a/src/components/IconCircle.tsx b/src/components/IconCircle.tsx
index 2119c9f8d..286dc2837 100644
--- a/src/components/IconCircle.tsx
+++ b/src/components/IconCircle.tsx
@@ -3,12 +3,12 @@ import {View} from 'react-native'
 import {
   atoms as a,
   flatten,
-  TextStyleProp,
+  type TextStyleProp,
   useTheme,
-  ViewStyleProp,
+  type ViewStyleProp,
 } from '#/alf'
-import {Props} from '#/components/icons/common'
-import {Growth_Stroke2_Corner0_Rounded as Growth} from '#/components/icons/Growth'
+import {type Props} from '#/components/icons/common'
+import {type Growth_Stroke2_Corner0_Rounded as Growth} from '#/components/icons/Growth'
 
 export function IconCircle({
   icon: Icon,
diff --git a/src/components/LabelingServiceCard/index.tsx b/src/components/LabelingServiceCard/index.tsx
index b144c1dc8..990dbb1c6 100644
--- a/src/components/LabelingServiceCard/index.tsx
+++ b/src/components/LabelingServiceCard/index.tsx
@@ -1,16 +1,16 @@
-import React from 'react'
 import {View} from 'react-native'
-import {AppBskyLabelerDefs} from '@atproto/api'
+import {type AppBskyLabelerDefs} from '@atproto/api'
 import {msg, Plural, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
+import type React from 'react'
 
 import {getLabelingServiceTitle} from '#/lib/moderation'
 import {sanitizeHandle} from '#/lib/strings/handles'
 import {useLabelerInfoQuery} from '#/state/queries/labeler'
 import {UserAvatar} from '#/view/com/util/UserAvatar'
-import {atoms as a, useTheme, ViewStyleProp} from '#/alf'
+import {atoms as a, useTheme, type ViewStyleProp} from '#/alf'
 import {Flag_Stroke2_Corner0_Rounded as Flag} from '#/components/icons/Flag'
-import {Link as InternalLink, LinkProps} from '#/components/Link'
+import {Link as InternalLink, type LinkProps} from '#/components/Link'
 import {RichText} from '#/components/RichText'
 import {Text} from '#/components/Typography'
 import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '../icons/Chevron'
diff --git a/src/components/LikedByList.tsx b/src/components/LikedByList.tsx
index b369bd76e..bd4a9f551 100644
--- a/src/components/LikedByList.tsx
+++ b/src/components/LikedByList.tsx
@@ -1,5 +1,5 @@
 import React from 'react'
-import {AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
+import {type AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
diff --git a/src/components/LinearGradientBackground.tsx b/src/components/LinearGradientBackground.tsx
index 9b28b897c..b208f3ff3 100644
--- a/src/components/LinearGradientBackground.tsx
+++ b/src/components/LinearGradientBackground.tsx
@@ -1,6 +1,6 @@
-import React from 'react'
-import {StyleProp, ViewStyle} from 'react-native'
+import {type StyleProp, type ViewStyle} from 'react-native'
 import {LinearGradient} from 'expo-linear-gradient'
+import type React from 'react'
 
 import {gradients} from '#/alf/tokens'
 
diff --git a/src/components/Loader.tsx b/src/components/Loader.tsx
index 149554912..21970c278 100644
--- a/src/components/Loader.tsx
+++ b/src/components/Loader.tsx
@@ -8,7 +8,7 @@ import Animated, {
 } from 'react-native-reanimated'
 
 import {atoms as a, flatten, useTheme} from '#/alf'
-import {Props, useCommonSVGProps} from '#/components/icons/common'
+import {type Props, useCommonSVGProps} from '#/components/icons/common'
 import {Loader_Stroke2_Corner0_Rounded as Icon} from '#/components/icons/Loader'
 
 export function Loader(props: Props) {
diff --git a/src/components/Loader.web.tsx b/src/components/Loader.web.tsx
index acf0acfc4..5eefeb109 100644
--- a/src/components/Loader.web.tsx
+++ b/src/components/Loader.web.tsx
@@ -1,7 +1,7 @@
 import {View} from 'react-native'
 
 import {atoms as a, flatten, useTheme} from '#/alf'
-import {Props, useCommonSVGProps} from '#/components/icons/common'
+import {type Props, useCommonSVGProps} from '#/components/icons/common'
 import {Loader_Stroke2_Corner0_Rounded as Icon} from '#/components/icons/Loader'
 
 export function Loader(props: Props) {
diff --git a/src/components/MediaInsetBorder.tsx b/src/components/MediaInsetBorder.tsx
index ed89880f4..a341a77d3 100644
--- a/src/components/MediaInsetBorder.tsx
+++ b/src/components/MediaInsetBorder.tsx
@@ -1,6 +1,6 @@
-import React from 'react'
+import type React from 'react'
 
-import {atoms as a, useTheme, ViewStyleProp} from '#/alf'
+import {atoms as a, useTheme, type ViewStyleProp} from '#/alf'
 import {Fill} from '#/components/Fill'
 
 /**
diff --git a/src/components/Menu/types.ts b/src/components/Menu/types.ts
index 51baa24df..e9ee082f4 100644
--- a/src/components/Menu/types.ts
+++ b/src/components/Menu/types.ts
@@ -1,14 +1,14 @@
-import React from 'react'
 import {
-  AccessibilityProps,
-  AccessibilityRole,
-  GestureResponderEvent,
-  PressableProps,
+  type AccessibilityProps,
+  type AccessibilityRole,
+  type GestureResponderEvent,
+  type PressableProps,
 } from 'react-native'
+import type React from 'react'
 
-import {TextStyleProp, ViewStyleProp} from '#/alf'
-import * as Dialog from '#/components/Dialog'
-import {Props as SVGIconProps} from '#/components/icons/common'
+import {type TextStyleProp, type ViewStyleProp} from '#/alf'
+import type * as Dialog from '#/components/Dialog'
+import {type Props as SVGIconProps} from '#/components/icons/common'
 
 export type ContextType = {
   control: Dialog.DialogOuterProps['control']
diff --git a/src/components/NewskieDialog.tsx b/src/components/NewskieDialog.tsx
index accf07a98..0644ba704 100644
--- a/src/components/NewskieDialog.tsx
+++ b/src/components/NewskieDialog.tsx
@@ -1,6 +1,6 @@
 import React from 'react'
 import {View} from 'react-native'
-import {AppBskyActorDefs, moderateProfile} from '@atproto/api'
+import {type AppBskyActorDefs, moderateProfile} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 import {differenceInSeconds} from 'date-fns'
diff --git a/src/components/Pills.tsx b/src/components/Pills.tsx
index 3eddf1b9a..550089a80 100644
--- a/src/components/Pills.tsx
+++ b/src/components/Pills.tsx
@@ -1,11 +1,11 @@
 import React from 'react'
 import {View} from 'react-native'
-import {BSKY_LABELER_DID, ModerationCause} from '@atproto/api'
+import {BSKY_LABELER_DID, type ModerationCause} from '@atproto/api'
 import {Trans} from '@lingui/macro'
 
 import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
 import {UserAvatar} from '#/view/com/util/UserAvatar'
-import {atoms as a, useTheme, ViewStyleProp} from '#/alf'
+import {atoms as a, useTheme, type ViewStyleProp} from '#/alf'
 import {Button} from '#/components/Button'
 import {
   ModerationDetailsDialog,
diff --git a/src/components/ProgressGuide/List.tsx b/src/components/ProgressGuide/List.tsx
index bbc5a0177..52fc4c27a 100644
--- a/src/components/ProgressGuide/List.tsx
+++ b/src/components/ProgressGuide/List.tsx
@@ -1,4 +1,4 @@
-import {StyleProp, View, ViewStyle} from 'react-native'
+import {type StyleProp, View, type ViewStyle} from 'react-native'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
diff --git a/src/components/ReportDialog/SelectLabelerView.tsx b/src/components/ReportDialog/SelectLabelerView.tsx
index df472241e..be666ced1 100644
--- a/src/components/ReportDialog/SelectLabelerView.tsx
+++ b/src/components/ReportDialog/SelectLabelerView.tsx
@@ -1,5 +1,5 @@
 import {View} from 'react-native'
-import {AppBskyLabelerDefs} from '@atproto/api'
+import {type AppBskyLabelerDefs} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
@@ -9,7 +9,7 @@ import {Button, useButtonContext} from '#/components/Button'
 import {Divider} from '#/components/Divider'
 import * as LabelingServiceCard from '#/components/LabelingServiceCard'
 import {Text} from '#/components/Typography'
-import {ReportDialogProps} from './types'
+import {type ReportDialogProps} from './types'
 
 export function SelectLabelerView({
   ...props
diff --git a/src/components/ReportDialog/SelectReportOptionView.tsx b/src/components/ReportDialog/SelectReportOptionView.tsx
index 92a442cbd..f5165f8f7 100644
--- a/src/components/ReportDialog/SelectReportOptionView.tsx
+++ b/src/components/ReportDialog/SelectReportOptionView.tsx
@@ -1,10 +1,13 @@
 import React from 'react'
 import {View} from 'react-native'
-import {AppBskyLabelerDefs} from '@atproto/api'
+import {type AppBskyLabelerDefs} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
-import {ReportOption, useReportOptions} from '#/lib/moderation/useReportOptions'
+import {
+  type ReportOption,
+  useReportOptions,
+} from '#/lib/moderation/useReportOptions'
 import {Link} from '#/components/Link'
 import {DMCA_LINK} from '#/components/ReportDialog/const'
 export {useDialogControl as useReportDialogControl} from '#/components/Dialog'
@@ -23,7 +26,7 @@ import {
 } from '#/components/icons/Chevron'
 import {SquareArrowTopRight_Stroke2_Corner0_Rounded as SquareArrowTopRight} from '#/components/icons/SquareArrowTopRight'
 import {Text} from '#/components/Typography'
-import {ReportDialogProps} from './types'
+import {type ReportDialogProps} from './types'
 
 export function SelectReportOptionView(props: {
   params: ReportDialogProps['params']
diff --git a/src/components/ReportDialog/SubmitView.tsx b/src/components/ReportDialog/SubmitView.tsx
index 36bd1d466..418f364a7 100644
--- a/src/components/ReportDialog/SubmitView.tsx
+++ b/src/components/ReportDialog/SubmitView.tsx
@@ -1,11 +1,11 @@
 import React from 'react'
 import {View} from 'react-native'
-import {AppBskyLabelerDefs} from '@atproto/api'
+import {type AppBskyLabelerDefs} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
 import {getLabelingServiceTitle} from '#/lib/moderation'
-import {ReportOption} from '#/lib/moderation/useReportOptions'
+import {type ReportOption} from '#/lib/moderation/useReportOptions'
 import {isAndroid} from '#/platform/detection'
 import {useAgent} from '#/state/session'
 import {CharProgress} from '#/view/com/composer/char-progress/CharProgress'
@@ -19,7 +19,7 @@ import {ChevronLeft_Stroke2_Corner0_Rounded as ChevronLeft} from '#/components/i
 import {PaperPlane_Stroke2_Corner0_Rounded as SendIcon} from '#/components/icons/PaperPlane'
 import {Loader} from '#/components/Loader'
 import {Text} from '#/components/Typography'
-import {ReportDialogProps} from './types'
+import {type ReportDialogProps} from './types'
 
 export function SubmitView({
   params,
diff --git a/src/components/ReportDialog/index.tsx b/src/components/ReportDialog/index.tsx
index 4402152ab..2401ab89f 100644
--- a/src/components/ReportDialog/index.tsx
+++ b/src/components/ReportDialog/index.tsx
@@ -1,14 +1,14 @@
 import React from 'react'
 import {Pressable, View} from 'react-native'
-import {ScrollView} from 'react-native-gesture-handler'
+import {type ScrollView} from 'react-native-gesture-handler'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
-import {ReportOption} from '#/lib/moderation/useReportOptions'
+import {type ReportOption} from '#/lib/moderation/useReportOptions'
 import {useMyLabelersQuery} from '#/state/queries/preferences'
 export {useDialogControl as useReportDialogControl} from '#/components/Dialog'
 
-import {AppBskyLabelerDefs} from '@atproto/api'
+import {type AppBskyLabelerDefs} from '@atproto/api'
 
 import {atoms as a} from '#/alf'
 import * as Dialog from '#/components/Dialog'
@@ -18,7 +18,7 @@ import {Text} from '#/components/Typography'
 import {SelectLabelerView} from './SelectLabelerView'
 import {SelectReportOptionView} from './SelectReportOptionView'
 import {SubmitView} from './SubmitView'
-import {ReportDialogProps} from './types'
+import {type ReportDialogProps} from './types'
 
 export function ReportDialog(props: ReportDialogProps) {
   return (
diff --git a/src/components/ReportDialog/types.ts b/src/components/ReportDialog/types.ts
index 3f43db4a1..ac9a18d6d 100644
--- a/src/components/ReportDialog/types.ts
+++ b/src/components/ReportDialog/types.ts
@@ -1,4 +1,4 @@
-import * as Dialog from '#/components/Dialog'
+import type * as Dialog from '#/components/Dialog'
 
 export type ReportDialogProps = {
   control: Dialog.DialogOuterProps['control']
diff --git a/src/components/RichTextTag.tsx b/src/components/RichTextTag.tsx
index 562d44aa6..93d2399be 100644
--- a/src/components/RichTextTag.tsx
+++ b/src/components/RichTextTag.tsx
@@ -1,10 +1,10 @@
 import React from 'react'
-import {StyleProp, Text as RNText, TextStyle} from 'react-native'
+import {type StyleProp, Text as RNText, type TextStyle} from 'react-native'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 import {useNavigation} from '@react-navigation/native'
 
-import {NavigationProp} from '#/lib/routes/types'
+import {type NavigationProp} from '#/lib/routes/types'
 import {isInvalidHandle} from '#/lib/strings/handles'
 import {isNative, isWeb} from '#/platform/detection'
 import {
diff --git a/src/components/StarterPack/Main/PostsList.tsx b/src/components/StarterPack/Main/PostsList.tsx
index f706e0bff..0a17e038e 100644
--- a/src/components/StarterPack/Main/PostsList.tsx
+++ b/src/components/StarterPack/Main/PostsList.tsx
@@ -4,11 +4,11 @@ import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
 import {isNative} from '#/platform/detection'
-import {FeedDescriptor} from '#/state/queries/post-feed'
+import {type FeedDescriptor} from '#/state/queries/post-feed'
 import {PostFeed} from '#/view/com/posts/PostFeed'
 import {EmptyState} from '#/view/com/util/EmptyState'
-import {ListRef} from '#/view/com/util/List'
-import {SectionRef} from '#/screens/Profile/Sections/types'
+import {type ListRef} from '#/view/com/util/List'
+import {type SectionRef} from '#/screens/Profile/Sections/types'
 
 interface ProfilesListProps {
   listUri: string
diff --git a/src/components/StarterPack/Main/ProfilesList.tsx b/src/components/StarterPack/Main/ProfilesList.tsx
index c1c10c76b..a1ddee5af 100644
--- a/src/components/StarterPack/Main/ProfilesList.tsx
+++ b/src/components/StarterPack/Main/ProfilesList.tsx
@@ -1,12 +1,15 @@
 import React, {useCallback} from 'react'
-import {ListRenderItemInfo, View} from 'react-native'
+import {type ListRenderItemInfo, View} from 'react-native'
 import {
-  AppBskyActorDefs,
-  AppBskyGraphGetList,
+  type AppBskyActorDefs,
+  type AppBskyGraphGetList,
   AtUri,
-  ModerationOpts,
+  type ModerationOpts,
 } from '@atproto/api'
-import {InfiniteData, UseInfiniteQueryResult} from '@tanstack/react-query'
+import {
+  type InfiniteData,
+  type UseInfiniteQueryResult,
+} from '@tanstack/react-query'
 
 import {useBottomBarOffset} from '#/lib/hooks/useBottomBarOffset'
 import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
@@ -14,8 +17,8 @@ import {isBlockedOrBlocking} from '#/lib/moderation/blocked-and-muted'
 import {isNative, isWeb} from '#/platform/detection'
 import {useAllListMembersQuery} from '#/state/queries/list-members'
 import {useSession} from '#/state/session'
-import {List, ListRef} from '#/view/com/util/List'
-import {SectionRef} from '#/screens/Profile/Sections/types'
+import {List, type ListRef} from '#/view/com/util/List'
+import {type SectionRef} from '#/screens/Profile/Sections/types'
 import {atoms as a, useTheme} from '#/alf'
 import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
 import {Default as ProfileCard} from '#/components/ProfileCard'
diff --git a/src/components/StarterPack/QrCode.tsx b/src/components/StarterPack/QrCode.tsx
index 6443ec694..86f1aa1e6 100644
--- a/src/components/StarterPack/QrCode.tsx
+++ b/src/components/StarterPack/QrCode.tsx
@@ -3,7 +3,7 @@ import {View} from 'react-native'
 // @ts-expect-error missing types
 import QRCode from 'react-native-qrcode-styled'
 import type ViewShot from 'react-native-view-shot'
-import {AppBskyGraphDefs, AppBskyGraphStarterpack} from '@atproto/api'
+import {type AppBskyGraphDefs, AppBskyGraphStarterpack} from '@atproto/api'
 import {Trans} from '@lingui/macro'
 
 import {isWeb} from '#/platform/detection'
diff --git a/src/components/StarterPack/Wizard/ScreenTransition.tsx b/src/components/StarterPack/Wizard/ScreenTransition.tsx
index 9b76d4c60..c02888e1d 100644
--- a/src/components/StarterPack/Wizard/ScreenTransition.tsx
+++ b/src/components/StarterPack/Wizard/ScreenTransition.tsx
@@ -1,11 +1,11 @@
-import React from 'react'
-import {StyleProp, ViewStyle} from 'react-native'
+import {type StyleProp, type ViewStyle} from 'react-native'
 import Animated, {
   FadeIn,
   FadeOut,
   SlideInLeft,
   SlideInRight,
 } from 'react-native-reanimated'
+import type React from 'react'
 
 import {isWeb} from '#/platform/detection'
 
diff --git a/src/components/SubtleWebHover.tsx b/src/components/SubtleWebHover.tsx
index 5cbbfc898..d60968e9c 100644
--- a/src/components/SubtleWebHover.tsx
+++ b/src/components/SubtleWebHover.tsx
@@ -1,4 +1,4 @@
-import {ViewStyleProp} from '#/alf'
+import {type ViewStyleProp} from '#/alf'
 
 export function SubtleWebHover({}: ViewStyleProp & {hover: boolean}) {
   return null
diff --git a/src/components/TrendingTopics.tsx b/src/components/TrendingTopics.tsx
index a1de5d490..50e0fc5ed 100644
--- a/src/components/TrendingTopics.tsx
+++ b/src/components/TrendingTopics.tsx
@@ -1,6 +1,6 @@
 import React from 'react'
 import {View} from 'react-native'
-import {AtUri} from '@atproto/api'
+import {type AtUri} from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
@@ -10,10 +10,10 @@ import {PressableScale} from '#/lib/custom-animations/PressableScale'
 // import {Hashtag_Stroke2_Corner0_Rounded as Hashtag} from '#/components/icons/Hashtag'
 // import {CloseQuote_Filled_Stroke2_Corner0_Rounded as Quote} from '#/components/icons/Quote'
 // import {UserAvatar} from '#/view/com/util/UserAvatar'
-import type {TrendingTopic} from '#/state/queries/trending/useTrendingTopics'
-import {atoms as a, native, useTheme, ViewStyleProp} from '#/alf'
+import {type TrendingTopic} from '#/state/queries/trending/useTrendingTopics'
+import {atoms as a, native, useTheme, type ViewStyleProp} from '#/alf'
 import {StarterPack as StarterPackIcon} from '#/components/icons/StarterPack'
-import {Link as InternalLink, LinkProps} from '#/components/Link'
+import {Link as InternalLink, type LinkProps} from '#/components/Link'
 import {Text} from '#/components/Typography'
 
 export function TrendingTopic({
diff --git a/src/components/VideoPostCard.tsx b/src/components/VideoPostCard.tsx
index a1bdd29b4..010ab075d 100644
--- a/src/components/VideoPostCard.tsx
+++ b/src/components/VideoPostCard.tsx
@@ -3,11 +3,11 @@ import {View} from 'react-native'
 import {Image} from 'expo-image'
 import {LinearGradient} from 'expo-linear-gradient'
 import {
-  AppBskyActorDefs,
+  type AppBskyActorDefs,
   AppBskyEmbedVideo,
-  AppBskyFeedDefs,
+  type AppBskyFeedDefs,
   AppBskyFeedPost,
-  ModerationDecision,
+  type ModerationDecision,
 } from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
@@ -15,7 +15,7 @@ import {useLingui} from '@lingui/react'
 import {sanitizeHandle} from '#/lib/strings/handles'
 import {formatCount} from '#/view/com/util/numeric/format'
 import {UserAvatar} from '#/view/com/util/UserAvatar'
-import {VideoFeedSourceContext} from '#/screens/VideoFeed/types'
+import {type VideoFeedSourceContext} from '#/screens/VideoFeed/types'
 import {atoms as a, useTheme} from '#/alf'
 import {BLUE_HUE} from '#/alf/util/colorGeneration'
 import {select} from '#/alf/util/themeSelector'
diff --git a/src/components/anim/AnimatedCheck.tsx b/src/components/anim/AnimatedCheck.tsx
index 60407274e..2198598ca 100644
--- a/src/components/anim/AnimatedCheck.tsx
+++ b/src/components/anim/AnimatedCheck.tsx
@@ -8,7 +8,7 @@ import Animated, {
 } from 'react-native-reanimated'
 import Svg, {Circle, Path} from 'react-native-svg'
 
-import {Props, useCommonSVGProps} from '#/components/icons/common'
+import {type Props, useCommonSVGProps} from '#/components/icons/common'
 
 const AnimatedPath = Animated.createAnimatedComponent(Path)
 const AnimatedCircle = Animated.createAnimatedComponent(Circle)
diff --git a/src/components/dialogs/Embed.tsx b/src/components/dialogs/Embed.tsx
index 9ea400abe..594800c82 100644
--- a/src/components/dialogs/Embed.tsx
+++ b/src/components/dialogs/Embed.tsx
@@ -1,6 +1,6 @@
 import {memo, useEffect, useMemo, useState} from 'react'
 import {View} from 'react-native'
-import {AppBskyActorDefs, AppBskyFeedPost, AtUri} from '@atproto/api'
+import {type AppBskyActorDefs, type AppBskyFeedPost, AtUri} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
diff --git a/src/components/dialogs/MutedWords.tsx b/src/components/dialogs/MutedWords.tsx
index 666b93068..e289e1641 100644
--- a/src/components/dialogs/MutedWords.tsx
+++ b/src/components/dialogs/MutedWords.tsx
@@ -1,6 +1,6 @@
 import React from 'react'
 import {View} from 'react-native'
-import {AppBskyActorDefs, sanitizeMutedWordValue} from '@atproto/api'
+import {type AppBskyActorDefs, sanitizeMutedWordValue} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
@@ -16,7 +16,7 @@ import {
   native,
   useBreakpoints,
   useTheme,
-  ViewStyleProp,
+  type ViewStyleProp,
   web,
 } from '#/alf'
 import {Button, ButtonIcon, ButtonText} from '#/components/Button'
diff --git a/src/components/dms/BlockedByListDialog.tsx b/src/components/dms/BlockedByListDialog.tsx
index 2a83ea8c0..c071d0bba 100644
--- a/src/components/dms/BlockedByListDialog.tsx
+++ b/src/components/dms/BlockedByListDialog.tsx
@@ -1,13 +1,13 @@
 import React from 'react'
 import {View} from 'react-native'
-import {ModerationCause} from '@atproto/api'
+import {type ModerationCause} from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
 import {listUriToHref} from '#/lib/strings/url-helpers'
 import {atoms as a, useTheme} from '#/alf'
 import * as Dialog from '#/components/Dialog'
-import {DialogControlProps} from '#/components/Dialog'
+import {type DialogControlProps} from '#/components/Dialog'
 import {InlineLinkText} from '#/components/Link'
 import * as Prompt from '#/components/Prompt'
 import {Text} from '#/components/Typography'
diff --git a/src/components/dms/LeaveConvoPrompt.tsx b/src/components/dms/LeaveConvoPrompt.tsx
index 57acd5ca7..97d8600d0 100644
--- a/src/components/dms/LeaveConvoPrompt.tsx
+++ b/src/components/dms/LeaveConvoPrompt.tsx
@@ -2,11 +2,11 @@ import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 import {StackActions, useNavigation} from '@react-navigation/native'
 
-import {NavigationProp} from '#/lib/routes/types'
+import {type NavigationProp} from '#/lib/routes/types'
 import {isNative} from '#/platform/detection'
 import {useLeaveConvo} from '#/state/queries/messages/leave-conversation'
 import * as Toast from '#/view/com/util/Toast'
-import {DialogOuterProps} from '#/components/Dialog'
+import {type DialogOuterProps} from '#/components/Dialog'
 import * as Prompt from '#/components/Prompt'
 
 export function LeaveConvoPrompt({
diff --git a/src/components/dms/MessagesListBlockedFooter.tsx b/src/components/dms/MessagesListBlockedFooter.tsx
index 9c63ef2c7..8f75f4306 100644
--- a/src/components/dms/MessagesListBlockedFooter.tsx
+++ b/src/components/dms/MessagesListBlockedFooter.tsx
@@ -1,6 +1,6 @@
 import React from 'react'
 import {View} from 'react-native'
-import {ModerationDecision} from '@atproto/api'
+import {type ModerationDecision} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
@@ -14,7 +14,7 @@ import {BlockedByListDialog} from '#/components/dms/BlockedByListDialog'
 import {LeaveConvoPrompt} from '#/components/dms/LeaveConvoPrompt'
 import {ReportConversationPrompt} from '#/components/dms/ReportConversationPrompt'
 import {Text} from '#/components/Typography'
-import * as bsky from '#/types/bsky'
+import type * as bsky from '#/types/bsky'
 
 export function MessagesListBlockedFooter({
   recipient: initialRecipient,
diff --git a/src/components/dms/ReportConversationPrompt.tsx b/src/components/dms/ReportConversationPrompt.tsx
index 6bb26a60f..fed5c914c 100644
--- a/src/components/dms/ReportConversationPrompt.tsx
+++ b/src/components/dms/ReportConversationPrompt.tsx
@@ -1,7 +1,7 @@
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
-import {DialogControlProps} from '#/components/Dialog'
+import {type DialogControlProps} from '#/components/Dialog'
 import * as Prompt from '#/components/Prompt'
 
 export function ReportConversationPrompt({
diff --git a/src/components/feeds/PostFeedVideoGridRow.tsx b/src/components/feeds/PostFeedVideoGridRow.tsx
index 7f9898083..c4014fd44 100644
--- a/src/components/feeds/PostFeedVideoGridRow.tsx
+++ b/src/components/feeds/PostFeedVideoGridRow.tsx
@@ -2,8 +2,8 @@ import {View} from 'react-native'
 import {AppBskyEmbedVideo} from '@atproto/api'
 
 import {logEvent} from '#/lib/statsig/statsig'
-import {FeedPostSliceItem} from '#/state/queries/post-feed'
-import {VideoFeedSourceContext} from '#/screens/VideoFeed/types'
+import {type FeedPostSliceItem} from '#/state/queries/post-feed'
+import {type VideoFeedSourceContext} from '#/screens/VideoFeed/types'
 import {atoms as a, useGutters} from '#/alf'
 import * as Grid from '#/components/Grid'
 import {
diff --git a/src/components/forms/DateField/index.web.tsx b/src/components/forms/DateField/index.web.tsx
index 00f58202a..e9f0e9c8c 100644
--- a/src/components/forms/DateField/index.web.tsx
+++ b/src/components/forms/DateField/index.web.tsx
@@ -1,9 +1,9 @@
 import React from 'react'
-import {StyleSheet, TextInput, TextInputProps} from 'react-native'
+import {StyleSheet, type TextInput, type TextInputProps} from 'react-native'
 // @ts-expect-error untyped
 import {unstable_createElement} from 'react-native-web'
 
-import {DateFieldProps} from '#/components/forms/DateField/types'
+import {type DateFieldProps} from '#/components/forms/DateField/types'
 import {toSimpleDateString} from '#/components/forms/DateField/utils'
 import * as TextField from '#/components/forms/TextField'
 import {CalendarDays_Stroke2_Corner0_Rounded as CalendarDays} from '#/components/icons/CalendarDays'
diff --git a/src/components/forms/SearchInput.tsx b/src/components/forms/SearchInput.tsx
index cbf02ac8b..618a0040e 100644
--- a/src/components/forms/SearchInput.tsx
+++ b/src/components/forms/SearchInput.tsx
@@ -1,5 +1,5 @@
 import React from 'react'
-import {TextInput, View} from 'react-native'
+import {type TextInput, View} from 'react-native'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
diff --git a/src/components/hooks/useFollowMethods.ts b/src/components/hooks/useFollowMethods.ts
index e6b3f2c47..cba617d10 100644
--- a/src/components/hooks/useFollowMethods.ts
+++ b/src/components/hooks/useFollowMethods.ts
@@ -2,13 +2,13 @@ import React from 'react'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
-import {LogEvents} from '#/lib/statsig/statsig'
+import {type LogEvents} from '#/lib/statsig/statsig'
 import {logger} from '#/logger'
-import {Shadow} from '#/state/cache/types'
+import {type Shadow} from '#/state/cache/types'
 import {useProfileFollowMutationQueue} from '#/state/queries/profile'
 import {useRequireAuth} from '#/state/session'
 import * as Toast from '#/view/com/util/Toast'
-import * as bsky from '#/types/bsky'
+import type * as bsky from '#/types/bsky'
 
 export function useFollowMethods({
   profile,
diff --git a/src/components/icons/TEMPLATE.tsx b/src/components/icons/TEMPLATE.tsx
index 47a5c36b2..be161c271 100644
--- a/src/components/icons/TEMPLATE.tsx
+++ b/src/components/icons/TEMPLATE.tsx
@@ -1,7 +1,7 @@
 import React from 'react'
 import Svg, {Path} from 'react-native-svg'
 
-import {Props, useCommonSVGProps} from '#/components/icons/common'
+import {type Props, useCommonSVGProps} from '#/components/icons/common'
 
 export const IconTemplate_Stroke2_Corner0_Rounded = React.forwardRef(
   function LogoImpl(props: Props, ref) {
diff --git a/src/components/intents/VerifyEmailIntentDialog.tsx b/src/components/intents/VerifyEmailIntentDialog.tsx
index c78aabb6d..ab628eeef 100644
--- a/src/components/intents/VerifyEmailIntentDialog.tsx
+++ b/src/components/intents/VerifyEmailIntentDialog.tsx
@@ -8,7 +8,7 @@ import {useAgent, useSession} from '#/state/session'
 import {atoms as a, useBreakpoints, useTheme} from '#/alf'
 import {Button, ButtonIcon, ButtonText} from '#/components/Button'
 import * as Dialog from '#/components/Dialog'
-import {DialogControlProps} from '#/components/Dialog'
+import {type DialogControlProps} from '#/components/Dialog'
 import {Divider} from '#/components/Divider'
 import {ArrowRotateCounterClockwise_Stroke2_Corner0_Rounded as Resend} from '#/components/icons/ArrowRotateCounterClockwise'
 import {useIntentDialogs} from '#/components/intents/IntentDialogs'
diff --git a/src/components/moderation/LabelsOnMe.tsx b/src/components/moderation/LabelsOnMe.tsx
index f0a25959f..a55ef470f 100644
--- a/src/components/moderation/LabelsOnMe.tsx
+++ b/src/components/moderation/LabelsOnMe.tsx
@@ -1,11 +1,16 @@
-import {StyleProp, View, ViewStyle} from 'react-native'
-import {AppBskyFeedDefs, ComAtprotoLabelDefs} from '@atproto/api'
+import {type StyleProp, View, type ViewStyle} from 'react-native'
+import {type AppBskyFeedDefs, type ComAtprotoLabelDefs} from '@atproto/api'
 import {msg, Plural, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
 import {useSession} from '#/state/session'
 import {atoms as a} from '#/alf'
-import {Button, ButtonIcon, ButtonSize, ButtonText} from '#/components/Button'
+import {
+  Button,
+  ButtonIcon,
+  type ButtonSize,
+  ButtonText,
+} from '#/components/Button'
 import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
 import {
   LabelsOnMeDialog,
diff --git a/src/components/moderation/LabelsOnMeDialog.tsx b/src/components/moderation/LabelsOnMeDialog.tsx
index 56c6af0a4..940a49590 100644
--- a/src/components/moderation/LabelsOnMeDialog.tsx
+++ b/src/components/moderation/LabelsOnMeDialog.tsx
@@ -1,6 +1,6 @@
 import React from 'react'
 import {View} from 'react-native'
-import {ComAtprotoLabelDefs, ComAtprotoModerationDefs} from '@atproto/api'
+import {type ComAtprotoLabelDefs, ComAtprotoModerationDefs} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 import {useMutation} from '@tanstack/react-query'
diff --git a/src/components/moderation/ModerationDetailsDialog.tsx b/src/components/moderation/ModerationDetailsDialog.tsx
index 658ef48d1..d56af48e3 100644
--- a/src/components/moderation/ModerationDetailsDialog.tsx
+++ b/src/components/moderation/ModerationDetailsDialog.tsx
@@ -1,5 +1,5 @@
 import {View} from 'react-native'
-import {ModerationCause} from '@atproto/api'
+import {type ModerationCause} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
@@ -12,7 +12,7 @@ import {useSession} from '#/state/session'
 import {atoms as a, useGutters, useTheme} from '#/alf'
 import * as Dialog from '#/components/Dialog'
 import {InlineLinkText} from '#/components/Link'
-import {AppModerationCause} from '#/components/Pills'
+import {type AppModerationCause} from '#/components/Pills'
 import {Text} from '#/components/Typography'
 
 export {useDialogControl as useModerationDetailsDialogControl} from '#/components/Dialog'
diff --git a/src/components/moderation/PostAlerts.tsx b/src/components/moderation/PostAlerts.tsx
index e5d30da15..7a9c38cc6 100644
--- a/src/components/moderation/PostAlerts.tsx
+++ b/src/components/moderation/PostAlerts.tsx
@@ -1,5 +1,5 @@
-import {StyleProp, ViewStyle} from 'react-native'
-import {ModerationCause, ModerationUI} from '@atproto/api'
+import {type StyleProp, type ViewStyle} from 'react-native'
+import {type ModerationCause, type ModerationUI} from '@atproto/api'
 
 import {getModerationCauseKey, unique} from '#/lib/moderation'
 import * as Pills from '#/components/Pills'
diff --git a/src/components/moderation/ProfileHeaderAlerts.tsx b/src/components/moderation/ProfileHeaderAlerts.tsx
index 9aed1f13d..21359a86e 100644
--- a/src/components/moderation/ProfileHeaderAlerts.tsx
+++ b/src/components/moderation/ProfileHeaderAlerts.tsx
@@ -1,5 +1,5 @@
-import {StyleProp, ViewStyle} from 'react-native'
-import {ModerationDecision} from '@atproto/api'
+import {type StyleProp, type ViewStyle} from 'react-native'
+import {type ModerationDecision} from '@atproto/api'
 
 import {getModerationCauseKey, unique} from '#/lib/moderation'
 import * as Pills from '#/components/Pills'
diff --git a/src/components/moderation/ReportDialog/action.ts b/src/components/moderation/ReportDialog/action.ts
index fde2c7898..2da6e4829 100644
--- a/src/components/moderation/ReportDialog/action.ts
+++ b/src/components/moderation/ReportDialog/action.ts
@@ -1,7 +1,7 @@
 import {
-  $Typed,
-  ChatBskyConvoDefs,
-  ComAtprotoModerationCreateReport,
+  type $Typed,
+  type ChatBskyConvoDefs,
+  type ComAtprotoModerationCreateReport,
 } from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
@@ -9,8 +9,8 @@ import {useMutation} from '@tanstack/react-query'
 
 import {logger} from '#/logger'
 import {useAgent} from '#/state/session'
-import {ReportState} from './state'
-import {ParsedReportSubject} from './types'
+import {type ReportState} from './state'
+import {type ParsedReportSubject} from './types'
 
 export function useSubmitReportMutation() {
   const {_} = useLingui()
diff --git a/src/components/moderation/ReportDialog/copy.ts b/src/components/moderation/ReportDialog/copy.ts
index 87e199f98..11536c00c 100644
--- a/src/components/moderation/ReportDialog/copy.ts
+++ b/src/components/moderation/ReportDialog/copy.ts
@@ -2,7 +2,7 @@ import {useMemo} from 'react'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
-import {ParsedReportSubject} from './types'
+import {type ParsedReportSubject} from './types'
 
 export function useCopyForSubject(subject: ParsedReportSubject) {
   const {_} = useLingui()
diff --git a/src/components/moderation/ReportDialog/state.ts b/src/components/moderation/ReportDialog/state.ts
index 3f55bfb01..18ee77df8 100644
--- a/src/components/moderation/ReportDialog/state.ts
+++ b/src/components/moderation/ReportDialog/state.ts
@@ -1,6 +1,6 @@
-import {AppBskyLabelerDefs, ComAtprotoModerationDefs} from '@atproto/api'
+import {type AppBskyLabelerDefs, ComAtprotoModerationDefs} from '@atproto/api'
 
-import {ReportOption} from './utils/useReportOptions'
+import {type ReportOption} from './utils/useReportOptions'
 
 export type ReportState = {
   selectedOption?: ReportOption
diff --git a/src/components/moderation/ReportDialog/types.ts b/src/components/moderation/ReportDialog/types.ts
index 444f01c66..e84369905 100644
--- a/src/components/moderation/ReportDialog/types.ts
+++ b/src/components/moderation/ReportDialog/types.ts
@@ -1,12 +1,12 @@
 import {
-  $Typed,
-  AppBskyActorDefs,
-  AppBskyFeedDefs,
-  AppBskyGraphDefs,
-  ChatBskyConvoDefs,
+  type $Typed,
+  type AppBskyActorDefs,
+  type AppBskyFeedDefs,
+  type AppBskyGraphDefs,
+  type ChatBskyConvoDefs,
 } from '@atproto/api'
 
-import * as Dialog from '#/components/Dialog'
+import type * as Dialog from '#/components/Dialog'
 
 export type ReportSubject =
   | $Typed<AppBskyActorDefs.ProfileViewBasic>
diff --git a/src/components/moderation/ReportDialog/utils/parseReportSubject.ts b/src/components/moderation/ReportDialog/utils/parseReportSubject.ts
index b79e49695..baab1934f 100644
--- a/src/components/moderation/ReportDialog/utils/parseReportSubject.ts
+++ b/src/components/moderation/ReportDialog/utils/parseReportSubject.ts
@@ -6,8 +6,8 @@ import {
 } from '@atproto/api'
 
 import {
-  ParsedReportSubject,
-  ReportSubject,
+  type ParsedReportSubject,
+  type ReportSubject,
 } from '#/components/moderation/ReportDialog/types'
 import * as bsky from '#/types/bsky'
 
diff --git a/src/components/moderation/ScreenHider.tsx b/src/components/moderation/ScreenHider.tsx
index 5680b60c2..dde07eb94 100644
--- a/src/components/moderation/ScreenHider.tsx
+++ b/src/components/moderation/ScreenHider.tsx
@@ -1,18 +1,18 @@
 import React from 'react'
 import {
-  StyleProp,
+  type StyleProp,
   TouchableWithoutFeedback,
   View,
-  ViewStyle,
+  type ViewStyle,
 } from 'react-native'
-import {ModerationUI} from '@atproto/api'
+import {type ModerationUI} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 import {useNavigation} from '@react-navigation/native'
 
 import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
 import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
-import {NavigationProp} from '#/lib/routes/types'
+import {type NavigationProp} from '#/lib/routes/types'
 import {CenteredView} from '#/view/com/util/Views'
 import {atoms as a, useTheme, web} from '#/alf'
 import {Button, ButtonText} from '#/components/Button'
diff --git a/src/lib/api/feed/custom.ts b/src/lib/api/feed/custom.ts
index dbb02467f..18bb8c8f0 100644
--- a/src/lib/api/feed/custom.ts
+++ b/src/lib/api/feed/custom.ts
@@ -1,6 +1,6 @@
 import {
-  AppBskyFeedDefs,
-  AppBskyFeedGetFeed as GetCustomFeed,
+  type AppBskyFeedDefs,
+  type AppBskyFeedGetFeed as GetCustomFeed,
   BskyAgent,
   jsonStringToLex,
 } from '@atproto/api'
@@ -9,7 +9,7 @@ import {
   getAppLanguageAsContentLanguage,
   getContentLanguages,
 } from '#/state/preferences/languages'
-import {FeedAPI, FeedAPIResponse} from './types'
+import {type FeedAPI, type FeedAPIResponse} from './types'
 import {createBskyTopicsHeader, isBlueskyOwnedFeed} from './utils'
 
 export class CustomFeedAPI implements FeedAPI {
diff --git a/src/lib/api/feed/following.ts b/src/lib/api/feed/following.ts
index 1004ccfb8..26de7f8a0 100644
--- a/src/lib/api/feed/following.ts
+++ b/src/lib/api/feed/following.ts
@@ -1,6 +1,6 @@
-import {AppBskyFeedDefs, BskyAgent} from '@atproto/api'
+import {type AppBskyFeedDefs, type BskyAgent} from '@atproto/api'
 
-import {FeedAPI, FeedAPIResponse} from './types'
+import {type FeedAPI, type FeedAPIResponse} from './types'
 
 export class FollowingFeedAPI implements FeedAPI {
   agent: BskyAgent
diff --git a/src/lib/api/feed/likes.ts b/src/lib/api/feed/likes.ts
index 378446ce9..c970fa72f 100644
--- a/src/lib/api/feed/likes.ts
+++ b/src/lib/api/feed/likes.ts
@@ -1,10 +1,10 @@
 import {
-  AppBskyFeedDefs,
-  AppBskyFeedGetActorLikes as GetActorLikes,
-  BskyAgent,
+  type AppBskyFeedDefs,
+  type AppBskyFeedGetActorLikes as GetActorLikes,
+  type BskyAgent,
 } from '@atproto/api'
 
-import {FeedAPI, FeedAPIResponse} from './types'
+import {type FeedAPI, type FeedAPIResponse} from './types'
 
 export class LikesFeedAPI implements FeedAPI {
   agent: BskyAgent
diff --git a/src/lib/api/feed/merge.ts b/src/lib/api/feed/merge.ts
index 7f8c1c275..b3f9575de 100644
--- a/src/lib/api/feed/merge.ts
+++ b/src/lib/api/feed/merge.ts
@@ -1,14 +1,22 @@
-import {AppBskyFeedDefs, AppBskyFeedGetTimeline, BskyAgent} from '@atproto/api'
+import {
+  type AppBskyFeedDefs,
+  type AppBskyFeedGetTimeline,
+  type BskyAgent,
+} from '@atproto/api'
 import shuffle from 'lodash.shuffle'
 
 import {bundleAsync} from '#/lib/async/bundle'
 import {timeout} from '#/lib/async/timeout'
 import {feedUriToHref} from '#/lib/strings/url-helpers'
 import {getContentLanguages} from '#/state/preferences/languages'
-import {FeedParams} from '#/state/queries/post-feed'
+import {type FeedParams} from '#/state/queries/post-feed'
 import {FeedTuner} from '../feed-manip'
-import {FeedTunerFn} from '../feed-manip'
-import {FeedAPI, FeedAPIResponse, ReasonFeedSource} from './types'
+import {type FeedTunerFn} from '../feed-manip'
+import {
+  type FeedAPI,
+  type FeedAPIResponse,
+  type ReasonFeedSource,
+} from './types'
 import {createBskyTopicsHeader, isBlueskyOwnedFeed} from './utils'
 
 const REQUEST_WAIT_MS = 500 // 500ms
diff --git a/src/lib/api/feed/types.ts b/src/lib/api/feed/types.ts
index abc6511ba..27fa066fb 100644
--- a/src/lib/api/feed/types.ts
+++ b/src/lib/api/feed/types.ts
@@ -1,4 +1,4 @@
-import {AppBskyFeedDefs} from '@atproto/api'
+import {type AppBskyFeedDefs} from '@atproto/api'
 
 export interface FeedAPIResponse {
   cursor?: string
diff --git a/src/lib/api/feed/utils.ts b/src/lib/api/feed/utils.ts
index 2d27fd783..3ed551595 100644
--- a/src/lib/api/feed/utils.ts
+++ b/src/lib/api/feed/utils.ts
@@ -2,7 +2,7 @@ import {AtUri} from '@atproto/api'
 
 import {BSKY_FEED_OWNER_DIDS} from '#/lib/constants'
 import {isWeb} from '#/platform/detection'
-import {UsePreferencesQueryResponse} from '#/state/queries/preferences'
+import {type UsePreferencesQueryResponse} from '#/state/queries/preferences'
 
 let debugTopics = ''
 if (isWeb && typeof window !== 'undefined') {
diff --git a/src/lib/api/upload-blob.ts b/src/lib/api/upload-blob.ts
index 07aeaf1a7..c7365bb24 100644
--- a/src/lib/api/upload-blob.ts
+++ b/src/lib/api/upload-blob.ts
@@ -1,5 +1,5 @@
 import {copyAsync} from 'expo-file-system'
-import {BskyAgent, ComAtprotoRepoUploadBlob} from '@atproto/api'
+import {type BskyAgent, type ComAtprotoRepoUploadBlob} from '@atproto/api'
 
 import {safeDeleteAsync} from '#/lib/media/manip'
 
diff --git a/src/lib/api/upload-blob.web.ts b/src/lib/api/upload-blob.web.ts
index 45b72f7ee..9f21be567 100644
--- a/src/lib/api/upload-blob.web.ts
+++ b/src/lib/api/upload-blob.web.ts
@@ -1,4 +1,4 @@
-import {BskyAgent, ComAtprotoRepoUploadBlob} from '@atproto/api'
+import {type BskyAgent, type ComAtprotoRepoUploadBlob} from '@atproto/api'
 
 /**
  * @note It is recommended, on web, to use the `file` instance of the file
diff --git a/src/lib/assets.native.ts b/src/lib/assets.native.ts
index 754bc9d2b..e679d6256 100644
--- a/src/lib/assets.native.ts
+++ b/src/lib/assets.native.ts
@@ -1,4 +1,4 @@
-import {ImageRequireSource} from 'react-native'
+import {type ImageRequireSource} from 'react-native'
 
 export const DEF_AVATAR: ImageRequireSource = require('../../assets/default-avatar.png')
 export const CLOUD_SPLASH: ImageRequireSource = require('../../assets/splash.png')
diff --git a/src/lib/assets.ts b/src/lib/assets.ts
index 8859607d5..c5e0f8493 100644
--- a/src/lib/assets.ts
+++ b/src/lib/assets.ts
@@ -1,4 +1,4 @@
-import {ImageRequireSource} from 'react-native'
+import {type ImageRequireSource} from 'react-native'
 
 // @ts-ignore we need to pretend -prf
 export const DEF_AVATAR: ImageRequireSource = {uri: '/img/default-avatar.png'}
diff --git a/src/lib/custom-animations/GestureActionView.web.tsx b/src/lib/custom-animations/GestureActionView.web.tsx
index 3caaa724f..1b7d96174 100644
--- a/src/lib/custom-animations/GestureActionView.web.tsx
+++ b/src/lib/custom-animations/GestureActionView.web.tsx
@@ -1,4 +1,4 @@
-import React from 'react'
+import type React from 'react'
 
 export function GestureActionView({children}: {children: React.ReactNode}) {
   return children
diff --git a/src/lib/custom-animations/PressableScale.tsx b/src/lib/custom-animations/PressableScale.tsx
index 9ac7e5eb2..b66ddef08 100644
--- a/src/lib/custom-animations/PressableScale.tsx
+++ b/src/lib/custom-animations/PressableScale.tsx
@@ -1,4 +1,9 @@
-import {Pressable, PressableProps, StyleProp, ViewStyle} from 'react-native'
+import {
+  Pressable,
+  type PressableProps,
+  type StyleProp,
+  type ViewStyle,
+} from 'react-native'
 import Animated, {
   cancelAnimation,
   useAnimatedStyle,
diff --git a/src/lib/hooks/useAccountSwitcher.ts b/src/lib/hooks/useAccountSwitcher.ts
index 22eb348f2..c1dbbc793 100644
--- a/src/lib/hooks/useAccountSwitcher.ts
+++ b/src/lib/hooks/useAccountSwitcher.ts
@@ -4,11 +4,11 @@ import {useLingui} from '@lingui/react'
 
 import {logger} from '#/logger'
 import {isWeb} from '#/platform/detection'
-import {SessionAccount, useSessionApi} from '#/state/session'
+import {type SessionAccount, useSessionApi} from '#/state/session'
 import {useLoggedOutViewControls} from '#/state/shell/logged-out'
 import * as Toast from '#/view/com/util/Toast'
 import {logEvent} from '../statsig/statsig'
-import {LogEvents} from '../statsig/statsig'
+import {type LogEvents} from '../statsig/statsig'
 
 export function useAccountSwitcher() {
   const [pendingDid, setPendingDid] = useState<string | null>(null)
diff --git a/src/lib/hooks/useGoBack.ts b/src/lib/hooks/useGoBack.ts
index e5a39f745..25c951ca4 100644
--- a/src/lib/hooks/useGoBack.ts
+++ b/src/lib/hooks/useGoBack.ts
@@ -1,6 +1,6 @@
 import {StackActions, useNavigation} from '@react-navigation/native'
 
-import {NavigationProp} from '#/lib/routes/types'
+import {type NavigationProp} from '#/lib/routes/types'
 import {router} from '#/routes'
 
 export function useGoBack(onGoBack?: () => unknown) {
diff --git a/src/lib/hooks/useSetTitle.ts b/src/lib/hooks/useSetTitle.ts
index fa1e2a5b1..04f9dcc2c 100644
--- a/src/lib/hooks/useSetTitle.ts
+++ b/src/lib/hooks/useSetTitle.ts
@@ -1,7 +1,7 @@
 import {useEffect} from 'react'
 import {useNavigation} from '@react-navigation/native'
 
-import {NavigationProp} from '#/lib/routes/types'
+import {type NavigationProp} from '#/lib/routes/types'
 import {bskyTitle} from '#/lib/strings/headings'
 import {useUnreadNotifications} from '#/state/queries/notifications/unread'
 
diff --git a/src/lib/hooks/useTimeAgo.ts b/src/lib/hooks/useTimeAgo.ts
index e9430ad47..b41bf690c 100644
--- a/src/lib/hooks/useTimeAgo.ts
+++ b/src/lib/hooks/useTimeAgo.ts
@@ -1,5 +1,5 @@
 import {useCallback} from 'react'
-import {I18n} from '@lingui/core'
+import {type I18n} from '@lingui/core'
 import {defineMessage, msg, plural} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 import {differenceInSeconds} from 'date-fns'
diff --git a/src/lib/hooks/useWebScrollRestoration.ts b/src/lib/hooks/useWebScrollRestoration.ts
index 36484ba0f..d5281f114 100644
--- a/src/lib/hooks/useWebScrollRestoration.ts
+++ b/src/lib/hooks/useWebScrollRestoration.ts
@@ -1,5 +1,5 @@
 import {useEffect, useMemo, useState} from 'react'
-import {EventArg, useNavigation} from '@react-navigation/core'
+import {type EventArg, useNavigation} from '@react-navigation/core'
 
 if ('scrollRestoration' in history) {
   // Tell the brower not to mess with the scroll.
diff --git a/src/lib/media/video/compress.web.ts b/src/lib/media/video/compress.web.ts
index 995fbf1da..83fdfde53 100644
--- a/src/lib/media/video/compress.web.ts
+++ b/src/lib/media/video/compress.web.ts
@@ -1,8 +1,8 @@
-import {ImagePickerAsset} from 'expo-image-picker'
+import {type ImagePickerAsset} from 'expo-image-picker'
 
 import {VIDEO_MAX_SIZE} from '#/lib/constants'
 import {VideoTooLargeError} from '#/lib/media/video/errors'
-import {CompressedVideo} from './types'
+import {type CompressedVideo} from './types'
 
 // doesn't actually compress, converts to ArrayBuffer
 export async function compressVideo(
diff --git a/src/lib/media/video/upload.shared.ts b/src/lib/media/video/upload.shared.ts
index 8c217eadc..f74efa03a 100644
--- a/src/lib/media/video/upload.shared.ts
+++ b/src/lib/media/video/upload.shared.ts
@@ -1,5 +1,5 @@
-import {BskyAgent} from '@atproto/api'
-import {I18n} from '@lingui/core'
+import {type BskyAgent} from '@atproto/api'
+import {type I18n} from '@lingui/core'
 import {msg} from '@lingui/macro'
 
 import {VIDEO_SERVICE_DID} from '#/lib/constants'
diff --git a/src/lib/media/video/upload.ts b/src/lib/media/video/upload.ts
index 720283a8d..86a1231a7 100644
--- a/src/lib/media/video/upload.ts
+++ b/src/lib/media/video/upload.ts
@@ -1,12 +1,12 @@
 import {createUploadTask, FileSystemUploadType} from 'expo-file-system'
-import {AppBskyVideoDefs, BskyAgent} from '@atproto/api'
-import {I18n} from '@lingui/core'
+import {type AppBskyVideoDefs, type BskyAgent} from '@atproto/api'
+import {type I18n} from '@lingui/core'
 import {msg} from '@lingui/macro'
 import {nanoid} from 'nanoid/non-secure'
 
 import {AbortError} from '#/lib/async/cancelable'
 import {ServerError} from '#/lib/media/video/errors'
-import {CompressedVideo} from '#/lib/media/video/types'
+import {type CompressedVideo} from '#/lib/media/video/types'
 import {getServiceAuthToken, getVideoUploadLimits} from './upload.shared'
 import {createVideoEndpointUrl, mimeToExt} from './util'
 
diff --git a/src/lib/media/video/upload.web.ts b/src/lib/media/video/upload.web.ts
index d1b441a36..84483dae8 100644
--- a/src/lib/media/video/upload.web.ts
+++ b/src/lib/media/video/upload.web.ts
@@ -1,12 +1,12 @@
-import {AppBskyVideoDefs} from '@atproto/api'
-import {BskyAgent} from '@atproto/api'
-import {I18n} from '@lingui/core'
+import {type AppBskyVideoDefs} from '@atproto/api'
+import {type BskyAgent} from '@atproto/api'
+import {type I18n} from '@lingui/core'
 import {msg} from '@lingui/macro'
 import {nanoid} from 'nanoid/non-secure'
 
 import {AbortError} from '#/lib/async/cancelable'
 import {ServerError} from '#/lib/media/video/errors'
-import {CompressedVideo} from '#/lib/media/video/types'
+import {type CompressedVideo} from '#/lib/media/video/types'
 import {getServiceAuthToken, getVideoUploadLimits} from './upload.shared'
 import {createVideoEndpointUrl, mimeToExt} from './util'
 
diff --git a/src/lib/media/video/util.ts b/src/lib/media/video/util.ts
index b80e0a4a1..1be8ff1ad 100644
--- a/src/lib/media/video/util.ts
+++ b/src/lib/media/video/util.ts
@@ -1,6 +1,6 @@
 import {AtpAgent} from '@atproto/api'
 
-import {SupportedMimeTypes, VIDEO_SERVICE} from '#/lib/constants'
+import {type SupportedMimeTypes, VIDEO_SERVICE} from '#/lib/constants'
 
 export const createVideoEndpointUrl = (
   route: string,
diff --git a/src/lib/moderation/blocked-and-muted.ts b/src/lib/moderation/blocked-and-muted.ts
index 27c461a3d..9806ca83a 100644
--- a/src/lib/moderation/blocked-and-muted.ts
+++ b/src/lib/moderation/blocked-and-muted.ts
@@ -1,4 +1,4 @@
-import * as bsky from '#/types/bsky'
+import type * as bsky from '#/types/bsky'
 
 export function isBlockedOrBlocking(profile: bsky.profile.AnyProfileView) {
   return profile.viewer?.blockedBy || profile.viewer?.blocking
diff --git a/src/lib/moderation/useLabelBehaviorDescription.ts b/src/lib/moderation/useLabelBehaviorDescription.ts
index 4e773e0f0..90db665f4 100644
--- a/src/lib/moderation/useLabelBehaviorDescription.ts
+++ b/src/lib/moderation/useLabelBehaviorDescription.ts
@@ -1,4 +1,7 @@
-import {InterpretedLabelValueDefinition, LabelPreference} from '@atproto/api'
+import {
+  type InterpretedLabelValueDefinition,
+  type LabelPreference,
+} from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
diff --git a/src/lib/moderation/useLabelInfo.ts b/src/lib/moderation/useLabelInfo.ts
index 0ff7e1246..f39840607 100644
--- a/src/lib/moderation/useLabelInfo.ts
+++ b/src/lib/moderation/useLabelInfo.ts
@@ -1,7 +1,7 @@
 import {
-  AppBskyLabelerDefs,
-  ComAtprotoLabelDefs,
-  InterpretedLabelValueDefinition,
+  type AppBskyLabelerDefs,
+  type ComAtprotoLabelDefs,
+  type InterpretedLabelValueDefinition,
   interpretLabelValueDefinition,
   LABELS,
 } from '@atproto/api'
@@ -9,7 +9,7 @@ import {useLingui} from '@lingui/react'
 import * as bcp47Match from 'bcp-47-match'
 
 import {
-  GlobalLabelStrings,
+  type GlobalLabelStrings,
   useGlobalLabelStrings,
 } from '#/lib/moderation/useGlobalLabelStrings'
 import {useLabelDefinitions} from '#/state/preferences'
diff --git a/src/lib/react-query.tsx b/src/lib/react-query.tsx
index 5abfccd7f..fe3ec6f4c 100644
--- a/src/lib/react-query.tsx
+++ b/src/lib/react-query.tsx
@@ -1,12 +1,13 @@
-import React, {useRef, useState} from 'react'
-import {AppState, AppStateStatus} from 'react-native'
+import {useRef, useState} from 'react'
+import {AppState, type AppStateStatus} from 'react-native'
 import AsyncStorage from '@react-native-async-storage/async-storage'
 import {createAsyncStoragePersister} from '@tanstack/query-async-storage-persister'
 import {focusManager, onlineManager, QueryClient} from '@tanstack/react-query'
 import {
   PersistQueryClientProvider,
-  PersistQueryClientProviderProps,
+  type PersistQueryClientProviderProps,
 } from '@tanstack/react-query-persist-client'
+import type React from 'react'
 
 import {isNative} from '#/platform/detection'
 import {listenNetworkConfirmed, listenNetworkLost} from '#/state/events'
diff --git a/src/lib/routes/helpers.ts b/src/lib/routes/helpers.ts
index 1297df8d2..33e7563a3 100644
--- a/src/lib/routes/helpers.ts
+++ b/src/lib/routes/helpers.ts
@@ -1,6 +1,6 @@
-import {NavigationProp} from '@react-navigation/native'
+import {type NavigationProp} from '@react-navigation/native'
 
-import {RouteParams, State} from './types'
+import {type RouteParams, type State} from './types'
 
 export function getRootNavigation<T extends {}>(
   nav: NavigationProp<T>,
diff --git a/src/lib/strings/display-names.ts b/src/lib/strings/display-names.ts
index a95bfd679..612a317ea 100644
--- a/src/lib/strings/display-names.ts
+++ b/src/lib/strings/display-names.ts
@@ -1,4 +1,4 @@
-import {ModerationUI} from '@atproto/api'
+import {type ModerationUI} from '@atproto/api'
 
 // \u2705 = ✅
 // \u2713 = ✓
diff --git a/src/lib/strings/rich-text-helpers.ts b/src/lib/strings/rich-text-helpers.ts
index 54f0733d0..c2b2ceac5 100644
--- a/src/lib/strings/rich-text-helpers.ts
+++ b/src/lib/strings/rich-text-helpers.ts
@@ -1,4 +1,4 @@
-import {AppBskyRichtextFacet, RichText} from '@atproto/api'
+import {AppBskyRichtextFacet, type RichText} from '@atproto/api'
 
 import {linkRequiresWarning} from './url-helpers'
 
diff --git a/src/lib/strings/rich-text-manip.ts b/src/lib/strings/rich-text-manip.ts
index 2e84656f2..099fbffb0 100644
--- a/src/lib/strings/rich-text-manip.ts
+++ b/src/lib/strings/rich-text-manip.ts
@@ -1,4 +1,4 @@
-import {AppBskyRichtextFacet, RichText, UnicodeString} from '@atproto/api'
+import {AppBskyRichtextFacet, type RichText, UnicodeString} from '@atproto/api'
 
 import {toShortUrl} from './url-helpers'
 
diff --git a/src/lib/strings/time.ts b/src/lib/strings/time.ts
index 3823af188..586c16492 100644
--- a/src/lib/strings/time.ts
+++ b/src/lib/strings/time.ts
@@ -1,4 +1,4 @@
-import {I18n} from '@lingui/core'
+import {type I18n} from '@lingui/core'
 
 export function niceDate(i18n: I18n, date: number | string | Date) {
   const d = new Date(date)
diff --git a/src/lib/themes.ts b/src/lib/themes.ts
index 2aeec3139..1d590dab7 100644
--- a/src/lib/themes.ts
+++ b/src/lib/themes.ts
@@ -4,7 +4,7 @@ import {tokens} from '#/alf'
 import {darkPalette, dimPalette, lightPalette} from '#/alf/themes'
 import {fontWeight} from '#/alf/tokens'
 import {colors} from './styles'
-import type {Theme} from './ThemeContext'
+import {type Theme} from './ThemeContext'
 
 export const defaultTheme: Theme = {
   colorScheme: 'light',
diff --git a/src/locale/deviceLocales.ts b/src/locale/deviceLocales.ts
index b72daf68d..103fa5d67 100644
--- a/src/locale/deviceLocales.ts
+++ b/src/locale/deviceLocales.ts
@@ -1,4 +1,4 @@
-import {getLocales as defaultGetLocales, Locale} from 'expo-localization'
+import {getLocales as defaultGetLocales, type Locale} from 'expo-localization'
 
 import {dedupArray} from '#/lib/functions'
 
diff --git a/src/locale/i18nProvider.tsx b/src/locale/i18nProvider.tsx
index f7f067973..6af55fe0e 100644
--- a/src/locale/i18nProvider.tsx
+++ b/src/locale/i18nProvider.tsx
@@ -1,6 +1,6 @@
-import React from 'react'
 import {i18n} from '@lingui/core'
 import {I18nProvider as DefaultI18nProvider} from '@lingui/react'
+import type React from 'react'
 
 import {useLocaleLanguage} from './i18n'
 
diff --git a/src/logger/__tests__/logDump.test.ts b/src/logger/__tests__/logDump.test.ts
index 165bfac08..9575b7062 100644
--- a/src/logger/__tests__/logDump.test.ts
+++ b/src/logger/__tests__/logDump.test.ts
@@ -1,6 +1,6 @@
 import {expect, test} from '@jest/globals'
 
-import {add, ConsoleTransportEntry, getEntries} from '#/logger/logDump'
+import {add, type ConsoleTransportEntry, getEntries} from '#/logger/logDump'
 import {LogContext, LogLevel} from '#/logger/types'
 
 test('works', () => {
diff --git a/src/logger/logDump.ts b/src/logger/logDump.ts
index 12cf899eb..e1a8aa31e 100644
--- a/src/logger/logDump.ts
+++ b/src/logger/logDump.ts
@@ -1,4 +1,4 @@
-import type {LogContext, LogLevel, Metadata} from '#/logger/types'
+import {type LogContext, type LogLevel, type Metadata} from '#/logger/types'
 
 export type ConsoleTransportEntry = {
   id: string
diff --git a/src/logger/transports/bitdrift.ts b/src/logger/transports/bitdrift.ts
index a407f9485..d6b9728d4 100644
--- a/src/logger/transports/bitdrift.ts
+++ b/src/logger/transports/bitdrift.ts
@@ -1,5 +1,5 @@
 import {debug, error, info, warn} from '#/logger/bitdrift/lib'
-import {LogLevel, Transport} from '#/logger/types'
+import {LogLevel, type Transport} from '#/logger/types'
 import {prepareMetadata} from '#/logger/util'
 
 const logFunctions = {
diff --git a/src/logger/transports/console.ts b/src/logger/transports/console.ts
index 6a687c69b..1f760630a 100644
--- a/src/logger/transports/console.ts
+++ b/src/logger/transports/console.ts
@@ -1,6 +1,6 @@
 import format from 'date-fns/format'
 
-import {LogLevel, Transport} from '#/logger/types'
+import {LogLevel, type Transport} from '#/logger/types'
 import {prepareMetadata} from '#/logger/util'
 import {isWeb} from '#/platform/detection'
 
diff --git a/src/logger/util.ts b/src/logger/util.ts
index f1e12b164..cd0efa17a 100644
--- a/src/logger/util.ts
+++ b/src/logger/util.ts
@@ -1,4 +1,4 @@
-import {LogLevel, Metadata, Serializable} from '#/logger/types'
+import {LogLevel, type Metadata, type Serializable} from '#/logger/types'
 
 export const enabledLogLevels: {
   [key in LogLevel]: LogLevel[]
diff --git a/src/screens/Home/NoFeedsPinned.tsx b/src/screens/Home/NoFeedsPinned.tsx
index 74412763f..fce4ffea2 100644
--- a/src/screens/Home/NoFeedsPinned.tsx
+++ b/src/screens/Home/NoFeedsPinned.tsx
@@ -6,7 +6,7 @@ import {useLingui} from '@lingui/react'
 
 import {DISCOVER_SAVED_FEED, TIMELINE_SAVED_FEED} from '#/lib/constants'
 import {useOverwriteSavedFeedsMutation} from '#/state/queries/preferences'
-import {UsePreferencesQueryResponse} from '#/state/queries/preferences'
+import {type UsePreferencesQueryResponse} from '#/state/queries/preferences'
 import {CenteredView} from '#/view/com/util/Views'
 import {atoms as a} from '#/alf'
 import {Button, ButtonIcon, ButtonText} from '#/components/Button'
diff --git a/src/screens/List/ListHiddenScreen.tsx b/src/screens/List/ListHiddenScreen.tsx
index 261192fea..63f36dc94 100644
--- a/src/screens/List/ListHiddenScreen.tsx
+++ b/src/screens/List/ListHiddenScreen.tsx
@@ -11,7 +11,7 @@ import {logger} from '#/logger'
 import {RQKEY_ROOT as listQueryRoot} from '#/state/queries/list'
 import {useListBlockMutation, useListMuteMutation} from '#/state/queries/list'
 import {
-  UsePreferencesQueryResponse,
+  type UsePreferencesQueryResponse,
   useRemoveFeedMutation,
 } from '#/state/queries/preferences'
 import {useSession} from '#/state/session'
diff --git a/src/screens/Login/ChooseAccountForm.tsx b/src/screens/Login/ChooseAccountForm.tsx
index 9765786ec..dc69c83b0 100644
--- a/src/screens/Login/ChooseAccountForm.tsx
+++ b/src/screens/Login/ChooseAccountForm.tsx
@@ -5,7 +5,7 @@ import {useLingui} from '@lingui/react'
 
 import {logEvent} from '#/lib/statsig/statsig'
 import {logger} from '#/logger'
-import {SessionAccount, useSession, useSessionApi} from '#/state/session'
+import {type SessionAccount, useSession, useSessionApi} from '#/state/session'
 import {useLoggedOutViewControls} from '#/state/shell/logged-out'
 import * as Toast from '#/view/com/util/Toast'
 import {atoms as a} from '#/alf'
diff --git a/src/screens/Login/FormContainer.tsx b/src/screens/Login/FormContainer.tsx
index d5e075bdb..dc8ebb558 100644
--- a/src/screens/Login/FormContainer.tsx
+++ b/src/screens/Login/FormContainer.tsx
@@ -1,5 +1,5 @@
-import React from 'react'
 import {type StyleProp, View, type ViewStyle} from 'react-native'
+import type React from 'react'
 
 import {atoms as a, useBreakpoints, useTheme} from '#/alf'
 import {Text} from '#/components/Typography'
diff --git a/src/screens/Login/ScreenTransition.tsx b/src/screens/Login/ScreenTransition.tsx
index 6fad26680..b9e4b2d55 100644
--- a/src/screens/Login/ScreenTransition.tsx
+++ b/src/screens/Login/ScreenTransition.tsx
@@ -1,6 +1,6 @@
-import React from 'react'
-import {StyleProp, ViewStyle} from 'react-native'
+import {type StyleProp, type ViewStyle} from 'react-native'
 import Animated, {FadeInRight, FadeOutLeft} from 'react-native-reanimated'
+import type React from 'react'
 
 export function ScreenTransition({
   style,
diff --git a/src/screens/Messages/components/ChatStatusInfo.tsx b/src/screens/Messages/components/ChatStatusInfo.tsx
index a74f3092b..c02034ff3 100644
--- a/src/screens/Messages/components/ChatStatusInfo.tsx
+++ b/src/screens/Messages/components/ChatStatusInfo.tsx
@@ -3,7 +3,7 @@ import {View} from 'react-native'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
-import {ActiveConvoStates} from '#/state/messages/convo'
+import {type ActiveConvoStates} from '#/state/messages/convo'
 import {useModerationOpts} from '#/state/preferences/moderation-opts'
 import {useSession} from '#/state/session'
 import {atoms as a, useTheme} from '#/alf'
diff --git a/src/screens/Messages/components/MessageInputEmbed.tsx b/src/screens/Messages/components/MessageInputEmbed.tsx
index c9bb8c77c..c4d61b000 100644
--- a/src/screens/Messages/components/MessageInputEmbed.tsx
+++ b/src/screens/Messages/components/MessageInputEmbed.tsx
@@ -9,10 +9,13 @@ import {
 } from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
-import {RouteProp, useNavigation, useRoute} from '@react-navigation/native'
+import {type RouteProp, useNavigation, useRoute} from '@react-navigation/native'
 
 import {makeProfileLink} from '#/lib/routes/links'
-import {CommonNavigatorParams, NavigationProp} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NavigationProp,
+} from '#/lib/routes/types'
 import {
   convertBskyAppUrlIfNeeded,
   isBskyPostUrl,
diff --git a/src/screens/Messages/components/MessageListError.tsx b/src/screens/Messages/components/MessageListError.tsx
index 6f50948df..56fe9eb0a 100644
--- a/src/screens/Messages/components/MessageListError.tsx
+++ b/src/screens/Messages/components/MessageListError.tsx
@@ -3,7 +3,7 @@ import {View} from 'react-native'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
-import {ConvoItem, ConvoItemError} from '#/state/messages/convo/types'
+import {type ConvoItem, ConvoItemError} from '#/state/messages/convo/types'
 import {atoms as a, useTheme} from '#/alf'
 import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
 import {InlineLinkText} from '#/components/Link'
diff --git a/src/screens/ModerationInteractionSettings/index.tsx b/src/screens/ModerationInteractionSettings/index.tsx
index a7e29a8a9..0cdce2efb 100644
--- a/src/screens/ModerationInteractionSettings/index.tsx
+++ b/src/screens/ModerationInteractionSettings/index.tsx
@@ -9,7 +9,7 @@ import {usePostInteractionSettingsMutation} from '#/state/queries/post-interacti
 import {createPostgateRecord} from '#/state/queries/postgate/util'
 import {
   usePreferencesQuery,
-  UsePreferencesQueryResponse,
+  type UsePreferencesQueryResponse,
 } from '#/state/queries/preferences'
 import {
   threadgateAllowUISettingToAllowRecordValue,
diff --git a/src/screens/Onboarding/StepInterests/InterestButton.tsx b/src/screens/Onboarding/StepInterests/InterestButton.tsx
index 24b34041e..7f8b32b83 100644
--- a/src/screens/Onboarding/StepInterests/InterestButton.tsx
+++ b/src/screens/Onboarding/StepInterests/InterestButton.tsx
@@ -1,5 +1,5 @@
 import React from 'react'
-import {TextStyle, View, ViewStyle} from 'react-native'
+import {type TextStyle, View, type ViewStyle} from 'react-native'
 
 import {capitalize} from '#/lib/strings/capitalize'
 import {useInterestsDisplayNames} from '#/screens/Onboarding/state'
diff --git a/src/screens/Onboarding/StepProfile/AvatarCreatorCircle.tsx b/src/screens/Onboarding/StepProfile/AvatarCreatorCircle.tsx
index 1cd68eb61..033ce0b49 100644
--- a/src/screens/Onboarding/StepProfile/AvatarCreatorCircle.tsx
+++ b/src/screens/Onboarding/StepProfile/AvatarCreatorCircle.tsx
@@ -1,7 +1,7 @@
 import React from 'react'
 import {View} from 'react-native'
 
-import {Avatar} from '#/screens/Onboarding/StepProfile/index'
+import {type Avatar} from '#/screens/Onboarding/StepProfile/index'
 import {atoms as a, useTheme} from '#/alf'
 
 export function AvatarCreatorCircle({
diff --git a/src/screens/Onboarding/StepProfile/AvatarCreatorItems.tsx b/src/screens/Onboarding/StepProfile/AvatarCreatorItems.tsx
index 98c01ce7d..93a6469a8 100644
--- a/src/screens/Onboarding/StepProfile/AvatarCreatorItems.tsx
+++ b/src/screens/Onboarding/StepProfile/AvatarCreatorItems.tsx
@@ -3,12 +3,12 @@ import {View} from 'react-native'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
-import {Avatar} from '#/screens/Onboarding/StepProfile/index'
+import {type Avatar} from '#/screens/Onboarding/StepProfile/index'
 import {
-  AvatarColor,
+  type AvatarColor,
   avatarColors,
   emojiItems,
-  EmojiName,
+  type EmojiName,
   emojiNames,
 } from '#/screens/Onboarding/StepProfile/types'
 import {atoms as a, useTheme} from '#/alf'
diff --git a/src/screens/Post/PostLikedBy.tsx b/src/screens/Post/PostLikedBy.tsx
index 683818690..e1a482452 100644
--- a/src/screens/Post/PostLikedBy.tsx
+++ b/src/screens/Post/PostLikedBy.tsx
@@ -2,7 +2,10 @@ import React from 'react'
 import {Plural, Trans} from '@lingui/macro'
 import {useFocusEffect} from '@react-navigation/native'
 
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {makeRecordUri} from '#/lib/strings/url-helpers'
 import {usePostThreadQuery} from '#/state/queries/post-thread'
 import {useSetMinimalShellMode} from '#/state/shell'
diff --git a/src/screens/Post/PostQuotes.tsx b/src/screens/Post/PostQuotes.tsx
index 24e942abf..3fa5d8027 100644
--- a/src/screens/Post/PostQuotes.tsx
+++ b/src/screens/Post/PostQuotes.tsx
@@ -2,7 +2,10 @@ import React from 'react'
 import {Plural, Trans} from '@lingui/macro'
 import {useFocusEffect} from '@react-navigation/native'
 
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {makeRecordUri} from '#/lib/strings/url-helpers'
 import {usePostThreadQuery} from '#/state/queries/post-thread'
 import {useSetMinimalShellMode} from '#/state/shell'
diff --git a/src/screens/Post/PostRepostedBy.tsx b/src/screens/Post/PostRepostedBy.tsx
index e2f78f662..d79321d0a 100644
--- a/src/screens/Post/PostRepostedBy.tsx
+++ b/src/screens/Post/PostRepostedBy.tsx
@@ -2,7 +2,10 @@ import React from 'react'
 import {Plural, Trans} from '@lingui/macro'
 import {useFocusEffect} from '@react-navigation/native'
 
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {makeRecordUri} from '#/lib/strings/url-helpers'
 import {usePostThreadQuery} from '#/state/queries/post-thread'
 import {useSetMinimalShellMode} from '#/state/shell'
diff --git a/src/screens/Profile/ErrorState.tsx b/src/screens/Profile/ErrorState.tsx
index b473435fc..af0a61905 100644
--- a/src/screens/Profile/ErrorState.tsx
+++ b/src/screens/Profile/ErrorState.tsx
@@ -4,7 +4,7 @@ import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 import {useNavigation} from '@react-navigation/native'
 
-import {NavigationProp} from '#/lib/routes/types'
+import {type NavigationProp} from '#/lib/routes/types'
 import {atoms as a, useTheme} from '#/alf'
 import {Button, ButtonText} from '#/components/Button'
 import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
diff --git a/src/screens/Profile/Header/DisplayName.tsx b/src/screens/Profile/Header/DisplayName.tsx
index b74c063d4..6be8f6694 100644
--- a/src/screens/Profile/Header/DisplayName.tsx
+++ b/src/screens/Profile/Header/DisplayName.tsx
@@ -1,9 +1,9 @@
 import {View} from 'react-native'
-import {AppBskyActorDefs, ModerationDecision} from '@atproto/api'
+import {type AppBskyActorDefs, type ModerationDecision} from '@atproto/api'
 
 import {sanitizeDisplayName} from '#/lib/strings/display-names'
 import {sanitizeHandle} from '#/lib/strings/handles'
-import {Shadow} from '#/state/cache/types'
+import {type Shadow} from '#/state/cache/types'
 import {atoms as a, useBreakpoints, useTheme} from '#/alf'
 import {Text} from '#/components/Typography'
 
diff --git a/src/screens/Profile/Header/GrowableAvatar.tsx b/src/screens/Profile/Header/GrowableAvatar.tsx
index dab69f955..ac66046d6 100644
--- a/src/screens/Profile/Header/GrowableAvatar.tsx
+++ b/src/screens/Profile/Header/GrowableAvatar.tsx
@@ -1,11 +1,11 @@
-import React from 'react'
-import {StyleProp, View, ViewStyle} from 'react-native'
+import {type StyleProp, View, type ViewStyle} from 'react-native'
 import Animated, {
   Extrapolation,
   interpolate,
-  SharedValue,
+  type SharedValue,
   useAnimatedStyle,
 } from 'react-native-reanimated'
+import type React from 'react'
 
 import {isIOS} from '#/platform/detection'
 import {usePagerHeaderContext} from '#/view/com/pager/PagerHeaderContext'
diff --git a/src/screens/Profile/Header/GrowableBanner.tsx b/src/screens/Profile/Header/GrowableBanner.tsx
index 3d2830439..ab1432bdc 100644
--- a/src/screens/Profile/Header/GrowableBanner.tsx
+++ b/src/screens/Profile/Header/GrowableBanner.tsx
@@ -1,11 +1,11 @@
-import React, {useEffect, useState} from 'react'
+import {useEffect, useState} from 'react'
 import {View} from 'react-native'
 import {ActivityIndicator} from 'react-native'
 import Animated, {
   Extrapolation,
   interpolate,
   runOnJS,
-  SharedValue,
+  type SharedValue,
   useAnimatedProps,
   useAnimatedReaction,
   useAnimatedStyle,
@@ -13,6 +13,7 @@ import Animated, {
 import {useSafeAreaInsets} from 'react-native-safe-area-context'
 import {BlurView} from 'expo-blur'
 import {useIsFetching} from '@tanstack/react-query'
+import type React from 'react'
 
 import {isIOS} from '#/platform/detection'
 import {RQKEY_ROOT as STARTERPACK_RQKEY_ROOT} from '#/state/queries/actor-starter-packs'
diff --git a/src/screens/Profile/Header/Metrics.tsx b/src/screens/Profile/Header/Metrics.tsx
index 736e5ccee..a67b02542 100644
--- a/src/screens/Profile/Header/Metrics.tsx
+++ b/src/screens/Profile/Header/Metrics.tsx
@@ -1,10 +1,10 @@
 import {View} from 'react-native'
-import {AppBskyActorDefs} from '@atproto/api'
+import {type AppBskyActorDefs} from '@atproto/api'
 import {msg, plural} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
 import {makeProfileLink} from '#/lib/routes/links'
-import {Shadow} from '#/state/cache/types'
+import {type Shadow} from '#/state/cache/types'
 import {formatCount} from '#/view/com/util/numeric/format'
 import {atoms as a, useTheme} from '#/alf'
 import {InlineLinkText} from '#/components/Link'
diff --git a/src/screens/Profile/Header/StatusBarShadow.tsx b/src/screens/Profile/Header/StatusBarShadow.tsx
index 587b41051..7180e62bb 100644
--- a/src/screens/Profile/Header/StatusBarShadow.tsx
+++ b/src/screens/Profile/Header/StatusBarShadow.tsx
@@ -1,4 +1,7 @@
-import Animated, {SharedValue, useAnimatedStyle} from 'react-native-reanimated'
+import Animated, {
+  type SharedValue,
+  useAnimatedStyle,
+} from 'react-native-reanimated'
 import {useSafeAreaInsets} from 'react-native-safe-area-context'
 import {LinearGradient} from 'expo-linear-gradient'
 
diff --git a/src/screens/Profile/Header/index.tsx b/src/screens/Profile/Header/index.tsx
index 7e4b9bb31..1158a8aa5 100644
--- a/src/screens/Profile/Header/index.tsx
+++ b/src/screens/Profile/Header/index.tsx
@@ -1,5 +1,5 @@
 import React, {memo, useState} from 'react'
-import {LayoutChangeEvent, StyleSheet, View} from 'react-native'
+import {type LayoutChangeEvent, StyleSheet, View} from 'react-native'
 import Animated, {
   runOnJS,
   useAnimatedReaction,
@@ -8,10 +8,10 @@ import Animated, {
 } from 'react-native-reanimated'
 import {useSafeAreaInsets} from 'react-native-safe-area-context'
 import {
-  AppBskyActorDefs,
-  AppBskyLabelerDefs,
-  ModerationOpts,
-  RichText as RichTextAPI,
+  type AppBskyActorDefs,
+  type AppBskyLabelerDefs,
+  type ModerationOpts,
+  type RichText as RichTextAPI,
 } from '@atproto/api'
 import {useIsFocused} from '@react-navigation/native'
 
diff --git a/src/screens/Profile/KnownFollowers.tsx b/src/screens/Profile/KnownFollowers.tsx
index 6b22a0add..6c94ebeed 100644
--- a/src/screens/Profile/KnownFollowers.tsx
+++ b/src/screens/Profile/KnownFollowers.tsx
@@ -1,11 +1,14 @@
 import React from 'react'
-import {AppBskyActorDefs} from '@atproto/api'
+import {type AppBskyActorDefs} from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 import {useFocusEffect} from '@react-navigation/native'
 
 import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {cleanError} from '#/lib/strings/errors'
 import {logger} from '#/logger'
 import {useProfileKnownFollowersQuery} from '#/state/queries/known-followers'
diff --git a/src/screens/Profile/ProfileFollowers.tsx b/src/screens/Profile/ProfileFollowers.tsx
index 64292d20e..1bd784738 100644
--- a/src/screens/Profile/ProfileFollowers.tsx
+++ b/src/screens/Profile/ProfileFollowers.tsx
@@ -2,7 +2,10 @@ import React from 'react'
 import {Plural} from '@lingui/macro'
 import {useFocusEffect} from '@react-navigation/native'
 
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {sanitizeDisplayName} from '#/lib/strings/display-names'
 import {useProfileQuery} from '#/state/queries/profile'
 import {useResolveDidQuery} from '#/state/queries/resolve-uri'
diff --git a/src/screens/Profile/ProfileFollows.tsx b/src/screens/Profile/ProfileFollows.tsx
index 85ebccf30..3faf5a332 100644
--- a/src/screens/Profile/ProfileFollows.tsx
+++ b/src/screens/Profile/ProfileFollows.tsx
@@ -2,7 +2,10 @@ import React from 'react'
 import {Plural} from '@lingui/macro'
 import {useFocusEffect} from '@react-navigation/native'
 
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {sanitizeDisplayName} from '#/lib/strings/display-names'
 import {useProfileQuery} from '#/state/queries/profile'
 import {useResolveDidQuery} from '#/state/queries/resolve-uri'
diff --git a/src/screens/Profile/ProfileLabelerLikedBy.tsx b/src/screens/Profile/ProfileLabelerLikedBy.tsx
index ccc270084..f194f2398 100644
--- a/src/screens/Profile/ProfileLabelerLikedBy.tsx
+++ b/src/screens/Profile/ProfileLabelerLikedBy.tsx
@@ -3,7 +3,10 @@ import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 import {useFocusEffect} from '@react-navigation/native'
 
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {makeRecordUri} from '#/lib/strings/url-helpers'
 import {useSetMinimalShellMode} from '#/state/shell'
 import {ViewHeader} from '#/view/com/util/ViewHeader'
diff --git a/src/screens/Settings/AppIconSettings/AppIconImage.tsx b/src/screens/Settings/AppIconSettings/AppIconImage.tsx
index e81d5d0d5..61f718c43 100644
--- a/src/screens/Settings/AppIconSettings/AppIconImage.tsx
+++ b/src/screens/Settings/AppIconSettings/AppIconImage.tsx
@@ -1,6 +1,6 @@
 import {Image} from 'expo-image'
 
-import {AppIconSet} from '#/screens/Settings/AppIconSettings/types'
+import {type AppIconSet} from '#/screens/Settings/AppIconSettings/types'
 import {atoms as a, platform, useTheme} from '#/alf'
 
 export function AppIconImage({
diff --git a/src/screens/Settings/components/AddAppPasswordDialog.tsx b/src/screens/Settings/components/AddAppPasswordDialog.tsx
index 973d80a1b..7eaee2c71 100644
--- a/src/screens/Settings/components/AddAppPasswordDialog.tsx
+++ b/src/screens/Settings/components/AddAppPasswordDialog.tsx
@@ -8,7 +8,7 @@ import Animated, {
   SlideInRight,
   SlideOutLeft,
 } from 'react-native-reanimated'
-import {ComAtprotoServerCreateAppPassword} from '@atproto/api'
+import {type ComAtprotoServerCreateAppPassword} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 import {useMutation} from '@tanstack/react-query'
diff --git a/src/screens/Settings/components/CopyButton.tsx b/src/screens/Settings/components/CopyButton.tsx
index 82c11f58d..5bc9e84c5 100644
--- a/src/screens/Settings/components/CopyButton.tsx
+++ b/src/screens/Settings/components/CopyButton.tsx
@@ -1,5 +1,5 @@
 import {useCallback, useEffect, useState} from 'react'
-import {GestureResponderEvent, View} from 'react-native'
+import {type GestureResponderEvent, View} from 'react-native'
 import Animated, {
   FadeOutUp,
   useReducedMotion,
@@ -9,7 +9,7 @@ import * as Clipboard from 'expo-clipboard'
 import {Trans} from '@lingui/macro'
 
 import {atoms as a, useTheme} from '#/alf'
-import {Button, ButtonProps} from '#/components/Button'
+import {Button, type ButtonProps} from '#/components/Button'
 import {Text} from '#/components/Typography'
 
 export function CopyButton({
diff --git a/src/screens/Settings/components/DeactivateAccountDialog.tsx b/src/screens/Settings/components/DeactivateAccountDialog.tsx
index 78c685770..4570062ce 100644
--- a/src/screens/Settings/components/DeactivateAccountDialog.tsx
+++ b/src/screens/Settings/components/DeactivateAccountDialog.tsx
@@ -7,7 +7,7 @@ import {logger} from '#/logger'
 import {useAgent, useSessionApi} from '#/state/session'
 import {atoms as a, useBreakpoints, useTheme} from '#/alf'
 import {Button, ButtonIcon, ButtonText} from '#/components/Button'
-import {DialogOuterProps} from '#/components/Dialog'
+import {type DialogOuterProps} from '#/components/Dialog'
 import {Divider} from '#/components/Divider'
 import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
 import {Loader} from '#/components/Loader'
diff --git a/src/screens/Settings/components/PwiOptOut.tsx b/src/screens/Settings/components/PwiOptOut.tsx
index e58514976..5cdcb33c4 100644
--- a/src/screens/Settings/components/PwiOptOut.tsx
+++ b/src/screens/Settings/components/PwiOptOut.tsx
@@ -1,6 +1,6 @@
 import React from 'react'
 import {View} from 'react-native'
-import {$Typed, ComAtprotoLabelDefs} from '@atproto/api'
+import {type $Typed, ComAtprotoLabelDefs} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
diff --git a/src/screens/StarterPack/Wizard/StepFeeds.tsx b/src/screens/StarterPack/Wizard/StepFeeds.tsx
index b3c334bad..c87408e23 100644
--- a/src/screens/StarterPack/Wizard/StepFeeds.tsx
+++ b/src/screens/StarterPack/Wizard/StepFeeds.tsx
@@ -1,7 +1,7 @@
 import {useState} from 'react'
-import {ListRenderItemInfo, View} from 'react-native'
+import {type ListRenderItemInfo, View} from 'react-native'
 import {KeyboardAwareScrollView} from 'react-native-keyboard-controller'
-import {AppBskyFeedDefs, ModerationOpts} from '@atproto/api'
+import {type AppBskyFeedDefs, type ModerationOpts} from '@atproto/api'
 import {Trans} from '@lingui/macro'
 
 import {DISCOVER_FEED_URI} from '#/lib/constants'
diff --git a/src/screens/StarterPack/Wizard/StepProfiles.tsx b/src/screens/StarterPack/Wizard/StepProfiles.tsx
index 8a9a891e1..25c063dee 100644
--- a/src/screens/StarterPack/Wizard/StepProfiles.tsx
+++ b/src/screens/StarterPack/Wizard/StepProfiles.tsx
@@ -1,7 +1,7 @@
 import {useState} from 'react'
-import {ListRenderItemInfo, View} from 'react-native'
+import {type ListRenderItemInfo, View} from 'react-native'
 import {KeyboardAwareScrollView} from 'react-native-keyboard-controller'
-import {AppBskyActorDefs, ModerationOpts} from '@atproto/api'
+import {type AppBskyActorDefs, type ModerationOpts} from '@atproto/api'
 import {Trans} from '@lingui/macro'
 
 import {isNative} from '#/platform/detection'
@@ -16,7 +16,7 @@ import {Loader} from '#/components/Loader'
 import {ScreenTransition} from '#/components/StarterPack/Wizard/ScreenTransition'
 import {WizardProfileCard} from '#/components/StarterPack/Wizard/WizardListCard'
 import {Text} from '#/components/Typography'
-import * as bsky from '#/types/bsky'
+import type * as bsky from '#/types/bsky'
 
 function keyExtractor(item: AppBskyActorDefs.ProfileViewBasic) {
   return item?.did ?? ''
diff --git a/src/screens/VideoFeed/components/Header.tsx b/src/screens/VideoFeed/components/Header.tsx
index 66c932119..3eb1d5dc4 100644
--- a/src/screens/VideoFeed/components/Header.tsx
+++ b/src/screens/VideoFeed/components/Header.tsx
@@ -1,17 +1,17 @@
 import {useCallback} from 'react'
-import {GestureResponderEvent, View} from 'react-native'
+import {type GestureResponderEvent, View} from 'react-native'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 import {useNavigation} from '@react-navigation/native'
 
 import {HITSLOP_30} from '#/lib/constants'
-import {NavigationProp} from '#/lib/routes/types'
+import {type NavigationProp} from '#/lib/routes/types'
 import {sanitizeHandle} from '#/lib/strings/handles'
 import {useFeedSourceInfoQuery} from '#/state/queries/feed'
 import {UserAvatar} from '#/view/com/util/UserAvatar'
-import {VideoFeedSourceContext} from '#/screens/VideoFeed/types'
+import {type VideoFeedSourceContext} from '#/screens/VideoFeed/types'
 import {atoms as a, useBreakpoints} from '#/alf'
-import {Button, ButtonProps} from '#/components/Button'
+import {Button, type ButtonProps} from '#/components/Button'
 import {ArrowLeft_Stroke2_Corner0_Rounded as ArrowLeft} from '#/components/icons/Arrow'
 import * as Layout from '#/components/Layout'
 import {BUTTON_VISUAL_ALIGNMENT_OFFSET} from '#/components/Layout/const'
diff --git a/src/screens/VideoFeed/types.ts b/src/screens/VideoFeed/types.ts
index 2ab854bb3..7a3e1fd96 100644
--- a/src/screens/VideoFeed/types.ts
+++ b/src/screens/VideoFeed/types.ts
@@ -1,4 +1,4 @@
-import {AuthorFilter} from '#/state/queries/post-feed'
+import {type AuthorFilter} from '#/state/queries/post-feed'
 
 /**
  * Kind of like `FeedDescriptor` but not
diff --git a/src/state/messages/convo/util.ts b/src/state/messages/convo/util.ts
index 92046cf1f..5301d10bb 100644
--- a/src/state/messages/convo/util.ts
+++ b/src/state/messages/convo/util.ts
@@ -1,9 +1,9 @@
 import {
-  ConvoState,
-  ConvoStateBackgrounded,
-  ConvoStateDisabled,
-  ConvoStateReady,
-  ConvoStateSuspended,
+  type ConvoState,
+  type ConvoStateBackgrounded,
+  type ConvoStateDisabled,
+  type ConvoStateReady,
+  type ConvoStateSuspended,
   ConvoStatus,
 } from './types'
 
diff --git a/src/state/messages/events/types.ts b/src/state/messages/events/types.ts
index 305418bd3..038684319 100644
--- a/src/state/messages/events/types.ts
+++ b/src/state/messages/events/types.ts
@@ -1,4 +1,4 @@
-import {BskyAgent, ChatBskyConvoGetLog} from '@atproto/api'
+import {type BskyAgent, type ChatBskyConvoGetLog} from '@atproto/api'
 
 export type MessagesEventBusParams = {
   agent: BskyAgent
diff --git a/src/state/messages/index.tsx b/src/state/messages/index.tsx
index 8924e63e4..8be875232 100644
--- a/src/state/messages/index.tsx
+++ b/src/state/messages/index.tsx
@@ -1,4 +1,4 @@
-import React from 'react'
+import type React from 'react'
 
 import {CurrentConvoIdProvider} from '#/state/messages/current-convo-id'
 import {MessagesEventBusProvider} from '#/state/messages/events'
diff --git a/src/state/persisted/index.web.ts b/src/state/persisted/index.web.ts
index f28b19771..49fa224c0 100644
--- a/src/state/persisted/index.web.ts
+++ b/src/state/persisted/index.web.ts
@@ -4,11 +4,11 @@ import BroadcastChannel from '#/lib/broadcast'
 import {logger} from '#/logger'
 import {
   defaults,
-  Schema,
+  type Schema,
   tryParse,
   tryStringify,
 } from '#/state/persisted/schema'
-import {PersistedApi} from './types'
+import {type PersistedApi} from './types'
 import {normalizeData} from './util'
 
 export type {PersistedAccount, Schema} from '#/state/persisted/schema'
diff --git a/src/state/persisted/types.ts b/src/state/persisted/types.ts
index fd39079bf..d1fdfc26c 100644
--- a/src/state/persisted/types.ts
+++ b/src/state/persisted/types.ts
@@ -1,4 +1,4 @@
-import type {Schema} from './schema'
+import {type Schema} from './schema'
 
 export type PersistedApi = {
   init(): Promise<void>
diff --git a/src/state/persisted/util.ts b/src/state/persisted/util.ts
index 64a8bf945..184d9af3a 100644
--- a/src/state/persisted/util.ts
+++ b/src/state/persisted/util.ts
@@ -2,7 +2,7 @@ import {parse} from 'bcp-47'
 
 import {dedupArray} from '#/lib/functions'
 import {logger} from '#/logger'
-import {Schema} from '#/state/persisted/schema'
+import {type Schema} from '#/state/persisted/schema'
 
 export function normalizeData(data: Schema) {
   const next = {...data}
diff --git a/src/state/preferences/index.tsx b/src/state/preferences/index.tsx
index 8530a8d0c..740ea4bf3 100644
--- a/src/state/preferences/index.tsx
+++ b/src/state/preferences/index.tsx
@@ -1,4 +1,4 @@
-import React from 'react'
+import type React from 'react'
 
 import {Provider as AltTextRequiredProvider} from './alt-text-required'
 import {Provider as AutoplayProvider} from './autoplay'
diff --git a/src/state/queries/actor-autocomplete.ts b/src/state/queries/actor-autocomplete.ts
index acc046771..80f7dfabd 100644
--- a/src/state/queries/actor-autocomplete.ts
+++ b/src/state/queries/actor-autocomplete.ts
@@ -1,5 +1,9 @@
 import React from 'react'
-import {AppBskyActorDefs, moderateProfile, ModerationOpts} from '@atproto/api'
+import {
+  type AppBskyActorDefs,
+  moderateProfile,
+  type ModerationOpts,
+} from '@atproto/api'
 import {keepPreviousData, useQuery, useQueryClient} from '@tanstack/react-query'
 
 import {isJustAMute, moduiContainsHideableOffense} from '#/lib/moderation'
diff --git a/src/state/queries/app-passwords.ts b/src/state/queries/app-passwords.ts
index bbf2dea97..12d66dd2c 100644
--- a/src/state/queries/app-passwords.ts
+++ b/src/state/queries/app-passwords.ts
@@ -1,4 +1,4 @@
-import {ComAtprotoServerCreateAppPassword} from '@atproto/api'
+import {type ComAtprotoServerCreateAppPassword} from '@atproto/api'
 import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
 
 import {STALE} from '#/state/queries'
diff --git a/src/state/queries/invites.ts b/src/state/queries/invites.ts
index fdccac8cb..ed7fc534f 100644
--- a/src/state/queries/invites.ts
+++ b/src/state/queries/invites.ts
@@ -1,4 +1,4 @@
-import {ComAtprotoServerDefs} from '@atproto/api'
+import {type ComAtprotoServerDefs} from '@atproto/api'
 import {useQuery} from '@tanstack/react-query'
 
 import {cleanError} from '#/lib/strings/errors'
diff --git a/src/state/queries/known-followers.ts b/src/state/queries/known-followers.ts
index fedd9b40f..05bbd5e67 100644
--- a/src/state/queries/known-followers.ts
+++ b/src/state/queries/known-followers.ts
@@ -1,8 +1,11 @@
-import {AppBskyActorDefs, AppBskyGraphGetKnownFollowers} from '@atproto/api'
 import {
-  InfiniteData,
-  QueryClient,
-  QueryKey,
+  type AppBskyActorDefs,
+  type AppBskyGraphGetKnownFollowers,
+} from '@atproto/api'
+import {
+  type InfiniteData,
+  type QueryClient,
+  type QueryKey,
   useInfiniteQuery,
 } from '@tanstack/react-query'
 
diff --git a/src/state/queries/my-blocked-accounts.ts b/src/state/queries/my-blocked-accounts.ts
index 05a78825f..a2e29136f 100644
--- a/src/state/queries/my-blocked-accounts.ts
+++ b/src/state/queries/my-blocked-accounts.ts
@@ -1,8 +1,8 @@
-import {AppBskyActorDefs, AppBskyGraphGetBlocks} from '@atproto/api'
+import {type AppBskyActorDefs, type AppBskyGraphGetBlocks} from '@atproto/api'
 import {
-  InfiniteData,
-  QueryClient,
-  QueryKey,
+  type InfiniteData,
+  type QueryClient,
+  type QueryKey,
   useInfiniteQuery,
 } from '@tanstack/react-query'
 
diff --git a/src/state/queries/my-lists.ts b/src/state/queries/my-lists.ts
index 0f8721c61..aeb9cf456 100644
--- a/src/state/queries/my-lists.ts
+++ b/src/state/queries/my-lists.ts
@@ -1,5 +1,5 @@
-import {AppBskyGraphDefs} from '@atproto/api'
-import {QueryClient, useQuery} from '@tanstack/react-query'
+import {type AppBskyGraphDefs} from '@atproto/api'
+import {type QueryClient, useQuery} from '@tanstack/react-query'
 
 import {accumulate} from '#/lib/async/accumulate'
 import {STALE} from '#/state/queries'
diff --git a/src/state/queries/my-muted-accounts.ts b/src/state/queries/my-muted-accounts.ts
index 5fb0fa79b..bf36b9029 100644
--- a/src/state/queries/my-muted-accounts.ts
+++ b/src/state/queries/my-muted-accounts.ts
@@ -1,8 +1,8 @@
-import {AppBskyActorDefs, AppBskyGraphGetMutes} from '@atproto/api'
+import {type AppBskyActorDefs, type AppBskyGraphGetMutes} from '@atproto/api'
 import {
-  InfiniteData,
-  QueryClient,
-  QueryKey,
+  type InfiniteData,
+  type QueryClient,
+  type QueryKey,
   useInfiniteQuery,
 } from '@tanstack/react-query'
 
diff --git a/src/state/queries/nuxs/types.ts b/src/state/queries/nuxs/types.ts
index 2331582a1..475bdd942 100644
--- a/src/state/queries/nuxs/types.ts
+++ b/src/state/queries/nuxs/types.ts
@@ -1,4 +1,4 @@
-import {AppBskyActorDefs} from '@atproto/api'
+import {type AppBskyActorDefs} from '@atproto/api'
 
 export type Data = Record<string, unknown> | undefined
 
diff --git a/src/state/queries/nuxs/util.ts b/src/state/queries/nuxs/util.ts
index d65b86a34..ef323b422 100644
--- a/src/state/queries/nuxs/util.ts
+++ b/src/state/queries/nuxs/util.ts
@@ -1,8 +1,8 @@
-import {AppBskyActorDefs, nuxSchema} from '@atproto/api'
+import {type AppBskyActorDefs, nuxSchema} from '@atproto/api'
 
 import {
-  AppNux,
-  Nux,
+  type AppNux,
+  type Nux,
   nuxNames,
   NuxSchemas,
 } from '#/state/queries/nuxs/definitions'
diff --git a/src/state/queries/post-interaction-settings.ts b/src/state/queries/post-interaction-settings.ts
index a256f2956..6f2b7d908 100644
--- a/src/state/queries/post-interaction-settings.ts
+++ b/src/state/queries/post-interaction-settings.ts
@@ -1,4 +1,4 @@
-import {AppBskyActorDefs} from '@atproto/api'
+import {type AppBskyActorDefs} from '@atproto/api'
 import {useMutation, useQueryClient} from '@tanstack/react-query'
 
 import {preferencesQueryKey} from '#/state/queries/preferences'
diff --git a/src/state/queries/post-liked-by.ts b/src/state/queries/post-liked-by.ts
index ab9f5c7bb..e02de6153 100644
--- a/src/state/queries/post-liked-by.ts
+++ b/src/state/queries/post-liked-by.ts
@@ -1,8 +1,8 @@
-import {AppBskyActorDefs, AppBskyFeedGetLikes} from '@atproto/api'
+import {type AppBskyActorDefs, type AppBskyFeedGetLikes} from '@atproto/api'
 import {
-  InfiniteData,
-  QueryClient,
-  QueryKey,
+  type InfiniteData,
+  type QueryClient,
+  type QueryKey,
   useInfiniteQuery,
 } from '@tanstack/react-query'
 
diff --git a/src/state/queries/post-quotes.ts b/src/state/queries/post-quotes.ts
index af9699d2b..1d0fa07e8 100644
--- a/src/state/queries/post-quotes.ts
+++ b/src/state/queries/post-quotes.ts
@@ -1,14 +1,14 @@
 import {
-  AppBskyActorDefs,
+  type AppBskyActorDefs,
   AppBskyEmbedRecord,
-  AppBskyFeedDefs,
-  AppBskyFeedGetQuotes,
+  type AppBskyFeedDefs,
+  type AppBskyFeedGetQuotes,
   AtUri,
 } from '@atproto/api'
 import {
-  InfiniteData,
-  QueryClient,
-  QueryKey,
+  type InfiniteData,
+  type QueryClient,
+  type QueryKey,
   useInfiniteQuery,
 } from '@tanstack/react-query'
 
diff --git a/src/state/queries/post-reposted-by.ts b/src/state/queries/post-reposted-by.ts
index a27f203dd..814a815aa 100644
--- a/src/state/queries/post-reposted-by.ts
+++ b/src/state/queries/post-reposted-by.ts
@@ -1,8 +1,11 @@
-import {AppBskyActorDefs, AppBskyFeedGetRepostedBy} from '@atproto/api'
 import {
-  InfiniteData,
-  QueryClient,
-  QueryKey,
+  type AppBskyActorDefs,
+  type AppBskyFeedGetRepostedBy,
+} from '@atproto/api'
+import {
+  type InfiniteData,
+  type QueryClient,
+  type QueryKey,
   useInfiniteQuery,
 } from '@tanstack/react-query'
 
diff --git a/src/state/queries/preferences/types.ts b/src/state/queries/preferences/types.ts
index 8f523fcf2..fbe6a7e33 100644
--- a/src/state/queries/preferences/types.ts
+++ b/src/state/queries/preferences/types.ts
@@ -1,7 +1,7 @@
 import {
-  BskyFeedViewPreference,
-  BskyPreferences,
-  BskyThreadViewPreference,
+  type BskyFeedViewPreference,
+  type BskyPreferences,
+  type BskyThreadViewPreference,
 } from '@atproto/api'
 
 export type UsePreferencesQueryResponse = Omit<
diff --git a/src/state/queries/profile-feedgens.ts b/src/state/queries/profile-feedgens.ts
index 79d9735c9..7d224e519 100644
--- a/src/state/queries/profile-feedgens.ts
+++ b/src/state/queries/profile-feedgens.ts
@@ -1,5 +1,12 @@
-import {AppBskyFeedGetActorFeeds, moderateFeedGenerator} from '@atproto/api'
-import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query'
+import {
+  type AppBskyFeedGetActorFeeds,
+  moderateFeedGenerator,
+} from '@atproto/api'
+import {
+  type InfiniteData,
+  type QueryKey,
+  useInfiniteQuery,
+} from '@tanstack/react-query'
 
 import {useAgent} from '#/state/session'
 import {useModerationOpts} from '../preferences/moderation-opts'
diff --git a/src/state/queries/profile-followers.ts b/src/state/queries/profile-followers.ts
index 131343cd1..9c4c5182a 100644
--- a/src/state/queries/profile-followers.ts
+++ b/src/state/queries/profile-followers.ts
@@ -1,8 +1,11 @@
-import {AppBskyActorDefs, AppBskyGraphGetFollowers} from '@atproto/api'
 import {
-  InfiniteData,
-  QueryClient,
-  QueryKey,
+  type AppBskyActorDefs,
+  type AppBskyGraphGetFollowers,
+} from '@atproto/api'
+import {
+  type InfiniteData,
+  type QueryClient,
+  type QueryKey,
   useInfiniteQuery,
 } from '@tanstack/react-query'
 
diff --git a/src/state/queries/profile-follows.ts b/src/state/queries/profile-follows.ts
index 6d832a841..1b154793d 100644
--- a/src/state/queries/profile-follows.ts
+++ b/src/state/queries/profile-follows.ts
@@ -1,8 +1,8 @@
-import {AppBskyActorDefs, AppBskyGraphGetFollows} from '@atproto/api'
+import {type AppBskyActorDefs, type AppBskyGraphGetFollows} from '@atproto/api'
 import {
-  InfiniteData,
-  QueryClient,
-  QueryKey,
+  type InfiniteData,
+  type QueryClient,
+  type QueryKey,
   useInfiniteQuery,
 } from '@tanstack/react-query'
 
diff --git a/src/state/queries/profile-lists.ts b/src/state/queries/profile-lists.ts
index 5c9f9f0d6..a881977ff 100644
--- a/src/state/queries/profile-lists.ts
+++ b/src/state/queries/profile-lists.ts
@@ -1,5 +1,9 @@
-import {AppBskyGraphGetLists, moderateUserList} from '@atproto/api'
-import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query'
+import {type AppBskyGraphGetLists, moderateUserList} from '@atproto/api'
+import {
+  type InfiniteData,
+  type QueryKey,
+  useInfiniteQuery,
+} from '@tanstack/react-query'
 
 import {useAgent} from '#/state/session'
 import {useModerationOpts} from '../preferences/moderation-opts'
diff --git a/src/state/queries/resolve-link.ts b/src/state/queries/resolve-link.ts
index 5856cfb5f..09dc739c0 100644
--- a/src/state/queries/resolve-link.ts
+++ b/src/state/queries/resolve-link.ts
@@ -1,4 +1,4 @@
-import {QueryClient, useQuery} from '@tanstack/react-query'
+import {type QueryClient, useQuery} from '@tanstack/react-query'
 
 import {STALE} from '#/state/queries/index'
 import {useAgent} from '../session'
@@ -9,10 +9,10 @@ export const RQKEY_LINK = (url: string) => [RQKEY_LINK_ROOT, url]
 const RQKEY_GIF_ROOT = 'resolve-gif'
 export const RQKEY_GIF = (url: string) => [RQKEY_GIF_ROOT, url]
 
-import {BskyAgent} from '@atproto/api'
+import {type BskyAgent} from '@atproto/api'
 
-import {ResolvedLink, resolveGif, resolveLink} from '#/lib/api/resolve'
-import {Gif} from './tenor'
+import {type ResolvedLink, resolveGif, resolveLink} from '#/lib/api/resolve'
+import {type Gif} from './tenor'
 
 export function useResolveLinkQuery(url: string) {
   const agent = useAgent()
diff --git a/src/state/queries/resolve-uri.ts b/src/state/queries/resolve-uri.ts
index 1422a2dae..850fb3fb6 100644
--- a/src/state/queries/resolve-uri.ts
+++ b/src/state/queries/resolve-uri.ts
@@ -1,5 +1,9 @@
 import {AtUri} from '@atproto/api'
-import {QueryClient, useQuery, UseQueryResult} from '@tanstack/react-query'
+import {
+  type QueryClient,
+  useQuery,
+  type UseQueryResult,
+} from '@tanstack/react-query'
 
 import {STALE} from '#/state/queries'
 import {useAgent} from '#/state/session'
diff --git a/src/state/queries/search-posts.ts b/src/state/queries/search-posts.ts
index 9cc6e2f35..e7ebae0ec 100644
--- a/src/state/queries/search-posts.ts
+++ b/src/state/queries/search-posts.ts
@@ -1,15 +1,15 @@
 import React from 'react'
 import {
-  AppBskyActorDefs,
-  AppBskyFeedDefs,
-  AppBskyFeedSearchPosts,
+  type AppBskyActorDefs,
+  type AppBskyFeedDefs,
+  type AppBskyFeedSearchPosts,
   AtUri,
   moderatePost,
 } from '@atproto/api'
 import {
-  InfiniteData,
-  QueryClient,
-  QueryKey,
+  type InfiniteData,
+  type QueryClient,
+  type QueryKey,
   useInfiniteQuery,
 } from '@tanstack/react-query'
 
diff --git a/src/state/queries/suggested-feeds.ts b/src/state/queries/suggested-feeds.ts
index 19614c2cb..9344cf628 100644
--- a/src/state/queries/suggested-feeds.ts
+++ b/src/state/queries/suggested-feeds.ts
@@ -1,5 +1,9 @@
-import {AppBskyFeedGetSuggestedFeeds} from '@atproto/api'
-import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query'
+import {type AppBskyFeedGetSuggestedFeeds} from '@atproto/api'
+import {
+  type InfiniteData,
+  type QueryKey,
+  useInfiniteQuery,
+} from '@tanstack/react-query'
 
 import {STALE} from '#/state/queries'
 import {useAgent} from '#/state/session'
diff --git a/src/state/queries/threadgate/index.ts b/src/state/queries/threadgate/index.ts
index 478658fe8..eeb9f7035 100644
--- a/src/state/queries/threadgate/index.ts
+++ b/src/state/queries/threadgate/index.ts
@@ -1,9 +1,9 @@
 import {
   AppBskyFeedDefs,
-  AppBskyFeedGetPostThread,
+  type AppBskyFeedGetPostThread,
   AppBskyFeedThreadgate,
   AtUri,
-  BskyAgent,
+  type BskyAgent,
 } from '@atproto/api'
 import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
 
@@ -11,7 +11,7 @@ import {networkRetry, retry} from '#/lib/async/retry'
 import {until} from '#/lib/async/until'
 import {STALE} from '#/state/queries'
 import {RQKEY_ROOT as postThreadQueryKeyRoot} from '#/state/queries/post-thread'
-import {ThreadgateAllowUISetting} from '#/state/queries/threadgate/types'
+import {type ThreadgateAllowUISetting} from '#/state/queries/threadgate/types'
 import {
   createThreadgateRecord,
   mergeThreadgateRecords,
diff --git a/src/state/queries/threadgate/util.ts b/src/state/queries/threadgate/util.ts
index cbe8d4695..807afef76 100644
--- a/src/state/queries/threadgate/util.ts
+++ b/src/state/queries/threadgate/util.ts
@@ -1,6 +1,6 @@
-import {AppBskyFeedDefs, AppBskyFeedThreadgate} from '@atproto/api'
+import {type AppBskyFeedDefs, AppBskyFeedThreadgate} from '@atproto/api'
 
-import {ThreadgateAllowUISetting} from '#/state/queries/threadgate/types'
+import {type ThreadgateAllowUISetting} from '#/state/queries/threadgate/types'
 import * as bsky from '#/types/bsky'
 
 export function threadgateViewToAllowUISetting(
diff --git a/src/state/queries/unstable-profile-cache.ts b/src/state/queries/unstable-profile-cache.ts
index 4ac5001b7..72c3f86b8 100644
--- a/src/state/queries/unstable-profile-cache.ts
+++ b/src/state/queries/unstable-profile-cache.ts
@@ -1,7 +1,7 @@
 import {useCallback} from 'react'
-import {QueryClient, useQueryClient} from '@tanstack/react-query'
+import {type QueryClient, useQueryClient} from '@tanstack/react-query'
 
-import * as bsky from '#/types/bsky'
+import type * as bsky from '#/types/bsky'
 
 const unstableProfileViewCacheQueryKeyRoot = 'unstableProfileViewCache'
 export const unstableProfileViewCacheQueryKey = (didOrHandle: string) => [
diff --git a/src/state/queries/util.ts b/src/state/queries/util.ts
index 71d185bec..363b6b6e0 100644
--- a/src/state/queries/util.ts
+++ b/src/state/queries/util.ts
@@ -1,12 +1,16 @@
 import {
-  AppBskyActorDefs,
+  type AppBskyActorDefs,
   AppBskyEmbedRecord,
   AppBskyEmbedRecordWithMedia,
-  AppBskyFeedDefs,
+  type AppBskyFeedDefs,
   AppBskyFeedPost,
-  AtUri,
+  type AtUri,
 } from '@atproto/api'
-import {InfiniteData, QueryClient, QueryKey} from '@tanstack/react-query'
+import {
+  type InfiniteData,
+  type QueryClient,
+  type QueryKey,
+} from '@tanstack/react-query'
 
 import * as bsky from '#/types/bsky'
 
diff --git a/src/state/session/__tests__/session-test.ts b/src/state/session/__tests__/session-test.ts
index dec8ec48b..c58171bf9 100644
--- a/src/state/session/__tests__/session-test.ts
+++ b/src/state/session/__tests__/session-test.ts
@@ -2,7 +2,7 @@ import {BskyAgent} from '@atproto/api'
 import {describe, expect, it, jest} from '@jest/globals'
 
 import {agentToSessionAccountOrThrow} from '../agent'
-import {Action, getInitialState, reducer, State} from '../reducer'
+import {type Action, getInitialState, reducer, type State} from '../reducer'
 
 jest.mock('jwt-decode', () => ({
   jwtDecode(_token: string) {
diff --git a/src/state/session/moderation.ts b/src/state/session/moderation.ts
index 01684fe0b..64e36da9d 100644
--- a/src/state/session/moderation.ts
+++ b/src/state/session/moderation.ts
@@ -3,7 +3,7 @@ import {BSKY_LABELER_DID, BskyAgent} from '@atproto/api'
 import {IS_TEST_USER} from '#/lib/constants'
 import {configureAdditionalModerationAuthorities} from './additional-moderation-authorities'
 import {readLabelers} from './agent-config'
-import {SessionAccount} from './types'
+import {type SessionAccount} from './types'
 
 export function configureModerationForGuest() {
   // This global mutation is *only* OK because this code is only relevant for testing.
diff --git a/src/state/session/util.ts b/src/state/session/util.ts
index 3a5909e82..c1d66f793 100644
--- a/src/state/session/util.ts
+++ b/src/state/session/util.ts
@@ -3,7 +3,7 @@ import {jwtDecode} from 'jwt-decode'
 import {hasProp} from '#/lib/type-guards'
 import {logger} from '#/logger'
 import * as persisted from '#/state/persisted'
-import {SessionAccount} from './types'
+import {type SessionAccount} from './types'
 
 export function readLastActiveAccount() {
   const {currentAccount, accounts} = persisted.get('session')
diff --git a/src/state/shell/reminders.ts b/src/state/shell/reminders.ts
index db6ee9391..002b38126 100644
--- a/src/state/shell/reminders.ts
+++ b/src/state/shell/reminders.ts
@@ -1,7 +1,7 @@
 import {simpleAreDatesEqual} from '#/lib/strings/time'
 import {logger} from '#/logger'
 import * as persisted from '#/state/persisted'
-import {SessionAccount} from '../session'
+import {type SessionAccount} from '../session'
 import {isOnboardingActive} from './onboarding'
 
 export function shouldRequestEmailConfirmation(account: SessionAccount) {
diff --git a/src/types/bsky/index.ts b/src/types/bsky/index.ts
index d5acbdbb5..d482f9515 100644
--- a/src/types/bsky/index.ts
+++ b/src/types/bsky/index.ts
@@ -1,4 +1,4 @@
-import {ValidationResult} from '@atproto/lexicon'
+import {type ValidationResult} from '@atproto/lexicon'
 
 export * as post from '#/types/bsky/post'
 export * as profile from '#/types/bsky/profile'
diff --git a/src/types/bsky/post.ts b/src/types/bsky/post.ts
index 61b63dce7..fada39da8 100644
--- a/src/types/bsky/post.ts
+++ b/src/types/bsky/post.ts
@@ -1,5 +1,5 @@
 import {
-  $Typed,
+  type $Typed,
   AppBskyEmbedExternal,
   AppBskyEmbedImages,
   AppBskyEmbedRecord,
diff --git a/src/view/com/composer/AltTextCounterWrapper.tsx b/src/view/com/composer/AltTextCounterWrapper.tsx
index d69252f4b..da3c14920 100644
--- a/src/view/com/composer/AltTextCounterWrapper.tsx
+++ b/src/view/com/composer/AltTextCounterWrapper.tsx
@@ -1,5 +1,5 @@
-import React from 'react'
 import {View} from 'react-native'
+import type React from 'react'
 
 import {MAX_ALT_TEXT} from '#/lib/constants'
 import {CharProgress} from '#/view/com/composer/char-progress/CharProgress'
diff --git a/src/view/com/composer/KeyboardAccessory.tsx b/src/view/com/composer/KeyboardAccessory.tsx
index 983a87dae..f3fb761dc 100644
--- a/src/view/com/composer/KeyboardAccessory.tsx
+++ b/src/view/com/composer/KeyboardAccessory.tsx
@@ -1,7 +1,7 @@
-import React from 'react'
 import {View} from 'react-native'
 import {KeyboardStickyView} from 'react-native-keyboard-controller'
 import {useSafeAreaInsets} from 'react-native-safe-area-context'
+import type React from 'react'
 
 import {isWeb} from '#/platform/detection'
 import {atoms as a, useTheme} from '#/alf'
diff --git a/src/view/com/composer/char-progress/CharProgress.tsx b/src/view/com/composer/char-progress/CharProgress.tsx
index f2734e4ec..8920132a5 100644
--- a/src/view/com/composer/char-progress/CharProgress.tsx
+++ b/src/view/com/composer/char-progress/CharProgress.tsx
@@ -1,4 +1,9 @@
-import {StyleProp, TextStyle, View, ViewStyle} from 'react-native'
+import {
+  type StyleProp,
+  type TextStyle,
+  View,
+  type ViewStyle,
+} from 'react-native'
 // @ts-ignore no type definition -prf
 import ProgressCircle from 'react-native-progress/Circle'
 // @ts-ignore no type definition -prf
diff --git a/src/view/com/composer/photos/SelectGifBtn.tsx b/src/view/com/composer/photos/SelectGifBtn.tsx
index 3fb0e00d2..65e0ed8ce 100644
--- a/src/view/com/composer/photos/SelectGifBtn.tsx
+++ b/src/view/com/composer/photos/SelectGifBtn.tsx
@@ -4,7 +4,7 @@ import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
 import {logEvent} from '#/lib/statsig/statsig'
-import {Gif} from '#/state/queries/tenor'
+import {type Gif} from '#/state/queries/tenor'
 import {atoms as a, useTheme} from '#/alf'
 import {Button} from '#/components/Button'
 import {GifSelectDialog} from '#/components/dialogs/GifSelect'
diff --git a/src/view/com/composer/text-input/text-input-util.ts b/src/view/com/composer/text-input/text-input-util.ts
index 7268e10f0..71db8c323 100644
--- a/src/view/com/composer/text-input/text-input-util.ts
+++ b/src/view/com/composer/text-input/text-input-util.ts
@@ -1,4 +1,4 @@
-import {AppBskyRichtextFacet, RichText} from '@atproto/api'
+import {type AppBskyRichtextFacet, type RichText} from '@atproto/api'
 
 export type LinkFacetMatch = {
   rt: RichText
diff --git a/src/view/com/composer/text-input/web/LinkDecorator.ts b/src/view/com/composer/text-input/web/LinkDecorator.ts
index af38d6b05..4843f0ddf 100644
--- a/src/view/com/composer/text-input/web/LinkDecorator.ts
+++ b/src/view/com/composer/text-input/web/LinkDecorator.ts
@@ -16,7 +16,7 @@
 
 import {URL_REGEX} from '@atproto/api'
 import {Mark} from '@tiptap/core'
-import {Node as ProsemirrorNode} from '@tiptap/pm/model'
+import {type Node as ProsemirrorNode} from '@tiptap/pm/model'
 import {Plugin, PluginKey} from '@tiptap/pm/state'
 import {Decoration, DecorationSet} from '@tiptap/pm/view'
 
diff --git a/src/view/com/composer/text-input/web/TagDecorator.ts b/src/view/com/composer/text-input/web/TagDecorator.ts
index 9225fd6bf..5af70de6d 100644
--- a/src/view/com/composer/text-input/web/TagDecorator.ts
+++ b/src/view/com/composer/text-input/web/TagDecorator.ts
@@ -16,7 +16,7 @@
 
 import {TAG_REGEX, TRAILING_PUNCTUATION_REGEX} from '@atproto/api'
 import {Mark} from '@tiptap/core'
-import {Node as ProsemirrorNode} from '@tiptap/pm/model'
+import {type Node as ProsemirrorNode} from '@tiptap/pm/model'
 import {Plugin, PluginKey} from '@tiptap/pm/state'
 import {Decoration, DecorationSet} from '@tiptap/pm/view'
 
diff --git a/src/view/com/composer/threadgate/ThreadgateBtn.tsx b/src/view/com/composer/threadgate/ThreadgateBtn.tsx
index 4130cc7e4..4f46351b2 100644
--- a/src/view/com/composer/threadgate/ThreadgateBtn.tsx
+++ b/src/view/com/composer/threadgate/ThreadgateBtn.tsx
@@ -1,11 +1,11 @@
-import {Keyboard, StyleProp, ViewStyle} from 'react-native'
-import {AnimatedStyle} from 'react-native-reanimated'
-import {AppBskyFeedPostgate} from '@atproto/api'
+import {Keyboard, type StyleProp, type ViewStyle} from 'react-native'
+import {type AnimatedStyle} from 'react-native-reanimated'
+import {type AppBskyFeedPostgate} from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
 import {isNative} from '#/platform/detection'
-import {ThreadgateAllowUISetting} from '#/state/queries/threadgate'
+import {type ThreadgateAllowUISetting} from '#/state/queries/threadgate'
 import {native} from '#/alf'
 import {Button, ButtonIcon, ButtonText} from '#/components/Button'
 import * as Dialog from '#/components/Dialog'
diff --git a/src/view/com/composer/videos/SubtitleFilePicker.tsx b/src/view/com/composer/videos/SubtitleFilePicker.tsx
index e49189f9b..256bc1600 100644
--- a/src/view/com/composer/videos/SubtitleFilePicker.tsx
+++ b/src/view/com/composer/videos/SubtitleFilePicker.tsx
@@ -1,7 +1,8 @@
-import React, {useRef} from 'react'
+import {useRef} from 'react'
 import {View} from 'react-native'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
+import type React from 'react'
 
 import {logger} from '#/logger'
 import * as Toast from '#/view/com/util/Toast'
diff --git a/src/view/com/composer/videos/VideoPreview.web.tsx b/src/view/com/composer/videos/VideoPreview.web.tsx
index f20f8b383..979fbf52f 100644
--- a/src/view/com/composer/videos/VideoPreview.web.tsx
+++ b/src/view/com/composer/videos/VideoPreview.web.tsx
@@ -1,9 +1,9 @@
 import {View} from 'react-native'
-import {ImagePickerAsset} from 'expo-image-picker'
+import {type ImagePickerAsset} from 'expo-image-picker'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
-import {CompressedVideo} from '#/lib/media/video/types'
+import {type CompressedVideo} from '#/lib/media/video/types'
 import {clamp} from '#/lib/numbers'
 import {useAutoplayDisabled} from '#/state/preferences'
 import {ExternalEmbedRemoveBtn} from '#/view/com/composer/ExternalEmbedRemoveBtn'
diff --git a/src/view/com/composer/videos/VideoTranscodeProgress.tsx b/src/view/com/composer/videos/VideoTranscodeProgress.tsx
index f408be720..0a107d878 100644
--- a/src/view/com/composer/videos/VideoTranscodeProgress.tsx
+++ b/src/view/com/composer/videos/VideoTranscodeProgress.tsx
@@ -1,7 +1,7 @@
 import {View} from 'react-native'
 // @ts-expect-error no type definition
 import ProgressPie from 'react-native-progress/Pie'
-import {ImagePickerAsset} from 'expo-image-picker'
+import {type ImagePickerAsset} from 'expo-image-picker'
 
 import {clamp} from '#/lib/numbers'
 import {isWeb} from '#/platform/detection'
diff --git a/src/view/com/composer/videos/pickVideo.web.ts b/src/view/com/composer/videos/pickVideo.web.ts
index 56a38fa56..c358727ef 100644
--- a/src/view/com/composer/videos/pickVideo.web.ts
+++ b/src/view/com/composer/videos/pickVideo.web.ts
@@ -1,4 +1,4 @@
-import {ImagePickerAsset, ImagePickerResult} from 'expo-image-picker'
+import {type ImagePickerAsset, type ImagePickerResult} from 'expo-image-picker'
 
 import {SUPPORTED_MIME_TYPES} from '#/lib/constants'
 
diff --git a/src/view/com/lightbox/ImageViewing/@types/index.ts b/src/view/com/lightbox/ImageViewing/@types/index.ts
index 779b95bfc..55b3db8fe 100644
--- a/src/view/com/lightbox/ImageViewing/@types/index.ts
+++ b/src/view/com/lightbox/ImageViewing/@types/index.ts
@@ -6,8 +6,8 @@
  *
  */
 
-import {TransformsStyle} from 'react-native'
-import {MeasuredDimensions} from 'react-native-reanimated'
+import {type TransformsStyle} from 'react-native'
+import {type MeasuredDimensions} from 'react-native-reanimated'
 
 export type Dimensions = {
   width: number
diff --git a/src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx b/src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx
index 3089b6d3f..cdee8a826 100644
--- a/src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx
+++ b/src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx
@@ -5,7 +5,7 @@
  * LICENSE file in the root directory of this source tree.
  *
  */
-import {StyleSheet, TouchableOpacity, ViewStyle} from 'react-native'
+import {StyleSheet, TouchableOpacity, type ViewStyle} from 'react-native'
 import {SafeAreaView} from 'react-native-safe-area-context'
 import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
 import {msg} from '@lingui/macro'
diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx
index 925158773..9ce3f5242 100644
--- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx
+++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx
@@ -3,11 +3,11 @@ import {ActivityIndicator, StyleSheet} from 'react-native'
 import {
   Gesture,
   GestureDetector,
-  PanGesture,
+  type PanGesture,
 } from 'react-native-gesture-handler'
 import Animated, {
   runOnJS,
-  SharedValue,
+  type SharedValue,
   useAnimatedReaction,
   useAnimatedRef,
   useAnimatedStyle,
@@ -16,10 +16,10 @@ import Animated, {
 } from 'react-native-reanimated'
 import {Image} from 'expo-image'
 
-import type {
-  Dimensions as ImageDimensions,
-  ImageSource,
-  Transform,
+import {
+  type Dimensions as ImageDimensions,
+  type ImageSource,
+  type Transform,
 } from '../../@types'
 import {
   applyRounding,
@@ -28,7 +28,7 @@ import {
   prependPinch,
   prependTransform,
   readTransform,
-  TransformMatrix,
+  type TransformMatrix,
 } from '../../transforms'
 
 const MIN_SCREEN_ZOOM = 2
diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx
index c103e131b..c8bf1fcce 100644
--- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx
+++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx
@@ -11,11 +11,11 @@ import {ActivityIndicator, StyleSheet} from 'react-native'
 import {
   Gesture,
   GestureDetector,
-  PanGesture,
+  type PanGesture,
 } from 'react-native-gesture-handler'
 import Animated, {
   runOnJS,
-  SharedValue,
+  type SharedValue,
   useAnimatedProps,
   useAnimatedReaction,
   useAnimatedRef,
@@ -27,9 +27,9 @@ import {Image} from 'expo-image'
 
 import {useAnimatedScrollHandler} from '#/lib/hooks/useAnimatedScrollHandler_FIXED'
 import {
-  Dimensions as ImageDimensions,
-  ImageSource,
-  Transform,
+  type Dimensions as ImageDimensions,
+  type ImageSource,
+  type Transform,
 } from '../../@types'
 
 const MAX_ORIGINAL_IMAGE_ZOOM = 2
diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx
index b41e16383..c33151723 100644
--- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx
+++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx
@@ -2,14 +2,14 @@
 
 import React from 'react'
 import {View} from 'react-native'
-import {PanGesture} from 'react-native-gesture-handler'
-import {SharedValue} from 'react-native-reanimated'
+import {type PanGesture} from 'react-native-gesture-handler'
+import {type SharedValue} from 'react-native-reanimated'
 
-import {Dimensions} from '#/lib/media/types'
+import {type Dimensions} from '#/lib/media/types'
 import {
-  Dimensions as ImageDimensions,
-  ImageSource,
-  Transform,
+  type Dimensions as ImageDimensions,
+  type ImageSource,
+  type Transform,
 } from '../../@types'
 
 type Props = {
diff --git a/src/view/com/lightbox/ImageViewing/transforms.ts b/src/view/com/lightbox/ImageViewing/transforms.ts
index 05476678f..ae6e4aed8 100644
--- a/src/view/com/lightbox/ImageViewing/transforms.ts
+++ b/src/view/com/lightbox/ImageViewing/transforms.ts
@@ -1,4 +1,4 @@
-import type {Position} from './@types'
+import {type Position} from './@types'
 
 export type TransformMatrix = [
   number,
diff --git a/src/view/com/modals/InviteCodes.tsx b/src/view/com/modals/InviteCodes.tsx
index 60020f996..93f749062 100644
--- a/src/view/com/modals/InviteCodes.tsx
+++ b/src/view/com/modals/InviteCodes.tsx
@@ -6,10 +6,10 @@ import {
   View,
 } from 'react-native'
 import {setStringAsync} from 'expo-clipboard'
-import {ComAtprotoServerDefs} from '@atproto/api'
+import {type ComAtprotoServerDefs} from '@atproto/api'
 import {
   FontAwesomeIcon,
-  FontAwesomeIconStyle,
+  type FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
@@ -22,7 +22,7 @@ import {isWeb} from '#/platform/detection'
 import {useInvitesAPI, useInvitesState} from '#/state/invites'
 import {useModalControls} from '#/state/modals'
 import {
-  InviteCodesQueryResponse,
+  type InviteCodesQueryResponse,
   useInviteCodesQuery,
 } from '#/state/queries/invites'
 import {ErrorMessage} from '../util/error/ErrorMessage'
diff --git a/src/view/com/modals/UserAddRemoveLists.tsx b/src/view/com/modals/UserAddRemoveLists.tsx
index b0b76644f..7c20b50c7 100644
--- a/src/view/com/modals/UserAddRemoveLists.tsx
+++ b/src/view/com/modals/UserAddRemoveLists.tsx
@@ -5,7 +5,7 @@ import {
   useWindowDimensions,
   View,
 } from 'react-native'
-import {AppBskyGraphDefs as GraphDefs} from '@atproto/api'
+import {type AppBskyGraphDefs as GraphDefs} from '@atproto/api'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
@@ -18,7 +18,7 @@ import {isAndroid, isMobileWeb, isWeb} from '#/platform/detection'
 import {useModalControls} from '#/state/modals'
 import {
   getMembership,
-  ListMembersip,
+  type ListMembersip,
   useDangerousListMembershipsQuery,
   useListMembershipAddMutation,
   useListMembershipRemoveMutation,
diff --git a/src/view/com/post-thread/PostLikedBy.tsx b/src/view/com/post-thread/PostLikedBy.tsx
index b9051a9c6..d6c41ced1 100644
--- a/src/view/com/post-thread/PostLikedBy.tsx
+++ b/src/view/com/post-thread/PostLikedBy.tsx
@@ -1,5 +1,5 @@
 import {useCallback, useMemo, useState} from 'react'
-import {AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
+import {type AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
diff --git a/src/view/com/post-thread/PostQuotes.tsx b/src/view/com/post-thread/PostQuotes.tsx
index 82619a8a5..8f178968d 100644
--- a/src/view/com/post-thread/PostQuotes.tsx
+++ b/src/view/com/post-thread/PostQuotes.tsx
@@ -1,9 +1,9 @@
 import {useCallback, useState} from 'react'
 import {
-  AppBskyFeedDefs,
+  type AppBskyFeedDefs,
   AppBskyFeedPost,
   moderatePost,
-  ModerationDecision,
+  type ModerationDecision,
 } from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
diff --git a/src/view/com/post-thread/PostRepostedBy.tsx b/src/view/com/post-thread/PostRepostedBy.tsx
index c27e37f49..e15d9a0f1 100644
--- a/src/view/com/post-thread/PostRepostedBy.tsx
+++ b/src/view/com/post-thread/PostRepostedBy.tsx
@@ -1,5 +1,5 @@
 import {useCallback, useMemo, useState} from 'react'
-import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
+import {type AppBskyActorDefs as ActorDefs} from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
diff --git a/src/view/com/posts/CustomFeedEmptyState.tsx b/src/view/com/posts/CustomFeedEmptyState.tsx
index 1d216dd29..580e5b2e4 100644
--- a/src/view/com/posts/CustomFeedEmptyState.tsx
+++ b/src/view/com/posts/CustomFeedEmptyState.tsx
@@ -2,14 +2,14 @@ import React from 'react'
 import {StyleSheet, View} from 'react-native'
 import {
   FontAwesomeIcon,
-  FontAwesomeIconStyle,
+  type FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
 import {Trans} from '@lingui/macro'
 import {useNavigation} from '@react-navigation/native'
 
 import {usePalette} from '#/lib/hooks/usePalette'
 import {MagnifyingGlassIcon} from '#/lib/icons'
-import {NavigationProp} from '#/lib/routes/types'
+import {type NavigationProp} from '#/lib/routes/types'
 import {s} from '#/lib/styles'
 import {isWeb} from '#/platform/detection'
 import {Button} from '../util/forms/Button'
diff --git a/src/view/com/posts/FollowingEmptyState.tsx b/src/view/com/posts/FollowingEmptyState.tsx
index 3f330b327..352cc1dc0 100644
--- a/src/view/com/posts/FollowingEmptyState.tsx
+++ b/src/view/com/posts/FollowingEmptyState.tsx
@@ -2,14 +2,14 @@ import React from 'react'
 import {StyleSheet, View} from 'react-native'
 import {
   FontAwesomeIcon,
-  FontAwesomeIconStyle,
+  type FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
 import {Trans} from '@lingui/macro'
 import {useNavigation} from '@react-navigation/native'
 
 import {usePalette} from '#/lib/hooks/usePalette'
 import {MagnifyingGlassIcon} from '#/lib/icons'
-import {NavigationProp} from '#/lib/routes/types'
+import {type NavigationProp} from '#/lib/routes/types'
 import {s} from '#/lib/styles'
 import {isWeb} from '#/platform/detection'
 import {Button} from '../util/forms/Button'
diff --git a/src/view/com/posts/FollowingEndOfFeed.tsx b/src/view/com/posts/FollowingEndOfFeed.tsx
index 4abb3c1f5..e3c84d782 100644
--- a/src/view/com/posts/FollowingEndOfFeed.tsx
+++ b/src/view/com/posts/FollowingEndOfFeed.tsx
@@ -2,13 +2,13 @@ import React from 'react'
 import {Dimensions, StyleSheet, View} from 'react-native'
 import {
   FontAwesomeIcon,
-  FontAwesomeIconStyle,
+  type FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
 import {Trans} from '@lingui/macro'
 import {useNavigation} from '@react-navigation/native'
 
 import {usePalette} from '#/lib/hooks/usePalette'
-import {NavigationProp} from '#/lib/routes/types'
+import {type NavigationProp} from '#/lib/routes/types'
 import {s} from '#/lib/styles'
 import {isWeb} from '#/platform/detection'
 import {Button} from '../util/forms/Button'
diff --git a/src/view/com/profile/ProfileFollowers.tsx b/src/view/com/profile/ProfileFollowers.tsx
index d6b764656..dfb63909e 100644
--- a/src/view/com/profile/ProfileFollowers.tsx
+++ b/src/view/com/profile/ProfileFollowers.tsx
@@ -1,5 +1,5 @@
 import React from 'react'
-import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
+import {type AppBskyActorDefs as ActorDefs} from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
diff --git a/src/view/com/profile/ProfileFollows.tsx b/src/view/com/profile/ProfileFollows.tsx
index d67a7261a..80aba11b2 100644
--- a/src/view/com/profile/ProfileFollows.tsx
+++ b/src/view/com/profile/ProfileFollows.tsx
@@ -1,5 +1,5 @@
 import React from 'react'
-import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
+import {type AppBskyActorDefs as ActorDefs} from '@atproto/api'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
diff --git a/src/view/com/util/Alert.web.tsx b/src/view/com/util/Alert.web.tsx
index bf2456504..448879173 100644
--- a/src/view/com/util/Alert.web.tsx
+++ b/src/view/com/util/Alert.web.tsx
@@ -1,4 +1,4 @@
-import {AlertButton, AlertStatic} from 'react-native'
+import {type AlertButton, type AlertStatic} from 'react-native'
 
 class WebAlert implements Pick<AlertStatic, 'alert'> {
   public alert(title: string, message?: string, buttons?: AlertButton[]): void {
diff --git a/src/view/com/util/BottomSheetCustomBackdrop.tsx b/src/view/com/util/BottomSheetCustomBackdrop.tsx
index 86751861f..cacbfcc5a 100644
--- a/src/view/com/util/BottomSheetCustomBackdrop.tsx
+++ b/src/view/com/util/BottomSheetCustomBackdrop.tsx
@@ -1,13 +1,14 @@
-import React, {useMemo} from 'react'
+import {useMemo} from 'react'
 import {TouchableWithoutFeedback} from 'react-native'
 import Animated, {
   Extrapolation,
   interpolate,
   useAnimatedStyle,
 } from 'react-native-reanimated'
-import {BottomSheetBackdropProps} from '@discord/bottom-sheet/src'
+import {type BottomSheetBackdropProps} from '@discord/bottom-sheet/src'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
+import type React from 'react'
 
 export function createCustomBackdrop(
   onClose?: (() => void) | undefined,
diff --git a/src/view/com/util/EmptyState.tsx b/src/view/com/util/EmptyState.tsx
index 6b2600a40..a3d740e13 100644
--- a/src/view/com/util/EmptyState.tsx
+++ b/src/view/com/util/EmptyState.tsx
@@ -1,8 +1,8 @@
-import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
-import {IconProp} from '@fortawesome/fontawesome-svg-core'
+import {type StyleProp, StyleSheet, View, type ViewStyle} from 'react-native'
+import {type IconProp} from '@fortawesome/fontawesome-svg-core'
 import {
   FontAwesomeIcon,
-  FontAwesomeIconStyle,
+  type FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
 
 import {usePalette} from '#/lib/hooks/usePalette'
diff --git a/src/view/com/util/EmptyStateWithButton.tsx b/src/view/com/util/EmptyStateWithButton.tsx
index fcac6df08..5c6ce94a6 100644
--- a/src/view/com/util/EmptyStateWithButton.tsx
+++ b/src/view/com/util/EmptyStateWithButton.tsx
@@ -1,8 +1,8 @@
 import {StyleSheet, View} from 'react-native'
-import {IconProp} from '@fortawesome/fontawesome-svg-core'
+import {type IconProp} from '@fortawesome/fontawesome-svg-core'
 import {
   FontAwesomeIcon,
-  FontAwesomeIconStyle,
+  type FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
 
 import {usePalette} from '#/lib/hooks/usePalette'
diff --git a/src/view/com/util/ErrorBoundary.tsx b/src/view/com/util/ErrorBoundary.tsx
index c4211ffbc..87e351f5e 100644
--- a/src/view/com/util/ErrorBoundary.tsx
+++ b/src/view/com/util/ErrorBoundary.tsx
@@ -1,5 +1,5 @@
-import {Component, ErrorInfo, ReactNode} from 'react'
-import {StyleProp, ViewStyle} from 'react-native'
+import {Component, type ErrorInfo, type ReactNode} from 'react'
+import {type StyleProp, type ViewStyle} from 'react-native'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
diff --git a/src/view/com/util/FeedInfoText.tsx b/src/view/com/util/FeedInfoText.tsx
index 55eb1bad4..3ad05facb 100644
--- a/src/view/com/util/FeedInfoText.tsx
+++ b/src/view/com/util/FeedInfoText.tsx
@@ -1,7 +1,7 @@
-import {StyleProp, StyleSheet, TextStyle} from 'react-native'
+import {type StyleProp, StyleSheet, type TextStyle} from 'react-native'
 
 import {sanitizeDisplayName} from '#/lib/strings/display-names'
-import {TypographyVariant} from '#/lib/ThemeContext'
+import {type TypographyVariant} from '#/lib/ThemeContext'
 import {useFeedSourceInfoQuery} from '#/state/queries/feed'
 import {TextLinkOnWebOnly} from './Link'
 import {LoadingPlaceholder} from './LoadingPlaceholder'
diff --git a/src/view/com/util/LoadMoreRetryBtn.tsx b/src/view/com/util/LoadMoreRetryBtn.tsx
index 07bd733ea..240d5aa34 100644
--- a/src/view/com/util/LoadMoreRetryBtn.tsx
+++ b/src/view/com/util/LoadMoreRetryBtn.tsx
@@ -1,7 +1,7 @@
 import {StyleSheet} from 'react-native'
 import {
   FontAwesomeIcon,
-  FontAwesomeIconStyle,
+  type FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
 
 import {usePalette} from '#/lib/hooks/usePalette'
diff --git a/src/view/com/util/MainScrollProvider.tsx b/src/view/com/util/MainScrollProvider.tsx
index e2538eaab..d8596b6f3 100644
--- a/src/view/com/util/MainScrollProvider.tsx
+++ b/src/view/com/util/MainScrollProvider.tsx
@@ -1,5 +1,5 @@
 import React, {useCallback, useEffect} from 'react'
-import {NativeScrollEvent} from 'react-native'
+import {type NativeScrollEvent} from 'react-native'
 import {interpolate, useSharedValue, withSpring} from 'react-native-reanimated'
 import EventEmitter from 'eventemitter3'
 
diff --git a/src/view/com/util/PressableWithHover.tsx b/src/view/com/util/PressableWithHover.tsx
index 19a1968cc..f4006a526 100644
--- a/src/view/com/util/PressableWithHover.tsx
+++ b/src/view/com/util/PressableWithHover.tsx
@@ -1,6 +1,11 @@
-import {forwardRef, PropsWithChildren} from 'react'
-import {Pressable, PressableProps, StyleProp, ViewStyle} from 'react-native'
-import {View} from 'react-native'
+import {forwardRef, type PropsWithChildren} from 'react'
+import {
+  Pressable,
+  type PressableProps,
+  type StyleProp,
+  type ViewStyle,
+} from 'react-native'
+import {type View} from 'react-native'
 
 import {addStyle} from '#/lib/styles'
 import {useInteractionState} from '#/components/hooks/useInteractionState'
diff --git a/src/view/com/util/Views.tsx b/src/view/com/util/Views.tsx
index c9ba0728c..38c3f2090 100644
--- a/src/view/com/util/Views.tsx
+++ b/src/view/com/util/Views.tsx
@@ -1,8 +1,8 @@
 import {forwardRef} from 'react'
-import {FlatListComponent} from 'react-native'
-import {View, ViewProps} from 'react-native'
+import {type FlatListComponent} from 'react-native'
+import {View, type ViewProps} from 'react-native'
 import Animated from 'react-native-reanimated'
-import {FlatListPropsWithLayout} from 'react-native-reanimated'
+import {type FlatListPropsWithLayout} from 'react-native-reanimated'
 
 // If you explode these into functions, don't forget to forwardRef!
 
diff --git a/src/view/com/util/WebAuxClickWrapper.tsx b/src/view/com/util/WebAuxClickWrapper.tsx
index 8105a8518..6ea9b3bec 100644
--- a/src/view/com/util/WebAuxClickWrapper.tsx
+++ b/src/view/com/util/WebAuxClickWrapper.tsx
@@ -1,5 +1,5 @@
-import React from 'react'
 import {Platform} from 'react-native'
+import type React from 'react'
 
 const onMouseUp = (e: React.MouseEvent & {target: HTMLElement}) => {
   // Only handle whenever it is the middle button
diff --git a/src/view/com/util/error/ErrorMessage.tsx b/src/view/com/util/error/ErrorMessage.tsx
index 50e55e70c..529406996 100644
--- a/src/view/com/util/error/ErrorMessage.tsx
+++ b/src/view/com/util/error/ErrorMessage.tsx
@@ -1,13 +1,13 @@
 import {
-  StyleProp,
+  type StyleProp,
   StyleSheet,
   TouchableOpacity,
   View,
-  ViewStyle,
+  type ViewStyle,
 } from 'react-native'
 import {
   FontAwesomeIcon,
-  FontAwesomeIconStyle,
+  type FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
diff --git a/src/view/com/util/error/ErrorScreen.tsx b/src/view/com/util/error/ErrorScreen.tsx
index e9b0e50a3..26342ec75 100644
--- a/src/view/com/util/error/ErrorScreen.tsx
+++ b/src/view/com/util/error/ErrorScreen.tsx
@@ -1,7 +1,7 @@
 import {View} from 'react-native'
 import {
   FontAwesomeIcon,
-  FontAwesomeIconStyle,
+  type FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
diff --git a/src/view/com/util/fab/FAB.web.tsx b/src/view/com/util/fab/FAB.web.tsx
index b9f3a0b07..976c19e7d 100644
--- a/src/view/com/util/fab/FAB.web.tsx
+++ b/src/view/com/util/fab/FAB.web.tsx
@@ -1,7 +1,7 @@
 import {View} from 'react-native'
 
 import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
-import {FABInner, FABProps} from './FABInner'
+import {FABInner, type FABProps} from './FABInner'
 
 export const FAB = (_opts: FABProps) => {
   const {isDesktop} = useWebMediaQueries()
diff --git a/src/view/com/util/images/Image.tsx b/src/view/com/util/images/Image.tsx
index 94563ef9c..ece0fbb04 100644
--- a/src/view/com/util/images/Image.tsx
+++ b/src/view/com/util/images/Image.tsx
@@ -1,4 +1,4 @@
-import {Image, ImageProps, ImageSource} from 'expo-image'
+import {Image, type ImageProps, type ImageSource} from 'expo-image'
 
 interface HighPriorityImageProps extends ImageProps {
   source: ImageSource
diff --git a/src/view/com/util/layouts/LoggedOutLayout.tsx b/src/view/com/util/layouts/LoggedOutLayout.tsx
index aadabd8cb..2ec17799f 100644
--- a/src/view/com/util/layouts/LoggedOutLayout.tsx
+++ b/src/view/com/util/layouts/LoggedOutLayout.tsx
@@ -1,5 +1,5 @@
-import React from 'react'
 import {ScrollView, StyleSheet, View} from 'react-native'
+import type React from 'react'
 
 import {useColorSchemeStyle} from '#/lib/hooks/useColorSchemeStyle'
 import {useIsKeyboardVisible} from '#/lib/hooks/useIsKeyboardVisible'
diff --git a/src/view/icons/Logo.tsx b/src/view/icons/Logo.tsx
index 4de7c1613..465018cfb 100644
--- a/src/view/icons/Logo.tsx
+++ b/src/view/icons/Logo.tsx
@@ -1,12 +1,12 @@
 import React from 'react'
-import {StyleSheet, TextProps} from 'react-native'
+import {StyleSheet, type TextProps} from 'react-native'
 import Svg, {
   Defs,
   LinearGradient,
   Path,
-  PathProps,
+  type PathProps,
   Stop,
-  SvgProps,
+  type SvgProps,
 } from 'react-native-svg'
 import {Image} from 'expo-image'
 
diff --git a/src/view/icons/Logomark.tsx b/src/view/icons/Logomark.tsx
index b777992d4..8d078f434 100644
--- a/src/view/icons/Logomark.tsx
+++ b/src/view/icons/Logomark.tsx
@@ -1,4 +1,4 @@
-import Svg, {Path, PathProps, SvgProps} from 'react-native-svg'
+import Svg, {Path, type PathProps, type SvgProps} from 'react-native-svg'
 
 import {usePalette} from '#/lib/hooks/usePalette'
 
diff --git a/src/view/icons/Logotype.tsx b/src/view/icons/Logotype.tsx
index 8be4980e6..270c913fc 100644
--- a/src/view/icons/Logotype.tsx
+++ b/src/view/icons/Logotype.tsx
@@ -1,4 +1,4 @@
-import Svg, {Path, PathProps, SvgProps} from 'react-native-svg'
+import Svg, {Path, type PathProps, type SvgProps} from 'react-native-svg'
 
 import {usePalette} from '#/lib/hooks/usePalette'
 
diff --git a/src/view/screens/CommunityGuidelines.tsx b/src/view/screens/CommunityGuidelines.tsx
index 76993d5b7..42bf8c1a1 100644
--- a/src/view/screens/CommunityGuidelines.tsx
+++ b/src/view/screens/CommunityGuidelines.tsx
@@ -5,7 +5,10 @@ import {useLingui} from '@lingui/react'
 import {useFocusEffect} from '@react-navigation/native'
 
 import {usePalette} from '#/lib/hooks/usePalette'
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {s} from '#/lib/styles'
 import {useSetMinimalShellMode} from '#/state/shell'
 import {TextLink} from '#/view/com/util/Link'
diff --git a/src/view/screens/CopyrightPolicy.tsx b/src/view/screens/CopyrightPolicy.tsx
index fe2731c53..45311e729 100644
--- a/src/view/screens/CopyrightPolicy.tsx
+++ b/src/view/screens/CopyrightPolicy.tsx
@@ -5,7 +5,10 @@ import {useLingui} from '@lingui/react'
 import {useFocusEffect} from '@react-navigation/native'
 
 import {usePalette} from '#/lib/hooks/usePalette'
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {s} from '#/lib/styles'
 import {useSetMinimalShellMode} from '#/state/shell'
 import {TextLink} from '#/view/com/util/Link'
diff --git a/src/view/screens/NotFound.tsx b/src/view/screens/NotFound.tsx
index 90d5e17dd..a9d5e045d 100644
--- a/src/view/screens/NotFound.tsx
+++ b/src/view/screens/NotFound.tsx
@@ -9,7 +9,7 @@ import {
 } from '@react-navigation/native'
 
 import {usePalette} from '#/lib/hooks/usePalette'
-import {NavigationProp} from '#/lib/routes/types'
+import {type NavigationProp} from '#/lib/routes/types'
 import {s} from '#/lib/styles'
 import {useSetMinimalShellMode} from '#/state/shell'
 import {Button} from '#/view/com/util/forms/Button'
diff --git a/src/view/screens/PrivacyPolicy.tsx b/src/view/screens/PrivacyPolicy.tsx
index 57e4652b5..a89eaadc4 100644
--- a/src/view/screens/PrivacyPolicy.tsx
+++ b/src/view/screens/PrivacyPolicy.tsx
@@ -5,7 +5,10 @@ import {useLingui} from '@lingui/react'
 import {useFocusEffect} from '@react-navigation/native'
 
 import {usePalette} from '#/lib/hooks/usePalette'
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {s} from '#/lib/styles'
 import {useSetMinimalShellMode} from '#/state/shell'
 import {TextLink} from '#/view/com/util/Link'
diff --git a/src/view/screens/ProfileFeedLikedBy.tsx b/src/view/screens/ProfileFeedLikedBy.tsx
index e19b42240..0a2ffc097 100644
--- a/src/view/screens/ProfileFeedLikedBy.tsx
+++ b/src/view/screens/ProfileFeedLikedBy.tsx
@@ -3,7 +3,10 @@ import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 import {useFocusEffect} from '@react-navigation/native'
 
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {makeRecordUri} from '#/lib/strings/url-helpers'
 import {useSetMinimalShellMode} from '#/state/shell'
 import {PostLikedBy as PostLikedByComponent} from '#/view/com/post-thread/PostLikedBy'
diff --git a/src/view/screens/Storybook/ListContained.tsx b/src/view/screens/Storybook/ListContained.tsx
index e673743eb..3804c1a6b 100644
--- a/src/view/screens/Storybook/ListContained.tsx
+++ b/src/view/screens/Storybook/ListContained.tsx
@@ -2,7 +2,7 @@ import React from 'react'
 import {View} from 'react-native'
 
 import {ScrollProvider} from '#/lib/ScrollContext'
-import {List, ListMethods} from '#/view/com/util/List'
+import {List, type ListMethods} from '#/view/com/util/List'
 import {Button, ButtonText} from '#/components/Button'
 import * as Toggle from '#/components/forms/Toggle'
 import {Text} from '#/components/Typography'
diff --git a/src/view/screens/Support.tsx b/src/view/screens/Support.tsx
index 8782e911b..a2d4a1121 100644
--- a/src/view/screens/Support.tsx
+++ b/src/view/screens/Support.tsx
@@ -5,7 +5,10 @@ import {useFocusEffect} from '@react-navigation/native'
 
 import {HELP_DESK_URL} from '#/lib/constants'
 import {usePalette} from '#/lib/hooks/usePalette'
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {s} from '#/lib/styles'
 import {useSetMinimalShellMode} from '#/state/shell'
 import {TextLink} from '#/view/com/util/Link'
diff --git a/src/view/screens/TermsOfService.tsx b/src/view/screens/TermsOfService.tsx
index fa40fbca3..d843c713c 100644
--- a/src/view/screens/TermsOfService.tsx
+++ b/src/view/screens/TermsOfService.tsx
@@ -5,7 +5,10 @@ import {useLingui} from '@lingui/react'
 import {useFocusEffect} from '@react-navigation/native'
 
 import {usePalette} from '#/lib/hooks/usePalette'
-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {
+  type CommonNavigatorParams,
+  type NativeStackScreenProps,
+} from '#/lib/routes/types'
 import {s} from '#/lib/styles'
 import {useSetMinimalShellMode} from '#/state/shell'
 import {TextLink} from '#/view/com/util/Link'