about summary refs log tree commit diff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/ThemeContext.tsx6
-rw-r--r--src/lib/__tests__/moderatePost_wrapped.test.ts2
-rw-r--r--src/lib/analytics/analytics.tsx9
-rw-r--r--src/lib/analytics/analytics.web.tsx7
-rw-r--r--src/lib/api/api-polyfill.ts2
-rw-r--r--src/lib/api/feed-manip.ts7
-rw-r--r--src/lib/api/feed/author.ts4
-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/home.ts8
-rw-r--r--src/lib/api/feed/likes.ts4
-rw-r--r--src/lib/api/feed/list.ts4
-rw-r--r--src/lib/api/feed/merge.ts14
-rw-r--r--src/lib/api/index.ts8
-rw-r--r--src/lib/app-info.ts2
-rw-r--r--src/lib/embeds.ts2
-rw-r--r--src/lib/hooks/useAccountSwitcher.ts8
-rw-r--r--src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts2
-rw-r--r--src/lib/hooks/useCustomPalette.ts4
-rw-r--r--src/lib/hooks/useDraggableScrollView.ts6
-rw-r--r--src/lib/hooks/useIntentHandler.ts4
-rw-r--r--src/lib/hooks/useIsKeyboardVisible.ts4
-rw-r--r--src/lib/hooks/useMinimalShellMode.tsx1
-rw-r--r--src/lib/hooks/useNavigationDeduped.ts6
-rw-r--r--src/lib/hooks/useOTAUpdate.ts3
-rw-r--r--src/lib/hooks/usePalette.ts3
-rw-r--r--src/lib/hooks/usePermissions.ts2
-rw-r--r--src/lib/hooks/useSetTitle.ts4
-rw-r--r--src/lib/hooks/useTabFocusEffect.ts2
-rw-r--r--src/lib/hooks/useToggleMutationQueue.ts2
-rw-r--r--src/lib/hooks/useWebBodyScrollLock.ts1
-rw-r--r--src/lib/hooks/useWebMediaQueries.tsx2
-rw-r--r--src/lib/hooks/useWebScrollRestoration.ts2
-rw-r--r--src/lib/icons.tsx2
-rw-r--r--src/lib/link-meta/bsky.ts10
-rw-r--r--src/lib/link-meta/link-meta.ts5
-rw-r--r--src/lib/media/image-sizes.ts2
-rw-r--r--src/lib/media/manip.ts11
-rw-r--r--src/lib/media/manip.web.ts5
-rw-r--r--src/lib/media/picker.e2e.tsx5
-rw-r--r--src/lib/media/picker.shared.ts3
-rw-r--r--src/lib/media/picker.tsx3
-rw-r--r--src/lib/media/picker.web.tsx3
-rw-r--r--src/lib/moderatePost_wrapped.ts8
-rw-r--r--src/lib/moderation.ts2
-rw-r--r--src/lib/notifications/notifications.ts10
-rw-r--r--src/lib/react-query.ts3
-rw-r--r--src/lib/routes/helpers.ts3
-rw-r--r--src/lib/routes/router.ts2
-rw-r--r--src/lib/sentry.ts2
-rw-r--r--src/lib/sharing.ts5
-rw-r--r--src/lib/statsig/statsig.tsx3
-rw-r--r--src/lib/statsig/statsig.web.tsx3
-rw-r--r--src/lib/strings/display-names.ts1
-rw-r--r--src/lib/strings/embed-player.ts2
-rw-r--r--src/lib/strings/rich-text-helpers.ts1
-rw-r--r--src/lib/strings/rich-text-manip.ts1
-rw-r--r--src/lib/strings/url-helpers.ts2
-rw-r--r--src/lib/styles.ts3
-rw-r--r--src/lib/themes.ts7
60 files changed, 103 insertions, 149 deletions
diff --git a/src/lib/ThemeContext.tsx b/src/lib/ThemeContext.tsx
index a04252161..63e2beeb1 100644
--- a/src/lib/ThemeContext.tsx
+++ b/src/lib/ThemeContext.tsx
@@ -1,9 +1,7 @@
-import React, {createContext, ReactNode, useContext} from 'react'
+import React, {ReactNode, createContext, useContext} from 'react'
 import {TextStyle, ViewStyle} from 'react-native'
-
-import {ThemeName} from '#/alf/themes'
-
 import {darkTheme, defaultTheme, dimTheme} from './themes'
+import {ThemeName} from '#/alf/themes'
 
 export type ColorScheme = 'light' | 'dark'
 
diff --git a/src/lib/__tests__/moderatePost_wrapped.test.ts b/src/lib/__tests__/moderatePost_wrapped.test.ts
index d87610660..45566281a 100644
--- a/src/lib/__tests__/moderatePost_wrapped.test.ts
+++ b/src/lib/__tests__/moderatePost_wrapped.test.ts
@@ -1,5 +1,5 @@
+import {describe, it, expect} from '@jest/globals'
 import {RichText} from '@atproto/api'
-import {describe, expect, it} from '@jest/globals'
 
 import {hasMutedWord} from '../moderatePost_wrapped'
 
diff --git a/src/lib/analytics/analytics.tsx b/src/lib/analytics/analytics.tsx
index c27a4fb70..a0cc7cd6e 100644
--- a/src/lib/analytics/analytics.tsx
+++ b/src/lib/analytics/analytics.tsx
@@ -1,14 +1,13 @@
+import React from 'react'
+import {AppState, AppStateStatus} from 'react-native'
 import AsyncStorage from '@react-native-async-storage/async-storage'
 import {createClient, SegmentClient} from '@segment/analytics-react-native'
 import {sha256} from 'js-sha256'
-import React from 'react'
-import {AppState, AppStateStatus} from 'react-native'
 import {Native} from 'sentry-expo'
 
-import {logger} from '#/logger'
-import {SessionAccount, useSession} from '#/state/session'
-
+import {useSession, SessionAccount} from '#/state/session'
 import {ScreenPropertiesMap, TrackPropertiesMap} from './types'
+import {logger} from '#/logger'
 
 type AppInfo = {
   build?: string | undefined
diff --git a/src/lib/analytics/analytics.web.tsx b/src/lib/analytics/analytics.web.tsx
index 21975bc57..72b28f9c0 100644
--- a/src/lib/analytics/analytics.web.tsx
+++ b/src/lib/analytics/analytics.web.tsx
@@ -1,12 +1,11 @@
+import React from 'react'
 import {createClient} from '@segment/analytics-react'
 import {sha256} from 'js-sha256'
-import React from 'react'
 import {Browser} from 'sentry-expo'
 
-import {logger} from '#/logger'
-import {SessionAccount, useSession} from '#/state/session'
-
 import {ScreenPropertiesMap, TrackPropertiesMap} from './types'
+import {useSession, SessionAccount} from '#/state/session'
+import {logger} from '#/logger'
 
 type SegmentClient = ReturnType<typeof createClient>
 
diff --git a/src/lib/api/api-polyfill.ts b/src/lib/api/api-polyfill.ts
index a0245839a..ea1d97598 100644
--- a/src/lib/api/api-polyfill.ts
+++ b/src/lib/api/api-polyfill.ts
@@ -1,4 +1,4 @@
-import {BskyAgent, jsonToLex, stringifyLex} from '@atproto/api'
+import {BskyAgent, stringifyLex, jsonToLex} from '@atproto/api'
 import RNFS from 'react-native-fs'
 
 const GET_TIMEOUT = 15e3 // 15s
diff --git a/src/lib/api/feed-manip.ts b/src/lib/api/feed-manip.ts
index 26eea80a1..227062592 100644
--- a/src/lib/api/feed-manip.ts
+++ b/src/lib/api/feed-manip.ts
@@ -1,12 +1,11 @@
 import {
-  AppBskyEmbedRecord,
-  AppBskyEmbedRecordWithMedia,
   AppBskyFeedDefs,
   AppBskyFeedPost,
+  AppBskyEmbedRecordWithMedia,
+  AppBskyEmbedRecord,
 } from '@atproto/api'
-
-import {isPostInLanguage} from '../../locale/helpers'
 import {ReasonFeedSource} from './feed/types'
+import {isPostInLanguage} from '../../locale/helpers'
 type FeedViewPost = AppBskyFeedDefs.FeedViewPost
 
 export type FeedTunerFn = (
diff --git a/src/lib/api/feed/author.ts b/src/lib/api/feed/author.ts
index 60bb23603..57db061b3 100644
--- a/src/lib/api/feed/author.ts
+++ b/src/lib/api/feed/author.ts
@@ -2,10 +2,8 @@ import {
   AppBskyFeedDefs,
   AppBskyFeedGetAuthorFeed as GetAuthorFeed,
 } from '@atproto/api'
-
-import {getAgent} from '#/state/session'
-
 import {FeedAPI, FeedAPIResponse} from './types'
+import {getAgent} from '#/state/session'
 
 export class AuthorFeedAPI implements FeedAPI {
   constructor(public params: GetAuthorFeed.QueryParams) {}
diff --git a/src/lib/api/feed/custom.ts b/src/lib/api/feed/custom.ts
index cb7e7e66a..41c5367e5 100644
--- a/src/lib/api/feed/custom.ts
+++ b/src/lib/api/feed/custom.ts
@@ -2,11 +2,9 @@ import {
   AppBskyFeedDefs,
   AppBskyFeedGetFeed as GetCustomFeed,
 } from '@atproto/api'
-
-import {getContentLanguages} from '#/state/preferences/languages'
-import {getAgent} from '#/state/session'
-
 import {FeedAPI, FeedAPIResponse} from './types'
+import {getAgent} from '#/state/session'
+import {getContentLanguages} from '#/state/preferences/languages'
 
 export class CustomFeedAPI implements FeedAPI {
   constructor(public params: GetCustomFeed.QueryParams) {}
diff --git a/src/lib/api/feed/following.ts b/src/lib/api/feed/following.ts
index 95f0a7090..24389b5ed 100644
--- a/src/lib/api/feed/following.ts
+++ b/src/lib/api/feed/following.ts
@@ -1,8 +1,6 @@
 import {AppBskyFeedDefs} from '@atproto/api'
-
-import {getAgent} from '#/state/session'
-
 import {FeedAPI, FeedAPIResponse} from './types'
+import {getAgent} from '#/state/session'
 
 export class FollowingFeedAPI implements FeedAPI {
   constructor() {}
diff --git a/src/lib/api/feed/home.ts b/src/lib/api/feed/home.ts
index f12dab7b6..436a66d07 100644
--- a/src/lib/api/feed/home.ts
+++ b/src/lib/api/feed/home.ts
@@ -1,10 +1,8 @@
 import {AppBskyFeedDefs} from '@atproto/api'
-
-import {PROD_DEFAULT_FEED} from '#/lib/constants'
-
-import {CustomFeedAPI} from './custom'
-import {FollowingFeedAPI} from './following'
 import {FeedAPI, FeedAPIResponse} from './types'
+import {FollowingFeedAPI} from './following'
+import {CustomFeedAPI} from './custom'
+import {PROD_DEFAULT_FEED} from '#/lib/constants'
 
 // HACK
 // the feed API does not include any facilities for passing down
diff --git a/src/lib/api/feed/likes.ts b/src/lib/api/feed/likes.ts
index 95697e5d7..2b0afdf11 100644
--- a/src/lib/api/feed/likes.ts
+++ b/src/lib/api/feed/likes.ts
@@ -2,10 +2,8 @@ import {
   AppBskyFeedDefs,
   AppBskyFeedGetActorLikes as GetActorLikes,
 } from '@atproto/api'
-
-import {getAgent} from '#/state/session'
-
 import {FeedAPI, FeedAPIResponse} from './types'
+import {getAgent} from '#/state/session'
 
 export class LikesFeedAPI implements FeedAPI {
   constructor(public params: GetActorLikes.QueryParams) {}
diff --git a/src/lib/api/feed/list.ts b/src/lib/api/feed/list.ts
index 1b0b259cf..19f2ff177 100644
--- a/src/lib/api/feed/list.ts
+++ b/src/lib/api/feed/list.ts
@@ -2,10 +2,8 @@ import {
   AppBskyFeedDefs,
   AppBskyFeedGetListFeed as GetListFeed,
 } from '@atproto/api'
-
-import {getAgent} from '#/state/session'
-
 import {FeedAPI, FeedAPIResponse} from './types'
+import {getAgent} from '#/state/session'
 
 export class ListFeedAPI implements FeedAPI {
   constructor(public params: GetListFeed.QueryParams) {}
diff --git a/src/lib/api/feed/merge.ts b/src/lib/api/feed/merge.ts
index 49210afed..28bf143cb 100644
--- a/src/lib/api/feed/merge.ts
+++ b/src/lib/api/feed/merge.ts
@@ -1,16 +1,14 @@
 import {AppBskyFeedDefs, AppBskyFeedGetTimeline} from '@atproto/api'
-import {bundleAsync} from 'lib/async/bundle'
+import shuffle from 'lodash.shuffle'
 import {timeout} from 'lib/async/timeout'
+import {bundleAsync} from 'lib/async/bundle'
 import {feedUriToHref} from 'lib/strings/url-helpers'
-import shuffle from 'lodash.shuffle'
-
-import {getContentLanguages} from '#/state/preferences/languages'
-import {FeedParams} from '#/state/queries/post-feed'
-import {getAgent} from '#/state/session'
-
 import {FeedTuner} from '../feed-manip'
-import {FeedTunerFn} from '../feed-manip'
 import {FeedAPI, FeedAPIResponse, ReasonFeedSource} from './types'
+import {FeedParams} from '#/state/queries/post-feed'
+import {FeedTunerFn} from '../feed-manip'
+import {getAgent} from '#/state/session'
+import {getContentLanguages} from '#/state/preferences/languages'
 
 const REQUEST_WAIT_MS = 500 // 500ms
 const POST_AGE_CUTOFF = 60e3 * 60 * 24 // 24hours
diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts
index 178554d73..5fb7fe50e 100644
--- a/src/lib/api/index.ts
+++ b/src/lib/api/index.ts
@@ -1,6 +1,6 @@
 import {
-  AppBskyEmbedExternal,
   AppBskyEmbedImages,
+  AppBskyEmbedExternal,
   AppBskyEmbedRecord,
   AppBskyEmbedRecordWithMedia,
   AppBskyFeedThreadgate,
@@ -12,15 +12,13 @@ import {
 } from '@atproto/api'
 import {AtUri} from '@atproto/api'
 import {isNetworkError} from 'lib/strings/errors'
-import {shortenLinks} from 'lib/strings/rich-text-manip'
+import {LinkMeta} from '../link-meta/link-meta'
 import {isWeb} from 'platform/detection'
 import {ImageModel} from 'state/models/media/image'
-
+import {shortenLinks} from 'lib/strings/rich-text-manip'
 import {logger} from '#/logger'
 import {ThreadgateSetting} from '#/state/queries/threadgate'
 
-import {LinkMeta} from '../link-meta/link-meta'
-
 export interface ExternalEmbedDraft {
   uri: string
   isLoading: boolean
diff --git a/src/lib/app-info.ts b/src/lib/app-info.ts
index f6b4932c3..3f026d3fe 100644
--- a/src/lib/app-info.ts
+++ b/src/lib/app-info.ts
@@ -1,5 +1,5 @@
-import * as Updates from 'expo-updates'
 import VersionNumber from 'react-native-version-number'
+import * as Updates from 'expo-updates'
 export const updateChannel = Updates.channel
 
 export const appVersion = `${VersionNumber.appVersion} (${VersionNumber.buildVersion})`
diff --git a/src/lib/embeds.ts b/src/lib/embeds.ts
index 2904f1cc3..a758987b2 100644
--- a/src/lib/embeds.ts
+++ b/src/lib/embeds.ts
@@ -1,7 +1,7 @@
 import {
+  AppBskyFeedDefs,
   AppBskyEmbedRecord,
   AppBskyEmbedRecordWithMedia,
-  AppBskyFeedDefs,
 } from '@atproto/api'
 
 export function isEmbedByEmbedder(
diff --git a/src/lib/hooks/useAccountSwitcher.ts b/src/lib/hooks/useAccountSwitcher.ts
index 478ce538a..74b5674d5 100644
--- a/src/lib/hooks/useAccountSwitcher.ts
+++ b/src/lib/hooks/useAccountSwitcher.ts
@@ -1,11 +1,11 @@
 import {useCallback} from 'react'
 
-import {useAnalytics} from '#/lib/analytics/analytics'
 import {isWeb} from '#/platform/detection'
-import {SessionAccount, useSessionApi} from '#/state/session'
-import {useLoggedOutViewControls} from '#/state/shell/logged-out'
-import {useCloseAllActiveElements} from '#/state/util'
+import {useAnalytics} from '#/lib/analytics/analytics'
+import {useSessionApi, SessionAccount} from '#/state/session'
 import * as Toast from '#/view/com/util/Toast'
+import {useCloseAllActiveElements} from '#/state/util'
+import {useLoggedOutViewControls} from '#/state/shell/logged-out'
 
 export function useAccountSwitcher() {
   const {track} = useAnalytics()
diff --git a/src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts b/src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts
index 7f8a99506..98e05a8ce 100644
--- a/src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts
+++ b/src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts
@@ -1,4 +1,4 @@
-import {useEffect, useRef} from 'react'
+import {useRef, useEffect} from 'react'
 import {useAnimatedScrollHandler as useAnimatedScrollHandler_BUGGY} from 'react-native-reanimated'
 
 export const useAnimatedScrollHandler: typeof useAnimatedScrollHandler_BUGGY = (
diff --git a/src/lib/hooks/useCustomPalette.ts b/src/lib/hooks/useCustomPalette.ts
index a069c7ce8..4f8f5c836 100644
--- a/src/lib/hooks/useCustomPalette.ts
+++ b/src/lib/hooks/useCustomPalette.ts
@@ -1,6 +1,6 @@
-import {choose} from 'lib/functions'
-import {useTheme} from 'lib/ThemeContext'
 import React from 'react'
+import {useTheme} from 'lib/ThemeContext'
+import {choose} from 'lib/functions'
 
 export function useCustomPalette<T>({light, dark}: {light: T; dark: T}) {
   const theme = useTheme()
diff --git a/src/lib/hooks/useDraggableScrollView.ts b/src/lib/hooks/useDraggableScrollView.ts
index ea48ac1dc..b0f7465d7 100644
--- a/src/lib/hooks/useDraggableScrollView.ts
+++ b/src/lib/hooks/useDraggableScrollView.ts
@@ -1,7 +1,7 @@
-import {mergeRefs} from 'lib/merge-refs'
-import {ForwardedRef, useEffect, useMemo, useRef} from 'react'
+import {useEffect, useRef, useMemo, ForwardedRef} from 'react'
+import {Platform, findNodeHandle} from 'react-native'
 import type {ScrollView} from 'react-native'
-import {findNodeHandle, Platform} from 'react-native'
+import {mergeRefs} from 'lib/merge-refs'
 
 type Props<Scrollable extends ScrollView = ScrollView> = {
   cursor?: string
diff --git a/src/lib/hooks/useIntentHandler.ts b/src/lib/hooks/useIntentHandler.ts
index 34f645d7f..8741530b5 100644
--- a/src/lib/hooks/useIntentHandler.ts
+++ b/src/lib/hooks/useIntentHandler.ts
@@ -1,8 +1,8 @@
+import React from 'react'
 import * as Linking from 'expo-linking'
 import {isNative} from 'platform/detection'
-import React from 'react'
-import {useSession} from 'state/session'
 import {useComposerControls} from 'state/shell'
+import {useSession} from 'state/session'
 import {useCloseAllActiveElements} from 'state/util'
 
 type IntentType = 'compose'
diff --git a/src/lib/hooks/useIsKeyboardVisible.ts b/src/lib/hooks/useIsKeyboardVisible.ts
index 391090f2d..38fc80bde 100644
--- a/src/lib/hooks/useIsKeyboardVisible.ts
+++ b/src/lib/hooks/useIsKeyboardVisible.ts
@@ -1,6 +1,6 @@
-import {isIOS} from 'platform/detection'
-import {useEffect, useState} from 'react'
+import {useState, useEffect} from 'react'
 import {Keyboard} from 'react-native'
+import {isIOS} from 'platform/detection'
 
 export function useIsKeyboardVisible({
   iosUseWillEvents,
diff --git a/src/lib/hooks/useMinimalShellMode.tsx b/src/lib/hooks/useMinimalShellMode.tsx
index 071d87683..e81fc434f 100644
--- a/src/lib/hooks/useMinimalShellMode.tsx
+++ b/src/lib/hooks/useMinimalShellMode.tsx
@@ -1,5 +1,4 @@
 import {interpolate, useAnimatedStyle} from 'react-native-reanimated'
-
 import {useMinimalShellMode as useMinimalShellModeState} from '#/state/shell/minimal-mode'
 import {useShellLayout} from '#/state/shell/shell-layout'
 
diff --git a/src/lib/hooks/useNavigationDeduped.ts b/src/lib/hooks/useNavigationDeduped.ts
index 99efad610..d913f7f3d 100644
--- a/src/lib/hooks/useNavigationDeduped.ts
+++ b/src/lib/hooks/useNavigationDeduped.ts
@@ -1,9 +1,9 @@
+import React from 'react'
 import {useNavigation} from '@react-navigation/core'
-import {NavigationState} from '@react-navigation/native'
+import {AllNavigatorParams, NavigationProp} from 'lib/routes/types'
 import type {NavigationAction} from '@react-navigation/routers'
+import {NavigationState} from '@react-navigation/native'
 import {useDedupe} from 'lib/hooks/useDedupe'
-import {AllNavigatorParams, NavigationProp} from 'lib/routes/types'
-import React from 'react'
 
 export type DebouncedNavigationProp = Pick<
   NavigationProp,
diff --git a/src/lib/hooks/useOTAUpdate.ts b/src/lib/hooks/useOTAUpdate.ts
index 9bfc998a6..53eab300e 100644
--- a/src/lib/hooks/useOTAUpdate.ts
+++ b/src/lib/hooks/useOTAUpdate.ts
@@ -1,10 +1,9 @@
-import {t} from '@lingui/macro'
 import * as Updates from 'expo-updates'
 import {useCallback, useEffect} from 'react'
 import {AppState} from 'react-native'
-
 import {logger} from '#/logger'
 import {useModalControls} from '#/state/modals'
+import {t} from '@lingui/macro'
 
 export function useOTAUpdate() {
   const {openModal} = useModalControls()
diff --git a/src/lib/hooks/usePalette.ts b/src/lib/hooks/usePalette.ts
index 2530642f6..eeb43d0b1 100644
--- a/src/lib/hooks/usePalette.ts
+++ b/src/lib/hooks/usePalette.ts
@@ -1,7 +1,6 @@
 import {useMemo} from 'react'
 import {TextStyle, ViewStyle} from 'react-native'
-
-import {PaletteColor, PaletteColorName, useTheme} from '../ThemeContext'
+import {useTheme, PaletteColorName, PaletteColor} from '../ThemeContext'
 
 export interface UsePaletteValue {
   colors: PaletteColor
diff --git a/src/lib/hooks/usePermissions.ts b/src/lib/hooks/usePermissions.ts
index 28693ea71..138f3eaca 100644
--- a/src/lib/hooks/usePermissions.ts
+++ b/src/lib/hooks/usePermissions.ts
@@ -1,7 +1,7 @@
 import {Camera} from 'expo-camera'
 import * as MediaLibrary from 'expo-media-library'
-import {isWeb} from 'platform/detection'
 import {Linking} from 'react-native'
+import {isWeb} from 'platform/detection'
 import {Alert} from 'view/com/util/Alert'
 
 const openPermissionAlert = (perm: string) => {
diff --git a/src/lib/hooks/useSetTitle.ts b/src/lib/hooks/useSetTitle.ts
index d88830a89..129023f71 100644
--- a/src/lib/hooks/useSetTitle.ts
+++ b/src/lib/hooks/useSetTitle.ts
@@ -1,8 +1,8 @@
+import {useEffect} from 'react'
 import {useNavigation} from '@react-navigation/native'
+
 import {NavigationProp} from 'lib/routes/types'
 import {bskyTitle} from 'lib/strings/headings'
-import {useEffect} from 'react'
-
 import {useUnreadNotifications} from '#/state/queries/notifications/unread'
 
 export function useSetTitle(title?: string) {
diff --git a/src/lib/hooks/useTabFocusEffect.ts b/src/lib/hooks/useTabFocusEffect.ts
index 5f5335045..e446084c5 100644
--- a/src/lib/hooks/useTabFocusEffect.ts
+++ b/src/lib/hooks/useTabFocusEffect.ts
@@ -1,6 +1,6 @@
+import {useEffect, useState} from 'react'
 import {useNavigation} from '@react-navigation/native'
 import {getTabState, TabState} from 'lib/routes/helpers'
-import {useEffect, useState} from 'react'
 
 export function useTabFocusEffect(
   tabName: string,
diff --git a/src/lib/hooks/useToggleMutationQueue.ts b/src/lib/hooks/useToggleMutationQueue.ts
index c4b86d325..28ae86142 100644
--- a/src/lib/hooks/useToggleMutationQueue.ts
+++ b/src/lib/hooks/useToggleMutationQueue.ts
@@ -1,4 +1,4 @@
-import {useCallback, useEffect, useRef, useState} from 'react'
+import {useState, useRef, useEffect, useCallback} from 'react'
 
 type Task<TServerState> = {
   isOn: boolean
diff --git a/src/lib/hooks/useWebBodyScrollLock.ts b/src/lib/hooks/useWebBodyScrollLock.ts
index 790ddce63..585f193f1 100644
--- a/src/lib/hooks/useWebBodyScrollLock.ts
+++ b/src/lib/hooks/useWebBodyScrollLock.ts
@@ -1,5 +1,4 @@
 import {useEffect} from 'react'
-
 import {isWeb} from '#/platform/detection'
 
 let refCount = 0
diff --git a/src/lib/hooks/useWebMediaQueries.tsx b/src/lib/hooks/useWebMediaQueries.tsx
index 45b7b6c58..71a96a89b 100644
--- a/src/lib/hooks/useWebMediaQueries.tsx
+++ b/src/lib/hooks/useWebMediaQueries.tsx
@@ -1,5 +1,5 @@
-import {isNative} from 'platform/detection'
 import {useMediaQuery} from 'react-responsive'
+import {isNative} from 'platform/detection'
 
 export function useWebMediaQueries() {
   const isDesktop = useMediaQuery({minWidth: 1300})
diff --git a/src/lib/hooks/useWebScrollRestoration.ts b/src/lib/hooks/useWebScrollRestoration.ts
index 5a4402494..f68fbf0f2 100644
--- a/src/lib/hooks/useWebScrollRestoration.ts
+++ b/src/lib/hooks/useWebScrollRestoration.ts
@@ -1,5 +1,5 @@
+import {useMemo, useState, useEffect} from 'react'
 import {EventArg, useNavigation} from '@react-navigation/core'
-import {useEffect, useMemo, useState} from 'react'
 
 if ('scrollRestoration' in history) {
   // Tell the brower not to mess with the scroll.
diff --git a/src/lib/icons.tsx b/src/lib/icons.tsx
index eb8214019..7ae88806f 100644
--- a/src/lib/icons.tsx
+++ b/src/lib/icons.tsx
@@ -1,6 +1,6 @@
 import React from 'react'
 import {StyleProp, TextStyle, ViewStyle} from 'react-native'
-import Svg, {Ellipse, Line, Path, Rect} from 'react-native-svg'
+import Svg, {Path, Rect, Line, Ellipse} from 'react-native-svg'
 
 export function GridIcon({
   style,
diff --git a/src/lib/link-meta/bsky.ts b/src/lib/link-meta/bsky.ts
index 1c8b28d9b..c1fbb34b3 100644
--- a/src/lib/link-meta/bsky.ts
+++ b/src/lib/link-meta/bsky.ts
@@ -1,13 +1,11 @@
 import {AppBskyFeedPost, BskyAgent} from '@atproto/api'
 import * as apilib from 'lib/api/index'
-import {ComposerOptsQuote} from 'state/shell/composer'
-
-import {useFetchDid} from '#/state/queries/handle'
-import {useGetPost} from '#/state/queries/post'
-
+import {LikelyType, LinkMeta} from './link-meta'
 // import {match as matchRoute} from 'view/routes'
 import {convertBskyAppUrlIfNeeded, makeRecordUri} from '../strings/url-helpers'
-import {LikelyType, LinkMeta} from './link-meta'
+import {ComposerOptsQuote} from 'state/shell/composer'
+import {useGetPost} from '#/state/queries/post'
+import {useFetchDid} from '#/state/queries/handle'
 
 // TODO
 // import {Home} from 'view/screens/Home'
diff --git a/src/lib/link-meta/link-meta.ts b/src/lib/link-meta/link-meta.ts
index 0f5230479..fa951432e 100644
--- a/src/lib/link-meta/link-meta.ts
+++ b/src/lib/link-meta/link-meta.ts
@@ -1,9 +1,8 @@
 import {BskyAgent} from '@atproto/api'
-import {LINK_META_PROXY} from 'lib/constants'
-import {getGiphyMetaUri} from 'lib/strings/embed-player'
-
 import {isBskyAppUrl} from '../strings/url-helpers'
 import {extractBskyMeta} from './bsky'
+import {LINK_META_PROXY} from 'lib/constants'
+import {getGiphyMetaUri} from 'lib/strings/embed-player'
 
 export enum LikelyType {
   HTML,
diff --git a/src/lib/media/image-sizes.ts b/src/lib/media/image-sizes.ts
index cab032313..4ea95ea23 100644
--- a/src/lib/media/image-sizes.ts
+++ b/src/lib/media/image-sizes.ts
@@ -1,5 +1,5 @@
-import type {Dimensions} from 'lib/media/types'
 import {Image} from 'react-native'
+import type {Dimensions} from 'lib/media/types'
 
 const sizes: Map<string, Dimensions> = new Map()
 const activeRequests: Map<string, Promise<Dimensions>> = new Map()
diff --git a/src/lib/media/manip.ts b/src/lib/media/manip.ts
index 20cca745b..a681627e6 100644
--- a/src/lib/media/manip.ts
+++ b/src/lib/media/manip.ts
@@ -1,14 +1,13 @@
+import RNFetchBlob from 'rn-fetch-blob'
 import ImageResizer from '@bam.tech/react-native-image-resizer'
-import * as MediaLibrary from 'expo-media-library'
-import * as Sharing from 'expo-sharing'
-import {isAndroid, isIOS} from 'platform/detection'
 import {Image as RNImage, Share as RNShare} from 'react-native'
-import * as RNFS from 'react-native-fs'
 import {Image} from 'react-native-image-crop-picker'
+import * as RNFS from 'react-native-fs'
 import uuid from 'react-native-uuid'
-import RNFetchBlob from 'rn-fetch-blob'
-
+import * as Sharing from 'expo-sharing'
+import * as MediaLibrary from 'expo-media-library'
 import {Dimensions} from './types'
+import {isAndroid, isIOS} from 'platform/detection'
 
 export async function compressIfNeeded(
   img: Image,
diff --git a/src/lib/media/manip.web.ts b/src/lib/media/manip.web.ts
index 8b63f9e5f..522aa2e51 100644
--- a/src/lib/media/manip.web.ts
+++ b/src/lib/media/manip.web.ts
@@ -1,7 +1,6 @@
-import {Image as RNImage} from 'react-native-image-crop-picker'
-
 import {Dimensions} from './types'
-import {blobToDataUri, getDataUriSize} from './util'
+import {Image as RNImage} from 'react-native-image-crop-picker'
+import {getDataUriSize, blobToDataUri} from './util'
 
 export async function compressIfNeeded(
   img: RNImage,
diff --git a/src/lib/media/picker.e2e.tsx b/src/lib/media/picker.e2e.tsx
index 08ee91b74..d7b608041 100644
--- a/src/lib/media/picker.e2e.tsx
+++ b/src/lib/media/picker.e2e.tsx
@@ -1,8 +1,7 @@
-import RNFS from 'react-native-fs'
 import {Image as RNImage} from 'react-native-image-crop-picker'
-
-import {compressIfNeeded} from './manip'
+import RNFS from 'react-native-fs'
 import {CropperOptions} from './types'
+import {compressIfNeeded} from './manip'
 
 let _imageCounter = 0
 async function getFile() {
diff --git a/src/lib/media/picker.shared.ts b/src/lib/media/picker.shared.ts
index d00c2b8a6..8bade34e2 100644
--- a/src/lib/media/picker.shared.ts
+++ b/src/lib/media/picker.shared.ts
@@ -3,9 +3,8 @@ import {
   launchImageLibraryAsync,
   MediaTypeOptions,
 } from 'expo-image-picker'
-import * as Toast from 'view/com/util/Toast'
-
 import {getDataUriSize} from './util'
+import * as Toast from 'view/com/util/Toast'
 
 export async function openPicker(opts?: ImagePickerOptions) {
   const response = await launchImageLibraryAsync({
diff --git a/src/lib/media/picker.tsx b/src/lib/media/picker.tsx
index 37e01e67f..bf531c981 100644
--- a/src/lib/media/picker.tsx
+++ b/src/lib/media/picker.tsx
@@ -1,9 +1,8 @@
 import {
-  Image as RNImage,
   openCamera as openCameraFn,
   openCropper as openCropperFn,
+  Image as RNImage,
 } from 'react-native-image-crop-picker'
-
 import {CameraOpts, CropperOptions} from './types'
 export {openPicker} from './picker.shared'
 
diff --git a/src/lib/media/picker.web.tsx b/src/lib/media/picker.web.tsx
index 7e2562e29..995a0c95f 100644
--- a/src/lib/media/picker.web.tsx
+++ b/src/lib/media/picker.web.tsx
@@ -1,8 +1,7 @@
 /// <reference lib="dom" />
 
-import {Image as RNImage} from 'react-native-image-crop-picker'
-
 import {CameraOpts, CropperOptions} from './types'
+import {Image as RNImage} from 'react-native-image-crop-picker'
 export {openPicker} from './picker.shared'
 import {unstable__openModal} from '#/state/modals'
 
diff --git a/src/lib/moderatePost_wrapped.ts b/src/lib/moderatePost_wrapped.ts
index 566e46a05..9f6fa9c07 100644
--- a/src/lib/moderatePost_wrapped.ts
+++ b/src/lib/moderatePost_wrapped.ts
@@ -1,12 +1,12 @@
 import {
-  AppBskyActorDefs,
-  AppBskyEmbedExternal,
-  AppBskyEmbedImages,
   AppBskyEmbedRecord,
   AppBskyEmbedRecordWithMedia,
+  moderatePost,
+  AppBskyActorDefs,
   AppBskyFeedPost,
   AppBskyRichtextFacet,
-  moderatePost,
+  AppBskyEmbedImages,
+  AppBskyEmbedExternal,
 } from '@atproto/api'
 
 type ModeratePost = typeof moderatePost
diff --git a/src/lib/moderation.ts b/src/lib/moderation.ts
index 3f8a03219..b6ebb47a0 100644
--- a/src/lib/moderation.ts
+++ b/src/lib/moderation.ts
@@ -1,4 +1,4 @@
-import {ModerationCause, PostModeration, ProfileModeration} from '@atproto/api'
+import {ModerationCause, ProfileModeration, PostModeration} from '@atproto/api'
 
 export interface ModerationCauseDescription {
   name: string
diff --git a/src/lib/notifications/notifications.ts b/src/lib/notifications/notifications.ts
index 146bd9853..62d0bfc4b 100644
--- a/src/lib/notifications/notifications.ts
+++ b/src/lib/notifications/notifications.ts
@@ -1,14 +1,12 @@
-import {QueryClient} from '@tanstack/react-query'
 import * as Notifications from 'expo-notifications'
-import {track} from 'lib/analytics/analytics'
+import {QueryClient} from '@tanstack/react-query'
+import {resetToTab} from '../../Navigation'
 import {devicePlatform, isIOS} from 'platform/detection'
-
+import {track} from 'lib/analytics/analytics'
 import {logger} from '#/logger'
 import {RQKEY as RQKEY_NOTIFS} from '#/state/queries/notifications/feed'
 import {truncateAndInvalidate} from '#/state/queries/util'
-import {getAgent, SessionAccount} from '#/state/session'
-
-import {resetToTab} from '../../Navigation'
+import {SessionAccount, getAgent} from '#/state/session'
 
 const SERVICE_DID = (serviceUrl?: string) =>
   serviceUrl?.includes('staging')
diff --git a/src/lib/react-query.ts b/src/lib/react-query.ts
index 94a09c941..7fe3fe7a4 100644
--- a/src/lib/react-query.ts
+++ b/src/lib/react-query.ts
@@ -1,6 +1,5 @@
-import {focusManager, QueryClient} from '@tanstack/react-query'
 import {AppState, AppStateStatus} from 'react-native'
-
+import {QueryClient, focusManager} from '@tanstack/react-query'
 import {isNative} from '#/platform/detection'
 
 focusManager.setEventListener(onFocus => {
diff --git a/src/lib/routes/helpers.ts b/src/lib/routes/helpers.ts
index 03302da1a..0da885043 100644
--- a/src/lib/routes/helpers.ts
+++ b/src/lib/routes/helpers.ts
@@ -1,6 +1,5 @@
 import {NavigationProp} from '@react-navigation/native'
-
-import {RouteParams, State} from './types'
+import {State, RouteParams} from './types'
 
 export function getRootNavigation<T extends {}>(
   nav: NavigationProp<T>,
diff --git a/src/lib/routes/router.ts b/src/lib/routes/router.ts
index 45f9c85fd..8c8be3739 100644
--- a/src/lib/routes/router.ts
+++ b/src/lib/routes/router.ts
@@ -1,4 +1,4 @@
-import {Route, RouteParams} from './types'
+import {RouteParams, Route} from './types'
 
 export class Router {
   routes: [string, Route][] = []
diff --git a/src/lib/sentry.ts b/src/lib/sentry.ts
index 1120c389f..d0a5fe0fd 100644
--- a/src/lib/sentry.ts
+++ b/src/lib/sentry.ts
@@ -3,9 +3,9 @@
  * avoid future conflicts and/or circular deps
  */
 
-import * as info from 'expo-updates'
 import {Platform} from 'react-native'
 import app from 'react-native-version-number'
+import * as info from 'expo-updates'
 import {init} from 'sentry-expo'
 
 /**
diff --git a/src/lib/sharing.ts b/src/lib/sharing.ts
index 6c45e46cf..9f402f873 100644
--- a/src/lib/sharing.ts
+++ b/src/lib/sharing.ts
@@ -1,9 +1,8 @@
+import {isIOS, isAndroid} from 'platform/detection'
 // import * as Sharing from 'expo-sharing'
 import Clipboard from '@react-native-clipboard/clipboard'
-import {isAndroid, isIOS} from 'platform/detection'
-import {Share} from 'react-native'
-
 import * as Toast from '../view/com/util/Toast'
+import {Share} from 'react-native'
 
 /**
  * This function shares a URL using the native Share API if available, or copies it to the clipboard
diff --git a/src/lib/statsig/statsig.tsx b/src/lib/statsig/statsig.tsx
index c9e497af0..6d9ebeb09 100644
--- a/src/lib/statsig/statsig.tsx
+++ b/src/lib/statsig/statsig.tsx
@@ -1,12 +1,11 @@
-import {sha256} from 'js-sha256'
 import React from 'react'
 import {
   Statsig,
   StatsigProvider,
   useGate as useStatsigGate,
 } from 'statsig-react-native-expo'
-
 import {useSession} from '../../state/session'
+import {sha256} from 'js-sha256'
 
 const statsigOptions = {
   environment: {
diff --git a/src/lib/statsig/statsig.web.tsx b/src/lib/statsig/statsig.web.tsx
index c9cc56b6d..d1c912019 100644
--- a/src/lib/statsig/statsig.web.tsx
+++ b/src/lib/statsig/statsig.web.tsx
@@ -1,12 +1,11 @@
-import {sha256} from 'js-sha256'
 import React from 'react'
 import {
   Statsig,
   StatsigProvider,
   useGate as useStatsigGate,
 } from 'statsig-react'
-
 import {useSession} from '../../state/session'
+import {sha256} from 'js-sha256'
 
 const statsigOptions = {
   environment: {
diff --git a/src/lib/strings/display-names.ts b/src/lib/strings/display-names.ts
index e5eb4cfe5..75383dd4f 100644
--- a/src/lib/strings/display-names.ts
+++ b/src/lib/strings/display-names.ts
@@ -1,5 +1,4 @@
 import {ModerationUI} from '@atproto/api'
-
 import {describeModerationCause} from '../moderation'
 
 // \u2705 = ✅
diff --git a/src/lib/strings/embed-player.ts b/src/lib/strings/embed-player.ts
index 2ef6efdf1..1cf3b1293 100644
--- a/src/lib/strings/embed-player.ts
+++ b/src/lib/strings/embed-player.ts
@@ -1,5 +1,5 @@
-import {isWeb} from 'platform/detection'
 import {Dimensions} from 'react-native'
+import {isWeb} from 'platform/detection'
 const {height: SCREEN_HEIGHT} = Dimensions.get('window')
 
 export const embedPlayerSources = [
diff --git a/src/lib/strings/rich-text-helpers.ts b/src/lib/strings/rich-text-helpers.ts
index 54f0733d0..662004599 100644
--- a/src/lib/strings/rich-text-helpers.ts
+++ b/src/lib/strings/rich-text-helpers.ts
@@ -1,5 +1,4 @@
 import {AppBskyRichtextFacet, RichText} from '@atproto/api'
-
 import {linkRequiresWarning} from './url-helpers'
 
 export function richTextToString(rt: RichText, loose: boolean): string {
diff --git a/src/lib/strings/rich-text-manip.ts b/src/lib/strings/rich-text-manip.ts
index 508e0772e..d9cd8c071 100644
--- a/src/lib/strings/rich-text-manip.ts
+++ b/src/lib/strings/rich-text-manip.ts
@@ -1,5 +1,4 @@
 import {RichText, UnicodeString} from '@atproto/api'
-
 import {toShortUrl} from './url-helpers'
 
 export function shortenLinks(rt: RichText): RichText {
diff --git a/src/lib/strings/url-helpers.ts b/src/lib/strings/url-helpers.ts
index 60d5f3cbb..820311e4e 100644
--- a/src/lib/strings/url-helpers.ts
+++ b/src/lib/strings/url-helpers.ts
@@ -1,7 +1,7 @@
 import {AtUri} from '@atproto/api'
 import {BSKY_SERVICE} from 'lib/constants'
-import psl from 'psl'
 import TLDs from 'tlds'
+import psl from 'psl'
 
 export const BSKY_APP_HOST = 'https://bsky.app'
 
diff --git a/src/lib/styles.ts b/src/lib/styles.ts
index 50755f53d..263127440 100644
--- a/src/lib/styles.ts
+++ b/src/lib/styles.ts
@@ -1,7 +1,6 @@
-import {isWeb} from 'platform/detection'
 import {Dimensions, StyleProp, StyleSheet, TextStyle} from 'react-native'
-
 import {Theme, TypographyVariant} from './ThemeContext'
+import {isWeb} from 'platform/detection'
 
 // 1 is lightest, 2 is light, 3 is mid, 4 is dark, 5 is darkest
 export const colors = {
diff --git a/src/lib/themes.ts b/src/lib/themes.ts
index 4fb118400..bd75aabea 100644
--- a/src/lib/themes.ts
+++ b/src/lib/themes.ts
@@ -1,9 +1,8 @@
 import {Platform} from 'react-native'
-
-import {darkPalette, dimPalette, lightPalette} from '#/alf/themes'
-
-import {colors} from './styles'
 import type {Theme} from './ThemeContext'
+import {colors} from './styles'
+
+import {darkPalette, lightPalette, dimPalette} from '#/alf/themes'
 
 export const defaultTheme: Theme = {
   colorScheme: 'light',