about summary refs log tree commit diff
path: root/src/view/com/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/com/util')
-rw-r--r--src/view/com/util/AccountDropdownBtn.tsx16
-rw-r--r--src/view/com/util/BlurView.android.tsx2
-rw-r--r--src/view/com/util/BlurView.web.tsx2
-rw-r--r--src/view/com/util/BottomSheetCustomBackdrop.tsx4
-rw-r--r--src/view/com/util/EmptyState.tsx9
-rw-r--r--src/view/com/util/EmptyStateWithButton.tsx11
-rw-r--r--src/view/com/util/ErrorBoundary.tsx6
-rw-r--r--src/view/com/util/FeedInfoText.tsx8
-rw-r--r--src/view/com/util/Html.tsx13
-rw-r--r--src/view/com/util/Link.tsx46
-rw-r--r--src/view/com/util/List.tsx8
-rw-r--r--src/view/com/util/List.web.tsx11
-rw-r--r--src/view/com/util/LoadMoreRetryBtn.tsx7
-rw-r--r--src/view/com/util/LoadingPlaceholder.tsx20
-rw-r--r--src/view/com/util/LoadingScreen.tsx3
-rw-r--r--src/view/com/util/MainScrollProvider.tsx11
-rw-r--r--src/view/com/util/PostMeta.tsx22
-rw-r--r--src/view/com/util/PressableWithHover.tsx8
-rw-r--r--src/view/com/util/Selector.tsx9
-rw-r--r--src/view/com/util/SimpleViewHeader.tsx18
-rw-r--r--src/view/com/util/TimeElapsed.tsx3
-rw-r--r--src/view/com/util/Toast.tsx14
-rw-r--r--src/view/com/util/Toast.web.tsx4
-rw-r--r--src/view/com/util/UserAvatar.tsx35
-rw-r--r--src/view/com/util/UserBanner.tsx25
-rw-r--r--src/view/com/util/UserInfoText.tsx18
-rw-r--r--src/view/com/util/UserPreviewLink.tsx8
-rw-r--r--src/view/com/util/ViewHeader.tsx20
-rw-r--r--src/view/com/util/ViewSelector.tsx17
-rw-r--r--src/view/com/util/Views.web.tsx6
-rw-r--r--src/view/com/util/anim/TriggerableAnimated.tsx2
-rw-r--r--src/view/com/util/error/ErrorMessage.tsx19
-rw-r--r--src/view/com/util/error/ErrorScreen.tsx17
-rw-r--r--src/view/com/util/fab/FAB.web.tsx3
-rw-r--r--src/view/com/util/fab/FABInner.tsx11
-rw-r--r--src/view/com/util/forms/Button.tsx17
-rw-r--r--src/view/com/util/forms/DateInput.tsx15
-rw-r--r--src/view/com/util/forms/DateInput.web.tsx4
-rw-r--r--src/view/com/util/forms/DropdownButton.tsx19
-rw-r--r--src/view/com/util/forms/NativeDropdown.tsx14
-rw-r--r--src/view/com/util/forms/NativeDropdown.web.tsx10
-rw-r--r--src/view/com/util/forms/PostDropdownBtn.tsx59
-rw-r--r--src/view/com/util/forms/RadioButton.tsx5
-rw-r--r--src/view/com/util/forms/RadioGroup.tsx5
-rw-r--r--src/view/com/util/forms/SearchInput.tsx20
-rw-r--r--src/view/com/util/forms/SelectableBtn.tsx7
-rw-r--r--src/view/com/util/forms/ToggleButton.tsx9
-rw-r--r--src/view/com/util/images/AutoSizedImage.tsx12
-rw-r--r--src/view/com/util/images/Gallery.tsx6
-rw-r--r--src/view/com/util/images/Image.tsx2
-rw-r--r--src/view/com/util/images/Image.web.tsx2
-rw-r--r--src/view/com/util/images/ImageHorzList.tsx4
-rw-r--r--src/view/com/util/images/ImageLayoutGrid.tsx5
-rw-r--r--src/view/com/util/layouts/LoggedOutLayout.tsx7
-rw-r--r--src/view/com/util/layouts/TitleColumnLayout.tsx4
-rw-r--r--src/view/com/util/layouts/withBreakpoints.tsx4
-rw-r--r--src/view/com/util/load-latest/LoadLatestBtn.tsx12
-rw-r--r--src/view/com/util/moderation/ContentHider.tsx16
-rw-r--r--src/view/com/util/moderation/LabelInfo.tsx10
-rw-r--r--src/view/com/util/moderation/PostAlerts.tsx12
-rw-r--r--src/view/com/util/moderation/PostHider.tsx18
-rw-r--r--src/view/com/util/moderation/ProfileHeaderAlerts.tsx14
-rw-r--r--src/view/com/util/moderation/ScreenHider.tsx32
-rw-r--r--src/view/com/util/post-ctrls/PostCtrls.tsx48
-rw-r--r--src/view/com/util/post-ctrls/RepostButton.tsx18
-rw-r--r--src/view/com/util/post-ctrls/RepostButton.web.tsx19
-rw-r--r--src/view/com/util/post-embeds/ExternalGifEmbed.tsx15
-rw-r--r--src/view/com/util/post-embeds/ExternalLinkEmbed.tsx15
-rw-r--r--src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx25
-rw-r--r--src/view/com/util/post-embeds/ListEmbed.tsx6
-rw-r--r--src/view/com/util/post-embeds/QuoteEmbed.tsx30
-rw-r--r--src/view/com/util/post-embeds/index.tsx42
-rw-r--r--src/view/com/util/text/RichText.tsx18
-rw-r--r--src/view/com/util/text/Text.tsx6
-rw-r--r--src/view/com/util/text/ThemedText.tsx5
75 files changed, 551 insertions, 476 deletions
diff --git a/src/view/com/util/AccountDropdownBtn.tsx b/src/view/com/util/AccountDropdownBtn.tsx
index 221879df7..24f64af45 100644
--- a/src/view/com/util/AccountDropdownBtn.tsx
+++ b/src/view/com/util/AccountDropdownBtn.tsx
@@ -1,16 +1,18 @@
-import React from 'react'
-import {Pressable} from 'react-native'
 import {
   FontAwesomeIcon,
   FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
-import {s} from 'lib/styles'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
 import {usePalette} from 'lib/hooks/usePalette'
-import {DropdownItem, NativeDropdown} from './forms/NativeDropdown'
+import {s} from 'lib/styles'
+import React from 'react'
+import {Pressable} from 'react-native'
+
+import {SessionAccount, useSessionApi} from '#/state/session'
+
 import * as Toast from '../../com/util/Toast'
-import {useSessionApi, SessionAccount} from '#/state/session'
-import {useLingui} from '@lingui/react'
-import {msg} from '@lingui/macro'
+import {DropdownItem, NativeDropdown} from './forms/NativeDropdown'
 
 export function AccountDropdownBtn({account}: {account: SessionAccount}) {
   const pal = usePalette('default')
diff --git a/src/view/com/util/BlurView.android.tsx b/src/view/com/util/BlurView.android.tsx
index eee1d9d86..a62e1dff0 100644
--- a/src/view/com/util/BlurView.android.tsx
+++ b/src/view/com/util/BlurView.android.tsx
@@ -1,6 +1,6 @@
+import {addStyle} from 'lib/styles'
 import React from 'react'
 import {StyleSheet, View, ViewProps} from 'react-native'
-import {addStyle} from 'lib/styles'
 
 type BlurViewProps = ViewProps & {
   blurType?: 'dark' | 'light'
diff --git a/src/view/com/util/BlurView.web.tsx b/src/view/com/util/BlurView.web.tsx
index d1fb4665f..09807816b 100644
--- a/src/view/com/util/BlurView.web.tsx
+++ b/src/view/com/util/BlurView.web.tsx
@@ -1,6 +1,6 @@
+import {addStyle} from 'lib/styles'
 import React from 'react'
 import {StyleSheet, View, ViewProps} from 'react-native'
-import {addStyle} from 'lib/styles'
 
 type BlurViewProps = ViewProps & {
   blurType?: 'dark' | 'light'
diff --git a/src/view/com/util/BottomSheetCustomBackdrop.tsx b/src/view/com/util/BottomSheetCustomBackdrop.tsx
index ed5a2f165..7cf9c10da 100644
--- a/src/view/com/util/BottomSheetCustomBackdrop.tsx
+++ b/src/view/com/util/BottomSheetCustomBackdrop.tsx
@@ -1,12 +1,12 @@
+import {BottomSheetBackdropProps} from '@gorhom/bottom-sheet'
+import {t} from '@lingui/macro'
 import React, {useMemo} from 'react'
 import {TouchableWithoutFeedback} from 'react-native'
-import {BottomSheetBackdropProps} from '@gorhom/bottom-sheet'
 import Animated, {
   Extrapolate,
   interpolate,
   useAnimatedStyle,
 } from 'react-native-reanimated'
-import {t} from '@lingui/macro'
 
 export function createCustomBackdrop(
   onClose?: (() => void) | undefined,
diff --git a/src/view/com/util/EmptyState.tsx b/src/view/com/util/EmptyState.tsx
index 7486b212f..cc71165b5 100644
--- a/src/view/com/util/EmptyState.tsx
+++ b/src/view/com/util/EmptyState.tsx
@@ -1,13 +1,14 @@
-import React from 'react'
-import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
 import {IconProp} from '@fortawesome/fontawesome-svg-core'
 import {
   FontAwesomeIcon,
   FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
-import {Text} from './text/Text'
-import {UserGroupIcon} from 'lib/icons'
 import {usePalette} from 'lib/hooks/usePalette'
+import {UserGroupIcon} from 'lib/icons'
+import React from 'react'
+import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
+
+import {Text} from './text/Text'
 
 export function EmptyState({
   testID,
diff --git a/src/view/com/util/EmptyStateWithButton.tsx b/src/view/com/util/EmptyStateWithButton.tsx
index 008ca2bdb..1a580ae9a 100644
--- a/src/view/com/util/EmptyStateWithButton.tsx
+++ b/src/view/com/util/EmptyStateWithButton.tsx
@@ -1,14 +1,15 @@
-import React from 'react'
-import {StyleSheet, View} from 'react-native'
+import {IconProp} from '@fortawesome/fontawesome-svg-core'
 import {
   FontAwesomeIcon,
   FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
-import {IconProp} from '@fortawesome/fontawesome-svg-core'
-import {Text} from './text/Text'
-import {Button} from './forms/Button'
 import {usePalette} from 'lib/hooks/usePalette'
 import {s} from 'lib/styles'
+import React from 'react'
+import {StyleSheet, View} from 'react-native'
+
+import {Button} from './forms/Button'
+import {Text} from './text/Text'
 
 interface Props {
   testID?: string
diff --git a/src/view/com/util/ErrorBoundary.tsx b/src/view/com/util/ErrorBoundary.tsx
index 5ec1d0014..b287a2469 100644
--- a/src/view/com/util/ErrorBoundary.tsx
+++ b/src/view/com/util/ErrorBoundary.tsx
@@ -1,8 +1,10 @@
+import {t} from '@lingui/macro'
 import React, {Component, ErrorInfo, ReactNode} from 'react'
+
+import {logger} from '#/logger'
+
 import {ErrorScreen} from './error/ErrorScreen'
 import {CenteredView} from './Views'
-import {t} from '@lingui/macro'
-import {logger} from '#/logger'
 
 interface Props {
   children?: ReactNode
diff --git a/src/view/com/util/FeedInfoText.tsx b/src/view/com/util/FeedInfoText.tsx
index 54124c739..3afaf256c 100644
--- a/src/view/com/util/FeedInfoText.tsx
+++ b/src/view/com/util/FeedInfoText.tsx
@@ -1,10 +1,12 @@
+import {sanitizeDisplayName} from 'lib/strings/display-names'
+import {TypographyVariant} from 'lib/ThemeContext'
 import React from 'react'
 import {StyleProp, StyleSheet, TextStyle} from 'react-native'
+
+import {useFeedSourceInfoQuery} from '#/state/queries/feed'
+
 import {TextLinkOnWebOnly} from './Link'
 import {LoadingPlaceholder} from './LoadingPlaceholder'
-import {TypographyVariant} from 'lib/ThemeContext'
-import {sanitizeDisplayName} from 'lib/strings/display-names'
-import {useFeedSourceInfoQuery} from '#/state/queries/feed'
 
 export function FeedNameText({
   type = 'md',
diff --git a/src/view/com/util/Html.tsx b/src/view/com/util/Html.tsx
index 2e4719481..b8d31dfd6 100644
--- a/src/view/com/util/Html.tsx
+++ b/src/view/com/util/Html.tsx
@@ -1,16 +1,17 @@
-import * as React from 'react'
-import {StyleSheet, View} from 'react-native'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useTheme} from 'lib/ThemeContext'
-import {Text} from './text/Text'
-import {TextLink} from './Link'
 import {
   H1 as ExpoH1,
   H2 as ExpoH2,
   H3 as ExpoH3,
   H4 as ExpoH4,
 } from '@expo/html-elements'
+import {usePalette} from 'lib/hooks/usePalette'
 import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {useTheme} from 'lib/ThemeContext'
+import * as React from 'react'
+import {StyleSheet, View} from 'react-native'
+
+import {TextLink} from './Link'
+import {Text} from './text/Text'
 
 /**
  * These utilities are used to define long documents in an html-like
diff --git a/src/view/com/util/Link.tsx b/src/view/com/util/Link.tsx
index f45622488..112e061bc 100644
--- a/src/view/com/util/Link.tsx
+++ b/src/view/com/util/Link.tsx
@@ -1,36 +1,38 @@
+import {sanitizeUrl} from '@braintree/sanitize-url'
+import {StackActions, useLinkProps} from '@react-navigation/native'
+import {
+  DebouncedNavigationProp,
+  useNavigationDeduped,
+} from 'lib/hooks/useNavigationDeduped'
+import {
+  convertBskyAppUrlIfNeeded,
+  isExternalUrl,
+  linkRequiresWarning,
+} from 'lib/strings/url-helpers'
+import {TypographyVariant} from 'lib/ThemeContext'
+import {isAndroid, isWeb} from 'platform/detection'
 import React, {ComponentProps, memo, useMemo} from 'react'
 import {
   GestureResponderEvent,
   Platform,
+  Pressable,
   StyleProp,
-  TextStyle,
   TextProps,
+  TextStyle,
+  TouchableOpacity,
+  TouchableWithoutFeedback,
   View,
   ViewStyle,
-  Pressable,
-  TouchableWithoutFeedback,
-  TouchableOpacity,
 } from 'react-native'
-import {useLinkProps, StackActions} from '@react-navigation/native'
-import {Text} from './text/Text'
-import {TypographyVariant} from 'lib/ThemeContext'
-import {router} from '../../../routes'
-import {
-  convertBskyAppUrlIfNeeded,
-  isExternalUrl,
-  linkRequiresWarning,
-} from 'lib/strings/url-helpers'
-import {isAndroid, isWeb} from 'platform/detection'
-import {sanitizeUrl} from '@braintree/sanitize-url'
-import {PressableWithHover} from './PressableWithHover'
-import FixedTouchableHighlight from '../pager/FixedTouchableHighlight'
+import {WebAuxClickWrapper} from 'view/com/util/WebAuxClickWrapper'
+
 import {useModalControls} from '#/state/modals'
 import {useOpenLink} from '#/state/preferences/in-app-browser'
-import {WebAuxClickWrapper} from 'view/com/util/WebAuxClickWrapper'
-import {
-  DebouncedNavigationProp,
-  useNavigationDeduped,
-} from 'lib/hooks/useNavigationDeduped'
+
+import {router} from '../../../routes'
+import FixedTouchableHighlight from '../pager/FixedTouchableHighlight'
+import {PressableWithHover} from './PressableWithHover'
+import {Text} from './text/Text'
 
 type Event =
   | React.MouseEvent<HTMLAnchorElement, MouseEvent>
diff --git a/src/view/com/util/List.tsx b/src/view/com/util/List.tsx
index d30a9d805..896608af1 100644
--- a/src/view/com/util/List.tsx
+++ b/src/view/com/util/List.tsx
@@ -1,11 +1,13 @@
+import {addStyle} from 'lib/styles'
 import React, {memo} from 'react'
 import {FlatListProps, RefreshControl} from 'react-native'
-import {FlatList_INTERNAL} from './Views'
-import {addStyle} from 'lib/styles'
-import {useScrollHandlers} from '#/lib/ScrollContext'
 import {runOnJS, useSharedValue} from 'react-native-reanimated'
+
 import {useAnimatedScrollHandler} from '#/lib/hooks/useAnimatedScrollHandler_FIXED'
 import {usePalette} from '#/lib/hooks/usePalette'
+import {useScrollHandlers} from '#/lib/ScrollContext'
+
+import {FlatList_INTERNAL} from './Views'
 
 export type ListMethods = FlatList_INTERNAL
 export type ListProps<ItemT> = Omit<
diff --git a/src/view/com/util/List.web.tsx b/src/view/com/util/List.web.tsx
index 936bac198..6fb17b9f6 100644
--- a/src/view/com/util/List.web.tsx
+++ b/src/view/com/util/List.web.tsx
@@ -1,11 +1,12 @@
-import React, {isValidElement, memo, useRef, startTransition} from 'react'
-import {FlatListProps, StyleSheet, View, ViewProps} from 'react-native'
-import {addStyle} from 'lib/styles'
 import {usePalette} from 'lib/hooks/usePalette'
 import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {useScrollHandlers} from '#/lib/ScrollContext'
-import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
+import {addStyle} from 'lib/styles'
+import React, {isValidElement, memo, startTransition, useRef} from 'react'
+import {FlatListProps, StyleSheet, View, ViewProps} from 'react-native'
+
 import {batchedUpdates} from '#/lib/batchedUpdates'
+import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
+import {useScrollHandlers} from '#/lib/ScrollContext'
 
 export type ListMethods = any // TODO: Better types.
 export type ListProps<ItemT> = Omit<
diff --git a/src/view/com/util/LoadMoreRetryBtn.tsx b/src/view/com/util/LoadMoreRetryBtn.tsx
index a2e9838b3..fa8245632 100644
--- a/src/view/com/util/LoadMoreRetryBtn.tsx
+++ b/src/view/com/util/LoadMoreRetryBtn.tsx
@@ -1,12 +1,13 @@
-import React from 'react'
-import {StyleSheet} from 'react-native'
 import {
   FontAwesomeIcon,
   FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
+import {usePalette} from 'lib/hooks/usePalette'
+import React from 'react'
+import {StyleSheet} from 'react-native'
+
 import {Button} from './forms/Button'
 import {Text} from './text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
 
 export function LoadMoreRetryBtn({
   label,
diff --git a/src/view/com/util/LoadingPlaceholder.tsx b/src/view/com/util/LoadingPlaceholder.tsx
index 6dfe12598..fb2c226e8 100644
--- a/src/view/com/util/LoadingPlaceholder.tsx
+++ b/src/view/com/util/LoadingPlaceholder.tsx
@@ -1,20 +1,20 @@
-import React from 'react'
-import {
-  StyleSheet,
-  StyleProp,
-  View,
-  ViewStyle,
-  DimensionValue,
-} from 'react-native'
+import {usePalette} from 'lib/hooks/usePalette'
 import {
+  CommentBottomArrow,
   HeartIcon,
   HeartIconSolid,
-  CommentBottomArrow,
   RepostIcon,
 } from 'lib/icons'
 import {s} from 'lib/styles'
 import {useTheme} from 'lib/ThemeContext'
-import {usePalette} from 'lib/hooks/usePalette'
+import React from 'react'
+import {
+  DimensionValue,
+  StyleProp,
+  StyleSheet,
+  View,
+  ViewStyle,
+} from 'react-native'
 
 export function LoadingPlaceholder({
   width,
diff --git a/src/view/com/util/LoadingScreen.tsx b/src/view/com/util/LoadingScreen.tsx
index 93c3bee42..073664931 100644
--- a/src/view/com/util/LoadingScreen.tsx
+++ b/src/view/com/util/LoadingScreen.tsx
@@ -1,6 +1,7 @@
+import {s} from 'lib/styles'
 import React from 'react'
 import {ActivityIndicator, View} from 'react-native'
-import {s} from 'lib/styles'
+
 import {CenteredView} from './Views'
 
 export function LoadingScreen() {
diff --git a/src/view/com/util/MainScrollProvider.tsx b/src/view/com/util/MainScrollProvider.tsx
index 01b8a954d..1ed0631ac 100644
--- a/src/view/com/util/MainScrollProvider.tsx
+++ b/src/view/com/util/MainScrollProvider.tsx
@@ -1,11 +1,12 @@
-import React, {useCallback, useEffect} from 'react'
 import EventEmitter from 'eventemitter3'
-import {ScrollProvider} from '#/lib/ScrollContext'
+import {isNative, isWeb} from 'platform/detection'
+import React, {useCallback, useEffect} from 'react'
 import {NativeScrollEvent} from 'react-native'
-import {useSetMinimalShellMode, useMinimalShellMode} from '#/state/shell'
+import {interpolate, useSharedValue} from 'react-native-reanimated'
+
+import {ScrollProvider} from '#/lib/ScrollContext'
+import {useMinimalShellMode, useSetMinimalShellMode} from '#/state/shell'
 import {useShellLayout} from '#/state/shell/shell-layout'
-import {isNative, isWeb} from 'platform/detection'
-import {useSharedValue, interpolate} from 'react-native-reanimated'
 
 const WEB_HIDE_SHELL_THRESHOLD = 200
 
diff --git a/src/view/com/util/PostMeta.tsx b/src/view/com/util/PostMeta.tsx
index 3795dcf13..5832fc5d8 100644
--- a/src/view/com/util/PostMeta.tsx
+++ b/src/view/com/util/PostMeta.tsx
@@ -1,19 +1,21 @@
-import React, {memo} from 'react'
-import {StyleProp, StyleSheet, TextStyle, View, ViewStyle} from 'react-native'
-import {Text} from './text/Text'
-import {TextLinkOnWebOnly} from './Link'
-import {niceDate} from 'lib/strings/time'
+import {ModerationUI} from '@atproto/api'
 import {usePalette} from 'lib/hooks/usePalette'
-import {TypographyVariant} from 'lib/ThemeContext'
-import {UserAvatar} from './UserAvatar'
+import {makeProfileLink} from 'lib/routes/links'
 import {sanitizeDisplayName} from 'lib/strings/display-names'
 import {sanitizeHandle} from 'lib/strings/handles'
+import {niceDate} from 'lib/strings/time'
+import {TypographyVariant} from 'lib/ThemeContext'
 import {isAndroid, isWeb} from 'platform/detection'
-import {TimeElapsed} from './TimeElapsed'
-import {makeProfileLink} from 'lib/routes/links'
-import {ModerationUI} from '@atproto/api'
+import React, {memo} from 'react'
+import {StyleProp, StyleSheet, TextStyle, View, ViewStyle} from 'react-native'
+
 import {usePrefetchProfileQuery} from '#/state/queries/profile'
 
+import {TextLinkOnWebOnly} from './Link'
+import {Text} from './text/Text'
+import {TimeElapsed} from './TimeElapsed'
+import {UserAvatar} from './UserAvatar'
+
 interface PostMetaOpts {
   author: {
     avatar?: string
diff --git a/src/view/com/util/PressableWithHover.tsx b/src/view/com/util/PressableWithHover.tsx
index 77276f184..83c84f836 100644
--- a/src/view/com/util/PressableWithHover.tsx
+++ b/src/view/com/util/PressableWithHover.tsx
@@ -1,12 +1,12 @@
+import {addStyle} from 'lib/styles'
 import React, {
-  useState,
-  useCallback,
-  PropsWithChildren,
   forwardRef,
+  PropsWithChildren,
   Ref,
+  useCallback,
+  useState,
 } from 'react'
 import {Pressable, PressableProps, StyleProp, ViewStyle} from 'react-native'
-import {addStyle} from 'lib/styles'
 
 interface PressableWithHover extends PressableProps {
   hoverStyle: StyleProp<ViewStyle>
diff --git a/src/view/com/util/Selector.tsx b/src/view/com/util/Selector.tsx
index 66e363cd4..b607a018a 100644
--- a/src/view/com/util/Selector.tsx
+++ b/src/view/com/util/Selector.tsx
@@ -1,9 +1,10 @@
-import React, {createRef, useState, useMemo, useRef} from 'react'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {usePalette} from 'lib/hooks/usePalette'
+import React, {createRef, useMemo, useRef, useState} from 'react'
 import {Animated, Pressable, StyleSheet, View} from 'react-native'
+
 import {Text} from './text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useLingui} from '@lingui/react'
-import {msg} from '@lingui/macro'
 
 interface Layout {
   x: number
diff --git a/src/view/com/util/SimpleViewHeader.tsx b/src/view/com/util/SimpleViewHeader.tsx
index 814b2fb15..3319f7a94 100644
--- a/src/view/com/util/SimpleViewHeader.tsx
+++ b/src/view/com/util/SimpleViewHeader.tsx
@@ -1,3 +1,9 @@
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {useNavigation} from '@react-navigation/native'
+import {useAnalytics} from 'lib/analytics/analytics'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {NavigationProp} from 'lib/routes/types'
 import React from 'react'
 import {
   StyleProp,
@@ -6,15 +12,11 @@ import {
   View,
   ViewStyle,
 } from 'react-native'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {useNavigation} from '@react-navigation/native'
-import {CenteredView} from './Views'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {NavigationProp} from 'lib/routes/types'
-import {useSetDrawerOpen} from '#/state/shell'
+
 import {isWeb} from '#/platform/detection'
+import {useSetDrawerOpen} from '#/state/shell'
+
+import {CenteredView} from './Views'
 
 const BACK_HITSLOP = {left: 20, top: 20, right: 50, bottom: 20}
 
diff --git a/src/view/com/util/TimeElapsed.tsx b/src/view/com/util/TimeElapsed.tsx
index aa3a09223..bf848193d 100644
--- a/src/view/com/util/TimeElapsed.tsx
+++ b/src/view/com/util/TimeElapsed.tsx
@@ -1,5 +1,6 @@
-import React from 'react'
 import {ago} from 'lib/strings/time'
+import React from 'react'
+
 import {useTickEveryMinute} from '#/state/shell'
 
 // FIXME(dan): Figure out why the false positives
diff --git a/src/view/com/util/Toast.tsx b/src/view/com/util/Toast.tsx
index 5462505e1..91187e205 100644
--- a/src/view/com/util/Toast.tsx
+++ b/src/view/com/util/Toast.tsx
@@ -1,14 +1,16 @@
-import RootSiblings from 'react-native-root-siblings'
-import React from 'react'
-import {Animated, StyleSheet, View} from 'react-native'
 import {Props as FontAwesomeProps} from '@fortawesome/react-native-fontawesome'
-import {Text} from './text/Text'
+import {useAnimatedValue} from 'lib/hooks/useAnimatedValue'
+import {usePalette} from 'lib/hooks/usePalette'
 import {colors} from 'lib/styles'
 import {useTheme} from 'lib/ThemeContext'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useAnimatedValue} from 'lib/hooks/useAnimatedValue'
+import React from 'react'
+import {Animated, StyleSheet, View} from 'react-native'
+import RootSiblings from 'react-native-root-siblings'
+
 import {IS_TEST} from '#/env'
 
+import {Text} from './text/Text'
+
 const TIMEOUT = 4e3
 
 export function show(
diff --git a/src/view/com/util/Toast.web.tsx b/src/view/com/util/Toast.web.tsx
index d5a843541..da7a5df8e 100644
--- a/src/view/com/util/Toast.web.tsx
+++ b/src/view/com/util/Toast.web.tsx
@@ -2,13 +2,13 @@
  * Note: the dataSet properties are used to leverage custom CSS in public/index.html
  */
 
-import React, {useState, useEffect} from 'react'
-import {StyleSheet, Text, View} from 'react-native'
 import {
   FontAwesomeIcon,
   FontAwesomeIconStyle,
   Props as FontAwesomeProps,
 } from '@fortawesome/react-native-fontawesome'
+import React, {useEffect, useState} from 'react'
+import {StyleSheet, Text, View} from 'react-native'
 
 const DURATION = 3500
 
diff --git a/src/view/com/util/UserAvatar.tsx b/src/view/com/util/UserAvatar.tsx
index 413237397..2aa28b725 100644
--- a/src/view/com/util/UserAvatar.tsx
+++ b/src/view/com/util/UserAvatar.tsx
@@ -1,30 +1,31 @@
-import React, {memo, useMemo} from 'react'
-import {Image, StyleSheet, TouchableOpacity, View} from 'react-native'
-import Svg, {Circle, Rect, Path} from 'react-native-svg'
-import {Image as RNImage} from 'react-native-image-crop-picker'
-import {useLingui} from '@lingui/react'
-import {msg, Trans} from '@lingui/macro'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
 import {ModerationUI} from '@atproto/api'
-
-import {HighPriorityImage} from 'view/com/util/images/Image'
-import {openCamera, openCropper, openPicker} from '../../../lib/media/picker'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {usePalette} from 'lib/hooks/usePalette'
 import {
-  usePhotoLibraryPermission,
   useCameraPermission,
+  usePhotoLibraryPermission,
 } from 'lib/hooks/usePermissions'
 import {colors} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {isWeb, isAndroid, isNative} from 'platform/detection'
-import {UserPreviewLink} from './UserPreviewLink'
-import * as Menu from '#/components/Menu'
+import {isAndroid, isNative, isWeb} from 'platform/detection'
+import React, {memo, useMemo} from 'react'
+import {Image, StyleSheet, TouchableOpacity, View} from 'react-native'
+import {Image as RNImage} from 'react-native-image-crop-picker'
+import Svg, {Circle, Path, Rect} from 'react-native-svg'
+import {HighPriorityImage} from 'view/com/util/images/Image'
+
+import {useTheme} from '#/alf'
 import {
-  Camera_Stroke2_Corner0_Rounded as Camera,
   Camera_Filled_Stroke2_Corner0_Rounded as CameraFilled,
+  Camera_Stroke2_Corner0_Rounded as Camera,
 } from '#/components/icons/Camera'
 import {StreamingLive_Stroke2_Corner0_Rounded as Library} from '#/components/icons/StreamingLive'
 import {Trash_Stroke2_Corner0_Rounded as Trash} from '#/components/icons/Trash'
-import {useTheme} from '#/alf'
+import * as Menu from '#/components/Menu'
+
+import {openCamera, openCropper, openPicker} from '../../../lib/media/picker'
+import {UserPreviewLink} from './UserPreviewLink'
 
 export type UserAvatarType = 'user' | 'algo' | 'list'
 
diff --git a/src/view/com/util/UserBanner.tsx b/src/view/com/util/UserBanner.tsx
index a5ddfee8a..6eb0ccc12 100644
--- a/src/view/com/util/UserBanner.tsx
+++ b/src/view/com/util/UserBanner.tsx
@@ -1,29 +1,30 @@
-import React from 'react'
-import {StyleSheet, TouchableOpacity, View} from 'react-native'
 import {ModerationUI} from '@atproto/api'
-import {Image} from 'expo-image'
-import {useLingui} from '@lingui/react'
 import {msg, Trans} from '@lingui/macro'
-
-import {colors} from 'lib/styles'
-import {useTheme} from 'lib/ThemeContext'
-import {useTheme as useAlfTheme} from '#/alf'
-import {openCamera, openCropper, openPicker} from '../../../lib/media/picker'
+import {useLingui} from '@lingui/react'
+import {Image} from 'expo-image'
+import {usePalette} from 'lib/hooks/usePalette'
 import {
-  usePhotoLibraryPermission,
   useCameraPermission,
+  usePhotoLibraryPermission,
 } from 'lib/hooks/usePermissions'
-import {usePalette} from 'lib/hooks/usePalette'
+import {colors} from 'lib/styles'
+import {useTheme} from 'lib/ThemeContext'
 import {isAndroid, isNative} from 'platform/detection'
+import React from 'react'
+import {StyleSheet, TouchableOpacity, View} from 'react-native'
 import {Image as RNImage} from 'react-native-image-crop-picker'
 import {EventStopper} from 'view/com/util/EventStopper'
-import * as Menu from '#/components/Menu'
+
+import {useTheme as useAlfTheme} from '#/alf'
 import {
   Camera_Filled_Stroke2_Corner0_Rounded as CameraFilled,
   Camera_Stroke2_Corner0_Rounded as Camera,
 } from '#/components/icons/Camera'
 import {StreamingLive_Stroke2_Corner0_Rounded as Library} from '#/components/icons/StreamingLive'
 import {Trash_Stroke2_Corner0_Rounded as Trash} from '#/components/icons/Trash'
+import * as Menu from '#/components/Menu'
+
+import {openCamera, openCropper, openPicker} from '../../../lib/media/picker'
 
 export function UserBanner({
   banner,
diff --git a/src/view/com/util/UserInfoText.tsx b/src/view/com/util/UserInfoText.tsx
index 9cb9997f6..ab937c664 100644
--- a/src/view/com/util/UserInfoText.tsx
+++ b/src/view/com/util/UserInfoText.tsx
@@ -1,15 +1,17 @@
-import React from 'react'
 import {AppBskyActorGetProfile as GetProfile} from '@atproto/api'
-import {StyleProp, StyleSheet, TextStyle} from 'react-native'
-import {TextLinkOnWebOnly} from './Link'
-import {Text} from './text/Text'
-import {LoadingPlaceholder} from './LoadingPlaceholder'
-import {TypographyVariant} from 'lib/ThemeContext'
+import {makeProfileLink} from 'lib/routes/links'
 import {sanitizeDisplayName} from 'lib/strings/display-names'
 import {sanitizeHandle} from 'lib/strings/handles'
-import {makeProfileLink} from 'lib/routes/links'
-import {useProfileQuery} from '#/state/queries/profile'
+import {TypographyVariant} from 'lib/ThemeContext'
+import React from 'react'
+import {StyleProp, StyleSheet, TextStyle} from 'react-native'
+
 import {STALE} from '#/state/queries'
+import {useProfileQuery} from '#/state/queries/profile'
+
+import {TextLinkOnWebOnly} from './Link'
+import {LoadingPlaceholder} from './LoadingPlaceholder'
+import {Text} from './text/Text'
 
 export function UserInfoText({
   type = 'md',
diff --git a/src/view/com/util/UserPreviewLink.tsx b/src/view/com/util/UserPreviewLink.tsx
index a2c46afc0..09d230000 100644
--- a/src/view/com/util/UserPreviewLink.tsx
+++ b/src/view/com/util/UserPreviewLink.tsx
@@ -1,10 +1,12 @@
+import {makeProfileLink} from 'lib/routes/links'
+import {isWeb} from 'platform/detection'
 import React from 'react'
 import {StyleProp, ViewStyle} from 'react-native'
-import {Link} from './Link'
-import {isWeb} from 'platform/detection'
-import {makeProfileLink} from 'lib/routes/links'
+
 import {usePrefetchProfileQuery} from '#/state/queries/profile'
 
+import {Link} from './Link'
+
 interface UserPreviewLinkProps {
   did: string
   handle: string
diff --git a/src/view/com/util/ViewHeader.tsx b/src/view/com/util/ViewHeader.tsx
index 872e10eef..3ac757269 100644
--- a/src/view/com/util/ViewHeader.tsx
+++ b/src/view/com/util/ViewHeader.tsx
@@ -1,19 +1,21 @@
-import React from 'react'
-import {StyleSheet, TouchableOpacity, View} from 'react-native'
 import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
 import {useNavigation} from '@react-navigation/native'
-import {CenteredView} from './Views'
-import {Text} from './text/Text'
+import {useAnalytics} from 'lib/analytics/analytics'
+import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode'
 import {usePalette} from 'lib/hooks/usePalette'
 import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {useAnalytics} from 'lib/analytics/analytics'
 import {NavigationProp} from 'lib/routes/types'
-import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode'
+import React from 'react'
+import {StyleSheet, TouchableOpacity, View} from 'react-native'
 import Animated from 'react-native-reanimated'
-import {useSetDrawerOpen} from '#/state/shell'
-import {msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
+
 import {useTheme} from '#/alf'
+import {useSetDrawerOpen} from '#/state/shell'
+
+import {Text} from './text/Text'
+import {CenteredView} from './Views'
 
 const BACK_HITSLOP = {left: 20, top: 20, right: 50, bottom: 20}
 
diff --git a/src/view/com/util/ViewSelector.tsx b/src/view/com/util/ViewSelector.tsx
index ee993c564..380028334 100644
--- a/src/view/com/util/ViewSelector.tsx
+++ b/src/view/com/util/ViewSelector.tsx
@@ -1,20 +1,21 @@
+import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
+import {usePalette} from 'lib/hooks/usePalette'
+import {clamp} from 'lib/numbers'
+import {colors, s} from 'lib/styles'
+import {isAndroid} from 'platform/detection'
 import React, {useEffect, useState} from 'react'
 import {
-  NativeSyntheticEvent,
   NativeScrollEvent,
+  NativeSyntheticEvent,
   Pressable,
   RefreshControl,
+  ScrollView,
   StyleSheet,
   View,
-  ScrollView,
 } from 'react-native'
-import {FlatList_INTERNAL} from './Views'
-import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
+
 import {Text} from './text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
-import {clamp} from 'lib/numbers'
-import {s, colors} from 'lib/styles'
-import {isAndroid} from 'platform/detection'
+import {FlatList_INTERNAL} from './Views'
 
 const HEADER_ITEM = {_reactKey: '__header__'}
 const SELECTOR_ITEM = {_reactKey: '__selector__'}
diff --git a/src/view/com/util/Views.web.tsx b/src/view/com/util/Views.web.tsx
index ae165077c..db023a32c 100644
--- a/src/view/com/util/Views.web.tsx
+++ b/src/view/com/util/Views.web.tsx
@@ -12,6 +12,9 @@
  * need to match layout but which aren't scrolled.
  */
 
+import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {addStyle} from 'lib/styles'
 import React from 'react'
 import {
   FlatListProps,
@@ -20,9 +23,6 @@ import {
   View,
   ViewProps,
 } from 'react-native'
-import {addStyle} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
 import Animated from 'react-native-reanimated'
 
 interface AddedProps {
diff --git a/src/view/com/util/anim/TriggerableAnimated.tsx b/src/view/com/util/anim/TriggerableAnimated.tsx
index eedeeda03..bb88035d7 100644
--- a/src/view/com/util/anim/TriggerableAnimated.tsx
+++ b/src/view/com/util/anim/TriggerableAnimated.tsx
@@ -1,6 +1,6 @@
+import {useAnimatedValue} from 'lib/hooks/useAnimatedValue'
 import React from 'react'
 import {Animated, StyleProp, View, ViewStyle} from 'react-native'
-import {useAnimatedValue} from 'lib/hooks/useAnimatedValue'
 
 type CreateAnimFn = (interp: Animated.Value) => Animated.CompositeAnimation
 type FinishCb = () => void
diff --git a/src/view/com/util/error/ErrorMessage.tsx b/src/view/com/util/error/ErrorMessage.tsx
index a4238b8a4..5418a0204 100644
--- a/src/view/com/util/error/ErrorMessage.tsx
+++ b/src/view/com/util/error/ErrorMessage.tsx
@@ -1,20 +1,21 @@
+import {
+  FontAwesomeIcon,
+  FontAwesomeIconStyle,
+} from '@fortawesome/react-native-fontawesome'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useTheme} from 'lib/ThemeContext'
 import React from 'react'
 import {
+  StyleProp,
   StyleSheet,
   TouchableOpacity,
-  StyleProp,
   View,
   ViewStyle,
 } from 'react-native'
-import {
-  FontAwesomeIcon,
-  FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
+
 import {Text} from '../text/Text'
-import {useTheme} from 'lib/ThemeContext'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useLingui} from '@lingui/react'
-import {msg} from '@lingui/macro'
 
 export function ErrorMessage({
   message,
diff --git a/src/view/com/util/error/ErrorScreen.tsx b/src/view/com/util/error/ErrorScreen.tsx
index 98fe6437b..f3c4a7a3b 100644
--- a/src/view/com/util/error/ErrorScreen.tsx
+++ b/src/view/com/util/error/ErrorScreen.tsx
@@ -1,18 +1,19 @@
-import React from 'react'
-import {StyleSheet, View} from 'react-native'
 import {
   FontAwesomeIcon,
   FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
-import {Text} from '../text/Text'
-import {useTheme} from 'lib/ThemeContext'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
 import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {useTheme} from 'lib/ThemeContext'
+import React from 'react'
+import {StyleSheet, View} from 'react-native'
+import {ViewHeader} from 'view/com/util/ViewHeader'
+
 import {Button} from '../forms/Button'
+import {Text} from '../text/Text'
 import {CenteredView} from '../Views'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {ViewHeader} from 'view/com/util/ViewHeader'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
 
 export function ErrorScreen({
   title,
diff --git a/src/view/com/util/fab/FAB.web.tsx b/src/view/com/util/fab/FAB.web.tsx
index 0a8831fa9..cbe1adfd3 100644
--- a/src/view/com/util/fab/FAB.web.tsx
+++ b/src/view/com/util/fab/FAB.web.tsx
@@ -1,7 +1,8 @@
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
 import React from 'react'
 import {View} from 'react-native'
+
 import {FABInner, FABProps} from './FABInner'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
 
 export const FAB = (_opts: FABProps) => {
   const {isDesktop} = useWebMediaQueries()
diff --git a/src/view/com/util/fab/FABInner.tsx b/src/view/com/util/fab/FABInner.tsx
index 27a16117b..15e3262ae 100644
--- a/src/view/com/util/fab/FABInner.tsx
+++ b/src/view/com/util/fab/FABInner.tsx
@@ -1,13 +1,14 @@
+import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {clamp} from 'lib/numbers'
+import {gradients} from 'lib/styles'
 import React, {ComponentProps} from 'react'
 import {StyleSheet, TouchableWithoutFeedback} from 'react-native'
 import LinearGradient from 'react-native-linear-gradient'
-import {gradients} from 'lib/styles'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import Animated from 'react-native-reanimated'
 import {useSafeAreaInsets} from 'react-native-safe-area-context'
-import {clamp} from 'lib/numbers'
-import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode'
+
 import {isWeb} from '#/platform/detection'
-import Animated from 'react-native-reanimated'
 
 export interface FABProps
   extends ComponentProps<typeof TouchableWithoutFeedback> {
diff --git a/src/view/com/util/forms/Button.tsx b/src/view/com/util/forms/Button.tsx
index e6e05bb04..62d49c00b 100644
--- a/src/view/com/util/forms/Button.tsx
+++ b/src/view/com/util/forms/Button.tsx
@@ -1,20 +1,21 @@
+import {choose} from 'lib/functions'
+import {useTheme} from 'lib/ThemeContext'
 import React from 'react'
 import {
+  ActivityIndicator,
   GestureResponderEvent,
+  NativeSyntheticEvent,
+  NativeTouchEvent,
+  Pressable,
+  PressableStateCallbackType,
   StyleProp,
   StyleSheet,
   TextStyle,
-  Pressable,
-  ViewStyle,
-  PressableStateCallbackType,
-  ActivityIndicator,
   View,
-  NativeSyntheticEvent,
-  NativeTouchEvent,
+  ViewStyle,
 } from 'react-native'
+
 import {Text} from '../text/Text'
-import {useTheme} from 'lib/ThemeContext'
-import {choose} from 'lib/functions'
 
 export type ButtonType =
   | 'primary'
diff --git a/src/view/com/util/forms/DateInput.tsx b/src/view/com/util/forms/DateInput.tsx
index 0104562aa..8a813049a 100644
--- a/src/view/com/util/forms/DateInput.tsx
+++ b/src/view/com/util/forms/DateInput.tsx
@@ -1,18 +1,19 @@
-import React, {useState, useCallback} from 'react'
-import {StyleProp, StyleSheet, TextStyle, View, ViewStyle} from 'react-native'
 import {
   FontAwesomeIcon,
   FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
-import {isIOS, isAndroid} from 'platform/detection'
-import {Button, ButtonType} from './Button'
-import {Text} from '../text/Text'
+import {getLocales} from 'expo-localization'
+import {usePalette} from 'lib/hooks/usePalette'
 import {TypographyVariant} from 'lib/ThemeContext'
 import {useTheme} from 'lib/ThemeContext'
-import {usePalette} from 'lib/hooks/usePalette'
-import {getLocales} from 'expo-localization'
+import {isAndroid, isIOS} from 'platform/detection'
+import React, {useCallback, useState} from 'react'
+import {StyleProp, StyleSheet, TextStyle, View, ViewStyle} from 'react-native'
 import DatePicker from 'react-native-date-picker'
 
+import {Text} from '../text/Text'
+import {Button, ButtonType} from './Button'
+
 const LOCALE = getLocales()[0]
 
 interface Props {
diff --git a/src/view/com/util/forms/DateInput.web.tsx b/src/view/com/util/forms/DateInput.web.tsx
index 8d74f6dae..ff1ed58b7 100644
--- a/src/view/com/util/forms/DateInput.web.tsx
+++ b/src/view/com/util/forms/DateInput.web.tsx
@@ -1,8 +1,8 @@
-import React, {useState, useCallback} from 'react'
+import {usePalette} from 'lib/hooks/usePalette'
+import React, {useCallback, useState} from 'react'
 import {StyleProp, StyleSheet, TextStyle, View, ViewStyle} from 'react-native'
 // @ts-ignore types not available -prf
 import {unstable_createElement} from 'react-native-web'
-import {usePalette} from 'lib/hooks/usePalette'
 
 interface Props {
   testID?: string
diff --git a/src/view/com/util/forms/DropdownButton.tsx b/src/view/com/util/forms/DropdownButton.tsx
index 2285b0615..f12f1d09c 100644
--- a/src/view/com/util/forms/DropdownButton.tsx
+++ b/src/view/com/util/forms/DropdownButton.tsx
@@ -1,3 +1,12 @@
+import {IconProp} from '@fortawesome/fontawesome-svg-core'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {HITSLOP_10} from 'lib/constants'
+import {usePalette} from 'lib/hooks/usePalette'
+import {colors} from 'lib/styles'
+import {useTheme} from 'lib/ThemeContext'
+import {isWeb} from 'platform/detection'
 import React, {PropsWithChildren, useMemo, useRef} from 'react'
 import {
   Dimensions,
@@ -10,18 +19,10 @@ import {
   View,
   ViewStyle,
 } from 'react-native'
-import {IconProp} from '@fortawesome/fontawesome-svg-core'
 import RootSiblings from 'react-native-root-siblings'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+
 import {Text} from '../text/Text'
 import {Button, ButtonType} from './Button'
-import {colors} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useTheme} from 'lib/ThemeContext'
-import {HITSLOP_10} from 'lib/constants'
-import {useLingui} from '@lingui/react'
-import {msg} from '@lingui/macro'
-import {isWeb} from 'platform/detection'
 
 const ESTIMATED_BTN_HEIGHT = 50
 const ESTIMATED_SEP_HEIGHT = 16
diff --git a/src/view/com/util/forms/NativeDropdown.tsx b/src/view/com/util/forms/NativeDropdown.tsx
index 0a47569f2..62f830c43 100644
--- a/src/view/com/util/forms/NativeDropdown.tsx
+++ b/src/view/com/util/forms/NativeDropdown.tsx
@@ -1,13 +1,13 @@
-import React from 'react'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import * as DropdownMenu from 'zeego/dropdown-menu'
-import {Pressable, StyleSheet, Platform, View, ViewStyle} from 'react-native'
 import {IconProp} from '@fortawesome/fontawesome-svg-core'
-import {MenuItemCommonProps} from 'zeego/lib/typescript/menu'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {HITSLOP_10} from 'lib/constants'
 import {usePalette} from 'lib/hooks/usePalette'
-import {isWeb} from 'platform/detection'
 import {useTheme} from 'lib/ThemeContext'
-import {HITSLOP_10} from 'lib/constants'
+import {isWeb} from 'platform/detection'
+import React from 'react'
+import {Platform, Pressable, StyleSheet, View, ViewStyle} from 'react-native'
+import * as DropdownMenu from 'zeego/dropdown-menu'
+import {MenuItemCommonProps} from 'zeego/lib/typescript/menu'
 
 // Custom Dropdown Menu Components
 // ==
diff --git a/src/view/com/util/forms/NativeDropdown.web.tsx b/src/view/com/util/forms/NativeDropdown.web.tsx
index 6abeb16cc..10a005446 100644
--- a/src/view/com/util/forms/NativeDropdown.web.tsx
+++ b/src/view/com/util/forms/NativeDropdown.web.tsx
@@ -1,12 +1,12 @@
-import React from 'react'
+import {IconProp} from '@fortawesome/fontawesome-svg-core'
 import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
 import * as DropdownMenu from '@radix-ui/react-dropdown-menu'
-import {Pressable, StyleSheet, View, Text, ViewStyle} from 'react-native'
-import {IconProp} from '@fortawesome/fontawesome-svg-core'
-import {MenuItemCommonProps} from 'zeego/lib/typescript/menu'
+import {HITSLOP_10} from 'lib/constants'
 import {usePalette} from 'lib/hooks/usePalette'
 import {useTheme} from 'lib/ThemeContext'
-import {HITSLOP_10} from 'lib/constants'
+import React from 'react'
+import {Pressable, StyleSheet, Text, View, ViewStyle} from 'react-native'
+import {MenuItemCommonProps} from 'zeego/lib/typescript/menu'
 
 // Custom Dropdown Menu Components
 // ==
diff --git a/src/view/com/util/forms/PostDropdownBtn.tsx b/src/view/com/util/forms/PostDropdownBtn.tsx
index 3c1a736f3..9727fc21f 100644
--- a/src/view/com/util/forms/PostDropdownBtn.tsx
+++ b/src/view/com/util/forms/PostDropdownBtn.tsx
@@ -1,49 +1,50 @@
-import React, {memo} from 'react'
-import {StyleProp, ViewStyle, Pressable, PressableProps} from 'react-native'
-import Clipboard from '@react-native-clipboard/clipboard'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {useNavigation} from '@react-navigation/native'
 import {
   AppBskyActorDefs,
   AppBskyFeedPost,
   AtUri,
   RichText as RichTextAPI,
 } from '@atproto/api'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import Clipboard from '@react-native-clipboard/clipboard'
+import {useNavigation} from '@react-navigation/native'
+import {getCurrentRoute} from 'lib/routes/helpers'
+import {shareUrl} from 'lib/sharing'
 import {toShareUrl} from 'lib/strings/url-helpers'
 import {useTheme} from 'lib/ThemeContext'
-import {shareUrl} from 'lib/sharing'
-import * as Toast from '../Toast'
-import {EventStopper} from '../EventStopper'
-import {useModalControls} from '#/state/modals'
+import React, {memo} from 'react'
+import {Pressable, PressableProps, StyleProp, ViewStyle} from 'react-native'
+
+import {atoms as a, useTheme as useAlf} from '#/alf'
+import {useGlobalDialogsControlContext} from '#/components/dialogs/Context'
+import {ArrowOutOfBox_Stroke2_Corner0_Rounded as Share} from '#/components/icons/ArrowOutOfBox'
+import {BubbleQuestion_Stroke2_Corner0_Rounded as Translate} from '#/components/icons/Bubble'
+import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
+import {Clipboard_Stroke2_Corner2_Rounded as ClipboardIcon} from '#/components/icons/Clipboard'
+import {EyeSlash_Stroke2_Corner0_Rounded as EyeSlash} from '#/components/icons/EyeSlash'
+import {Filter_Stroke2_Corner0_Rounded as Filter} from '#/components/icons/Filter'
+import {Mute_Stroke2_Corner0_Rounded as Mute} from '#/components/icons/Mute'
+import {SpeakerVolumeFull_Stroke2_Corner0_Rounded as Unmute} from '#/components/icons/Speaker'
+import {Trash_Stroke2_Corner0_Rounded as Trash} from '#/components/icons/Trash'
+import {Warning_Stroke2_Corner0_Rounded as Warning} from '#/components/icons/Warning'
+import * as Menu from '#/components/Menu'
 import {makeProfileLink} from '#/lib/routes/links'
 import {CommonNavigatorParams} from '#/lib/routes/types'
-import {getCurrentRoute} from 'lib/routes/helpers'
+import {richTextToString} from '#/lib/strings/rich-text-helpers'
 import {getTranslatorLink} from '#/locale/helpers'
-import {usePostDeleteMutation} from '#/state/queries/post'
+import {logger} from '#/logger'
+import {isWeb} from '#/platform/detection'
+import {useModalControls} from '#/state/modals'
 import {useMutedThreads, useToggleThreadMute} from '#/state/muted-threads'
 import {useLanguagePrefs} from '#/state/preferences'
 import {useHiddenPosts, useHiddenPostsApi} from '#/state/preferences'
 import {useOpenLink} from '#/state/preferences/in-app-browser'
-import {logger} from '#/logger'
-import {msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
+import {usePostDeleteMutation} from '#/state/queries/post'
 import {useSession} from '#/state/session'
-import {isWeb} from '#/platform/detection'
-import {richTextToString} from '#/lib/strings/rich-text-helpers'
-import {useGlobalDialogsControlContext} from '#/components/dialogs/Context'
 
-import {atoms as a, useTheme as useAlf} from '#/alf'
-import * as Menu from '#/components/Menu'
-import {Clipboard_Stroke2_Corner2_Rounded as ClipboardIcon} from '#/components/icons/Clipboard'
-import {Filter_Stroke2_Corner0_Rounded as Filter} from '#/components/icons/Filter'
-import {ArrowOutOfBox_Stroke2_Corner0_Rounded as Share} from '#/components/icons/ArrowOutOfBox'
-import {EyeSlash_Stroke2_Corner0_Rounded as EyeSlash} from '#/components/icons/EyeSlash'
-import {Mute_Stroke2_Corner0_Rounded as Mute} from '#/components/icons/Mute'
-import {SpeakerVolumeFull_Stroke2_Corner0_Rounded as Unmute} from '#/components/icons/Speaker'
-import {BubbleQuestion_Stroke2_Corner0_Rounded as Translate} from '#/components/icons/Bubble'
-import {Warning_Stroke2_Corner0_Rounded as Warning} from '#/components/icons/Warning'
-import {Trash_Stroke2_Corner0_Rounded as Trash} from '#/components/icons/Trash'
-import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
+import {EventStopper} from '../EventStopper'
+import * as Toast from '../Toast'
 
 let PostDropdownBtn = ({
   testID,
diff --git a/src/view/com/util/forms/RadioButton.tsx b/src/view/com/util/forms/RadioButton.tsx
index 9d1cb4749..696a0c00a 100644
--- a/src/view/com/util/forms/RadioButton.tsx
+++ b/src/view/com/util/forms/RadioButton.tsx
@@ -1,9 +1,10 @@
+import {choose} from 'lib/functions'
+import {useTheme} from 'lib/ThemeContext'
 import React from 'react'
 import {StyleProp, StyleSheet, TextStyle, View, ViewStyle} from 'react-native'
+
 import {Text} from '../text/Text'
 import {Button, ButtonType} from './Button'
-import {useTheme} from 'lib/ThemeContext'
-import {choose} from 'lib/functions'
 
 export function RadioButton({
   testID,
diff --git a/src/view/com/util/forms/RadioGroup.tsx b/src/view/com/util/forms/RadioGroup.tsx
index 14599e649..abd1f5589 100644
--- a/src/view/com/util/forms/RadioGroup.tsx
+++ b/src/view/com/util/forms/RadioGroup.tsx
@@ -1,8 +1,9 @@
+import {s} from 'lib/styles'
 import React, {useState} from 'react'
 import {View} from 'react-native'
-import {RadioButton} from './RadioButton'
+
 import {ButtonType} from './Button'
-import {s} from 'lib/styles'
+import {RadioButton} from './RadioButton'
 
 export interface RadioGroupItem {
   label: string | JSX.Element
diff --git a/src/view/com/util/forms/SearchInput.tsx b/src/view/com/util/forms/SearchInput.tsx
index 5a21d8fdd..ff8b6bbdd 100644
--- a/src/view/com/util/forms/SearchInput.tsx
+++ b/src/view/com/util/forms/SearchInput.tsx
@@ -1,3 +1,13 @@
+import {
+  FontAwesomeIcon,
+  FontAwesomeIconStyle,
+} from '@fortawesome/react-native-fontawesome'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {HITSLOP_10} from 'lib/constants'
+import {usePalette} from 'lib/hooks/usePalette'
+import {MagnifyingGlassIcon} from 'lib/icons'
+import {useTheme} from 'lib/ThemeContext'
 import React from 'react'
 import {
   StyleProp,
@@ -7,16 +17,6 @@ import {
   View,
   ViewStyle,
 } from 'react-native'
-import {
-  FontAwesomeIcon,
-  FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
-import {HITSLOP_10} from 'lib/constants'
-import {MagnifyingGlassIcon} from 'lib/icons'
-import {useTheme} from 'lib/ThemeContext'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useLingui} from '@lingui/react'
-import {msg} from '@lingui/macro'
 
 interface Props {
   query: string
diff --git a/src/view/com/util/forms/SelectableBtn.tsx b/src/view/com/util/forms/SelectableBtn.tsx
index e577e155d..94eb049d2 100644
--- a/src/view/com/util/forms/SelectableBtn.tsx
+++ b/src/view/com/util/forms/SelectableBtn.tsx
@@ -1,8 +1,9 @@
-import React from 'react'
-import {Pressable, ViewStyle, StyleProp, StyleSheet} from 'react-native'
-import {Text} from '../text/Text'
 import {usePalette} from 'lib/hooks/usePalette'
 import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import React from 'react'
+import {Pressable, StyleProp, StyleSheet, ViewStyle} from 'react-native'
+
+import {Text} from '../text/Text'
 
 interface SelectableBtnProps {
   testID?: string
diff --git a/src/view/com/util/forms/ToggleButton.tsx b/src/view/com/util/forms/ToggleButton.tsx
index c98e846cd..e40218b80 100644
--- a/src/view/com/util/forms/ToggleButton.tsx
+++ b/src/view/com/util/forms/ToggleButton.tsx
@@ -1,11 +1,12 @@
+import {choose} from 'lib/functions'
+import {colors} from 'lib/styles'
+import {useTheme} from 'lib/ThemeContext'
+import {TypographyVariant} from 'lib/ThemeContext'
 import React from 'react'
 import {StyleProp, StyleSheet, TextStyle, View, ViewStyle} from 'react-native'
+
 import {Text} from '../text/Text'
 import {Button, ButtonType} from './Button'
-import {useTheme} from 'lib/ThemeContext'
-import {choose} from 'lib/functions'
-import {colors} from 'lib/styles'
-import {TypographyVariant} from 'lib/ThemeContext'
 
 export function ToggleButton({
   testID,
diff --git a/src/view/com/util/images/AutoSizedImage.tsx b/src/view/com/util/images/AutoSizedImage.tsx
index 61cb6f69f..2b52b103d 100644
--- a/src/view/com/util/images/AutoSizedImage.tsx
+++ b/src/view/com/util/images/AutoSizedImage.tsx
@@ -1,11 +1,11 @@
-import React from 'react'
-import {StyleProp, StyleSheet, Pressable, View, ViewStyle} from 'react-native'
-import {Image} from 'expo-image'
-import {clamp} from 'lib/numbers'
-import {Dimensions} from 'lib/media/types'
-import * as imageSizes from 'lib/media/image-sizes'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
+import {Image} from 'expo-image'
+import * as imageSizes from 'lib/media/image-sizes'
+import {Dimensions} from 'lib/media/types'
+import {clamp} from 'lib/numbers'
+import React from 'react'
+import {Pressable, StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
 
 const MIN_ASPECT_RATIO = 0.33 // 1/3
 const MAX_ASPECT_RATIO = 10 // 10/1
diff --git a/src/view/com/util/images/Gallery.tsx b/src/view/com/util/images/Gallery.tsx
index 7de3b093a..b5bc39498 100644
--- a/src/view/com/util/images/Gallery.tsx
+++ b/src/view/com/util/images/Gallery.tsx
@@ -1,10 +1,10 @@
 import {AppBskyEmbedImages} from '@atproto/api'
-import React, {ComponentProps, FC} from 'react'
-import {StyleSheet, Text, Pressable, View} from 'react-native'
-import {Image} from 'expo-image'
 import {msg} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
+import {Image} from 'expo-image'
 import {isWeb} from 'platform/detection'
+import React, {ComponentProps, FC} from 'react'
+import {Pressable, StyleSheet, Text, View} from 'react-native'
 
 type EventFunction = (index: number) => void
 
diff --git a/src/view/com/util/images/Image.tsx b/src/view/com/util/images/Image.tsx
index e779fa378..fbdcfebbf 100644
--- a/src/view/com/util/images/Image.tsx
+++ b/src/view/com/util/images/Image.tsx
@@ -1,5 +1,5 @@
-import React from 'react'
 import {Image, ImageProps, ImageSource} from 'expo-image'
+import React from 'react'
 
 interface HighPriorityImageProps extends ImageProps {
   source: ImageSource
diff --git a/src/view/com/util/images/Image.web.tsx b/src/view/com/util/images/Image.web.tsx
index ecd9d730a..eeaf16b9a 100644
--- a/src/view/com/util/images/Image.web.tsx
+++ b/src/view/com/util/images/Image.web.tsx
@@ -1,8 +1,8 @@
 import {
   Image,
-  NativeSyntheticEvent,
   ImageLoadEventData,
   ImageSourcePropType,
+  NativeSyntheticEvent,
 } from 'react-native'
 export default Image
 export const HighPriorityImage = Image
diff --git a/src/view/com/util/images/ImageHorzList.tsx b/src/view/com/util/images/ImageHorzList.tsx
index e37f8af1b..a93fa195c 100644
--- a/src/view/com/util/images/ImageHorzList.tsx
+++ b/src/view/com/util/images/ImageHorzList.tsx
@@ -1,7 +1,7 @@
+import {AppBskyEmbedImages} from '@atproto/api'
+import {Image} from 'expo-image'
 import React from 'react'
 import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
-import {Image} from 'expo-image'
-import {AppBskyEmbedImages} from '@atproto/api'
 
 interface Props {
   images: AppBskyEmbedImages.ViewImage[]
diff --git a/src/view/com/util/images/ImageLayoutGrid.tsx b/src/view/com/util/images/ImageLayoutGrid.tsx
index ba6c04f50..fe2a409b2 100644
--- a/src/view/com/util/images/ImageLayoutGrid.tsx
+++ b/src/view/com/util/images/ImageLayoutGrid.tsx
@@ -1,8 +1,9 @@
+import {AppBskyEmbedImages} from '@atproto/api'
+import {isWeb} from 'platform/detection'
 import React from 'react'
 import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
-import {AppBskyEmbedImages} from '@atproto/api'
+
 import {GalleryItem} from './Gallery'
-import {isWeb} from 'platform/detection'
 
 interface ImageLayoutGridProps {
   images: AppBskyEmbedImages.ViewImage[]
diff --git a/src/view/com/util/layouts/LoggedOutLayout.tsx b/src/view/com/util/layouts/LoggedOutLayout.tsx
index 9424a7154..1032c1f14 100644
--- a/src/view/com/util/layouts/LoggedOutLayout.tsx
+++ b/src/view/com/util/layouts/LoggedOutLayout.tsx
@@ -1,9 +1,10 @@
+import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
 import React from 'react'
 import {StyleSheet, View} from 'react-native'
+
 import {Text} from '../text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
 
 export const LoggedOutLayout = ({
   leadin,
diff --git a/src/view/com/util/layouts/TitleColumnLayout.tsx b/src/view/com/util/layouts/TitleColumnLayout.tsx
index 49ad9fcdb..3033d7f42 100644
--- a/src/view/com/util/layouts/TitleColumnLayout.tsx
+++ b/src/view/com/util/layouts/TitleColumnLayout.tsx
@@ -1,7 +1,7 @@
+import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
+import {usePalette} from 'lib/hooks/usePalette'
 import React from 'react'
 import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
 
 interface Props {
   testID?: string
diff --git a/src/view/com/util/layouts/withBreakpoints.tsx b/src/view/com/util/layouts/withBreakpoints.tsx
index 5746aa660..de649e55c 100644
--- a/src/view/com/util/layouts/withBreakpoints.tsx
+++ b/src/view/com/util/layouts/withBreakpoints.tsx
@@ -1,6 +1,6 @@
-import React from 'react'
-import {isNative} from 'platform/detection'
 import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {isNative} from 'platform/detection'
+import React from 'react'
 
 export const withBreakpoints = <P extends object>(
   Mobile: React.ComponentType<P>,
diff --git a/src/view/com/util/load-latest/LoadLatestBtn.tsx b/src/view/com/util/load-latest/LoadLatestBtn.tsx
index f02e4a2bd..4cc30432d 100644
--- a/src/view/com/util/load-latest/LoadLatestBtn.tsx
+++ b/src/view/com/util/load-latest/LoadLatestBtn.tsx
@@ -1,13 +1,13 @@
-import React from 'react'
-import {StyleSheet, TouchableOpacity, View} from 'react-native'
 import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import Animated from 'react-native-reanimated'
-import {useMediaQuery} from 'react-responsive'
+import {HITSLOP_20} from 'lib/constants'
+import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode'
 import {usePalette} from 'lib/hooks/usePalette'
 import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
 import {colors} from 'lib/styles'
-import {HITSLOP_20} from 'lib/constants'
-import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode'
+import React from 'react'
+import {StyleSheet, TouchableOpacity, View} from 'react-native'
+import Animated from 'react-native-reanimated'
+import {useMediaQuery} from 'react-responsive'
 const AnimatedTouchableOpacity =
   Animated.createAnimatedComponent(TouchableOpacity)
 import {isWeb} from 'platform/detection'
diff --git a/src/view/com/util/moderation/ContentHider.tsx b/src/view/com/util/moderation/ContentHider.tsx
index cd2545290..8d4978d22 100644
--- a/src/view/com/util/moderation/ContentHider.tsx
+++ b/src/view/com/util/moderation/ContentHider.tsx
@@ -1,15 +1,17 @@
-import React from 'react'
-import {Pressable, StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
+import {ModerationUI, PostModeration} from '@atproto/api'
 import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
 import {usePalette} from 'lib/hooks/usePalette'
-import {ModerationUI, PostModeration} from '@atproto/api'
-import {Text} from '../text/Text'
 import {ShieldExclamation} from 'lib/icons'
 import {describeModerationCause} from 'lib/moderation'
-import {useLingui} from '@lingui/react'
-import {msg, Trans} from '@lingui/macro'
-import {useModalControls} from '#/state/modals'
 import {isPostMediaBlurred} from 'lib/moderation'
+import React from 'react'
+import {Pressable, StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
+
+import {useModalControls} from '#/state/modals'
+
+import {Text} from '../text/Text'
 
 export function ContentHider({
   testID,
diff --git a/src/view/com/util/moderation/LabelInfo.tsx b/src/view/com/util/moderation/LabelInfo.tsx
index 970338752..55f8b2dab 100644
--- a/src/view/com/util/moderation/LabelInfo.tsx
+++ b/src/view/com/util/moderation/LabelInfo.tsx
@@ -1,12 +1,14 @@
-import React from 'react'
-import {Pressable, StyleProp, View, ViewStyle} from 'react-native'
 import {ComAtprotoLabelDefs} from '@atproto/api'
-import {Text} from '../text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
 import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
+import {usePalette} from 'lib/hooks/usePalette'
+import React from 'react'
+import {Pressable, StyleProp, View, ViewStyle} from 'react-native'
+
 import {useModalControls} from '#/state/modals'
 
+import {Text} from '../text/Text'
+
 export function LabelInfo({
   details,
   labels,
diff --git a/src/view/com/util/moderation/PostAlerts.tsx b/src/view/com/util/moderation/PostAlerts.tsx
index bc5bf9b32..135a99486 100644
--- a/src/view/com/util/moderation/PostAlerts.tsx
+++ b/src/view/com/util/moderation/PostAlerts.tsx
@@ -1,14 +1,16 @@
-import React from 'react'
-import {Pressable, StyleProp, StyleSheet, ViewStyle} from 'react-native'
 import {ModerationUI} from '@atproto/api'
-import {Text} from '../text/Text'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
 import {usePalette} from 'lib/hooks/usePalette'
 import {ShieldExclamation} from 'lib/icons'
 import {describeModerationCause} from 'lib/moderation'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
+import React from 'react'
+import {Pressable, StyleProp, StyleSheet, ViewStyle} from 'react-native'
+
 import {useModalControls} from '#/state/modals'
 
+import {Text} from '../text/Text'
+
 export function PostAlerts({
   moderation,
   style,
diff --git a/src/view/com/util/moderation/PostHider.tsx b/src/view/com/util/moderation/PostHider.tsx
index ede62e988..02d309a85 100644
--- a/src/view/com/util/moderation/PostHider.tsx
+++ b/src/view/com/util/moderation/PostHider.tsx
@@ -1,17 +1,19 @@
-import React, {ComponentProps} from 'react'
-import {StyleSheet, Pressable, View, ViewStyle, StyleProp} from 'react-native'
 import {ModerationUI} from '@atproto/api'
 import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
 import {usePalette} from 'lib/hooks/usePalette'
-import {Link} from '../Link'
-import {Text} from '../text/Text'
-import {addStyle} from 'lib/styles'
-import {describeModerationCause} from 'lib/moderation'
 import {ShieldExclamation} from 'lib/icons'
-import {useLingui} from '@lingui/react'
-import {Trans, msg} from '@lingui/macro'
+import {describeModerationCause} from 'lib/moderation'
+import {addStyle} from 'lib/styles'
+import React, {ComponentProps} from 'react'
+import {Pressable, StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
+
 import {useModalControls} from '#/state/modals'
 
+import {Link} from '../Link'
+import {Text} from '../text/Text'
+
 interface Props extends ComponentProps<typeof Link> {
   iconSize: number
   iconStyles: StyleProp<ViewStyle>
diff --git a/src/view/com/util/moderation/ProfileHeaderAlerts.tsx b/src/view/com/util/moderation/ProfileHeaderAlerts.tsx
index 0f07b679b..0d4660ebb 100644
--- a/src/view/com/util/moderation/ProfileHeaderAlerts.tsx
+++ b/src/view/com/util/moderation/ProfileHeaderAlerts.tsx
@@ -1,18 +1,20 @@
-import React from 'react'
-import {Pressable, StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
 import {ProfileModeration} from '@atproto/api'
-import {Text} from '../text/Text'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
 import {usePalette} from 'lib/hooks/usePalette'
 import {ShieldExclamation} from 'lib/icons'
 import {
   describeModerationCause,
   getProfileModerationCauses,
 } from 'lib/moderation'
-import {msg, Trans} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import React from 'react'
+import {Pressable, StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
+
 import {useModalControls} from '#/state/modals'
 
+import {Text} from '../text/Text'
+
 export function ProfileHeaderAlerts({
   moderation,
   style,
diff --git a/src/view/com/util/moderation/ScreenHider.tsx b/src/view/com/util/moderation/ScreenHider.tsx
index 86f0cbf7b..52e5e37a0 100644
--- a/src/view/com/util/moderation/ScreenHider.tsx
+++ b/src/view/com/util/moderation/ScreenHider.tsx
@@ -1,27 +1,29 @@
-import React from 'react'
-import {
-  TouchableWithoutFeedback,
-  StyleProp,
-  StyleSheet,
-  View,
-  ViewStyle,
-} from 'react-native'
+import {ModerationUI} from '@atproto/api'
 import {
   FontAwesomeIcon,
   FontAwesomeIconStyle,
 } from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
 import {useNavigation} from '@react-navigation/native'
-import {ModerationUI} from '@atproto/api'
 import {usePalette} from 'lib/hooks/usePalette'
 import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {NavigationProp} from 'lib/routes/types'
-import {Text} from '../text/Text'
-import {Button} from '../forms/Button'
 import {describeModerationCause} from 'lib/moderation'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useModalControls} from '#/state/modals'
+import {NavigationProp} from 'lib/routes/types'
+import React from 'react'
+import {
+  StyleProp,
+  StyleSheet,
+  TouchableWithoutFeedback,
+  View,
+  ViewStyle,
+} from 'react-native'
+
 import {s} from '#/lib/styles'
+import {useModalControls} from '#/state/modals'
+
+import {Button} from '../forms/Button'
+import {Text} from '../text/Text'
 import {CenteredView} from '../Views'
 
 export function ScreenHider({
diff --git a/src/view/com/util/post-ctrls/PostCtrls.tsx b/src/view/com/util/post-ctrls/PostCtrls.tsx
index 1e26eecce..d1340f6d2 100644
--- a/src/view/com/util/post-ctrls/PostCtrls.tsx
+++ b/src/view/com/util/post-ctrls/PostCtrls.tsx
@@ -1,40 +1,42 @@
-import React, {memo, useCallback} from 'react'
-import {
-  StyleProp,
-  StyleSheet,
-  TouchableOpacity,
-  View,
-  ViewStyle,
-} from 'react-native'
 import {
   AppBskyFeedDefs,
   AppBskyFeedPost,
   AtUri,
   RichText as RichTextAPI,
 } from '@atproto/api'
-import {Text} from '../text/Text'
-import {PostDropdownBtn} from '../forms/PostDropdownBtn'
-import {HeartIcon, HeartIconSolid, CommentBottomArrow} from 'lib/icons'
-import {s} from 'lib/styles'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {HITSLOP_10, HITSLOP_20} from 'lib/constants'
+import {Haptics} from 'lib/haptics'
+import {CommentBottomArrow, HeartIcon, HeartIconSolid} from 'lib/icons'
+import {makeProfileLink} from 'lib/routes/links'
+import {shareUrl} from 'lib/sharing'
 import {pluralize} from 'lib/strings/helpers'
+import {toShareUrl} from 'lib/strings/url-helpers'
+import {s} from 'lib/styles'
 import {useTheme} from 'lib/ThemeContext'
-import {RepostButton} from './RepostButton'
-import {Haptics} from 'lib/haptics'
-import {HITSLOP_10, HITSLOP_20} from 'lib/constants'
+import React, {memo, useCallback} from 'react'
+import {
+  StyleProp,
+  StyleSheet,
+  TouchableOpacity,
+  View,
+  ViewStyle,
+} from 'react-native'
+
+import {ArrowOutOfBox_Stroke2_Corner0_Rounded as ArrowOutOfBox} from '#/components/icons/ArrowOutOfBox'
+import {Shadow} from '#/state/cache/types'
 import {useModalControls} from '#/state/modals'
 import {
   usePostLikeMutationQueue,
   usePostRepostMutationQueue,
 } from '#/state/queries/post'
-import {useComposerControls} from '#/state/shell/composer'
-import {Shadow} from '#/state/cache/types'
 import {useRequireAuth} from '#/state/session'
-import {msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {ArrowOutOfBox_Stroke2_Corner0_Rounded as ArrowOutOfBox} from '#/components/icons/ArrowOutOfBox'
-import {toShareUrl} from 'lib/strings/url-helpers'
-import {shareUrl} from 'lib/sharing'
-import {makeProfileLink} from 'lib/routes/links'
+import {useComposerControls} from '#/state/shell/composer'
+
+import {PostDropdownBtn} from '../forms/PostDropdownBtn'
+import {Text} from '../text/Text'
+import {RepostButton} from './RepostButton'
 
 let PostCtrls = ({
   big,
diff --git a/src/view/com/util/post-ctrls/RepostButton.tsx b/src/view/com/util/post-ctrls/RepostButton.tsx
index cc3db50c8..b0cf6a7b1 100644
--- a/src/view/com/util/post-ctrls/RepostButton.tsx
+++ b/src/view/com/util/post-ctrls/RepostButton.tsx
@@ -1,15 +1,17 @@
-import React, {memo, useCallback} from 'react'
-import {StyleProp, StyleSheet, TouchableOpacity, ViewStyle} from 'react-native'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {HITSLOP_10, HITSLOP_20} from 'lib/constants'
 import {RepostIcon} from 'lib/icons'
-import {s, colors} from 'lib/styles'
-import {useTheme} from 'lib/ThemeContext'
-import {Text} from '../text/Text'
 import {pluralize} from 'lib/strings/helpers'
-import {HITSLOP_10, HITSLOP_20} from 'lib/constants'
+import {colors, s} from 'lib/styles'
+import {useTheme} from 'lib/ThemeContext'
+import React, {memo, useCallback} from 'react'
+import {StyleProp, StyleSheet, TouchableOpacity, ViewStyle} from 'react-native'
+
 import {useModalControls} from '#/state/modals'
 import {useRequireAuth} from '#/state/session'
-import {msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
+
+import {Text} from '../text/Text'
 
 interface Props {
   isReposted: boolean
diff --git a/src/view/com/util/post-ctrls/RepostButton.web.tsx b/src/view/com/util/post-ctrls/RepostButton.web.tsx
index bbe5869fe..391eeaf1f 100644
--- a/src/view/com/util/post-ctrls/RepostButton.web.tsx
+++ b/src/view/com/util/post-ctrls/RepostButton.web.tsx
@@ -1,19 +1,20 @@
-import React from 'react'
-import {StyleProp, StyleSheet, View, ViewStyle, Pressable} from 'react-native'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
 import {RepostIcon} from 'lib/icons'
 import {colors} from 'lib/styles'
 import {useTheme} from 'lib/ThemeContext'
-import {Text} from '../text/Text'
+import React from 'react'
+import {Pressable, StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
 
+import {useRequireAuth} from '#/state/session'
+import {useSession} from '#/state/session'
+
+import {EventStopper} from '../EventStopper'
 import {
-  NativeDropdown,
   DropdownItem as NativeDropdownItem,
+  NativeDropdown,
 } from '../forms/NativeDropdown'
-import {EventStopper} from '../EventStopper'
-import {useLingui} from '@lingui/react'
-import {msg} from '@lingui/macro'
-import {useRequireAuth} from '#/state/session'
-import {useSession} from '#/state/session'
+import {Text} from '../text/Text'
 
 interface Props {
   isReposted: boolean
diff --git a/src/view/com/util/post-embeds/ExternalGifEmbed.tsx b/src/view/com/util/post-embeds/ExternalGifEmbed.tsx
index f06c8b794..135f9b211 100644
--- a/src/view/com/util/post-embeds/ExternalGifEmbed.tsx
+++ b/src/view/com/util/post-embeds/ExternalGifEmbed.tsx
@@ -1,6 +1,10 @@
+import {AppBskyEmbedExternal} from '@atproto/api'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {Image, ImageLoadEventData} from 'expo-image'
 import {EmbedPlayerParams, getGifDims} from 'lib/strings/embed-player'
 import React from 'react'
-import {Image, ImageLoadEventData} from 'expo-image'
 import {
   ActivityIndicator,
   GestureResponderEvent,
@@ -9,13 +13,10 @@ import {
   StyleSheet,
   View,
 } from 'react-native'
-import {isIOS, isNative, isWeb} from '#/platform/detection'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {useExternalEmbedsPrefs} from 'state/preferences'
 import {useModalControls} from 'state/modals'
-import {useLingui} from '@lingui/react'
-import {msg} from '@lingui/macro'
-import {AppBskyEmbedExternal} from '@atproto/api'
+import {useExternalEmbedsPrefs} from 'state/preferences'
+
+import {isIOS, isNative, isWeb} from '#/platform/detection'
 
 export function ExternalGifEmbed({
   link,
diff --git a/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx b/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx
index aaa98a41f..a29901bae 100644
--- a/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx
+++ b/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx
@@ -1,15 +1,16 @@
-import React from 'react'
+import {AppBskyEmbedExternal} from '@atproto/api'
 import {Image} from 'expo-image'
-import {Text} from '../text/Text'
-import {StyleSheet, View} from 'react-native'
 import {usePalette} from 'lib/hooks/usePalette'
 import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {AppBskyEmbedExternal} from '@atproto/api'
-import {toNiceDomain} from 'lib/strings/url-helpers'
 import {parseEmbedPlayerFromUrl} from 'lib/strings/embed-player'
-import {ExternalPlayer} from 'view/com/util/post-embeds/ExternalPlayerEmbed'
-import {ExternalGifEmbed} from 'view/com/util/post-embeds/ExternalGifEmbed'
+import {toNiceDomain} from 'lib/strings/url-helpers'
+import React from 'react'
+import {StyleSheet, View} from 'react-native'
 import {useExternalEmbedsPrefs} from 'state/preferences'
+import {ExternalGifEmbed} from 'view/com/util/post-embeds/ExternalGifEmbed'
+import {ExternalPlayer} from 'view/com/util/post-embeds/ExternalPlayerEmbed'
+
+import {Text} from '../text/Text'
 
 export const ExternalLinkEmbed = ({
   link,
diff --git a/src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx b/src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx
index cf2db5b33..1b9d40844 100644
--- a/src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx
+++ b/src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx
@@ -1,3 +1,12 @@
+import {AppBskyEmbedExternal} from '@atproto/api'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {useNavigation} from '@react-navigation/native'
+import {Image} from 'expo-image'
+import {NavigationProp} from 'lib/routes/types'
+import {EmbedPlayerParams, getPlayerAspect} from 'lib/strings/embed-player'
+import {isNative} from 'platform/detection'
 import React from 'react'
 import {
   ActivityIndicator,
@@ -13,20 +22,12 @@ import Animated, {
   useAnimatedRef,
   useFrameCallback,
 } from 'react-native-reanimated'
-import {Image} from 'expo-image'
-import {WebView} from 'react-native-webview'
 import {useSafeAreaInsets} from 'react-native-safe-area-context'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useNavigation} from '@react-navigation/native'
-import {AppBskyEmbedExternal} from '@atproto/api'
-import {EmbedPlayerParams, getPlayerAspect} from 'lib/strings/embed-player'
-import {EventStopper} from '../EventStopper'
-import {isNative} from 'platform/detection'
-import {NavigationProp} from 'lib/routes/types'
-import {useExternalEmbedsPrefs} from 'state/preferences'
+import {WebView} from 'react-native-webview'
 import {useModalControls} from 'state/modals'
+import {useExternalEmbedsPrefs} from 'state/preferences'
+
+import {EventStopper} from '../EventStopper'
 
 interface ShouldStartLoadRequest {
   url: string
diff --git a/src/view/com/util/post-embeds/ListEmbed.tsx b/src/view/com/util/post-embeds/ListEmbed.tsx
index fc5ad270f..ad766d900 100644
--- a/src/view/com/util/post-embeds/ListEmbed.tsx
+++ b/src/view/com/util/post-embeds/ListEmbed.tsx
@@ -1,9 +1,9 @@
+import {AppBskyGraphDefs} from '@atproto/api'
+import {usePalette} from 'lib/hooks/usePalette'
+import {s} from 'lib/styles'
 import React from 'react'
 import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
-import {usePalette} from 'lib/hooks/usePalette'
 import {ListCard} from 'view/com/lists/ListCard'
-import {AppBskyGraphDefs} from '@atproto/api'
-import {s} from 'lib/styles'
 
 export function ListEmbed({
   item,
diff --git a/src/view/com/util/post-embeds/QuoteEmbed.tsx b/src/view/com/util/post-embeds/QuoteEmbed.tsx
index 35b091269..b3b24192b 100644
--- a/src/view/com/util/post-embeds/QuoteEmbed.tsx
+++ b/src/view/com/util/post-embeds/QuoteEmbed.tsx
@@ -1,27 +1,29 @@
-import React from 'react'
-import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
 import {
-  AppBskyEmbedRecord,
-  AppBskyFeedPost,
+  AppBskyEmbedExternal,
   AppBskyEmbedImages,
+  AppBskyEmbedRecord,
   AppBskyEmbedRecordWithMedia,
+  AppBskyFeedPost,
   ModerationUI,
-  AppBskyEmbedExternal,
   RichText as RichTextAPI,
 } from '@atproto/api'
 import {AtUri} from '@atproto/api'
-import {PostMeta} from '../PostMeta'
-import {Link} from '../Link'
-import {Text} from '../text/Text'
+import {Trans} from '@lingui/macro'
 import {usePalette} from 'lib/hooks/usePalette'
-import {ComposerOptsQuote} from 'state/shell/composer'
-import {PostEmbeds} from '.'
-import {PostAlerts} from '../moderation/PostAlerts'
-import {makeProfileLink} from 'lib/routes/links'
 import {InfoCircleIcon} from 'lib/icons'
-import {Trans} from '@lingui/macro'
-import {RichText} from '#/components/RichText'
+import {makeProfileLink} from 'lib/routes/links'
+import React from 'react'
+import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
+import {ComposerOptsQuote} from 'state/shell/composer'
+
 import {atoms as a} from '#/alf'
+import {RichText} from '#/components/RichText'
+
+import {Link} from '../Link'
+import {PostAlerts} from '../moderation/PostAlerts'
+import {PostMeta} from '../PostMeta'
+import {Text} from '../text/Text'
+import {PostEmbeds} from '.'
 
 export function MaybeQuoteEmbed({
   embed,
diff --git a/src/view/com/util/post-embeds/index.tsx b/src/view/com/util/post-embeds/index.tsx
index 7e235babb..c2fabd2a0 100644
--- a/src/view/com/util/post-embeds/index.tsx
+++ b/src/view/com/util/post-embeds/index.tsx
@@ -1,16 +1,6 @@
-import React, {useCallback} from 'react'
-import {
-  StyleSheet,
-  StyleProp,
-  View,
-  ViewStyle,
-  Text,
-  InteractionManager,
-} from 'react-native'
-import {Image} from 'expo-image'
 import {
-  AppBskyEmbedImages,
   AppBskyEmbedExternal,
+  AppBskyEmbedImages,
   AppBskyEmbedRecord,
   AppBskyEmbedRecordWithMedia,
   AppBskyFeedDefs,
@@ -18,19 +8,31 @@ import {
   ModerationUI,
   PostModeration,
 } from '@atproto/api'
-import {Link} from '../Link'
-import {ImageLayoutGrid} from '../images/ImageLayoutGrid'
-import {useLightboxControls, ImagesLightbox} from '#/state/lightbox'
+import {Image} from 'expo-image'
 import {usePalette} from 'lib/hooks/usePalette'
-import {ExternalLinkEmbed} from './ExternalLinkEmbed'
-import {MaybeQuoteEmbed} from './QuoteEmbed'
-import {AutoSizedImage} from '../images/AutoSizedImage'
-import {ListEmbed} from './ListEmbed'
 import {isCauseALabelOnUri, isQuoteBlurred} from 'lib/moderation'
+import React, {useCallback} from 'react'
+import {
+  InteractionManager,
+  StyleProp,
+  StyleSheet,
+  Text,
+  View,
+  ViewStyle,
+} from 'react-native'
 import {FeedSourceCard} from 'view/com/feeds/FeedSourceCard'
-import {ContentHider} from '../moderation/ContentHider'
-import {isNative} from '#/platform/detection'
+
 import {shareUrl} from '#/lib/sharing'
+import {isNative} from '#/platform/detection'
+import {ImagesLightbox, useLightboxControls} from '#/state/lightbox'
+
+import {AutoSizedImage} from '../images/AutoSizedImage'
+import {ImageLayoutGrid} from '../images/ImageLayoutGrid'
+import {Link} from '../Link'
+import {ContentHider} from '../moderation/ContentHider'
+import {ExternalLinkEmbed} from './ExternalLinkEmbed'
+import {ListEmbed} from './ListEmbed'
+import {MaybeQuoteEmbed} from './QuoteEmbed'
 
 type Embed =
   | AppBskyEmbedRecord.View
diff --git a/src/view/com/util/text/RichText.tsx b/src/view/com/util/text/RichText.tsx
index f4ade30e5..5756db324 100644
--- a/src/view/com/util/text/RichText.tsx
+++ b/src/view/com/util/text/RichText.tsx
@@ -1,16 +1,18 @@
-import React from 'react'
-import {TextStyle, StyleProp} from 'react-native'
-import {RichText as RichTextObj, AppBskyRichtextFacet} from '@atproto/api'
-import {TextLink} from '../Link'
-import {Text} from './Text'
-import {lh} from 'lib/styles'
-import {toShortUrl} from 'lib/strings/url-helpers'
-import {useTheme, TypographyVariant} from 'lib/ThemeContext'
+import {AppBskyRichtextFacet, RichText as RichTextObj} from '@atproto/api'
 import {usePalette} from 'lib/hooks/usePalette'
 import {makeTagLink} from 'lib/routes/links'
+import {toShortUrl} from 'lib/strings/url-helpers'
+import {lh} from 'lib/styles'
+import {TypographyVariant, useTheme} from 'lib/ThemeContext'
+import React from 'react'
+import {StyleProp, TextStyle} from 'react-native'
+
 import {TagMenu, useTagMenuControl} from '#/components/TagMenu'
 import {isNative} from '#/platform/detection'
 
+import {TextLink} from '../Link'
+import {Text} from './Text'
+
 const WORD_WRAP = {wordWrap: 1}
 
 /**
diff --git a/src/view/com/util/text/Text.tsx b/src/view/com/util/text/Text.tsx
index ccb51bfca..0dfa667fb 100644
--- a/src/view/com/util/text/Text.tsx
+++ b/src/view/com/util/text/Text.tsx
@@ -1,8 +1,8 @@
+import {lh, s} from 'lib/styles'
+import {TypographyVariant, useTheme} from 'lib/ThemeContext'
+import {isIOS} from 'platform/detection'
 import React from 'react'
 import {Text as RNText, TextProps} from 'react-native'
-import {s, lh} from 'lib/styles'
-import {useTheme, TypographyVariant} from 'lib/ThemeContext'
-import {isIOS} from 'platform/detection'
 import {UITextView} from 'react-native-ui-text-view'
 
 export type CustomTextProps = TextProps & {
diff --git a/src/view/com/util/text/ThemedText.tsx b/src/view/com/util/text/ThemedText.tsx
index 2844d273c..27268472b 100644
--- a/src/view/com/util/text/ThemedText.tsx
+++ b/src/view/com/util/text/ThemedText.tsx
@@ -1,7 +1,8 @@
-import React from 'react'
-import {CustomTextProps, Text} from './Text'
 import {usePalette} from 'lib/hooks/usePalette'
 import {addStyle} from 'lib/styles'
+import React from 'react'
+
+import {CustomTextProps, Text} from './Text'
 
 export type ThemedTextProps = CustomTextProps & {
   fg?: 'default' | 'light' | 'error' | 'inverted' | 'inverted-light'