···1-import {useCallback, useRef} from 'react'
2import {Linking} from 'react-native'
3import * as Notifications from 'expo-notifications'
4import {i18n, type MessageDescriptor} from '@lingui/core'
···64import {PrivacyPolicyScreen} from '#/view/screens/PrivacyPolicy'
65import {ProfileScreen} from '#/view/screens/Profile'
66import {ProfileFeedLikedByScreen} from '#/view/screens/ProfileFeedLikedBy'
67-import {ProfileListScreen} from '#/view/screens/ProfileList'
68-import {SavedFeeds} from '#/view/screens/SavedFeeds'
69import {Storybook} from '#/view/screens/Storybook'
70import {SupportScreen} from '#/view/screens/Support'
71import {TermsOfServiceScreen} from '#/view/screens/TermsOfService'
···92import {ProfileFollowsScreen} from '#/screens/Profile/ProfileFollows'
93import {ProfileLabelerLikedByScreen} from '#/screens/Profile/ProfileLabelerLikedBy'
94import {ProfileSearchScreen} from '#/screens/Profile/ProfileSearch'
0095import {SearchScreen} from '#/screens/Search'
96import {AboutSettingsScreen} from '#/screens/Settings/AboutSettings'
97import {AccessibilitySettingsScreen} from '#/screens/Settings/AccessibilitySettings'
···1+import {type JSX, useCallback, useRef} from 'react'
2import {Linking} from 'react-native'
3import * as Notifications from 'expo-notifications'
4import {i18n, type MessageDescriptor} from '@lingui/core'
···64import {PrivacyPolicyScreen} from '#/view/screens/PrivacyPolicy'
65import {ProfileScreen} from '#/view/screens/Profile'
66import {ProfileFeedLikedByScreen} from '#/view/screens/ProfileFeedLikedBy'
0067import {Storybook} from '#/view/screens/Storybook'
68import {SupportScreen} from '#/view/screens/Support'
69import {TermsOfServiceScreen} from '#/view/screens/TermsOfService'
···90import {ProfileFollowsScreen} from '#/screens/Profile/ProfileFollows'
91import {ProfileLabelerLikedByScreen} from '#/screens/Profile/ProfileLabelerLikedBy'
92import {ProfileSearchScreen} from '#/screens/Profile/ProfileSearch'
93+import {ProfileListScreen} from '#/screens/ProfileList'
94+import {SavedFeeds} from '#/screens/SavedFeeds'
95import {SearchScreen} from '#/screens/Search'
96import {AboutSettingsScreen} from '#/screens/Settings/AboutSettings'
97import {AccessibilitySettingsScreen} from '#/screens/Settings/AccessibilitySettings'
+1-1
src/Splash.tsx
···15 withTiming,
16} from 'react-native-reanimated'
17import {useSafeAreaInsets} from 'react-native-safe-area-context'
18-import Svg, {Path, SvgProps} from 'react-native-svg'
19import {Image} from 'expo-image'
20import * as SplashScreen from 'expo-splash-screen'
21
···15 withTiming,
16} from 'react-native-reanimated'
17import {useSafeAreaInsets} from 'react-native-safe-area-context'
18+import Svg, {Path, type SvgProps} from 'react-native-svg'
19import {Image} from 'expo-image'
20import * as SplashScreen from 'expo-splash-screen'
21
+1-1
src/alf/types.ts
···1-import {StyleProp, TextStyle, ViewStyle} from 'react-native'
23export type TextStyleProp = {
4 style?: StyleProp<TextStyle>
···1+import {type StyleProp, type TextStyle, type ViewStyle} from 'react-native'
23export type TextStyleProp = {
4 style?: StyleProp<TextStyle>
-1
src/alf/typography.tsx
···3import {type StyleProp, type TextStyle} from 'react-native'
4import {UITextView} from 'react-native-uitextview'
5import createEmojiRegex from 'emoji-regex'
6-import type React from 'react'
78import {isNative} from '#/platform/detection'
9import {isIOS} from '#/platform/detection'
···3import {type StyleProp, type TextStyle} from 'react-native'
4import {UITextView} from 'react-native-uitextview'
5import createEmojiRegex from 'emoji-regex'
067import {isNative} from '#/platform/detection'
8import {isIOS} from '#/platform/detection'
+1-1
src/alf/util/themeSelector.ts
···1-import {ThemeName} from '#/alf/types'
23export function select<T>(name: ThemeName, options: Record<ThemeName, T>) {
4 switch (name) {
···1+import {type ThemeName} from '#/alf/types'
23export function select<T>(name: ThemeName, options: Record<ThemeName, T>) {
4 switch (name) {
+2-2
src/alf/util/useColorModeTheme.ts
···1import React from 'react'
2-import {ColorSchemeName, useColorScheme} from 'react-native'
34import {isWeb} from '#/platform/detection'
5import {useThemePrefs} from '#/state/shell'
6import {dark, dim, light} from '#/alf/themes'
7-import {ThemeName} from '#/alf/types'
89export function useColorModeTheme(): ThemeName {
10 const theme = useThemeName()
···1import React from 'react'
2+import {type ColorSchemeName, useColorScheme} from 'react-native'
34import {isWeb} from '#/platform/detection'
5import {useThemePrefs} from '#/state/shell'
6import {dark, dim, light} from '#/alf/themes'
7+import {type ThemeName} from '#/alf/types'
89export function useColorModeTheme(): ThemeName {
10 const theme = useThemeName()
+1-1
src/alf/util/useGutters.ts
···1import React from 'react'
23-import {Breakpoint, useBreakpoints} from '#/alf/breakpoints'
4import * as tokens from '#/alf/tokens'
56type Gutter = 'compact' | 'base' | 'wide' | 0
···1import React from 'react'
23+import {type Breakpoint, useBreakpoints} from '#/alf/breakpoints'
4import * as tokens from '#/alf/tokens'
56type Gutter = 'compact' | 'base' | 'wide' | 0
···5 type ViewStyle,
6} from 'react-native'
7import {type SharedValue} from 'react-native-reanimated'
8-import type React from 'react'
910import type * as Dialog from '#/components/Dialog'
11import {
···5 type ViewStyle,
6} from 'react-native'
7import {type SharedValue} from 'react-native-reanimated'
089import type * as Dialog from '#/components/Dialog'
10import {
+1-2
src/components/Dialog/types.ts
···5 type StyleProp,
6 type ViewStyle,
7} from 'react-native'
8-import type React from 'react'
910import {type ViewStyleProp} from '#/alf'
11import {type BottomSheetViewProps} from '../../../modules/bottom-sheet'
···34 */
35export type DialogControlProps = DialogControlRefProps & {
36 id: string
37- ref: React.RefObject<DialogControlRefProps>
38 isOpen?: boolean
39}
40
···5 type StyleProp,
6 type ViewStyle,
7} from 'react-native'
089import {type ViewStyleProp} from '#/alf'
10import {type BottomSheetViewProps} from '../../../modules/bottom-sheet'
···33 */
34export type DialogControlProps = DialogControlRefProps & {
35 id: string
36+ ref: React.RefObject<DialogControlRefProps | null>
37 isOpen?: boolean
38}
39
+1-1
src/components/Dialog/utils.ts
···1import React from 'react'
23-import {DialogControlProps} from '#/components/Dialog/types'
45export function useAutoOpen(control: DialogControlProps, showTimeout?: number) {
6 React.useEffect(() => {
···1import React from 'react'
23+import {type DialogControlProps} from '#/components/Dialog/types'
45export function useAutoOpen(control: DialogControlProps, showTimeout?: number) {
6 React.useEffect(() => {
+2-2
src/components/Fill.tsx
···1-import React from 'react'
2import {View} from 'react-native'
034-import {atoms as a, ViewStyleProp} from '#/alf'
56export function Fill({
7 children,
···01import {View} from 'react-native'
2+import type React from 'react'
34+import {atoms as a, type ViewStyleProp} from '#/alf'
56export function Fill({
7 children,
+1-1
src/components/GradientFill.tsx
···1import {LinearGradient} from 'expo-linear-gradient'
23-import {atoms as a, tokens, ViewStyleProp} from '#/alf'
45export function GradientFill({
6 gradient,
···1import {LinearGradient} from 'expo-linear-gradient'
23+import {atoms as a, type tokens, type ViewStyleProp} from '#/alf'
45export function GradientFill({
6 gradient,
+4-4
src/components/IconCircle.tsx
···3import {
4 atoms as a,
5 flatten,
6- TextStyleProp,
7 useTheme,
8- ViewStyleProp,
9} from '#/alf'
10-import {Props} from '#/components/icons/common'
11-import {Growth_Stroke2_Corner0_Rounded as Growth} from '#/components/icons/Growth'
1213export function IconCircle({
14 icon: Icon,
···3import {
4 atoms as a,
5 flatten,
6+ type TextStyleProp,
7 useTheme,
8+ type ViewStyleProp,
9} from '#/alf'
10+import {type Props} from '#/components/icons/common'
11+import {type Growth_Stroke2_Corner0_Rounded as Growth} from '#/components/icons/Growth'
1213export function IconCircle({
14 icon: Icon,
+4-4
src/components/LabelingServiceCard/index.tsx
···1-import React from 'react'
2import {View} from 'react-native'
3-import {AppBskyLabelerDefs} from '@atproto/api'
4import {msg, Plural, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
067import {getLabelingServiceTitle} from '#/lib/moderation'
8import {sanitizeHandle} from '#/lib/strings/handles'
9import {useLabelerInfoQuery} from '#/state/queries/labeler'
10import {UserAvatar} from '#/view/com/util/UserAvatar'
11-import {atoms as a, useTheme, ViewStyleProp} from '#/alf'
12import {Flag_Stroke2_Corner0_Rounded as Flag} from '#/components/icons/Flag'
13-import {Link as InternalLink, LinkProps} from '#/components/Link'
14import {RichText} from '#/components/RichText'
15import {Text} from '#/components/Typography'
16import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '../icons/Chevron'
···01import {View} from 'react-native'
2+import {type AppBskyLabelerDefs} from '@atproto/api'
3import {msg, Plural, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5+import type React from 'react'
67import {getLabelingServiceTitle} from '#/lib/moderation'
8import {sanitizeHandle} from '#/lib/strings/handles'
9import {useLabelerInfoQuery} from '#/state/queries/labeler'
10import {UserAvatar} from '#/view/com/util/UserAvatar'
11+import {atoms as a, useTheme, type ViewStyleProp} from '#/alf'
12import {Flag_Stroke2_Corner0_Rounded as Flag} from '#/components/icons/Flag'
13+import {Link as InternalLink, type LinkProps} from '#/components/Link'
14import {RichText} from '#/components/RichText'
15import {Text} from '#/components/Typography'
16import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '../icons/Chevron'
+1-1
src/components/LikedByList.tsx
···1import React from 'react'
2-import {AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
···1import React from 'react'
2+import {type AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
+2-2
src/components/LinearGradientBackground.tsx
···1-import React from 'react'
2-import {StyleProp, ViewStyle} from 'react-native'
3import {LinearGradient} from 'expo-linear-gradient'
045import {gradients} from '#/alf/tokens'
6
···1+import {type StyleProp, type ViewStyle} from 'react-native'
02import {LinearGradient} from 'expo-linear-gradient'
3+import type React from 'react'
45import {gradients} from '#/alf/tokens'
6
-1
src/components/Lists.tsx
···2import {type StyleProp, View, type ViewStyle} from 'react-native'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5-import type React from 'react'
67import {cleanError} from '#/lib/strings/errors'
8import {CenteredView} from '#/view/com/util/Views'
···2import {type StyleProp, View, type ViewStyle} from 'react-native'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
056import {cleanError} from '#/lib/strings/errors'
7import {CenteredView} from '#/view/com/util/Views'
+1-1
src/components/Loader.tsx
···8} from 'react-native-reanimated'
910import {atoms as a, flatten, useTheme} from '#/alf'
11-import {Props, useCommonSVGProps} from '#/components/icons/common'
12import {Loader_Stroke2_Corner0_Rounded as Icon} from '#/components/icons/Loader'
1314export function Loader(props: Props) {
···8} from 'react-native-reanimated'
910import {atoms as a, flatten, useTheme} from '#/alf'
11+import {type Props, useCommonSVGProps} from '#/components/icons/common'
12import {Loader_Stroke2_Corner0_Rounded as Icon} from '#/components/icons/Loader'
1314export function Loader(props: Props) {
+1-1
src/components/Loader.web.tsx
···1import {View} from 'react-native'
23import {atoms as a, flatten, useTheme} from '#/alf'
4-import {Props, useCommonSVGProps} from '#/components/icons/common'
5import {Loader_Stroke2_Corner0_Rounded as Icon} from '#/components/icons/Loader'
67export function Loader(props: Props) {
···1import {View} from 'react-native'
23import {atoms as a, flatten, useTheme} from '#/alf'
4+import {type Props, useCommonSVGProps} from '#/components/icons/common'
5import {Loader_Stroke2_Corner0_Rounded as Icon} from '#/components/icons/Loader'
67export function Loader(props: Props) {
+2-2
src/components/MediaInsetBorder.tsx
···1-import React from 'react'
23-import {atoms as a, useTheme, ViewStyleProp} from '#/alf'
4import {Fill} from '#/components/Fill'
56/**
···1+import type React from 'react'
23+import {atoms as a, useTheme, type ViewStyleProp} from '#/alf'
4import {Fill} from '#/components/Fill'
56/**
+8-8
src/components/Menu/types.ts
···1-import React from 'react'
2import {
3- AccessibilityProps,
4- AccessibilityRole,
5- GestureResponderEvent,
6- PressableProps,
7} from 'react-native'
089-import {TextStyleProp, ViewStyleProp} from '#/alf'
10-import * as Dialog from '#/components/Dialog'
11-import {Props as SVGIconProps} from '#/components/icons/common'
1213export type ContextType = {
14 control: Dialog.DialogOuterProps['control']
···01import {
2+ type AccessibilityProps,
3+ type AccessibilityRole,
4+ type GestureResponderEvent,
5+ type PressableProps,
6} from 'react-native'
7+import type React from 'react'
89+import {type TextStyleProp, type ViewStyleProp} from '#/alf'
10+import type * as Dialog from '#/components/Dialog'
11+import {type Props as SVGIconProps} from '#/components/icons/common'
1213export type ContextType = {
14 control: Dialog.DialogOuterProps['control']
···1import React from 'react'
2import {View} from 'react-native'
3-import {BSKY_LABELER_DID, ModerationCause} from '@atproto/api'
4import {Trans} from '@lingui/macro'
56import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
7import {UserAvatar} from '#/view/com/util/UserAvatar'
8-import {atoms as a, useTheme, ViewStyleProp} from '#/alf'
9import {Button} from '#/components/Button'
10import {
11 ModerationDetailsDialog,
···1import React from 'react'
2import {View} from 'react-native'
3+import {BSKY_LABELER_DID, type ModerationCause} from '@atproto/api'
4import {Trans} from '@lingui/macro'
56import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
7import {UserAvatar} from '#/view/com/util/UserAvatar'
8+import {atoms as a, useTheme, type ViewStyleProp} from '#/alf'
9import {Button} from '#/components/Button'
10import {
11 ModerationDetailsDialog,
···1import {View} from 'react-native'
2import {msg, Trans} from '@lingui/macro'
3import {useLingui} from '@lingui/react'
4-import type React from 'react'
56import {atoms as a, useTheme} from '#/alf'
7import {Button, ButtonText} from '#/components/Button'
···1import {View} from 'react-native'
2import {msg, Trans} from '@lingui/macro'
3import {useLingui} from '@lingui/react'
045import {atoms as a, useTheme} from '#/alf'
6import {Button, ButtonText} from '#/components/Button'
···1import {type SvgProps} from 'react-native-svg'
2-import type React from 'react'
34import {PressableWithHover} from '#/view/com/util/PressableWithHover'
5import {atoms as a, useTheme, web} from '#/alf'
···1import {type SvgProps} from 'react-native-svg'
023import {PressableWithHover} from '#/view/com/util/PressableWithHover'
4import {atoms as a, useTheme, web} from '#/alf'
···2import {View} from 'react-native'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5-import type React from 'react'
67import {isFirefox, isTouchDevice} from '#/lib/browser'
8import {clamp} from '#/lib/numbers'
···2import {View} from 'react-native'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
056import {isFirefox, isTouchDevice} from '#/lib/browser'
7import {clamp} from '#/lib/numbers'
···3import Animated, {FadeIn, FadeOut} from 'react-native-reanimated'
4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6-import type React from 'react'
78import {isSafari, isTouchDevice} from '#/lib/browser'
9import {atoms as a} from '#/alf'
···3import Animated, {FadeIn, FadeOut} from 'react-native-reanimated'
4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
067import {isSafari, isTouchDevice} from '#/lib/browser'
8import {atoms as a} from '#/alf'
···10import {type AppBskyEmbedVideo} from '@atproto/api'
11import {msg} from '@lingui/macro'
12import {useLingui} from '@lingui/react'
13-import type React from 'react'
1415import {isFirefox} from '#/lib/browser'
16import {ErrorBoundary} from '#/view/com/util/ErrorBoundary'
···38 useActiveVideoWeb()
39 const [onScreen, setOnScreen] = useState(false)
40 const [isFullscreen] = useFullscreen()
41- const lastKnownTime = useRef<number | undefined>()
4243 useEffect(() => {
44 if (!ref.current) return
···10import {type AppBskyEmbedVideo} from '@atproto/api'
11import {msg} from '@lingui/macro'
12import {useLingui} from '@lingui/react'
01314import {isFirefox} from '#/lib/browser'
15import {ErrorBoundary} from '#/view/com/util/ErrorBoundary'
···37 useActiveVideoWeb()
38 const [onScreen, setOnScreen] = useState(false)
39 const [isFullscreen] = useFullscreen()
40+ const lastKnownTime = useRef<number | undefined>(undefined)
4142 useEffect(() => {
43 if (!ref.current) return
-1
src/components/PostControls/PostMenu/index.tsx
···8} from '@atproto/api'
9import {msg} from '@lingui/macro'
10import {useLingui} from '@lingui/react'
11-import type React from 'react'
1213import {type Shadow} from '#/state/cache/post-shadow'
14import {EventStopper} from '#/view/com/util/EventStopper'
···8} from '@atproto/api'
9import {msg} from '@lingui/macro'
10import {useLingui} from '@lingui/react'
01112import {type Shadow} from '#/state/cache/post-shadow'
13import {EventStopper} from '#/view/com/util/EventStopper'
···3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {useNavigation} from '@react-navigation/native'
6-import type React from 'react'
78import {makeProfileLink} from '#/lib/routes/links'
9import {type NavigationProp} from '#/lib/routes/types'
···3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {useNavigation} from '@react-navigation/native'
067import {makeProfileLink} from '#/lib/routes/links'
8import {type NavigationProp} from '#/lib/routes/types'
-1
src/components/PostControls/ShareMenu/index.tsx
···9} from '@atproto/api'
10import {msg} from '@lingui/macro'
11import {useLingui} from '@lingui/react'
12-import type React from 'react'
1314import {makeProfileLink} from '#/lib/routes/links'
15import {shareUrl} from '#/lib/sharing'
···9} from '@atproto/api'
10import {msg} from '@lingui/macro'
11import {useLingui} from '@lingui/react'
01213import {makeProfileLink} from '#/lib/routes/links'
14import {shareUrl} from '#/lib/sharing'
-2
src/components/ProfileHoverCard/types.ts
···1-import type React from 'react'
2-3import {type ViewStyleProp} from '#/alf'
45export type ProfileHoverCardProps = ViewStyleProp & {
···001import {type ViewStyleProp} from '#/alf'
23export type ProfileHoverCardProps = ViewStyleProp & {
···1-import {StyleProp, View, ViewStyle} from 'react-native'
2import {msg, Trans} from '@lingui/macro'
3import {useLingui} from '@lingui/react'
4
···1+import {type StyleProp, View, type ViewStyle} from 'react-native'
2import {msg, Trans} from '@lingui/macro'
3import {useLingui} from '@lingui/react'
4
+2-2
src/components/ProgressGuide/Toast.tsx
···14import {isWeb} from '#/platform/detection'
15import {atoms as a, useTheme} from '#/alf'
16import {Portal} from '#/components/Portal'
17-import {AnimatedCheck, AnimatedCheckRef} from '../anim/AnimatedCheck'
18import {Text} from '../Typography'
1920export interface ProgressGuideToastRef {
···39 const translateY = useSharedValue(0)
40 const opacity = useSharedValue(0)
41 const animatedCheckRef = React.useRef<AnimatedCheckRef | null>(null)
42- const timeoutRef = React.useRef<NodeJS.Timeout | undefined>()
43 const winDim = useWindowDimensions()
4445 /**
···14import {isWeb} from '#/platform/detection'
15import {atoms as a, useTheme} from '#/alf'
16import {Portal} from '#/components/Portal'
17+import {AnimatedCheck, type AnimatedCheckRef} from '../anim/AnimatedCheck'
18import {Text} from '../Typography'
1920export interface ProgressGuideToastRef {
···39 const translateY = useSharedValue(0)
40 const opacity = useSharedValue(0)
41 const animatedCheckRef = React.useRef<AnimatedCheckRef | null>(null)
42+ const timeoutRef = React.useRef<NodeJS.Timeout | undefined>(undefined)
43 const winDim = useWindowDimensions()
4445 /**
+2-2
src/components/ReportDialog/SelectLabelerView.tsx
···1import {View} from 'react-native'
2-import {AppBskyLabelerDefs} from '@atproto/api'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5···9import {Divider} from '#/components/Divider'
10import * as LabelingServiceCard from '#/components/LabelingServiceCard'
11import {Text} from '#/components/Typography'
12-import {ReportDialogProps} from './types'
1314export function SelectLabelerView({
15 ...props
···1import {View} from 'react-native'
2+import {type AppBskyLabelerDefs} from '@atproto/api'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5···9import {Divider} from '#/components/Divider'
10import * as LabelingServiceCard from '#/components/LabelingServiceCard'
11import {Text} from '#/components/Typography'
12+import {type ReportDialogProps} from './types'
1314export function SelectLabelerView({
15 ...props
···1import React from 'react'
2import {View} from 'react-native'
3-import {AppBskyLabelerDefs} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67-import {ReportOption, useReportOptions} from '#/lib/moderation/useReportOptions'
0008import {Link} from '#/components/Link'
9import {DMCA_LINK} from '#/components/ReportDialog/const'
10export {useDialogControl as useReportDialogControl} from '#/components/Dialog'
···23} from '#/components/icons/Chevron'
24import {SquareArrowTopRight_Stroke2_Corner0_Rounded as SquareArrowTopRight} from '#/components/icons/SquareArrowTopRight'
25import {Text} from '#/components/Typography'
26-import {ReportDialogProps} from './types'
2728export function SelectReportOptionView(props: {
29 params: ReportDialogProps['params']
···1import React from 'react'
2import {View} from 'react-native'
3+import {type AppBskyLabelerDefs} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67+import {
8+ type ReportOption,
9+ useReportOptions,
10+} from '#/lib/moderation/useReportOptions'
11import {Link} from '#/components/Link'
12import {DMCA_LINK} from '#/components/ReportDialog/const'
13export {useDialogControl as useReportDialogControl} from '#/components/Dialog'
···26} from '#/components/icons/Chevron'
27import {SquareArrowTopRight_Stroke2_Corner0_Rounded as SquareArrowTopRight} from '#/components/icons/SquareArrowTopRight'
28import {Text} from '#/components/Typography'
29+import {type ReportDialogProps} from './types'
3031export function SelectReportOptionView(props: {
32 params: ReportDialogProps['params']
+3-3
src/components/ReportDialog/SubmitView.tsx
···1import React from 'react'
2import {View} from 'react-native'
3-import {AppBskyLabelerDefs} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67import {getLabelingServiceTitle} from '#/lib/moderation'
8-import {ReportOption} from '#/lib/moderation/useReportOptions'
9import {isAndroid} from '#/platform/detection'
10import {useAgent} from '#/state/session'
11import {CharProgress} from '#/view/com/composer/char-progress/CharProgress'
···19import {PaperPlane_Stroke2_Corner0_Rounded as SendIcon} from '#/components/icons/PaperPlane'
20import {Loader} from '#/components/Loader'
21import {Text} from '#/components/Typography'
22-import {ReportDialogProps} from './types'
2324export function SubmitView({
25 params,
···1import React from 'react'
2import {View} from 'react-native'
3+import {type AppBskyLabelerDefs} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67import {getLabelingServiceTitle} from '#/lib/moderation'
8+import {type ReportOption} from '#/lib/moderation/useReportOptions'
9import {isAndroid} from '#/platform/detection'
10import {useAgent} from '#/state/session'
11import {CharProgress} from '#/view/com/composer/char-progress/CharProgress'
···19import {PaperPlane_Stroke2_Corner0_Rounded as SendIcon} from '#/components/icons/PaperPlane'
20import {Loader} from '#/components/Loader'
21import {Text} from '#/components/Typography'
22+import {type ReportDialogProps} from './types'
2324export function SubmitView({
25 params,
+4-4
src/components/ReportDialog/index.tsx
···1import React from 'react'
2import {Pressable, View} from 'react-native'
3-import {ScrollView} from 'react-native-gesture-handler'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67-import {ReportOption} from '#/lib/moderation/useReportOptions'
8import {useMyLabelersQuery} from '#/state/queries/preferences'
9export {useDialogControl as useReportDialogControl} from '#/components/Dialog'
1011-import {AppBskyLabelerDefs} from '@atproto/api'
1213import {atoms as a} from '#/alf'
14import * as Dialog from '#/components/Dialog'
···18import {SelectLabelerView} from './SelectLabelerView'
19import {SelectReportOptionView} from './SelectReportOptionView'
20import {SubmitView} from './SubmitView'
21-import {ReportDialogProps} from './types'
2223export function ReportDialog(props: ReportDialogProps) {
24 return (
···1import React from 'react'
2import {Pressable, View} from 'react-native'
3+import {type ScrollView} from 'react-native-gesture-handler'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67+import {type ReportOption} from '#/lib/moderation/useReportOptions'
8import {useMyLabelersQuery} from '#/state/queries/preferences'
9export {useDialogControl as useReportDialogControl} from '#/components/Dialog'
1011+import {type AppBskyLabelerDefs} from '@atproto/api'
1213import {atoms as a} from '#/alf'
14import * as Dialog from '#/components/Dialog'
···18import {SelectLabelerView} from './SelectLabelerView'
19import {SelectReportOptionView} from './SelectReportOptionView'
20import {SubmitView} from './SubmitView'
21+import {type ReportDialogProps} from './types'
2223export function ReportDialog(props: ReportDialogProps) {
24 return (
+1-1
src/components/ReportDialog/types.ts
···1-import * as Dialog from '#/components/Dialog'
23export type ReportDialogProps = {
4 control: Dialog.DialogOuterProps['control']
···1+import type * as Dialog from '#/components/Dialog'
23export type ReportDialogProps = {
4 control: Dialog.DialogOuterProps['control']
+2-2
src/components/RichTextTag.tsx
···1import React from 'react'
2-import {StyleProp, Text as RNText, TextStyle} from 'react-native'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {useNavigation} from '@react-navigation/native'
67-import {NavigationProp} from '#/lib/routes/types'
8import {isInvalidHandle} from '#/lib/strings/handles'
9import {isNative, isWeb} from '#/platform/detection'
10import {
···1import React from 'react'
2+import {type StyleProp, Text as RNText, type TextStyle} from 'react-native'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {useNavigation} from '@react-navigation/native'
67+import {type NavigationProp} from '#/lib/routes/types'
8import {isInvalidHandle} from '#/lib/strings/handles'
9import {isNative, isWeb} from '#/platform/detection'
10import {
+1-1
src/components/Select/types.ts
···160 item: T,
161 index: number,
162 selectedValue?: string | null,
163- ) => React.ReactElement
164 /*
165 * Extracts the value from an item. Defaults to `item => item.value`
166 */
···160 item: T,
161 index: number,
162 selectedValue?: string | null,
163+ ) => React.ReactElement<any>
164 /*
165 * Extracts the value from an item. Defaults to `item => item.value`
166 */
+3-3
src/components/StarterPack/Main/PostsList.tsx
···4import {useLingui} from '@lingui/react'
56import {isNative} from '#/platform/detection'
7-import {FeedDescriptor} from '#/state/queries/post-feed'
8import {PostFeed} from '#/view/com/posts/PostFeed'
9import {EmptyState} from '#/view/com/util/EmptyState'
10-import {ListRef} from '#/view/com/util/List'
11-import {SectionRef} from '#/screens/Profile/Sections/types'
1213interface ProfilesListProps {
14 listUri: string
···4import {useLingui} from '@lingui/react'
56import {isNative} from '#/platform/detection'
7+import {type FeedDescriptor} from '#/state/queries/post-feed'
8import {PostFeed} from '#/view/com/posts/PostFeed'
9import {EmptyState} from '#/view/com/util/EmptyState'
10+import {type ListRef} from '#/view/com/util/List'
11+import {type SectionRef} from '#/screens/Profile/Sections/types'
1213interface ProfilesListProps {
14 listUri: string
+10-7
src/components/StarterPack/Main/ProfilesList.tsx
···1import React, {useCallback} from 'react'
2-import {ListRenderItemInfo, View} from 'react-native'
3import {
4- AppBskyActorDefs,
5- AppBskyGraphGetList,
6 AtUri,
7- ModerationOpts,
8} from '@atproto/api'
9-import {InfiniteData, UseInfiniteQueryResult} from '@tanstack/react-query'
0001011import {useBottomBarOffset} from '#/lib/hooks/useBottomBarOffset'
12import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
···14import {isNative, isWeb} from '#/platform/detection'
15import {useAllListMembersQuery} from '#/state/queries/list-members'
16import {useSession} from '#/state/session'
17-import {List, ListRef} from '#/view/com/util/List'
18-import {SectionRef} from '#/screens/Profile/Sections/types'
19import {atoms as a, useTheme} from '#/alf'
20import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
21import {Default as ProfileCard} from '#/components/ProfileCard'
···1import React, {useCallback} from 'react'
2+import {type ListRenderItemInfo, View} from 'react-native'
3import {
4+ type AppBskyActorDefs,
5+ type AppBskyGraphGetList,
6 AtUri,
7+ type ModerationOpts,
8} from '@atproto/api'
9+import {
10+ type InfiniteData,
11+ type UseInfiniteQueryResult,
12+} from '@tanstack/react-query'
1314import {useBottomBarOffset} from '#/lib/hooks/useBottomBarOffset'
15import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
···17import {isNative, isWeb} from '#/platform/detection'
18import {useAllListMembersQuery} from '#/state/queries/list-members'
19import {useSession} from '#/state/session'
20+import {List, type ListRef} from '#/view/com/util/List'
21+import {type SectionRef} from '#/screens/Profile/Sections/types'
22import {atoms as a, useTheme} from '#/alf'
23import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
24import {Default as ProfileCard} from '#/components/ProfileCard'
+11-11
src/components/StarterPack/QrCode.tsx
···1-import React from 'react'
2import {View} from 'react-native'
3// @ts-expect-error missing types
4import QRCode from 'react-native-qrcode-styled'
5import type ViewShot from 'react-native-view-shot'
6-import {AppBskyGraphDefs, AppBskyGraphStarterpack} from '@atproto/api'
7import {Trans} from '@lingui/macro'
89import {isWeb} from '#/platform/detection'
···15import {Text} from '#/components/Typography'
16import * as bsky from '#/types/bsky'
1718-const LazyViewShot = React.lazy(
19 // @ts-expect-error dynamic import
20 () => import('react-native-view-shot/src/index'),
21)
2223-interface Props {
000024 starterPack: AppBskyGraphDefs.StarterPackView
25 link: string
26-}
27-28-export const QrCode = React.forwardRef<ViewShot, Props>(function QrCode(
29- {starterPack, link},
30- ref,
31-) {
32 const {record} = starterPack
3334 if (
···93 </LinearGradientBackground>
94 </LazyViewShot>
95 )
96-})
9798export function QrCodeInner({link}: {link: string}) {
99 const t = useTheme()
···1+import {lazy} from 'react'
2import {View} from 'react-native'
3// @ts-expect-error missing types
4import QRCode from 'react-native-qrcode-styled'
5import type ViewShot from 'react-native-view-shot'
6+import {type AppBskyGraphDefs, AppBskyGraphStarterpack} from '@atproto/api'
7import {Trans} from '@lingui/macro'
89import {isWeb} from '#/platform/detection'
···15import {Text} from '#/components/Typography'
16import * as bsky from '#/types/bsky'
1718+const LazyViewShot = lazy(
19 // @ts-expect-error dynamic import
20 () => import('react-native-view-shot/src/index'),
21)
2223+export function QrCode({
24+ starterPack,
25+ link,
26+ ref,
27+}: {
28 starterPack: AppBskyGraphDefs.StarterPackView
29 link: string
30+ ref: React.Ref<ViewShot>
31+}) {
000032 const {record} = starterPack
3334 if (
···93 </LinearGradientBackground>
94 </LazyViewShot>
95 )
96+}
9798export function QrCodeInner({link}: {link: string}) {
99 const t = useTheme()
···1-import React from 'react'
2-import {StyleProp, ViewStyle} from 'react-native'
3import Animated, {
4 FadeIn,
5 FadeOut,
6 SlideInLeft,
7 SlideInRight,
8} from 'react-native-reanimated'
0910import {isWeb} from '#/platform/detection'
11
···1+import {type StyleProp, type ViewStyle} from 'react-native'
02import Animated, {
3 FadeIn,
4 FadeOut,
5 SlideInLeft,
6 SlideInRight,
7} from 'react-native-reanimated'
8+import type React from 'react'
910import {isWeb} from '#/platform/detection'
11
+1-1
src/components/SubtleWebHover.tsx
···1-import {ViewStyleProp} from '#/alf'
23export function SubtleWebHover({}: ViewStyleProp & {hover: boolean}) {
4 return null
···1+import {type ViewStyleProp} from '#/alf'
23export function SubtleWebHover({}: ViewStyleProp & {hover: boolean}) {
4 return null
+4-4
src/components/TrendingTopics.tsx
···1import React from 'react'
2import {View} from 'react-native'
3-import {AtUri} from '@atproto/api'
4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6···10// import {Hashtag_Stroke2_Corner0_Rounded as Hashtag} from '#/components/icons/Hashtag'
11// import {CloseQuote_Filled_Stroke2_Corner0_Rounded as Quote} from '#/components/icons/Quote'
12// import {UserAvatar} from '#/view/com/util/UserAvatar'
13-import type {TrendingTopic} from '#/state/queries/trending/useTrendingTopics'
14-import {atoms as a, native, useTheme, ViewStyleProp} from '#/alf'
15import {StarterPack as StarterPackIcon} from '#/components/icons/StarterPack'
16-import {Link as InternalLink, LinkProps} from '#/components/Link'
17import {Text} from '#/components/Typography'
1819export function TrendingTopic({
···1import React from 'react'
2import {View} from 'react-native'
3+import {type AtUri} from '@atproto/api'
4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6···10// import {Hashtag_Stroke2_Corner0_Rounded as Hashtag} from '#/components/icons/Hashtag'
11// import {CloseQuote_Filled_Stroke2_Corner0_Rounded as Quote} from '#/components/icons/Quote'
12// import {UserAvatar} from '#/view/com/util/UserAvatar'
13+import {type TrendingTopic} from '#/state/queries/trending/useTrendingTopics'
14+import {atoms as a, native, useTheme, type ViewStyleProp} from '#/alf'
15import {StarterPack as StarterPackIcon} from '#/components/icons/StarterPack'
16+import {Link as InternalLink, type LinkProps} from '#/components/Link'
17import {Text} from '#/components/Typography'
1819export function TrendingTopic({
+1-1
src/components/anim/AnimatedCheck.tsx
···8} from 'react-native-reanimated'
9import Svg, {Circle, Path} from 'react-native-svg'
1011-import {Props, useCommonSVGProps} from '#/components/icons/common'
1213const AnimatedPath = Animated.createAnimatedComponent(Path)
14const AnimatedCircle = Animated.createAnimatedComponent(Circle)
···8} from 'react-native-reanimated'
9import Svg, {Circle, Path} from 'react-native-svg'
1011+import {type Props, useCommonSVGProps} from '#/components/icons/common'
1213const AnimatedPath = Animated.createAnimatedComponent(Path)
14const AnimatedCircle = Animated.createAnimatedComponent(Circle)
+1-1
src/components/dialogs/Embed.tsx
···1import {memo, useEffect, useMemo, useState} from 'react'
2import {View} from 'react-native'
3-import {AppBskyActorDefs, AppBskyFeedPost, AtUri} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6
···1import {memo, useEffect, useMemo, useState} from 'react'
2import {View} from 'react-native'
3+import {type AppBskyActorDefs, type AppBskyFeedPost, AtUri} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6
+3-3
src/components/dialogs/EmbedConsent.tsx
···10} from '#/lib/strings/embed-player'
11import {useSetExternalEmbedPref} from '#/state/preferences'
12import {atoms as a, useBreakpoints, useTheme} from '#/alf'
013import * as Dialog from '#/components/Dialog'
14-import {Button, ButtonText} from '../Button'
15-import {Text} from '../Typography'
1617export function EmbedConsentDialog({
18 control,
···48 }, [control, setExternalEmbedPref, source])
4950 return (
51- <Dialog.Outer control={control}>
52 <Dialog.Handle />
53 <Dialog.ScrollableInner
54 label={_(msg`External Media`)}
···10} from '#/lib/strings/embed-player'
11import {useSetExternalEmbedPref} from '#/state/preferences'
12import {atoms as a, useBreakpoints, useTheme} from '#/alf'
13+import {Button, ButtonText} from '#/components/Button'
14import * as Dialog from '#/components/Dialog'
15+import {Text} from '#/components/Typography'
01617export function EmbedConsentDialog({
18 control,
···48 }, [control, setExternalEmbedPref, source])
4950 return (
51+ <Dialog.Outer control={control} nativeOptions={{preventExpansion: true}}>
52 <Dialog.Handle />
53 <Dialog.ScrollableInner
54 label={_(msg`External Media`)}
···3import {type ChatBskyConvoDefs} from '@atproto/api'
4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6-import type React from 'react'
78import {useConvoActive} from '#/state/messages/convo'
9import {useSession} from '#/state/session'
···3import {type ChatBskyConvoDefs} from '@atproto/api'
4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
067import {useConvoActive} from '#/state/messages/convo'
8import {useSession} from '#/state/session'
+2-2
src/components/dms/BlockedByListDialog.tsx
···1import React from 'react'
2import {View} from 'react-native'
3-import {ModerationCause} from '@atproto/api'
4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67import {listUriToHref} from '#/lib/strings/url-helpers'
8import {atoms as a, useTheme} from '#/alf'
9import * as Dialog from '#/components/Dialog'
10-import {DialogControlProps} from '#/components/Dialog'
11import {InlineLinkText} from '#/components/Link'
12import * as Prompt from '#/components/Prompt'
13import {Text} from '#/components/Typography'
···1import React from 'react'
2import {View} from 'react-native'
3+import {type ModerationCause} from '@atproto/api'
4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67import {listUriToHref} from '#/lib/strings/url-helpers'
8import {atoms as a, useTheme} from '#/alf'
9import * as Dialog from '#/components/Dialog'
10+import {type DialogControlProps} from '#/components/Dialog'
11import {InlineLinkText} from '#/components/Link'
12import * as Prompt from '#/components/Prompt'
13import {Text} from '#/components/Typography'
+2-2
src/components/dms/LeaveConvoPrompt.tsx
···2import {useLingui} from '@lingui/react'
3import {StackActions, useNavigation} from '@react-navigation/native'
45-import {NavigationProp} from '#/lib/routes/types'
6import {isNative} from '#/platform/detection'
7import {useLeaveConvo} from '#/state/queries/messages/leave-conversation'
8import * as Toast from '#/view/com/util/Toast'
9-import {DialogOuterProps} from '#/components/Dialog'
10import * as Prompt from '#/components/Prompt'
1112export function LeaveConvoPrompt({
···2import {useLingui} from '@lingui/react'
3import {StackActions, useNavigation} from '@react-navigation/native'
45+import {type NavigationProp} from '#/lib/routes/types'
6import {isNative} from '#/platform/detection'
7import {useLeaveConvo} from '#/state/queries/messages/leave-conversation'
8import * as Toast from '#/view/com/util/Toast'
9+import {type DialogOuterProps} from '#/components/Dialog'
10import * as Prompt from '#/components/Prompt'
1112export function LeaveConvoPrompt({
+2-2
src/components/dms/MessagesListBlockedFooter.tsx
···1import React from 'react'
2import {View} from 'react-native'
3-import {ModerationDecision} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6···14import {LeaveConvoPrompt} from '#/components/dms/LeaveConvoPrompt'
15import {ReportConversationPrompt} from '#/components/dms/ReportConversationPrompt'
16import {Text} from '#/components/Typography'
17-import * as bsky from '#/types/bsky'
1819export function MessagesListBlockedFooter({
20 recipient: initialRecipient,
···1import React from 'react'
2import {View} from 'react-native'
3+import {type ModerationDecision} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6···14import {LeaveConvoPrompt} from '#/components/dms/LeaveConvoPrompt'
15import {ReportConversationPrompt} from '#/components/dms/ReportConversationPrompt'
16import {Text} from '#/components/Typography'
17+import type * as bsky from '#/types/bsky'
1819export function MessagesListBlockedFooter({
20 recipient: initialRecipient,
+1-1
src/components/dms/ReportConversationPrompt.tsx
···1import {msg} from '@lingui/macro'
2import {useLingui} from '@lingui/react'
34-import {DialogControlProps} from '#/components/Dialog'
5import * as Prompt from '#/components/Prompt'
67export function ReportConversationPrompt({
···1import {msg} from '@lingui/macro'
2import {useLingui} from '@lingui/react'
34+import {type DialogControlProps} from '#/components/Dialog'
5import * as Prompt from '#/components/Prompt'
67export function ReportConversationPrompt({
+2-2
src/components/feeds/PostFeedVideoGridRow.tsx
···2import {AppBskyEmbedVideo} from '@atproto/api'
34import {logEvent} from '#/lib/statsig/statsig'
5-import {FeedPostSliceItem} from '#/state/queries/post-feed'
6-import {VideoFeedSourceContext} from '#/screens/VideoFeed/types'
7import {atoms as a, useGutters} from '#/alf'
8import * as Grid from '#/components/Grid'
9import {
···2import {AppBskyEmbedVideo} from '@atproto/api'
34import {logEvent} from '#/lib/statsig/statsig'
5+import {type FeedPostSliceItem} from '#/state/queries/post-feed'
6+import {type VideoFeedSourceContext} from '#/screens/VideoFeed/types'
7import {atoms as a, useGutters} from '#/alf'
8import * as Grid from '#/components/Grid'
9import {
+2-2
src/components/forms/DateField/index.web.tsx
···1import React from 'react'
2-import {StyleSheet, TextInput, TextInputProps} from 'react-native'
3// @ts-expect-error untyped
4import {unstable_createElement} from 'react-native-web'
56-import {DateFieldProps} from '#/components/forms/DateField/types'
7import {toSimpleDateString} from '#/components/forms/DateField/utils'
8import * as TextField from '#/components/forms/TextField'
9import {CalendarDays_Stroke2_Corner0_Rounded as CalendarDays} from '#/components/icons/CalendarDays'
···1import React from 'react'
2+import {StyleSheet, type TextInput, type TextInputProps} from 'react-native'
3// @ts-expect-error untyped
4import {unstable_createElement} from 'react-native-web'
56+import {type DateFieldProps} from '#/components/forms/DateField/types'
7import {toSimpleDateString} from '#/components/forms/DateField/utils'
8import * as TextField from '#/components/forms/TextField'
9import {CalendarDays_Stroke2_Corner0_Rounded as CalendarDays} from '#/components/icons/CalendarDays'
···1import React from 'react'
2-import {TextInput, View} from 'react-native'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
···1import React from 'react'
2+import {type TextInput, View} from 'react-native'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
···1import React from 'react'
2-import {AccessibilityProps, TextStyle, View, ViewStyle} from 'react-native'
0000034import {atoms as a, native, useTheme} from '#/alf'
5import * as Toggle from '#/components/forms/Toggle'
···78type ItemProps = Omit<Toggle.ItemProps, 'style' | 'role' | 'children'> &
9 AccessibilityProps & {
10- children: React.ReactElement
11 testID?: string
12 }
13
···1import React from 'react'
2+import {
3+ type AccessibilityProps,
4+ type TextStyle,
5+ View,
6+ type ViewStyle,
7+} from 'react-native'
89import {atoms as a, native, useTheme} from '#/alf'
10import * as Toggle from '#/components/forms/Toggle'
···1213type ItemProps = Omit<Toggle.ItemProps, 'style' | 'role' | 'children'> &
14 AccessibilityProps & {
15+ children: React.ReactElement<any>
16 testID?: string
17 }
18
+3-3
src/components/hooks/useFollowMethods.ts
···2import {msg} from '@lingui/macro'
3import {useLingui} from '@lingui/react'
45-import {LogEvents} from '#/lib/statsig/statsig'
6import {logger} from '#/logger'
7-import {Shadow} from '#/state/cache/types'
8import {useProfileFollowMutationQueue} from '#/state/queries/profile'
9import {useRequireAuth} from '#/state/session'
10import * as Toast from '#/view/com/util/Toast'
11-import * as bsky from '#/types/bsky'
1213export function useFollowMethods({
14 profile,
···2import {msg} from '@lingui/macro'
3import {useLingui} from '@lingui/react'
45+import {type LogEvents} from '#/lib/statsig/statsig'
6import {logger} from '#/logger'
7+import {type Shadow} from '#/state/cache/types'
8import {useProfileFollowMutationQueue} from '#/state/queries/profile'
9import {useRequireAuth} from '#/state/session'
10import * as Toast from '#/view/com/util/Toast'
11+import type * as bsky from '#/types/bsky'
1213export function useFollowMethods({
14 profile,
+1-1
src/components/hooks/useFullscreen.ts
···14 return () => document.removeEventListener('fullscreenchange', onChange)
15}
1617-export function useFullscreen(ref?: React.RefObject<HTMLElement>) {
18 if (!isWeb) throw new Error("'useFullscreen' is a web-only hook")
19 const isFullscreen = useSyncExternalStore(fullscreenSubscribe, () =>
20 Boolean(document.fullscreenElement),
···14 return () => document.removeEventListener('fullscreenchange', onChange)
15}
1617+export function useFullscreen(ref?: React.RefObject<HTMLElement | null>) {
18 if (!isWeb) throw new Error("'useFullscreen' is a web-only hook")
19 const isFullscreen = useSyncExternalStore(fullscreenSubscribe, () =>
20 Boolean(document.fullscreenElement),
+1-1
src/components/icons/TEMPLATE.tsx
···1import React from 'react'
2import Svg, {Path} from 'react-native-svg'
34-import {Props, useCommonSVGProps} from '#/components/icons/common'
56export const IconTemplate_Stroke2_Corner0_Rounded = React.forwardRef(
7 function LogoImpl(props: Props, ref) {
···1import React from 'react'
2import Svg, {Path} from 'react-native-svg'
34+import {type Props, useCommonSVGProps} from '#/components/icons/common'
56export const IconTemplate_Stroke2_Corner0_Rounded = React.forwardRef(
7 function LogoImpl(props: Props, ref) {
···8import {atoms as a, useBreakpoints, useTheme} from '#/alf'
9import {Button, ButtonIcon, ButtonText} from '#/components/Button'
10import * as Dialog from '#/components/Dialog'
11-import {DialogControlProps} from '#/components/Dialog'
12import {Divider} from '#/components/Divider'
13import {ArrowRotateCounterClockwise_Stroke2_Corner0_Rounded as Resend} from '#/components/icons/ArrowRotateCounterClockwise'
14import {useIntentDialogs} from '#/components/intents/IntentDialogs'
···8import {atoms as a, useBreakpoints, useTheme} from '#/alf'
9import {Button, ButtonIcon, ButtonText} from '#/components/Button'
10import * as Dialog from '#/components/Dialog'
11+import {type DialogControlProps} from '#/components/Dialog'
12import {Divider} from '#/components/Divider'
13import {ArrowRotateCounterClockwise_Stroke2_Corner0_Rounded as Resend} from '#/components/icons/ArrowRotateCounterClockwise'
14import {useIntentDialogs} from '#/components/intents/IntentDialogs'
-1
src/components/moderation/LabelPreference.tsx
···5} from '@atproto/api'
6import {msg, Trans} from '@lingui/macro'
7import {useLingui} from '@lingui/react'
8-import type React from 'react'
910import {useGlobalLabelStrings} from '#/lib/moderation/useGlobalLabelStrings'
11import {useLabelBehaviorDescription} from '#/lib/moderation/useLabelBehaviorDescription'
···5} from '@atproto/api'
6import {msg, Trans} from '@lingui/macro'
7import {useLingui} from '@lingui/react'
089import {useGlobalLabelStrings} from '#/lib/moderation/useGlobalLabelStrings'
10import {useLabelBehaviorDescription} from '#/lib/moderation/useLabelBehaviorDescription'
+8-3
src/components/moderation/LabelsOnMe.tsx
···1-import {StyleProp, View, ViewStyle} from 'react-native'
2-import {AppBskyFeedDefs, ComAtprotoLabelDefs} from '@atproto/api'
3import {msg, Plural, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56import {useSession} from '#/state/session'
7import {atoms as a} from '#/alf'
8-import {Button, ButtonIcon, ButtonSize, ButtonText} from '#/components/Button'
000009import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
10import {
11 LabelsOnMeDialog,
···1+import {type StyleProp, View, type ViewStyle} from 'react-native'
2+import {type AppBskyFeedDefs, type ComAtprotoLabelDefs} from '@atproto/api'
3import {msg, Plural, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56import {useSession} from '#/state/session'
7import {atoms as a} from '#/alf'
8+import {
9+ Button,
10+ ButtonIcon,
11+ type ButtonSize,
12+ ButtonText,
13+} from '#/components/Button'
14import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
15import {
16 LabelsOnMeDialog,
+1-1
src/components/moderation/LabelsOnMeDialog.tsx
···1import React from 'react'
2import {View} from 'react-native'
3-import {ComAtprotoLabelDefs, ComAtprotoModerationDefs} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6import {useMutation} from '@tanstack/react-query'
···1import React from 'react'
2import {View} from 'react-native'
3+import {type ComAtprotoLabelDefs, ComAtprotoModerationDefs} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6import {useMutation} from '@tanstack/react-query'
···1import {View} from 'react-native'
2-import {ModerationCause} from '@atproto/api'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5···12import {atoms as a, useGutters, useTheme} from '#/alf'
13import * as Dialog from '#/components/Dialog'
14import {InlineLinkText} from '#/components/Link'
15-import {AppModerationCause} from '#/components/Pills'
16import {Text} from '#/components/Typography'
1718export {useDialogControl as useModerationDetailsDialogControl} from '#/components/Dialog'
···1import {View} from 'react-native'
2+import {type ModerationCause} from '@atproto/api'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5···12import {atoms as a, useGutters, useTheme} from '#/alf'
13import * as Dialog from '#/components/Dialog'
14import {InlineLinkText} from '#/components/Link'
15+import {type AppModerationCause} from '#/components/Pills'
16import {Text} from '#/components/Typography'
1718export {useDialogControl as useModerationDetailsDialogControl} from '#/components/Dialog'
+2-2
src/components/moderation/PostAlerts.tsx
···1-import {StyleProp, ViewStyle} from 'react-native'
2-import {ModerationCause, ModerationUI} from '@atproto/api'
34import {getModerationCauseKey, unique} from '#/lib/moderation'
5import * as Pills from '#/components/Pills'
···1+import {type StyleProp, type ViewStyle} from 'react-native'
2+import {type ModerationCause, type ModerationUI} from '@atproto/api'
34import {getModerationCauseKey, unique} from '#/lib/moderation'
5import * as Pills from '#/components/Pills'
+2-2
src/components/moderation/ProfileHeaderAlerts.tsx
···1-import {StyleProp, ViewStyle} from 'react-native'
2-import {ModerationDecision} from '@atproto/api'
34import {getModerationCauseKey, unique} from '#/lib/moderation'
5import * as Pills from '#/components/Pills'
···1+import {type StyleProp, type ViewStyle} from 'react-native'
2+import {type ModerationDecision} from '@atproto/api'
34import {getModerationCauseKey, unique} from '#/lib/moderation'
5import * as Pills from '#/components/Pills'
+5-5
src/components/moderation/ReportDialog/action.ts
···1import {
2- $Typed,
3- ChatBskyConvoDefs,
4- ComAtprotoModerationCreateReport,
5} from '@atproto/api'
6import {msg} from '@lingui/macro'
7import {useLingui} from '@lingui/react'
···910import {logger} from '#/logger'
11import {useAgent} from '#/state/session'
12-import {ReportState} from './state'
13-import {ParsedReportSubject} from './types'
1415export function useSubmitReportMutation() {
16 const {_} = useLingui()
···1import {
2+ type $Typed,
3+ type ChatBskyConvoDefs,
4+ type ComAtprotoModerationCreateReport,
5} from '@atproto/api'
6import {msg} from '@lingui/macro'
7import {useLingui} from '@lingui/react'
···910import {logger} from '#/logger'
11import {useAgent} from '#/state/session'
12+import {type ReportState} from './state'
13+import {type ParsedReportSubject} from './types'
1415export function useSubmitReportMutation() {
16 const {_} = useLingui()
+1-1
src/components/moderation/ReportDialog/copy.ts
···2import {msg} from '@lingui/macro'
3import {useLingui} from '@lingui/react'
45-import {ParsedReportSubject} from './types'
67export function useCopyForSubject(subject: ParsedReportSubject) {
8 const {_} = useLingui()
···2import {msg} from '@lingui/macro'
3import {useLingui} from '@lingui/react'
45+import {type ParsedReportSubject} from './types'
67export function useCopyForSubject(subject: ParsedReportSubject) {
8 const {_} = useLingui()
+2-2
src/components/moderation/ReportDialog/state.ts
···1-import {AppBskyLabelerDefs, ComAtprotoModerationDefs} from '@atproto/api'
23-import {ReportOption} from './utils/useReportOptions'
45export type ReportState = {
6 selectedOption?: ReportOption
···1+import {type AppBskyLabelerDefs, ComAtprotoModerationDefs} from '@atproto/api'
23+import {type ReportOption} from './utils/useReportOptions'
45export type ReportState = {
6 selectedOption?: ReportOption
+6-6
src/components/moderation/ReportDialog/types.ts
···1import {
2- $Typed,
3- AppBskyActorDefs,
4- AppBskyFeedDefs,
5- AppBskyGraphDefs,
6- ChatBskyConvoDefs,
7} from '@atproto/api'
89-import * as Dialog from '#/components/Dialog'
1011export type ReportSubject =
12 | $Typed<AppBskyActorDefs.ProfileViewBasic>
···1import {
2+ type $Typed,
3+ type AppBskyActorDefs,
4+ type AppBskyFeedDefs,
5+ type AppBskyGraphDefs,
6+ type ChatBskyConvoDefs,
7} from '@atproto/api'
89+import type * as Dialog from '#/components/Dialog'
1011export type ReportSubject =
12 | $Typed<AppBskyActorDefs.ProfileViewBasic>
···6} from '@atproto/api'
78import {
9- ParsedReportSubject,
10- ReportSubject,
11} from '#/components/moderation/ReportDialog/types'
12import * as bsky from '#/types/bsky'
13
···6} from '@atproto/api'
78import {
9+ type ParsedReportSubject,
10+ type ReportSubject,
11} from '#/components/moderation/ReportDialog/types'
12import * as bsky from '#/types/bsky'
13
+4-4
src/components/moderation/ScreenHider.tsx
···1import React from 'react'
2import {
3- StyleProp,
4 TouchableWithoutFeedback,
5 View,
6- ViewStyle,
7} from 'react-native'
8-import {ModerationUI} from '@atproto/api'
9import {msg, Trans} from '@lingui/macro'
10import {useLingui} from '@lingui/react'
11import {useNavigation} from '@react-navigation/native'
1213import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
14import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
15-import {NavigationProp} from '#/lib/routes/types'
16import {CenteredView} from '#/view/com/util/Views'
17import {atoms as a, useTheme, web} from '#/alf'
18import {Button, ButtonText} from '#/components/Button'
···1import React from 'react'
2import {
3+ type StyleProp,
4 TouchableWithoutFeedback,
5 View,
6+ type ViewStyle,
7} from 'react-native'
8+import {type ModerationUI} from '@atproto/api'
9import {msg, Trans} from '@lingui/macro'
10import {useLingui} from '@lingui/react'
11import {useNavigation} from '@react-navigation/native'
1213import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
14import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
15+import {type NavigationProp} from '#/lib/routes/types'
16import {CenteredView} from '#/view/com/util/Views'
17import {atoms as a, useTheme, web} from '#/alf'
18import {Button, ButtonText} from '#/components/Button'
···1import {
2- AppBskyFeedDefs,
3- AppBskyFeedGetFeed as GetCustomFeed,
4 BskyAgent,
5 jsonStringToLex,
6} from '@atproto/api'
···9 getAppLanguageAsContentLanguage,
10 getContentLanguages,
11} from '#/state/preferences/languages'
12-import {FeedAPI, FeedAPIResponse} from './types'
13import {createBskyTopicsHeader, isBlueskyOwnedFeed} from './utils'
1415export class CustomFeedAPI implements FeedAPI {
···1import {
2+ type AppBskyFeedDefs,
3+ type AppBskyFeedGetFeed as GetCustomFeed,
4 BskyAgent,
5 jsonStringToLex,
6} from '@atproto/api'
···9 getAppLanguageAsContentLanguage,
10 getContentLanguages,
11} from '#/state/preferences/languages'
12+import {type FeedAPI, type FeedAPIResponse} from './types'
13import {createBskyTopicsHeader, isBlueskyOwnedFeed} from './utils'
1415export class CustomFeedAPI implements FeedAPI {
+2-2
src/lib/api/feed/following.ts
···1-import {AppBskyFeedDefs, BskyAgent} from '@atproto/api'
23-import {FeedAPI, FeedAPIResponse} from './types'
45export class FollowingFeedAPI implements FeedAPI {
6 agent: BskyAgent
···1+import {type AppBskyFeedDefs, type BskyAgent} from '@atproto/api'
23+import {type FeedAPI, type FeedAPIResponse} from './types'
45export class FollowingFeedAPI implements FeedAPI {
6 agent: BskyAgent
+4-4
src/lib/api/feed/likes.ts
···1import {
2- AppBskyFeedDefs,
3- AppBskyFeedGetActorLikes as GetActorLikes,
4- BskyAgent,
5} from '@atproto/api'
67-import {FeedAPI, FeedAPIResponse} from './types'
89export class LikesFeedAPI implements FeedAPI {
10 agent: BskyAgent
···1import {
2+ type AppBskyFeedDefs,
3+ type AppBskyFeedGetActorLikes as GetActorLikes,
4+ type BskyAgent,
5} from '@atproto/api'
67+import {type FeedAPI, type FeedAPIResponse} from './types'
89export class LikesFeedAPI implements FeedAPI {
10 agent: BskyAgent
+12-4
src/lib/api/feed/merge.ts
···1-import {AppBskyFeedDefs, AppBskyFeedGetTimeline, BskyAgent} from '@atproto/api'
00002import shuffle from 'lodash.shuffle'
34import {bundleAsync} from '#/lib/async/bundle'
5import {timeout} from '#/lib/async/timeout'
6import {feedUriToHref} from '#/lib/strings/url-helpers'
7import {getContentLanguages} from '#/state/preferences/languages'
8-import {FeedParams} from '#/state/queries/post-feed'
9import {FeedTuner} from '../feed-manip'
10-import {FeedTunerFn} from '../feed-manip'
11-import {FeedAPI, FeedAPIResponse, ReasonFeedSource} from './types'
000012import {createBskyTopicsHeader, isBlueskyOwnedFeed} from './utils'
1314const REQUEST_WAIT_MS = 500 // 500ms
···1+import {
2+ type AppBskyFeedDefs,
3+ type AppBskyFeedGetTimeline,
4+ type BskyAgent,
5+} from '@atproto/api'
6import shuffle from 'lodash.shuffle'
78import {bundleAsync} from '#/lib/async/bundle'
9import {timeout} from '#/lib/async/timeout'
10import {feedUriToHref} from '#/lib/strings/url-helpers'
11import {getContentLanguages} from '#/state/preferences/languages'
12+import {type FeedParams} from '#/state/queries/post-feed'
13import {FeedTuner} from '../feed-manip'
14+import {type FeedTunerFn} from '../feed-manip'
15+import {
16+ type FeedAPI,
17+ type FeedAPIResponse,
18+ type ReasonFeedSource,
19+} from './types'
20import {createBskyTopicsHeader, isBlueskyOwnedFeed} from './utils'
2122const REQUEST_WAIT_MS = 500 // 500ms
···23import {BSKY_FEED_OWNER_DIDS} from '#/lib/constants'
4import {isWeb} from '#/platform/detection'
5-import {UsePreferencesQueryResponse} from '#/state/queries/preferences'
67let debugTopics = ''
8if (isWeb && typeof window !== 'undefined') {
···23import {BSKY_FEED_OWNER_DIDS} from '#/lib/constants'
4import {isWeb} from '#/platform/detection'
5+import {type UsePreferencesQueryResponse} from '#/state/queries/preferences'
67let debugTopics = ''
8if (isWeb && typeof window !== 'undefined') {
+1-1
src/lib/api/upload-blob.ts
···1import {copyAsync} from 'expo-file-system'
2-import {BskyAgent, ComAtprotoRepoUploadBlob} from '@atproto/api'
34import {safeDeleteAsync} from '#/lib/media/manip'
5
···1import {copyAsync} from 'expo-file-system'
2+import {type BskyAgent, type ComAtprotoRepoUploadBlob} from '@atproto/api'
34import {safeDeleteAsync} from '#/lib/media/manip'
5
+1-1
src/lib/api/upload-blob.web.ts
···1-import {BskyAgent, ComAtprotoRepoUploadBlob} from '@atproto/api'
23/**
4 * @note It is recommended, on web, to use the `file` instance of the file
···1+import {type BskyAgent, type ComAtprotoRepoUploadBlob} from '@atproto/api'
23/**
4 * @note It is recommended, on web, to use the `file` instance of the file
···1-import {ImageRequireSource} from 'react-native'
23// @ts-ignore we need to pretend -prf
4export const DEF_AVATAR: ImageRequireSource = {uri: '/img/default-avatar.png'}
···1+import {type ImageRequireSource} from 'react-native'
23// @ts-ignore we need to pretend -prf
4export const DEF_AVATAR: ImageRequireSource = {uri: '/img/default-avatar.png'}
···1+import {
2+ Pressable,
3+ type PressableProps,
4+ type StyleProp,
5+ type ViewStyle,
6+} from 'react-native'
7import Animated, {
8 cancelAnimation,
9 useAnimatedStyle,
+2-2
src/lib/hooks/useAccountSwitcher.ts
···45import {logger} from '#/logger'
6import {isWeb} from '#/platform/detection'
7-import {SessionAccount, useSessionApi} from '#/state/session'
8import {useLoggedOutViewControls} from '#/state/shell/logged-out'
9import * as Toast from '#/view/com/util/Toast'
10import {logEvent} from '../statsig/statsig'
11-import {LogEvents} from '../statsig/statsig'
1213export function useAccountSwitcher() {
14 const [pendingDid, setPendingDid] = useState<string | null>(null)
···45import {logger} from '#/logger'
6import {isWeb} from '#/platform/detection'
7+import {type SessionAccount, useSessionApi} from '#/state/session'
8import {useLoggedOutViewControls} from '#/state/shell/logged-out'
9import * as Toast from '#/view/com/util/Toast'
10import {logEvent} from '../statsig/statsig'
11+import {type LogEvents} from '../statsig/statsig'
1213export function useAccountSwitcher() {
14 const [pendingDid, setPendingDid] = useState<string | null>(null)
+1-1
src/lib/hooks/useAnimatedValue.ts
···2import {Animated} from 'react-native'
34export function useAnimatedValue(initialValue: number) {
5- const lazyRef = React.useRef<Animated.Value>()
67 if (lazyRef.current === undefined) {
8 lazyRef.current = new Animated.Value(initialValue)
···2import {Animated} from 'react-native'
34export function useAnimatedValue(initialValue: number) {
5+ const lazyRef = React.useRef<Animated.Value>(undefined)
67 if (lazyRef.current === undefined) {
8 lazyRef.current = new Animated.Value(initialValue)
+1-1
src/lib/hooks/useGoBack.ts
···1import {StackActions, useNavigation} from '@react-navigation/native'
23-import {NavigationProp} from '#/lib/routes/types'
4import {router} from '#/routes'
56export function useGoBack(onGoBack?: () => unknown) {
···1import {StackActions, useNavigation} from '@react-navigation/native'
23+import {type NavigationProp} from '#/lib/routes/types'
4import {router} from '#/routes'
56export function useGoBack(onGoBack?: () => unknown) {
···1import {useEffect} from 'react'
2import {useNavigation} from '@react-navigation/native'
34-import {NavigationProp} from '#/lib/routes/types'
5import {bskyTitle} from '#/lib/strings/headings'
6import {useUnreadNotifications} from '#/state/queries/notifications/unread'
7
···1import {useEffect} from 'react'
2import {useNavigation} from '@react-navigation/native'
34+import {type NavigationProp} from '#/lib/routes/types'
5import {bskyTitle} from '#/lib/strings/headings'
6import {useUnreadNotifications} from '#/state/queries/notifications/unread'
7
+1-1
src/lib/hooks/useTimeAgo.ts
···1import {useCallback} from 'react'
2-import {I18n} from '@lingui/core'
3import {defineMessage, msg, plural} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {differenceInSeconds} from 'date-fns'
···1import {useCallback} from 'react'
2+import {type I18n} from '@lingui/core'
3import {defineMessage, msg, plural} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {differenceInSeconds} from 'date-fns'
+1-1
src/lib/hooks/useWebScrollRestoration.ts
···1import {useEffect, useMemo, useState} from 'react'
2-import {EventArg, useNavigation} from '@react-navigation/core'
34if ('scrollRestoration' in history) {
5 // Tell the brower not to mess with the scroll.
···1import {useEffect, useMemo, useState} from 'react'
2+import {type EventArg, useNavigation} from '@react-navigation/core'
34if ('scrollRestoration' in history) {
5 // Tell the brower not to mess with the scroll.
+2-2
src/lib/media/video/compress.web.ts
···1-import {ImagePickerAsset} from 'expo-image-picker'
23import {VIDEO_MAX_SIZE} from '#/lib/constants'
4import {VideoTooLargeError} from '#/lib/media/video/errors'
5-import {CompressedVideo} from './types'
67// doesn't actually compress, converts to ArrayBuffer
8export async function compressVideo(
···1+import {type ImagePickerAsset} from 'expo-image-picker'
23import {VIDEO_MAX_SIZE} from '#/lib/constants'
4import {VideoTooLargeError} from '#/lib/media/video/errors'
5+import {type CompressedVideo} from './types'
67// doesn't actually compress, converts to ArrayBuffer
8export async function compressVideo(
+2-2
src/lib/media/video/upload.shared.ts
···1-import {BskyAgent} from '@atproto/api'
2-import {I18n} from '@lingui/core'
3import {msg} from '@lingui/macro'
45import {VIDEO_SERVICE_DID} from '#/lib/constants'
···1+import {type BskyAgent} from '@atproto/api'
2+import {type I18n} from '@lingui/core'
3import {msg} from '@lingui/macro'
45import {VIDEO_SERVICE_DID} from '#/lib/constants'
+3-3
src/lib/media/video/upload.ts
···1import {createUploadTask, FileSystemUploadType} from 'expo-file-system'
2-import {AppBskyVideoDefs, BskyAgent} from '@atproto/api'
3-import {I18n} from '@lingui/core'
4import {msg} from '@lingui/macro'
5import {nanoid} from 'nanoid/non-secure'
67import {AbortError} from '#/lib/async/cancelable'
8import {ServerError} from '#/lib/media/video/errors'
9-import {CompressedVideo} from '#/lib/media/video/types'
10import {getServiceAuthToken, getVideoUploadLimits} from './upload.shared'
11import {createVideoEndpointUrl, mimeToExt} from './util'
12
···1import {createUploadTask, FileSystemUploadType} from 'expo-file-system'
2+import {type AppBskyVideoDefs, type BskyAgent} from '@atproto/api'
3+import {type I18n} from '@lingui/core'
4import {msg} from '@lingui/macro'
5import {nanoid} from 'nanoid/non-secure'
67import {AbortError} from '#/lib/async/cancelable'
8import {ServerError} from '#/lib/media/video/errors'
9+import {type CompressedVideo} from '#/lib/media/video/types'
10import {getServiceAuthToken, getVideoUploadLimits} from './upload.shared'
11import {createVideoEndpointUrl, mimeToExt} from './util'
12
+4-4
src/lib/media/video/upload.web.ts
···1-import {AppBskyVideoDefs} from '@atproto/api'
2-import {BskyAgent} from '@atproto/api'
3-import {I18n} from '@lingui/core'
4import {msg} from '@lingui/macro'
5import {nanoid} from 'nanoid/non-secure'
67import {AbortError} from '#/lib/async/cancelable'
8import {ServerError} from '#/lib/media/video/errors'
9-import {CompressedVideo} from '#/lib/media/video/types'
10import {getServiceAuthToken, getVideoUploadLimits} from './upload.shared'
11import {createVideoEndpointUrl, mimeToExt} from './util'
12
···1+import {type AppBskyVideoDefs} from '@atproto/api'
2+import {type BskyAgent} from '@atproto/api'
3+import {type I18n} from '@lingui/core'
4import {msg} from '@lingui/macro'
5import {nanoid} from 'nanoid/non-secure'
67import {AbortError} from '#/lib/async/cancelable'
8import {ServerError} from '#/lib/media/video/errors'
9+import {type CompressedVideo} from '#/lib/media/video/types'
10import {getServiceAuthToken, getVideoUploadLimits} from './upload.shared'
11import {createVideoEndpointUrl, mimeToExt} from './util'
12
+1-1
src/lib/media/video/util.ts
···1import {AtpAgent} from '@atproto/api'
23-import {SupportedMimeTypes, VIDEO_SERVICE} from '#/lib/constants'
45export const createVideoEndpointUrl = (
6 route: string,
···1import {AtpAgent} from '@atproto/api'
23+import {type SupportedMimeTypes, VIDEO_SERVICE} from '#/lib/constants'
45export const createVideoEndpointUrl = (
6 route: string,
+1-1
src/lib/merge-refs.ts
···13 * returns a ref callback function that can be used to merge multiple refs into a single ref.
14 */
15export function mergeRefs<T = any>(
16- refs: Array<React.MutableRefObject<T> | React.LegacyRef<T>>,
17): React.RefCallback<T> {
18 return value => {
19 refs.forEach(ref => {
···13 * returns a ref callback function that can be used to merge multiple refs into a single ref.
14 */
15export function mergeRefs<T = any>(
16+ refs: Array<React.MutableRefObject<T> | React.Ref<T>>,
17): React.RefCallback<T> {
18 return value => {
19 refs.forEach(ref => {
+1-1
src/lib/moderation/blocked-and-muted.ts
···1-import * as bsky from '#/types/bsky'
23export function isBlockedOrBlocking(profile: bsky.profile.AnyProfileView) {
4 return profile.viewer?.blockedBy || profile.viewer?.blocking
···1+import type * as bsky from '#/types/bsky'
23export function isBlockedOrBlocking(profile: bsky.profile.AnyProfileView) {
4 return profile.viewer?.blockedBy || profile.viewer?.blocking
+4-1
src/lib/moderation/useLabelBehaviorDescription.ts
···1-import {InterpretedLabelValueDefinition, LabelPreference} from '@atproto/api'
0002import {msg} from '@lingui/macro'
3import {useLingui} from '@lingui/react'
4
···1+import {
2+ type InterpretedLabelValueDefinition,
3+ type LabelPreference,
4+} from '@atproto/api'
5import {msg} from '@lingui/macro'
6import {useLingui} from '@lingui/react'
7
+4-4
src/lib/moderation/useLabelInfo.ts
···1import {
2- AppBskyLabelerDefs,
3- ComAtprotoLabelDefs,
4- InterpretedLabelValueDefinition,
5 interpretLabelValueDefinition,
6 LABELS,
7} from '@atproto/api'
···9import * as bcp47Match from 'bcp-47-match'
1011import {
12- GlobalLabelStrings,
13 useGlobalLabelStrings,
14} from '#/lib/moderation/useGlobalLabelStrings'
15import {useLabelDefinitions} from '#/state/preferences'
···1import {
2+ type AppBskyLabelerDefs,
3+ type ComAtprotoLabelDefs,
4+ type InterpretedLabelValueDefinition,
5 interpretLabelValueDefinition,
6 LABELS,
7} from '@atproto/api'
···9import * as bcp47Match from 'bcp-47-match'
1011import {
12+ type GlobalLabelStrings,
13 useGlobalLabelStrings,
14} from '#/lib/moderation/useGlobalLabelStrings'
15import {useLabelDefinitions} from '#/state/preferences'
+4-3
src/lib/react-query.tsx
···1-import React, {useRef, useState} from 'react'
2-import {AppState, AppStateStatus} from 'react-native'
3import AsyncStorage from '@react-native-async-storage/async-storage'
4import {createAsyncStoragePersister} from '@tanstack/query-async-storage-persister'
5import {focusManager, onlineManager, QueryClient} from '@tanstack/react-query'
6import {
7 PersistQueryClientProvider,
8- PersistQueryClientProviderProps,
9} from '@tanstack/react-query-persist-client'
01011import {isNative} from '#/platform/detection'
12import {listenNetworkConfirmed, listenNetworkLost} from '#/state/events'
···1+import {useRef, useState} from 'react'
2+import {AppState, type AppStateStatus} from 'react-native'
3import AsyncStorage from '@react-native-async-storage/async-storage'
4import {createAsyncStoragePersister} from '@tanstack/query-async-storage-persister'
5import {focusManager, onlineManager, QueryClient} from '@tanstack/react-query'
6import {
7 PersistQueryClientProvider,
8+ type PersistQueryClientProviderProps,
9} from '@tanstack/react-query-persist-client'
10+import type React from 'react'
1112import {isNative} from '#/platform/detection'
13import {listenNetworkConfirmed, listenNetworkLost} from '#/state/events'
+2-2
src/lib/routes/helpers.ts
···1-import {NavigationProp} from '@react-navigation/native'
23-import {RouteParams, State} from './types'
45export function getRootNavigation<T extends {}>(
6 nav: NavigationProp<T>,
···1+import {type NavigationProp} from '@react-navigation/native'
23+import {type RouteParams, type State} from './types'
45export function getRootNavigation<T extends {}>(
6 nav: NavigationProp<T>,
···1-import {AppBskyRichtextFacet, RichText} from '@atproto/api'
23import {linkRequiresWarning} from './url-helpers'
4
···1+import {AppBskyRichtextFacet, type RichText} from '@atproto/api'
23import {linkRequiresWarning} from './url-helpers'
4
+1-1
src/lib/strings/rich-text-manip.ts
···1-import {AppBskyRichtextFacet, RichText, UnicodeString} from '@atproto/api'
23import {toShortUrl} from './url-helpers'
4
···1+import {AppBskyRichtextFacet, type RichText, UnicodeString} from '@atproto/api'
23import {toShortUrl} from './url-helpers'
4
+1-1
src/lib/strings/time.ts
···1-import {I18n} from '@lingui/core'
23export function niceDate(i18n: I18n, date: number | string | Date) {
4 const d = new Date(date)
···1+import {type I18n} from '@lingui/core'
23export function niceDate(i18n: I18n, date: number | string | Date) {
4 const d = new Date(date)
+1-1
src/lib/themes.ts
···4import {darkPalette, dimPalette, lightPalette} from '#/alf/themes'
5import {fontWeight} from '#/alf/tokens'
6import {colors} from './styles'
7-import type {Theme} from './ThemeContext'
89export const defaultTheme: Theme = {
10 colorScheme: 'light',
···4import {darkPalette, dimPalette, lightPalette} from '#/alf/themes'
5import {fontWeight} from '#/alf/tokens'
6import {colors} from './styles'
7+import {type Theme} from './ThemeContext'
89export const defaultTheme: Theme = {
10 colorScheme: 'light',
+1-1
src/locale/deviceLocales.ts
···1-import {getLocales as defaultGetLocales, Locale} from 'expo-localization'
23import {dedupArray} from '#/lib/functions'
4
···1+import {getLocales as defaultGetLocales, type Locale} from 'expo-localization'
23import {dedupArray} from '#/lib/functions'
4
+1-1
src/locale/i18nProvider.tsx
···1-import React from 'react'
2import {i18n} from '@lingui/core'
3import {I18nProvider as DefaultI18nProvider} from '@lingui/react'
045import {useLocaleLanguage} from './i18n'
6
···01import {i18n} from '@lingui/core'
2import {I18nProvider as DefaultI18nProvider} from '@lingui/react'
3+import type React from 'react'
45import {useLocaleLanguage} from './i18n'
6
+285-246
src/locale/locales/en/messages.po
···30msgid "{0, plural, one {# day} other {# days}}"
31msgstr ""
3233-#: src/screens/Profile/ProfileFollowers.tsx:40
34msgid "{0, plural, one {# follower} other {# followers}}"
35msgstr ""
3637-#: src/screens/Profile/ProfileFollows.tsx:40
38msgid "{0, plural, one {# following} other {# following}}"
39msgstr ""
40···42msgid "{0, plural, one {# hour} other {# hours}}"
43msgstr ""
4445-#: src/components/moderation/LabelsOnMe.tsx:53
46msgid "{0, plural, one {# label has} other {# labels have}} been placed on this account"
47msgstr ""
4849-#: src/components/moderation/LabelsOnMe.tsx:62
50msgid "{0, plural, one {# label has} other {# labels have}} been placed on this content"
51msgstr ""
5253-#: src/screens/Post/PostLikedBy.tsx:41
54msgid "{0, plural, one {# like} other {# likes}}"
55msgstr ""
56···62msgid "{0, plural, one {# month} other {# months}}"
63msgstr ""
6465-#: src/screens/Post/PostQuotes.tsx:41
66msgid "{0, plural, one {# quote} other {# quotes}}"
67msgstr ""
6869-#: src/screens/Post/PostRepostedBy.tsx:41
70msgid "{0, plural, one {# repost} other {# reposts}}"
71msgstr ""
72···158msgid "{0} joined this week"
159msgstr ""
160161-#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/Scrubber.tsx:204
162msgid "{0} of {1}"
163msgstr ""
164···183msgid "{0}, a list by {1}"
184msgstr ""
185186-#: src/view/com/util/UserAvatar.tsx:572
187-#: src/view/com/util/UserAvatar.tsx:590
188msgid "{0}'s avatar"
189msgstr ""
190···422msgid "{notificationCount, plural, one {# unread item} other {# unread items}}"
423msgstr ""
424425-#: src/components/NewskieDialog.tsx:116
426msgid "{profileName} joined Bluesky {0} ago"
427msgstr ""
428429-#: src/components/NewskieDialog.tsx:111
430msgid "{profileName} joined Bluesky using a starter pack {0} ago"
431msgstr ""
432···677msgid "Add a temporary live status to your profile. When someone clicks on your avatar, they’ll see information about your live event."
678msgstr ""
679680-#: src/view/screens/ProfileList.tsx:924
681-#: src/view/screens/ProfileList.tsx:942
682msgid "Add a user to this list"
683msgstr ""
684···748msgid "Add muted words and tags"
749msgstr ""
750751-#: src/view/screens/ProfileList.tsx:932
752-#: src/view/screens/ProfileList.tsx:950
753msgid "Add people"
754msgstr ""
755···769msgid "Add some feeds to your starter pack!"
770msgstr ""
771772-#: src/screens/Feeds/NoFollowingFeed.tsx:41
773msgid "Add the default feed of only people you follow"
774msgstr ""
775···832msgid "Adult content can only be enabled via the Web at <0>bsky.app</0>."
833msgstr ""
834835-#: src/components/moderation/LabelPreference.tsx:247
836msgid "Adult content is disabled."
837msgstr ""
838···995msgid "An error occurred while loading the video. Please try again later."
996msgstr ""
997998-#: src/components/Post/Embed/VideoEmbed/index.web.tsx:227
999msgid "An error occurred while loading the video. Please try again."
1000msgstr ""
10011002-#: src/components/StarterPack/QrCodeDialog.tsx:72
1003msgid "An error occurred while saving the QR code!"
1004msgstr ""
1005···1173msgid "Appearance"
1174msgstr ""
11751176-#: src/screens/Feeds/NoSavedFeedsOfAnyType.tsx:47
1177#: src/screens/Home/NoFeedsPinned.tsx:93
1178msgid "Apply default recommended feeds"
1179msgstr ""
···1232msgid "Are you sure?"
1233msgstr ""
12341235-#: src/view/com/composer/select-language/SuggestedLanguage.tsx:87
1236msgid "Are you writing in <0>{suggestedLanguageName}</0>?"
1237msgstr ""
1238···1366msgid "Block Account?"
1367msgstr ""
13681369-#: src/view/screens/ProfileList.tsx:669
01370msgid "Block accounts"
1371msgstr ""
1372···1378msgid "Block and/or delete this conversation"
1379msgstr ""
13801381-#: src/view/screens/ProfileList.tsx:789
1382msgid "Block list"
1383msgstr ""
1384···1386msgid "Block or report"
1387msgstr ""
13881389-#: src/view/screens/ProfileList.tsx:784
1390msgid "Block these accounts?"
1391msgstr ""
1392···1425msgid "Blocking does not prevent this labeler from placing labels on your account."
1426msgstr ""
14271428-#: src/view/screens/ProfileList.tsx:786
1429msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
1430msgstr ""
1431···1496msgid "Bluesky+ icons"
1497msgstr ""
14981499-#: src/lib/moderation/useLabelBehaviorDescription.ts:53
1500msgid "Blur images"
1501msgstr ""
15021503-#: src/lib/moderation/useLabelBehaviorDescription.ts:51
1504msgid "Blur images and filter from feeds"
1505msgstr ""
1506···1711msgid "Change password dialog"
1712msgstr ""
17131714-#: src/view/com/composer/select-language/SuggestedLanguage.tsx:98
1715msgid "Change post language to {suggestedLanguageName}"
1716msgstr ""
1717···1875msgid "Click for information"
1876msgstr ""
18771878-#: src/view/screens/Support.tsx:41
1879msgid "click here"
1880msgstr ""
1881···1929#: src/components/dms/ReportDialog.tsx:395
1930#: src/components/live/EditLiveDialog.tsx:229
1931#: src/components/live/EditLiveDialog.tsx:235
1932-#: src/components/NewskieDialog.tsx:146
1933-#: src/components/NewskieDialog.tsx:153
1934#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:197
1935#: src/components/ProgressGuide/FollowDialog.tsx:379
1936#: src/components/StarterPack/Wizard/WizardEditListDialog.tsx:118
···1956msgid "Close alert"
1957msgstr ""
19581959-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
1960msgid "Close bottom drawer"
1961msgstr ""
1962···20522053#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:45
2054#: src/Navigation.tsx:341
2055-#: src/view/screens/CommunityGuidelines.tsx:34
2056msgid "Community Guidelines"
2057msgstr ""
2058···2081msgid "Compressing video..."
2082msgstr ""
20832084-#: src/components/moderation/LabelPreference.tsx:88
2085msgid "Configure content filtering setting for category: {name}"
2086msgstr ""
20872088-#: src/components/moderation/LabelPreference.tsx:249
2089msgid "Configured in <0>moderation settings</0>."
2090msgstr ""
2091···2281msgid "Copies build version to clipboard"
2282msgstr ""
22832284-#: src/components/StarterPack/QrCodeDialog.tsx:182
2285msgid "Copy"
2286msgstr ""
2287···2294msgid "Copy at:// URI"
2295msgstr ""
22962297-#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:153
2298-#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:156
2299msgid "Copy author DID"
2300msgstr ""
2301···2314msgid "Copy host"
2315msgstr ""
23162317-#: src/components/StarterPack/ShareDialog.tsx:104
2318#: src/screens/StarterPack/StarterPackScreen.tsx:617
2319msgid "Copy link"
2320msgstr ""
23212322-#: src/components/StarterPack/ShareDialog.tsx:111
2323msgid "Copy Link"
2324msgstr ""
23252326-#: src/view/screens/ProfileList.tsx:513
02327msgid "Copy link to list"
2328msgstr ""
23292330#: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:127
2331#: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:130
2332-#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:87
2333-#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:90
2334msgid "Copy link to post"
2335msgstr ""
2336···2348msgid "Copy message text"
2349msgstr ""
23502351-#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:144
2352-#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:147
2353msgid "Copy post at:// URI"
2354msgstr ""
2355···2358msgid "Copy post text"
2359msgstr ""
23602361-#: src/components/StarterPack/QrCodeDialog.tsx:176
2362msgid "Copy QR code"
2363msgstr ""
2364···2369#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:40
2370#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:107
2371#: src/Navigation.tsx:346
2372-#: src/view/screens/CopyrightPolicy.tsx:31
2373msgid "Copyright Policy"
2374msgstr ""
2375···2394msgid "Could not load feed"
2395msgstr ""
23962397-#: src/view/screens/ProfileList.tsx:1029
002398msgid "Could not load list"
2399msgstr ""
2400···2422msgid "Create"
2423msgstr ""
24242425-#: src/components/StarterPack/QrCodeDialog.tsx:160
2426msgid "Create a QR code for a starter pack"
2427msgstr ""
2428···2480msgstr ""
24812482#: src/components/moderation/ReportDialog/index.tsx:585
2483-#: src/components/ReportDialog/SelectReportOptionView.tsx:99
2484msgid "Create report for {0}"
2485msgstr ""
2486···2568#: src/components/dms/MessageContextMenu.tsx:185
2569#: src/components/PostControls/PostMenu/PostMenuItems.tsx:704
2570#: src/screens/Messages/components/ChatStatusInfo.tsx:55
02571#: src/screens/Settings/AppPasswords.tsx:212
2572#: src/screens/StarterPack/StarterPackScreen.tsx:599
2573#: src/screens/StarterPack/StarterPackScreen.tsx:688
2574#: src/screens/StarterPack/StarterPackScreen.tsx:760
2575-#: src/view/screens/ProfileList.tsx:768
2576msgid "Delete"
2577msgstr ""
2578···2617msgid "Delete for me"
2618msgstr ""
26192620-#: src/view/screens/ProfileList.tsx:556
02621msgid "Delete list"
2622msgstr ""
2623···2648msgid "Delete starter pack?"
2649msgstr ""
26502651-#: src/view/screens/ProfileList.tsx:763
2652msgid "Delete this list?"
2653msgstr ""
2654···2737msgid "Disable subtitles"
2738msgstr ""
27392740-#: src/lib/moderation/useLabelBehaviorDescription.ts:32
2741-#: src/lib/moderation/useLabelBehaviorDescription.ts:42
2742-#: src/lib/moderation/useLabelBehaviorDescription.ts:68
2743#: src/screens/Messages/Settings.tsx:144
2744#: src/screens/Messages/Settings.tsx:147
2745#: src/screens/Moderation/index.tsx:413
···2898msgid "Download Bluesky"
2899msgstr ""
29002901-#: src/screens/Settings/components/ExportCarDialog.tsx:79
2902-#: src/screens/Settings/components/ExportCarDialog.tsx:84
2903msgid "Download CAR file"
2904msgstr ""
2905···2986msgid "Edit interests"
2987msgstr ""
29882989-#: src/view/screens/ProfileList.tsx:544
02990msgid "Edit list details"
2991msgstr ""
2992···30943095#: src/components/dialogs/Embed.tsx:104
3096#: src/components/dialogs/Embed.tsx:108
3097-#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:119
3098-#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:124
3099msgid "Embed post"
3100msgstr ""
3101···3422msgid "Failed to accept chat"
3423msgstr ""
34243425-#: src/components/dms/ActionsWrapper.web.tsx:67
3426#: src/components/dms/MessageContextMenu.tsx:99
3427msgid "Failed to add emoji reaction"
3428msgstr ""
···3532msgid "Failed to pin post"
3533msgstr ""
35343535-#: src/components/dms/ActionsWrapper.web.tsx:61
3536#: src/components/dms/MessageContextMenu.tsx:93
3537msgid "Failed to remove emoji reaction"
3538msgstr ""
···35783579#: src/components/PostControls/PostMenu/PostMenuItems.tsx:219
3580msgid "Failed to toggle thread mute, please try again"
00003581msgstr ""
35823583#: src/components/dialogs/EmailDialog/screens/Manage2FA/Disable.tsx:149
···3658msgstr ""
36593660#: src/Navigation.tsx:574
03661#: src/screens/Search/SearchResults.tsx:73
3662#: src/screens/StarterPack/StarterPackScreen.tsx:190
3663#: src/view/screens/Feeds.tsx:511
3664#: src/view/screens/Profile.tsx:230
3665-#: src/view/screens/SavedFeeds.tsx:104
3666#: src/view/shell/desktop/LeftNav.tsx:727
3667#: src/view/shell/Drawer.tsx:530
3668msgid "Feeds"
3669msgstr ""
36703671-#: src/view/screens/SavedFeeds.tsx:206
3672-msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
3673msgstr ""
36743675#: src/components/FeedCard.tsx:282
3676-#: src/view/screens/SavedFeeds.tsx:86
3677msgctxt "toast"
3678msgid "Feeds updated!"
3679msgstr ""
···3690msgid "File saved successfully!"
3691msgstr ""
36923693-#: src/lib/moderation/useLabelBehaviorDescription.ts:66
3694msgid "Filter from feeds"
3695msgstr ""
3696···3850msgid "Followers of @{0} that you know"
3851msgstr ""
38523853-#: src/screens/Profile/KnownFollowers.tsx:104
3854-#: src/screens/Profile/KnownFollowers.tsx:121
3855msgid "Followers you know"
3856msgstr ""
3857···3865msgid "Following"
3866msgstr ""
386703868#: src/view/screens/Feeds.tsx:603
3869-#: src/view/screens/SavedFeeds.tsx:420
3870msgctxt "feed-name"
3871msgid "Following"
3872msgstr ""
···4068#: src/components/moderation/ScreenHider.tsx:163
4069#: src/screens/Messages/Inbox.tsx:249
4070#: src/screens/Profile/ProfileFeed/index.tsx:92
004071#: src/screens/VideoFeed/components/Header.tsx:163
4072#: src/screens/VideoFeed/index.tsx:1146
4073#: src/screens/VideoFeed/index.tsx:1150
4074#: src/view/com/auth/LoggedOut.tsx:72
4075#: src/view/screens/NotFound.tsx:57
4076-#: src/view/screens/ProfileList.tsx:1038
4077msgid "Go back"
4078msgstr ""
4079···4084#: src/screens/Profile/ProfileFeed/index.tsx:97
4085#: src/screens/StarterPack/StarterPackScreen.tsx:773
4086#: src/view/screens/NotFound.tsx:56
4087-#: src/view/screens/ProfileList.tsx:1043
4088msgid "Go Back"
4089msgstr ""
40904091#: src/components/dms/ReportDialog.tsx:197
4092-#: src/components/ReportDialog/SelectReportOptionView.tsx:78
4093#: src/components/ReportDialog/SubmitView.tsx:110
4094#: src/screens/Onboarding/Layout.tsx:121
4095#: src/screens/Onboarding/Layout.tsx:214
···4249#: src/components/interstitials/Trending.tsx:131
4250#: src/components/interstitials/TrendingVideos.tsx:138
4251#: src/components/moderation/ContentHider.tsx:203
4252-#: src/components/moderation/LabelPreference.tsx:141
4253#: src/components/moderation/PostHider.tsx:134
4254#: src/components/PostControls/PostMenu/PostMenuItems.tsx:715
4255-#: src/lib/moderation/useLabelBehaviorDescription.ts:15
4256-#: src/lib/moderation/useLabelBehaviorDescription.ts:20
4257-#: src/lib/moderation/useLabelBehaviorDescription.ts:25
4258-#: src/lib/moderation/useLabelBehaviorDescription.ts:30
4259#: src/view/shell/desktop/SidebarTrendingTopics.tsx:111
4260msgid "Hide"
4261msgstr ""
···4406msgid "If you are not yet an adult according to the laws of your country, your parent or legal guardian must read these Terms on your behalf."
4407msgstr ""
44084409-#: src/view/screens/ProfileList.tsx:765
4410msgid "If you delete this list, you won't be able to recover it."
4411msgstr ""
4412···4447msgid "Illegal and Urgent"
4448msgstr ""
44494450-#: src/view/com/util/images/Gallery.tsx:71
4451msgid "Image"
4452msgstr ""
4453···4593msgid "Invite codes: 1 available"
4594msgstr ""
45954596-#: src/components/StarterPack/ShareDialog.tsx:77
4597msgid "Invite people to this starter pack!"
4598msgstr ""
4599···4875msgid "Liked by"
4876msgstr ""
48774878-#: src/screens/Post/PostLikedBy.tsx:38
4879-#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
4880-#: src/view/screens/ProfileFeedLikedBy.tsx:30
4881msgid "Liked By"
4882msgstr ""
4883···4927msgid "List Avatar"
4928msgstr ""
49294930-#: src/view/screens/ProfileList.tsx:438
4931msgctxt "toast"
4932msgid "List blocked"
4933msgstr ""
···4949msgid "List creator"
4950msgstr ""
49514952-#: src/view/screens/ProfileList.tsx:485
4953msgctxt "toast"
4954msgid "List deleted"
4955msgstr ""
···4958msgid "List has been hidden"
4959msgstr ""
49604961-#: src/view/screens/ProfileList.tsx:176
4962msgid "List Hidden"
4963msgstr ""
49644965-#: src/view/screens/ProfileList.tsx:402
4966msgctxt "toast"
4967msgid "List muted"
4968msgstr ""
···4971msgid "List Name"
4972msgstr ""
49734974-#: src/view/screens/ProfileList.tsx:456
04975msgctxt "toast"
4976msgid "List unblocked"
4977msgstr ""
49784979-#: src/view/screens/ProfileList.tsx:420
04980msgctxt "toast"
4981msgid "List unmuted"
4982msgstr ""
···50255026#: src/screens/Profile/ProfileFeed/index.tsx:224
5027#: src/screens/Profile/Sections/Feed.tsx:98
5028-#: src/view/com/feeds/FeedPage.tsx:162
5029-#: src/view/screens/ProfileList.tsx:878
5030msgid "Load new posts"
5031msgstr ""
5032···5059msgid "Looks like XXXXX-XXXXX"
5060msgstr ""
50615062-#: src/screens/Feeds/NoSavedFeedsOfAnyType.tsx:39
5063msgid "Looks like you haven't saved any feeds! Use our recommendations or browse more below."
5064msgstr ""
5065···5067msgid "Looks like you unpinned all your feeds. But don't worry, you can add some below 😄"
5068msgstr ""
50695070-#: src/screens/Feeds/NoFollowingFeed.tsx:37
5071msgid "Looks like you're missing a following feed. <0>Click here to add one.</0>"
5072msgstr ""
5073···5249msgid "Moderation Lists"
5250msgstr ""
52515252-#: src/components/moderation/LabelPreference.tsx:252
5253msgid "moderation settings"
5254msgstr ""
5255···5276msgid "More languages..."
5277msgstr ""
527805279#: src/view/com/profile/ProfileMenu.tsx:223
5280#: src/view/com/profile/ProfileMenu.tsx:229
5281-#: src/view/screens/ProfileList.tsx:750
5282msgid "More options"
5283msgstr ""
5284000000005285#: src/screens/Onboarding/state.ts:113
5286msgid "Movies"
5287msgstr ""
···5291msgstr ""
52925293#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerNative.tsx:153
5294-#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/VolumeControl.tsx:96
5295msgctxt "video"
5296msgid "Mute"
5297msgstr ""
···5308msgid "Mute account"
5309msgstr ""
53105311-#: src/view/screens/ProfileList.tsx:657
05312msgid "Mute accounts"
5313msgstr ""
5314···5321msgid "Mute in:"
5322msgstr ""
53235324-#: src/view/screens/ProfileList.tsx:779
5325msgid "Mute list"
5326msgstr ""
53275328-#: src/view/screens/ProfileList.tsx:774
5329msgid "Mute these accounts?"
5330msgstr ""
5331···5384msgid "Muted words & tags"
5385msgstr ""
53865387-#: src/view/screens/ProfileList.tsx:776
5388msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
5389msgstr ""
5390···5444msgid "Need to report a copyright violation, legal request, or regulatory compliance issue?"
5445msgstr ""
54465447-#: src/components/ReportDialog/SelectReportOptionView.tsx:128
5448msgid "Need to report a copyright violation?"
5449msgstr ""
5450···5526msgstr ""
55275528#: src/screens/Profile/ProfileFeed/index.tsx:241
005529#: src/view/screens/Feeds.tsx:552
5530#: src/view/screens/Notifications.tsx:167
5531#: src/view/screens/Profile.tsx:510
5532-#: src/view/screens/ProfileList.tsx:250
5533-#: src/view/screens/ProfileList.tsx:288
5534msgid "New post"
5535msgstr ""
55365537-#: src/view/com/feeds/FeedPage.tsx:173
5538msgctxt "action"
5539msgid "New post"
5540msgstr ""
···5556msgid "New starter pack"
5557msgstr ""
55585559-#: src/components/NewskieDialog.tsx:83
5560msgid "New user info dialog"
5561msgstr ""
5562···5697msgid "No results for \"{0}\"."
5698msgstr ""
56995700-#: src/components/Lists.tsx:190
5701msgid "No results found"
5702msgstr ""
5703···5774msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
5775msgstr ""
57765777-#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:134
5778msgid "Note: This post is only visible to logged-in users."
5779msgstr ""
5780···5845msgid "Nudity or adult content not labeled as such"
5846msgstr ""
58475848-#: src/lib/moderation/useLabelBehaviorDescription.ts:11
5849#: src/screens/Settings/NotificationSettings/index.tsx:291
5850msgid "Off"
5851msgstr ""
···5926msgid "Only image files are supported"
5927msgstr ""
59285929-#: src/view/com/composer/videos/SubtitleFilePicker.tsx:40
5930msgid "Only WebVTT (.vtt) files are supported"
5931msgstr ""
59325933-#: src/components/Lists.tsx:95
5934msgid "Oops, something went wrong!"
5935msgstr ""
59365937-#: src/components/Lists.tsx:174
5938#: src/components/StarterPack/ProfileStarterPacks.tsx:332
5939#: src/components/StarterPack/ProfileStarterPacks.tsx:341
5940#: src/screens/Settings/AppPasswords.tsx:59
···5998msgid "Open pack"
5999msgstr ""
60006001-#: src/components/PostControls/PostMenu/index.tsx:65
6002msgid "Open post options menu"
6003msgstr ""
6004···6007msgid "Open profile"
6008msgstr ""
60096010-#: src/components/PostControls/ShareMenu/index.tsx:90
6011msgid "Open share menu"
6012msgstr ""
6013···6091msgid "Opens list of invite codes"
6092msgstr ""
60936094-#: src/view/com/util/UserAvatar.tsx:576
6095msgid "Opens live status dialog"
6096msgstr ""
6097···6104msgstr ""
61056106#: src/view/com/notifications/NotificationFeedItem.tsx:906
6107-#: src/view/com/util/UserAvatar.tsx:594
6108msgid "Opens this profile"
6109msgstr ""
6110···6167msgid "Our moderators have reviewed reports and decided to disable your access to chats on Bluesky."
6168msgstr ""
61696170-#: src/components/Lists.tsx:191
6171#: src/view/screens/NotFound.tsx:47
6172msgid "Page not found"
6173msgstr ""
···6211msgid "Pause video"
6212msgstr ""
621306214#: src/screens/Search/SearchResults.tsx:67
6215#: src/screens/StarterPack/StarterPackScreen.tsx:189
6216-#: src/view/screens/ProfileList.tsx:170
6217msgid "People"
6218msgstr ""
6219···62536254#: src/screens/Profile/components/ProfileFeedHeader.tsx:523
6255#: src/screens/Profile/components/ProfileFeedHeader.tsx:530
06256msgid "Pin feed"
6257msgstr ""
6258···6260msgid "Pin Feed"
6261msgstr ""
62626263-#: src/view/screens/ProfileList.tsx:714
06264msgid "Pin to home"
6265msgstr ""
6266···6282msgid "Pinned {0} to Home"
6283msgstr ""
62846285-#: src/view/screens/SavedFeeds.tsx:131
6286msgid "Pinned Feeds"
6287msgstr ""
62886289-#: src/view/screens/ProfileList.tsx:361
6290msgid "Pinned to your feeds"
6291msgstr ""
6292···65626563#: src/components/activity-notifications/SubscribeProfileDialog.tsx:250
6564#: src/components/activity-notifications/SubscribeProfileDialog.tsx:262
06565#: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:213
6566#: src/screens/StarterPack/StarterPackScreen.tsx:191
6567#: src/view/screens/Profile.tsx:225
6568-#: src/view/screens/ProfileList.tsx:170
6569msgid "Posts"
6570msgstr ""
6571···6594msgstr ""
65956596#: src/components/Error.tsx:60
6597-#: src/components/Lists.tsx:100
6598#: src/screens/Messages/components/MessageListError.tsx:24
6599#: src/screens/Signup/BackNextButtons.tsx:47
6600msgid "Press to retry"
···6643#: src/Navigation.tsx:331
6644#: src/screens/Settings/AboutSettings.tsx:92
6645#: src/screens/Settings/AboutSettings.tsx:95
6646-#: src/view/screens/PrivacyPolicy.tsx:31
6647#: src/view/shell/Drawer.tsx:704
6648#: src/view/shell/Drawer.tsx:705
6649msgid "Privacy Policy"
···6723msgid "Push, People you follow"
6724msgstr ""
67256726-#: src/components/StarterPack/QrCodeDialog.tsx:134
6727msgid "QR code copied to your clipboard!"
6728msgstr ""
67296730-#: src/components/StarterPack/QrCodeDialog.tsx:112
6731msgid "QR code has been downloaded!"
6732msgstr ""
67336734-#: src/components/StarterPack/QrCodeDialog.tsx:113
6735msgid "QR code saved to your camera roll!"
6736msgstr ""
6737···6766msgstr ""
67676768#: src/lib/hooks/useNotificationHandler.ts:154
6769-#: src/screens/Post/PostQuotes.tsx:38
6770#: src/screens/Settings/NotificationSettings/index.tsx:170
6771#: src/screens/Settings/NotificationSettings/QuoteNotificationSettings.tsx:41
6772msgid "Quotes"
···6929msgid "Remove Banner"
6930msgstr ""
69316932-#: src/screens/Messages/components/MessageInputEmbed.tsx:209
6933msgid "Remove embed"
6934msgstr ""
6935···69456946#: src/screens/Profile/components/ProfileFeedHeader.tsx:319
6947#: src/screens/Profile/components/ProfileFeedHeader.tsx:325
6948-#: src/view/screens/ProfileList.tsx:528
6949-#: src/view/screens/SavedFeeds.tsx:350
06950msgid "Remove from my feeds"
6951msgstr ""
6952···7040msgstr ""
70417042#: src/screens/Profile/components/ProfileFeedHeader.tsx:122
07043#: src/view/com/posts/FeedShutdownMsg.tsx:44
7044-#: src/view/screens/ProfileList.tsx:392
7045msgid "Removed from your feeds"
7046msgstr ""
7047···7167msgid "Report feed"
7168msgstr ""
71697170-#: src/view/screens/ProfileList.tsx:570
07171msgid "Report list"
7172msgstr ""
7173···7189msgid "Report submitted"
7190msgstr ""
71917192-#: src/components/ReportDialog/SelectReportOptionView.tsx:41
7193msgid "Report this content"
7194msgstr ""
71957196#: src/components/moderation/ReportDialog/copy.ts:31
7197-#: src/components/ReportDialog/SelectReportOptionView.tsx:54
7198msgid "Report this feed"
7199msgstr ""
72007201#: src/components/moderation/ReportDialog/copy.ts:25
7202-#: src/components/ReportDialog/SelectReportOptionView.tsx:51
7203msgid "Report this list"
7204msgstr ""
72057206#: src/components/dms/ReportDialog.tsx:61
7207#: src/components/dms/ReportDialog.tsx:185
7208#: src/components/moderation/ReportDialog/copy.ts:43
7209-#: src/components/ReportDialog/SelectReportOptionView.tsx:60
7210msgid "Report this message"
7211msgstr ""
72127213#: src/components/moderation/ReportDialog/copy.ts:19
7214-#: src/components/ReportDialog/SelectReportOptionView.tsx:48
7215msgid "Report this post"
7216msgstr ""
72177218#: src/components/moderation/ReportDialog/copy.ts:37
7219-#: src/components/ReportDialog/SelectReportOptionView.tsx:57
7220msgid "Report this starter pack"
7221msgstr ""
72227223#: src/components/moderation/ReportDialog/copy.ts:13
7224-#: src/components/ReportDialog/SelectReportOptionView.tsx:45
7225msgid "Report this user"
7226msgstr ""
7227···7249msgid "Repost or quote post"
7250msgstr ""
72517252-#: src/screens/Post/PostRepostedBy.tsx:38
7253msgid "Reposted By"
7254msgstr ""
7255···73547355#: src/components/dms/MessageItem.tsx:322
7356#: src/components/Error.tsx:65
7357-#: src/components/Lists.tsx:111
7358#: src/components/moderation/ReportDialog/index.tsx:229
7359-#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoFallback.tsx:55
7360-#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoFallback.tsx:57
7361#: src/components/StarterPack/ProfileStarterPacks.tsx:346
7362#: src/screens/Login/LoginForm.tsx:323
7363#: src/screens/Login/LoginForm.tsx:330
···7391msgstr ""
73927393#: src/screens/Profile/ProfileFeed/index.tsx:93
07394#: src/screens/Settings/components/ChangeHandleDialog.tsx:569
7395#: src/screens/VideoFeed/index.tsx:1147
7396#: src/view/screens/NotFound.tsx:60
7397-#: src/view/screens/ProfileList.tsx:1039
7398msgid "Returns to previous page"
7399msgstr ""
7400···7407#: src/components/dialogs/PostInteractionSettingsDialog.tsx:489
7408#: src/components/live/EditLiveDialog.tsx:216
7409#: src/components/live/EditLiveDialog.tsx:223
7410-#: src/components/StarterPack/QrCodeDialog.tsx:192
7411#: src/screens/Profile/Header/EditProfileDialog.tsx:238
7412#: src/screens/Profile/Header/EditProfileDialog.tsx:252
07413#: src/screens/Settings/components/ChangeHandleDialog.tsx:267
7414#: src/view/com/composer/GifAltText.tsx:193
7415#: src/view/com/composer/GifAltText.tsx:202
···7418#: src/view/com/composer/photos/ImageAltTextDialog.tsx:152
7419#: src/view/com/composer/photos/ImageAltTextDialog.tsx:162
7420#: src/view/com/modals/CreateOrEditList.tsx:315
7421-#: src/view/screens/SavedFeeds.tsx:117
7422msgid "Save"
7423msgstr ""
7424···74347435#: src/components/activity-notifications/SubscribeProfileDialog.tsx:191
7436#: src/components/activity-notifications/SubscribeProfileDialog.tsx:200
7437-#: src/view/screens/SavedFeeds.tsx:113
7438-#: src/view/screens/SavedFeeds.tsx:117
7439msgid "Save changes"
7440msgstr ""
74417442-#: src/components/StarterPack/ShareDialog.tsx:131
7443#: src/components/StarterPack/ShareDialog.tsx:138
07444msgid "Save image"
7445msgstr ""
7446···7452msgid "Save new handle"
7453msgstr ""
74547455-#: src/components/StarterPack/QrCodeDialog.tsx:186
7456msgid "Save QR code"
7457msgstr ""
7458···7467msgid "Saved"
7468msgstr ""
74697470-#: src/view/screens/SavedFeeds.tsx:172
7471msgid "Saved Feeds"
7472msgstr ""
7473···7478msgstr ""
74797480#: src/screens/Profile/components/ProfileFeedHeader.tsx:132
7481-#: src/view/screens/ProfileList.tsx:372
7482msgid "Saved to your feeds"
7483msgstr ""
7484···7487msgstr ""
74887489#: src/components/dms/ChatEmptyPill.tsx:33
7490-#: src/components/NewskieDialog.tsx:105
7491#: src/view/com/notifications/NotificationFeedItem.tsx:751
7492#: src/view/com/notifications/NotificationFeedItem.tsx:776
7493msgid "Say hello!"
···7506msgid "Scroll right"
7507msgstr ""
75087509-#: src/view/screens/ProfileList.tsx:996
7510msgid "Scroll to top"
7511msgstr ""
7512···7639msgid "See more suggested profiles on the Explore page"
7640msgstr ""
76417642-#: src/view/screens/SavedFeeds.tsx:213
7643msgid "See this guide"
7644msgstr ""
76457646-#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/Scrubber.tsx:197
7647msgid "Seek slider. Use the arrow keys to seek forwards and backwards, and space to play/pause"
7648msgstr ""
7649···7743msgid "Select primary language"
7744msgstr ""
77457746-#: src/view/com/composer/videos/SubtitleFilePicker.tsx:59
7747-#: src/view/com/composer/videos/SubtitleFilePicker.tsx:66
7748msgid "Select subtitle file (.vtt)"
7749msgstr ""
7750···78497850#: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:101
7851#: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:107
7852-#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:104
7853-#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:110
7854msgid "Send via direct message"
7855msgstr ""
7856···7946msgid "Sexually Suggestive"
7947msgstr ""
79487949-#: src/components/StarterPack/QrCodeDialog.tsx:182
7950#: src/screens/Hashtag.tsx:126
7951#: src/screens/StarterPack/StarterPackScreen.tsx:433
7952#: src/screens/Topic.tsx:102
7953-#: src/view/screens/ProfileList.tsx:513
7954msgid "Share"
7955msgstr ""
7956···79787979#: src/components/dialogs/LinkWarning.tsx:96
7980#: src/components/dialogs/LinkWarning.tsx:104
7981-#: src/components/StarterPack/ShareDialog.tsx:104
7982-#: src/components/StarterPack/ShareDialog.tsx:111
7983msgid "Share link"
7984msgstr ""
79857986-#: src/components/StarterPack/ShareDialog.tsx:68
7987msgid "Share link dialog"
7988msgstr ""
7989···7992msgid "Share post at:// URI"
7993msgstr ""
79947995-#: src/components/StarterPack/ShareDialog.tsx:115
7996-#: src/components/StarterPack/ShareDialog.tsx:126
7997msgid "Share QR code"
7998msgstr ""
7999···8005msgid "Share this starter pack"
8006msgstr ""
80078008-#: src/components/StarterPack/ShareDialog.tsx:80
8009msgid "Share this starter pack and help people join your community on Bluesky."
8010msgstr ""
80118012#: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:117
8013#: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:120
008014#: src/screens/StarterPack/StarterPackScreen.tsx:611
8015#: src/screens/StarterPack/StarterPackScreen.tsx:619
8016#: src/view/com/profile/ProfileMenu.tsx:246
···8027msgstr ""
80288029#: src/components/moderation/ContentHider.tsx:203
8030-#: src/components/moderation/LabelPreference.tsx:143
8031#: src/components/moderation/PostHider.tsx:134
8032msgid "Show"
8033msgstr ""
···8044msgid "Show anyway"
8045msgstr ""
80468047-#: src/lib/moderation/useLabelBehaviorDescription.ts:27
8048-#: src/lib/moderation/useLabelBehaviorDescription.ts:63
8049msgid "Show badge"
8050msgstr ""
80518052-#: src/lib/moderation/useLabelBehaviorDescription.ts:61
8053msgid "Show badge and filter from feeds"
8054msgstr ""
8055···8116msgid "Show samples of your saved feeds in your Following feed"
8117msgstr ""
81188119-#: src/lib/moderation/useLabelBehaviorDescription.ts:58
8120msgid "Show warning"
8121msgstr ""
81228123-#: src/lib/moderation/useLabelBehaviorDescription.ts:56
8124msgid "Show warning and filter from feeds"
8125msgstr ""
8126···8299msgid "Something went wrong, please try again."
8300msgstr ""
83018302-#: src/components/Lists.tsx:175
8303msgid "Something went wrong!"
8304msgstr ""
8305···8363msgid "Start a new chat"
8364msgstr ""
83658366-#: src/view/screens/ProfileList.tsx:846
8367-#: src/view/screens/ProfileList.tsx:967
8368msgid "Start adding people"
8369msgstr ""
83708371-#: src/view/screens/ProfileList.tsx:853
8372-#: src/view/screens/ProfileList.tsx:974
8373msgid "Start adding people!"
8374msgstr ""
8375···8450msgid "Submit report"
8451msgstr ""
84528453-#: src/view/screens/ProfileList.tsx:741
8454msgid "Subscribe"
8455msgstr ""
8456···8470msgid "Subscribe to this labeler"
8471msgstr ""
84728473-#: src/view/screens/ProfileList.tsx:737
8474msgid "Subscribe to this list"
8475msgstr ""
8476···8513msgstr ""
85148515#: src/Navigation.tsx:326
8516-#: src/view/screens/Support.tsx:31
8517#: src/view/screens/Support.tsx:34
08518msgid "Support"
8519msgstr ""
8520···8622#: src/Navigation.tsx:336
8623#: src/screens/Settings/AboutSettings.tsx:84
8624#: src/screens/Settings/AboutSettings.tsx:87
8625-#: src/view/screens/TermsOfService.tsx:31
8626#: src/view/shell/Drawer.tsx:697
8627#: src/view/shell/Drawer.tsx:699
8628msgid "Terms of Service"
···8717msgid "The Bluesky web application"
8718msgstr ""
87198720-#: src/view/screens/CommunityGuidelines.tsx:38
8721msgid "The Community Guidelines have been moved to <0/>"
8722msgstr ""
87238724-#: src/view/screens/CopyrightPolicy.tsx:35
8725msgid "The Copyright Policy has been moved to <0/>"
8726msgstr ""
8727···8765msgid "The open social network."
8766msgstr ""
87678768-#: src/view/screens/PrivacyPolicy.tsx:35
8769msgid "The Privacy Policy has been moved to <0/>"
8770msgstr ""
8771···8783msgid "The starter pack that you are trying to view is invalid. You may delete this starter pack instead."
8784msgstr ""
87858786-#: src/components/ContextMenu/index.tsx:433
8787msgid "The subject of the context menu"
8788msgstr ""
87898790-#: src/view/screens/Support.tsx:37
8791msgid "The support form has been moved. If you need help, please <0/> or visit {HELP_DESK_URL} to get in touch with us."
8792msgstr ""
87938794-#: src/view/screens/TermsOfService.tsx:35
8795msgid "The Terms of Service have been moved to"
8796msgstr ""
8797···8812msgstr ""
88138814#: src/screens/Profile/components/ProfileFeedHeader.tsx:178
8815-#: src/view/screens/ProfileList.tsx:375
8816-#: src/view/screens/ProfileList.tsx:394
8817-#: src/view/screens/SavedFeeds.tsx:93
8818msgid "There was an issue contacting the server"
8819msgstr ""
8820···8828msgstr ""
88298830#: src/screens/Search/Explore.tsx:986
8831-#: src/view/com/posts/PostFeed.tsx:701
8832msgid "There was an issue fetching posts. Tap here to try again."
8833msgstr ""
8834···8885#: src/screens/List/ListHiddenScreen.tsx:63
8886#: src/screens/List/ListHiddenScreen.tsx:77
8887#: src/screens/List/ListHiddenScreen.tsx:99
8888-#: src/view/screens/ProfileList.tsx:411
8889-#: src/view/screens/ProfileList.tsx:429
8890-#: src/view/screens/ProfileList.tsx:447
8891-#: src/view/screens/ProfileList.tsx:465
008892msgid "There was an issue. Please check your internet connection and try again."
8893msgstr ""
8894···8979msgid "This feature allows users to receive notifications for your new posts and replies. Who do you want to enable this for?"
8980msgstr ""
89818982-#: src/screens/Settings/components/ExportCarDialog.tsx:96
8983msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost</0>."
8984msgstr ""
8985···90019002#: src/components/StarterPack/Main/PostsList.tsx:36
9003#: src/screens/Profile/ProfileFeed/index.tsx:192
9004-#: src/view/screens/ProfileList.tsx:843
9005msgid "This feed is empty."
9006msgstr ""
9007···9046msgid "This list – created by you – contains possible violations of Bluesky's community guidelines in its name or description."
9047msgstr ""
90489049-#: src/view/screens/ProfileList.tsx:962
9050msgid "This list is empty."
9051msgstr ""
9052···9127msgid "This user is included in the <0>{0}</0> list which you have muted."
9128msgstr ""
91299130-#: src/components/NewskieDialog.tsx:65
9131msgid "This user is new here. Press for more info about when they joined."
9132msgstr ""
9133···9315#: src/components/dms/MessagesListBlockedFooter.tsx:119
9316#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:208
9317#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:328
009318#: src/view/com/profile/ProfileMenu.tsx:490
9319-#: src/view/screens/ProfileList.tsx:723
9320msgid "Unblock"
9321msgstr ""
9322···9337msgid "Unblock Account?"
9338msgstr ""
93399340-#: src/view/screens/ProfileList.tsx:620
09341msgid "Unblock list"
9342msgstr ""
9343···9396msgstr ""
93979398#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerNative.tsx:152
9399-#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/VolumeControl.tsx:95
9400msgctxt "video"
9401msgid "Unmute"
9402msgstr ""
94039404-#: src/view/screens/ProfileList.tsx:730
09405msgid "Unmute"
9406msgstr ""
9407···9421msgid "Unmute conversation"
9422msgstr ""
94239424-#: src/view/screens/ProfileList.tsx:605
09425msgid "Unmute list"
9426msgstr ""
9427···9434msgid "Unmute video"
9435msgstr ""
94369437-#: src/view/screens/ProfileList.tsx:714
09438msgid "Unpin"
9439msgstr ""
94409441#: src/screens/Profile/components/ProfileFeedHeader.tsx:523
9442#: src/screens/Profile/components/ProfileFeedHeader.tsx:530
09443msgid "Unpin feed"
9444msgstr ""
9445···9457msgid "Unpin from profile"
9458msgstr ""
94599460-#: src/view/screens/ProfileList.tsx:585
09461msgid "Unpin moderation list"
9462msgstr ""
9463···9465msgid "Unpinned {0} from Home"
9466msgstr ""
94679468-#: src/view/screens/ProfileList.tsx:362
9469msgid "Unpinned from your feeds"
00009470msgstr ""
94719472#: src/screens/Settings/Settings.tsx:474
···9604msgid "Use my default browser"
9605msgstr ""
96069607-#: src/screens/Feeds/NoSavedFeedsOfAnyType.tsx:53
9608msgid "Use recommended"
9609msgstr ""
9610···9831msgid "Video is playing"
9832msgstr ""
98339834-#: src/components/Post/Embed/VideoEmbed/index.web.tsx:220
9835msgid "Video not found."
9836msgstr ""
9837···9880msgid "View blocked user's profile"
9881msgstr ""
98829883-#: src/screens/Settings/components/ExportCarDialog.tsx:100
9884msgid "View blogpost for more details"
9885msgstr ""
9886···9888msgid "View debug entry"
9889msgstr ""
98909891-#: src/components/ReportDialog/SelectReportOptionView.tsx:137
9892#: src/screens/VideoFeed/index.tsx:659
9893#: src/screens/VideoFeed/index.tsx:677
9894msgid "View details"
9895msgstr ""
98969897-#: src/components/ReportDialog/SelectReportOptionView.tsx:132
9898msgid "View details for reporting a copyright violation"
9899msgstr ""
9900···9902msgid "View full thread"
9903msgstr ""
99049905-#: src/components/moderation/LabelsOnMe.tsx:46
9906msgid "View information about these labels"
9907msgstr ""
9908···9925#: src/components/ProfileHoverCard/index.web.tsx:486
9926#: src/components/ProfileHoverCard/index.web.tsx:513
9927#: src/view/com/posts/PostFeedErrorMessage.tsx:179
9928-#: src/view/com/util/PostMeta.tsx:91
9929-#: src/view/com/util/PostMeta.tsx:128
9930msgid "View profile"
9931msgstr ""
9932···9958msgid "View your default post interaction settings"
9959msgstr ""
99609961-#: src/view/com/home/HomeHeaderLayout.web.tsx:56
9962-#: src/view/com/home/HomeHeaderLayoutMobile.tsx:71
9963msgid "View your feeds and explore more"
9964msgstr ""
9965···9993msgid "Visit your notification settings"
9994msgstr ""
99959996-#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/VolumeControl.tsx:81
9997msgid "Volume"
9998msgstr ""
999910000-#: src/components/moderation/LabelPreference.tsx:142
10001-#: src/lib/moderation/useLabelBehaviorDescription.ts:17
10002-#: src/lib/moderation/useLabelBehaviorDescription.ts:22
10003msgid "Warn"
10004msgstr ""
1000510006-#: src/lib/moderation/useLabelBehaviorDescription.ts:48
10007msgid "Warn content"
10008msgstr ""
1000910010-#: src/lib/moderation/useLabelBehaviorDescription.ts:46
10011msgid "Warn content and filter from feeds"
10012msgstr ""
10013···10133msgid "We're sorry, but based on your device's location, you are currently located in a region where we cannot provide access at this time."
10134msgstr ""
1013510136-#: src/view/screens/ProfileList.tsx:117
10137msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
10138msgstr ""
10139···10149msgid "We're sorry! The post you are replying to has been deleted."
10150msgstr ""
1015110152-#: src/components/Lists.tsx:195
10153#: src/view/screens/NotFound.tsx:50
10154msgid "We're sorry! We can't find the page you were looking for."
10155msgstr ""
···10182msgid "Welcome back!"
10183msgstr ""
1018410185-#: src/components/NewskieDialog.tsx:103
10186msgid "Welcome, friend!"
10187msgstr ""
10188···10235msgid "Why are you appealing?"
10236msgstr ""
1023710238-#: src/components/ReportDialog/SelectReportOptionView.tsx:42
10239msgid "Why should this content be reviewed?"
10240msgstr ""
1024110242#: src/components/moderation/ReportDialog/copy.ts:32
10243-#: src/components/ReportDialog/SelectReportOptionView.tsx:55
10244msgid "Why should this feed be reviewed?"
10245msgstr ""
1024610247#: src/components/moderation/ReportDialog/copy.ts:26
10248-#: src/components/ReportDialog/SelectReportOptionView.tsx:52
10249msgid "Why should this list be reviewed?"
10250msgstr ""
1025110252#: src/components/moderation/ReportDialog/copy.ts:44
10253-#: src/components/ReportDialog/SelectReportOptionView.tsx:61
10254msgid "Why should this message be reviewed?"
10255msgstr ""
1025610257#: src/components/moderation/ReportDialog/copy.ts:20
10258-#: src/components/ReportDialog/SelectReportOptionView.tsx:49
10259msgid "Why should this post be reviewed?"
10260msgstr ""
1026110262#: src/components/moderation/ReportDialog/copy.ts:38
10263-#: src/components/ReportDialog/SelectReportOptionView.tsx:58
10264msgid "Why should this starter pack be reviewed?"
10265msgstr ""
1026610267#: src/components/moderation/ReportDialog/copy.ts:14
10268-#: src/components/ReportDialog/SelectReportOptionView.tsx:46
10269msgid "Why should this user be reviewed?"
10270msgstr ""
10271···10297msgid "www.mylivestream.tv"
10298msgstr ""
1029910300-#: src/view/com/composer/select-language/SuggestedLanguage.tsx:100
10301msgid "Yes"
10302msgstr ""
10303···10326msgid "Yesterday"
10327msgstr ""
1032810329-#: src/components/NewskieDialog.tsx:43
10330msgid "You"
10331msgstr ""
10332···10448msgid "You do not have any followers."
10449msgstr ""
1045010451-#: src/screens/Profile/KnownFollowers.tsx:109
10452msgid "You don't follow any users who follow @{name}."
10453msgstr ""
10454···10460msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
10461msgstr ""
1046210463-#: src/view/screens/SavedFeeds.tsx:145
10464msgid "You don't have any pinned feeds."
10465msgstr ""
1046610467-#: src/view/screens/SavedFeeds.tsx:185
10468msgid "You don't have any saved feeds."
10469msgstr ""
10470···10530msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
10531msgstr ""
1053210533-#: src/components/Lists.tsx:58
10534msgid "You have reached the end"
10535msgstr ""
10536···10595msgid "You must complete age assurance in order to access this screen."
10596msgstr ""
1059710598-#: src/components/StarterPack/QrCodeDialog.tsx:61
10599msgid "You must grant access to your photo library to save a QR code"
10600msgstr ""
10601···10771msgid "Your birth date"
10772msgstr ""
1077310774-#: src/components/Post/Embed/VideoEmbed/index.web.tsx:224
10775msgid "Your browser does not support the video format. Please try a different browser."
10776msgstr ""
10777
···30msgid "{0, plural, one {# day} other {# days}}"
31msgstr ""
3233+#: src/screens/Profile/ProfileFollowers.tsx:43
34msgid "{0, plural, one {# follower} other {# followers}}"
35msgstr ""
3637+#: src/screens/Profile/ProfileFollows.tsx:43
38msgid "{0, plural, one {# following} other {# following}}"
39msgstr ""
40···42msgid "{0, plural, one {# hour} other {# hours}}"
43msgstr ""
4445+#: src/components/moderation/LabelsOnMe.tsx:58
46msgid "{0, plural, one {# label has} other {# labels have}} been placed on this account"
47msgstr ""
4849+#: src/components/moderation/LabelsOnMe.tsx:67
50msgid "{0, plural, one {# label has} other {# labels have}} been placed on this content"
51msgstr ""
5253+#: src/screens/Post/PostLikedBy.tsx:44
54msgid "{0, plural, one {# like} other {# likes}}"
55msgstr ""
56···62msgid "{0, plural, one {# month} other {# months}}"
63msgstr ""
6465+#: src/screens/Post/PostQuotes.tsx:44
66msgid "{0, plural, one {# quote} other {# quotes}}"
67msgstr ""
6869+#: src/screens/Post/PostRepostedBy.tsx:44
70msgid "{0, plural, one {# repost} other {# reposts}}"
71msgstr ""
72···158msgid "{0} joined this week"
159msgstr ""
160161+#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/Scrubber.tsx:203
162msgid "{0} of {1}"
163msgstr ""
164···183msgid "{0}, a list by {1}"
184msgstr ""
185186+#: src/view/com/util/UserAvatar.tsx:577
187+#: src/view/com/util/UserAvatar.tsx:595
188msgid "{0}'s avatar"
189msgstr ""
190···422msgid "{notificationCount, plural, one {# unread item} other {# unread items}}"
423msgstr ""
424425+#: src/components/NewskieDialog.tsx:131
426msgid "{profileName} joined Bluesky {0} ago"
427msgstr ""
428429+#: src/components/NewskieDialog.tsx:126
430msgid "{profileName} joined Bluesky using a starter pack {0} ago"
431msgstr ""
432···677msgid "Add a temporary live status to your profile. When someone clicks on your avatar, they’ll see information about your live event."
678msgstr ""
679680+#: src/screens/ProfileList/AboutSection.tsx:62
681+#: src/screens/ProfileList/AboutSection.tsx:80
682msgid "Add a user to this list"
683msgstr ""
684···748msgid "Add muted words and tags"
749msgstr ""
750751+#: src/screens/ProfileList/AboutSection.tsx:70
752+#: src/screens/ProfileList/AboutSection.tsx:88
753msgid "Add people"
754msgstr ""
755···769msgid "Add some feeds to your starter pack!"
770msgstr ""
771772+#: src/screens/Feeds/NoFollowingFeed.tsx:39
773msgid "Add the default feed of only people you follow"
774msgstr ""
775···832msgid "Adult content can only be enabled via the Web at <0>bsky.app</0>."
833msgstr ""
834835+#: src/components/moderation/LabelPreference.tsx:246
836msgid "Adult content is disabled."
837msgstr ""
838···995msgid "An error occurred while loading the video. Please try again later."
996msgstr ""
997998+#: src/components/Post/Embed/VideoEmbed/index.web.tsx:226
999msgid "An error occurred while loading the video. Please try again."
1000msgstr ""
10011002+#: src/components/StarterPack/QrCodeDialog.tsx:75
1003msgid "An error occurred while saving the QR code!"
1004msgstr ""
1005···1173msgid "Appearance"
1174msgstr ""
11751176+#: src/screens/Feeds/NoSavedFeedsOfAnyType.tsx:51
1177#: src/screens/Home/NoFeedsPinned.tsx:93
1178msgid "Apply default recommended feeds"
1179msgstr ""
···1232msgid "Are you sure?"
1233msgstr ""
12341235+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:89
1236msgid "Are you writing in <0>{suggestedLanguageName}</0>?"
1237msgstr ""
1238···1366msgid "Block Account?"
1367msgstr ""
13681369+#: src/screens/ProfileList/components/SubscribeMenu.tsx:97
1370+#: src/screens/ProfileList/components/SubscribeMenu.tsx:100
1371msgid "Block accounts"
1372msgstr ""
1373···1379msgid "Block and/or delete this conversation"
1380msgstr ""
13811382+#: src/screens/ProfileList/components/SubscribeMenu.tsx:125
1383msgid "Block list"
1384msgstr ""
1385···1387msgid "Block or report"
1388msgstr ""
13891390+#: src/screens/ProfileList/components/SubscribeMenu.tsx:120
1391msgid "Block these accounts?"
1392msgstr ""
1393···1426msgid "Blocking does not prevent this labeler from placing labels on your account."
1427msgstr ""
14281429+#: src/screens/ProfileList/components/SubscribeMenu.tsx:122
1430msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
1431msgstr ""
1432···1497msgid "Bluesky+ icons"
1498msgstr ""
14991500+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
1501msgid "Blur images"
1502msgstr ""
15031504+#: src/lib/moderation/useLabelBehaviorDescription.ts:54
1505msgid "Blur images and filter from feeds"
1506msgstr ""
1507···1712msgid "Change password dialog"
1713msgstr ""
17141715+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:100
1716msgid "Change post language to {suggestedLanguageName}"
1717msgstr ""
1718···1876msgid "Click for information"
1877msgstr ""
18781879+#: src/view/screens/Support.tsx:44
1880msgid "click here"
1881msgstr ""
1882···1930#: src/components/dms/ReportDialog.tsx:395
1931#: src/components/live/EditLiveDialog.tsx:229
1932#: src/components/live/EditLiveDialog.tsx:235
1933+#: src/components/NewskieDialog.tsx:159
1934+#: src/components/NewskieDialog.tsx:165
1935#: src/components/Post/Embed/ExternalEmbed/Gif.tsx:197
1936#: src/components/ProgressGuide/FollowDialog.tsx:379
1937#: src/components/StarterPack/Wizard/WizardEditListDialog.tsx:118
···1957msgid "Close alert"
1958msgstr ""
19591960+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:37
1961msgid "Close bottom drawer"
1962msgstr ""
1963···20532054#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:45
2055#: src/Navigation.tsx:341
2056+#: src/view/screens/CommunityGuidelines.tsx:37
2057msgid "Community Guidelines"
2058msgstr ""
2059···2082msgid "Compressing video..."
2083msgstr ""
20842085+#: src/components/moderation/LabelPreference.tsx:87
2086msgid "Configure content filtering setting for category: {name}"
2087msgstr ""
20882089+#: src/components/moderation/LabelPreference.tsx:248
2090msgid "Configured in <0>moderation settings</0>."
2091msgstr ""
2092···2282msgid "Copies build version to clipboard"
2283msgstr ""
22842285+#: src/components/StarterPack/QrCodeDialog.tsx:192
2286msgid "Copy"
2287msgstr ""
2288···2295msgid "Copy at:// URI"
2296msgstr ""
22972298+#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:152
2299+#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:155
2300msgid "Copy author DID"
2301msgstr ""
2302···2315msgid "Copy host"
2316msgstr ""
23172318+#: src/components/StarterPack/ShareDialog.tsx:113
2319#: src/screens/StarterPack/StarterPackScreen.tsx:617
2320msgid "Copy link"
2321msgstr ""
23222323+#: src/components/StarterPack/ShareDialog.tsx:119
2324msgid "Copy Link"
2325msgstr ""
23262327+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:172
2328+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:176
2329msgid "Copy link to list"
2330msgstr ""
23312332#: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:127
2333#: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:130
2334+#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:86
2335+#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:89
2336msgid "Copy link to post"
2337msgstr ""
2338···2350msgid "Copy message text"
2351msgstr ""
23522353+#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:143
2354+#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:146
2355msgid "Copy post at:// URI"
2356msgstr ""
2357···2360msgid "Copy post text"
2361msgstr ""
23622363+#: src/components/StarterPack/QrCodeDialog.tsx:178
2364msgid "Copy QR code"
2365msgstr ""
2366···2371#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:40
2372#: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:107
2373#: src/Navigation.tsx:346
2374+#: src/view/screens/CopyrightPolicy.tsx:34
2375msgid "Copyright Policy"
2376msgstr ""
2377···2396msgid "Could not load feed"
2397msgstr ""
23982399+#: src/screens/ProfileList/components/ErrorScreen.tsx:26
2400+#: src/screens/ProfileList/index.tsx:79
2401+#: src/screens/ProfileList/index.tsx:101
2402msgid "Could not load list"
2403msgstr ""
2404···2426msgid "Create"
2427msgstr ""
24282429+#: src/components/StarterPack/QrCodeDialog.tsx:163
2430msgid "Create a QR code for a starter pack"
2431msgstr ""
2432···2484msgstr ""
24852486#: src/components/moderation/ReportDialog/index.tsx:585
2487+#: src/components/ReportDialog/SelectReportOptionView.tsx:102
2488msgid "Create report for {0}"
2489msgstr ""
2490···2572#: src/components/dms/MessageContextMenu.tsx:185
2573#: src/components/PostControls/PostMenu/PostMenuItems.tsx:704
2574#: src/screens/Messages/components/ChatStatusInfo.tsx:55
2575+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:285
2576#: src/screens/Settings/AppPasswords.tsx:212
2577#: src/screens/StarterPack/StarterPackScreen.tsx:599
2578#: src/screens/StarterPack/StarterPackScreen.tsx:688
2579#: src/screens/StarterPack/StarterPackScreen.tsx:760
02580msgid "Delete"
2581msgstr ""
2582···2621msgid "Delete for me"
2622msgstr ""
26232624+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:211
2625+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:214
2626msgid "Delete list"
2627msgstr ""
2628···2653msgid "Delete starter pack?"
2654msgstr ""
26552656+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:280
2657msgid "Delete this list?"
2658msgstr ""
2659···2742msgid "Disable subtitles"
2743msgstr ""
27442745+#: src/lib/moderation/useLabelBehaviorDescription.ts:35
2746+#: src/lib/moderation/useLabelBehaviorDescription.ts:45
2747+#: src/lib/moderation/useLabelBehaviorDescription.ts:71
2748#: src/screens/Messages/Settings.tsx:144
2749#: src/screens/Messages/Settings.tsx:147
2750#: src/screens/Moderation/index.tsx:413
···2903msgid "Download Bluesky"
2904msgstr ""
29052906+#: src/screens/Settings/components/ExportCarDialog.tsx:78
2907+#: src/screens/Settings/components/ExportCarDialog.tsx:83
2908msgid "Download CAR file"
2909msgstr ""
2910···2991msgid "Edit interests"
2992msgstr ""
29932994+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:203
2995+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:206
2996msgid "Edit list details"
2997msgstr ""
2998···31003101#: src/components/dialogs/Embed.tsx:104
3102#: src/components/dialogs/Embed.tsx:108
3103+#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:118
3104+#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:123
3105msgid "Embed post"
3106msgstr ""
3107···3428msgid "Failed to accept chat"
3429msgstr ""
34303431+#: src/components/dms/ActionsWrapper.web.tsx:66
3432#: src/components/dms/MessageContextMenu.tsx:99
3433msgid "Failed to add emoji reaction"
3434msgstr ""
···3538msgid "Failed to pin post"
3539msgstr ""
35403541+#: src/components/dms/ActionsWrapper.web.tsx:60
3542#: src/components/dms/MessageContextMenu.tsx:93
3543msgid "Failed to remove emoji reaction"
3544msgstr ""
···35843585#: src/components/PostControls/PostMenu/PostMenuItems.tsx:219
3586msgid "Failed to toggle thread mute, please try again"
3587+msgstr ""
3588+3589+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:111
3590+msgid "Failed to unpin list"
3591msgstr ""
35923593#: src/components/dialogs/EmailDialog/screens/Manage2FA/Disable.tsx:149
···3668msgstr ""
36693670#: src/Navigation.tsx:574
3671+#: src/screens/SavedFeeds.tsx:108
3672#: src/screens/Search/SearchResults.tsx:73
3673#: src/screens/StarterPack/StarterPackScreen.tsx:190
3674#: src/view/screens/Feeds.tsx:511
3675#: src/view/screens/Profile.tsx:230
03676#: src/view/shell/desktop/LeftNav.tsx:727
3677#: src/view/shell/Drawer.tsx:530
3678msgid "Feeds"
3679msgstr ""
36803681+#: src/screens/SavedFeeds.tsx:215
3682+msgid "Feeds are custom algorithms that users build with a little coding expertise. <0>See this guide</0> for more information."
3683msgstr ""
36843685#: src/components/FeedCard.tsx:282
3686+#: src/screens/SavedFeeds.tsx:90
3687msgctxt "toast"
3688msgid "Feeds updated!"
3689msgstr ""
···3700msgid "File saved successfully!"
3701msgstr ""
37023703+#: src/lib/moderation/useLabelBehaviorDescription.ts:69
3704msgid "Filter from feeds"
3705msgstr ""
3706···3860msgid "Followers of @{0} that you know"
3861msgstr ""
38623863+#: src/screens/Profile/KnownFollowers.tsx:107
3864+#: src/screens/Profile/KnownFollowers.tsx:124
3865msgid "Followers you know"
3866msgstr ""
3867···3875msgid "Following"
3876msgstr ""
38773878+#: src/screens/SavedFeeds.tsx:410
3879#: src/view/screens/Feeds.tsx:603
03880msgctxt "feed-name"
3881msgid "Following"
3882msgstr ""
···4078#: src/components/moderation/ScreenHider.tsx:163
4079#: src/screens/Messages/Inbox.tsx:249
4080#: src/screens/Profile/ProfileFeed/index.tsx:92
4081+#: src/screens/ProfileList/components/ErrorScreen.tsx:34
4082+#: src/screens/ProfileList/components/ErrorScreen.tsx:40
4083#: src/screens/VideoFeed/components/Header.tsx:163
4084#: src/screens/VideoFeed/index.tsx:1146
4085#: src/screens/VideoFeed/index.tsx:1150
4086#: src/view/com/auth/LoggedOut.tsx:72
4087#: src/view/screens/NotFound.tsx:57
04088msgid "Go back"
4089msgstr ""
4090···4095#: src/screens/Profile/ProfileFeed/index.tsx:97
4096#: src/screens/StarterPack/StarterPackScreen.tsx:773
4097#: src/view/screens/NotFound.tsx:56
04098msgid "Go Back"
4099msgstr ""
41004101#: src/components/dms/ReportDialog.tsx:197
4102+#: src/components/ReportDialog/SelectReportOptionView.tsx:81
4103#: src/components/ReportDialog/SubmitView.tsx:110
4104#: src/screens/Onboarding/Layout.tsx:121
4105#: src/screens/Onboarding/Layout.tsx:214
···4259#: src/components/interstitials/Trending.tsx:131
4260#: src/components/interstitials/TrendingVideos.tsx:138
4261#: src/components/moderation/ContentHider.tsx:203
4262+#: src/components/moderation/LabelPreference.tsx:140
4263#: src/components/moderation/PostHider.tsx:134
4264#: src/components/PostControls/PostMenu/PostMenuItems.tsx:715
4265+#: src/lib/moderation/useLabelBehaviorDescription.ts:18
4266+#: src/lib/moderation/useLabelBehaviorDescription.ts:23
4267+#: src/lib/moderation/useLabelBehaviorDescription.ts:28
4268+#: src/lib/moderation/useLabelBehaviorDescription.ts:33
4269#: src/view/shell/desktop/SidebarTrendingTopics.tsx:111
4270msgid "Hide"
4271msgstr ""
···4416msgid "If you are not yet an adult according to the laws of your country, your parent or legal guardian must read these Terms on your behalf."
4417msgstr ""
44184419+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:282
4420msgid "If you delete this list, you won't be able to recover it."
4421msgstr ""
4422···4457msgid "Illegal and Urgent"
4458msgstr ""
44594460+#: src/view/com/util/images/Gallery.tsx:70
4461msgid "Image"
4462msgstr ""
4463···4603msgid "Invite codes: 1 available"
4604msgstr ""
46054606+#: src/components/StarterPack/ShareDialog.tsx:81
4607msgid "Invite people to this starter pack!"
4608msgstr ""
4609···4885msgid "Liked by"
4886msgstr ""
48874888+#: src/screens/Post/PostLikedBy.tsx:41
4889+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:32
4890+#: src/view/screens/ProfileFeedLikedBy.tsx:33
4891msgid "Liked By"
4892msgstr ""
4893···4937msgid "List Avatar"
4938msgstr ""
49394940+#: src/screens/ProfileList/components/SubscribeMenu.tsx:50
4941msgctxt "toast"
4942msgid "List blocked"
4943msgstr ""
···4959msgid "List creator"
4960msgstr ""
49614962+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:97
4963msgctxt "toast"
4964msgid "List deleted"
4965msgstr ""
···4968msgid "List has been hidden"
4969msgstr ""
49704971+#: src/screens/ProfileList/index.tsx:172
4972msgid "List Hidden"
4973msgstr ""
49744975+#: src/screens/ProfileList/components/SubscribeMenu.tsx:31
4976msgctxt "toast"
4977msgid "List muted"
4978msgstr ""
···4981msgid "List Name"
4982msgstr ""
49834984+#: src/screens/ProfileList/components/Header.tsx:116
4985+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:138
4986msgctxt "toast"
4987msgid "List unblocked"
4988msgstr ""
49894990+#: src/screens/ProfileList/components/Header.tsx:98
4991+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:120
4992msgctxt "toast"
4993msgid "List unmuted"
4994msgstr ""
···50375038#: src/screens/Profile/ProfileFeed/index.tsx:224
5039#: src/screens/Profile/Sections/Feed.tsx:98
5040+#: src/screens/ProfileList/FeedSection.tsx:105
5041+#: src/view/com/feeds/FeedPage.tsx:169
5042msgid "Load new posts"
5043msgstr ""
5044···5071msgid "Looks like XXXXX-XXXXX"
5072msgstr ""
50735074+#: src/screens/Feeds/NoSavedFeedsOfAnyType.tsx:43
5075msgid "Looks like you haven't saved any feeds! Use our recommendations or browse more below."
5076msgstr ""
5077···5079msgid "Looks like you unpinned all your feeds. But don't worry, you can add some below 😄"
5080msgstr ""
50815082+#: src/screens/Feeds/NoFollowingFeed.tsx:35
5083msgid "Looks like you're missing a following feed. <0>Click here to add one.</0>"
5084msgstr ""
5085···5261msgid "Moderation Lists"
5262msgstr ""
52635264+#: src/components/moderation/LabelPreference.tsx:251
5265msgid "moderation settings"
5266msgstr ""
5267···5288msgid "More languages..."
5289msgstr ""
52905291+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:156
5292#: src/view/com/profile/ProfileMenu.tsx:223
5293#: src/view/com/profile/ProfileMenu.tsx:229
05294msgid "More options"
5295msgstr ""
52965297+#: src/screens/SavedFeeds.tsx:329
5298+msgid "Move feed down"
5299+msgstr ""
5300+5301+#: src/screens/SavedFeeds.tsx:320
5302+msgid "Move feed up"
5303+msgstr ""
5304+5305#: src/screens/Onboarding/state.ts:113
5306msgid "Movies"
5307msgstr ""
···5311msgstr ""
53125313#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerNative.tsx:153
5314+#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/VolumeControl.tsx:95
5315msgctxt "video"
5316msgid "Mute"
5317msgstr ""
···5328msgid "Mute account"
5329msgstr ""
53305331+#: src/screens/ProfileList/components/SubscribeMenu.tsx:89
5332+#: src/screens/ProfileList/components/SubscribeMenu.tsx:92
5333msgid "Mute accounts"
5334msgstr ""
5335···5342msgid "Mute in:"
5343msgstr ""
53445345+#: src/screens/ProfileList/components/SubscribeMenu.tsx:115
5346msgid "Mute list"
5347msgstr ""
53485349+#: src/screens/ProfileList/components/SubscribeMenu.tsx:110
5350msgid "Mute these accounts?"
5351msgstr ""
5352···5405msgid "Muted words & tags"
5406msgstr ""
54075408+#: src/screens/ProfileList/components/SubscribeMenu.tsx:112
5409msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
5410msgstr ""
5411···5465msgid "Need to report a copyright violation, legal request, or regulatory compliance issue?"
5466msgstr ""
54675468+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
5469msgid "Need to report a copyright violation?"
5470msgstr ""
5471···5547msgstr ""
55485549#: src/screens/Profile/ProfileFeed/index.tsx:241
5550+#: src/screens/ProfileList/index.tsx:246
5551+#: src/screens/ProfileList/index.tsx:284
5552#: src/view/screens/Feeds.tsx:552
5553#: src/view/screens/Notifications.tsx:167
5554#: src/view/screens/Profile.tsx:510
005555msgid "New post"
5556msgstr ""
55575558+#: src/view/com/feeds/FeedPage.tsx:180
5559msgctxt "action"
5560msgid "New post"
5561msgstr ""
···5577msgid "New starter pack"
5578msgstr ""
55795580+#: src/components/NewskieDialog.tsx:102
5581msgid "New user info dialog"
5582msgstr ""
5583···5718msgid "No results for \"{0}\"."
5719msgstr ""
57205721+#: src/components/Lists.tsx:189
5722msgid "No results found"
5723msgstr ""
5724···5795msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
5796msgstr ""
57975798+#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:133
5799msgid "Note: This post is only visible to logged-in users."
5800msgstr ""
5801···5866msgid "Nudity or adult content not labeled as such"
5867msgstr ""
58685869+#: src/lib/moderation/useLabelBehaviorDescription.ts:14
5870#: src/screens/Settings/NotificationSettings/index.tsx:291
5871msgid "Off"
5872msgstr ""
···5947msgid "Only image files are supported"
5948msgstr ""
59495950+#: src/view/com/composer/videos/SubtitleFilePicker.tsx:41
5951msgid "Only WebVTT (.vtt) files are supported"
5952msgstr ""
59535954+#: src/components/Lists.tsx:94
5955msgid "Oops, something went wrong!"
5956msgstr ""
59575958+#: src/components/Lists.tsx:173
5959#: src/components/StarterPack/ProfileStarterPacks.tsx:332
5960#: src/components/StarterPack/ProfileStarterPacks.tsx:341
5961#: src/screens/Settings/AppPasswords.tsx:59
···6019msgid "Open pack"
6020msgstr ""
60216022+#: src/components/PostControls/PostMenu/index.tsx:64
6023msgid "Open post options menu"
6024msgstr ""
6025···6028msgid "Open profile"
6029msgstr ""
60306031+#: src/components/PostControls/ShareMenu/index.tsx:89
6032msgid "Open share menu"
6033msgstr ""
6034···6112msgid "Opens list of invite codes"
6113msgstr ""
61146115+#: src/view/com/util/UserAvatar.tsx:581
6116msgid "Opens live status dialog"
6117msgstr ""
6118···6125msgstr ""
61266127#: src/view/com/notifications/NotificationFeedItem.tsx:906
6128+#: src/view/com/util/UserAvatar.tsx:599
6129msgid "Opens this profile"
6130msgstr ""
6131···6188msgid "Our moderators have reviewed reports and decided to disable your access to chats on Bluesky."
6189msgstr ""
61906191+#: src/components/Lists.tsx:190
6192#: src/view/screens/NotFound.tsx:47
6193msgid "Page not found"
6194msgstr ""
···6232msgid "Pause video"
6233msgstr ""
62346235+#: src/screens/ProfileList/index.tsx:166
6236#: src/screens/Search/SearchResults.tsx:67
6237#: src/screens/StarterPack/StarterPackScreen.tsx:189
06238msgid "People"
6239msgstr ""
6240···62746275#: src/screens/Profile/components/ProfileFeedHeader.tsx:523
6276#: src/screens/Profile/components/ProfileFeedHeader.tsx:530
6277+#: src/screens/SavedFeeds.tsx:351
6278msgid "Pin feed"
6279msgstr ""
6280···6282msgid "Pin Feed"
6283msgstr ""
62846285+#: src/screens/ProfileList/components/Header.tsx:156
6286+#: src/screens/ProfileList/components/Header.tsx:163
6287msgid "Pin to home"
6288msgstr ""
6289···6305msgid "Pinned {0} to Home"
6306msgstr ""
63076308+#: src/screens/SavedFeeds.tsx:142
6309msgid "Pinned Feeds"
6310msgstr ""
63116312+#: src/screens/ProfileList/components/Header.tsx:74
6313msgid "Pinned to your feeds"
6314msgstr ""
6315···65856586#: src/components/activity-notifications/SubscribeProfileDialog.tsx:250
6587#: src/components/activity-notifications/SubscribeProfileDialog.tsx:262
6588+#: src/screens/ProfileList/index.tsx:166
6589#: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:213
6590#: src/screens/StarterPack/StarterPackScreen.tsx:191
6591#: src/view/screens/Profile.tsx:225
06592msgid "Posts"
6593msgstr ""
6594···6617msgstr ""
66186619#: src/components/Error.tsx:60
6620+#: src/components/Lists.tsx:99
6621#: src/screens/Messages/components/MessageListError.tsx:24
6622#: src/screens/Signup/BackNextButtons.tsx:47
6623msgid "Press to retry"
···6666#: src/Navigation.tsx:331
6667#: src/screens/Settings/AboutSettings.tsx:92
6668#: src/screens/Settings/AboutSettings.tsx:95
6669+#: src/view/screens/PrivacyPolicy.tsx:34
6670#: src/view/shell/Drawer.tsx:704
6671#: src/view/shell/Drawer.tsx:705
6672msgid "Privacy Policy"
···6746msgid "Push, People you follow"
6747msgstr ""
67486749+#: src/components/StarterPack/QrCodeDialog.tsx:137
6750msgid "QR code copied to your clipboard!"
6751msgstr ""
67526753+#: src/components/StarterPack/QrCodeDialog.tsx:115
6754msgid "QR code has been downloaded!"
6755msgstr ""
67566757+#: src/components/StarterPack/QrCodeDialog.tsx:116
6758msgid "QR code saved to your camera roll!"
6759msgstr ""
6760···6789msgstr ""
67906791#: src/lib/hooks/useNotificationHandler.ts:154
6792+#: src/screens/Post/PostQuotes.tsx:41
6793#: src/screens/Settings/NotificationSettings/index.tsx:170
6794#: src/screens/Settings/NotificationSettings/QuoteNotificationSettings.tsx:41
6795msgid "Quotes"
···6952msgid "Remove Banner"
6953msgstr ""
69546955+#: src/screens/Messages/components/MessageInputEmbed.tsx:212
6956msgid "Remove embed"
6957msgstr ""
6958···69686969#: src/screens/Profile/components/ProfileFeedHeader.tsx:319
6970#: src/screens/Profile/components/ProfileFeedHeader.tsx:325
6971+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:188
6972+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:191
6973+#: src/screens/SavedFeeds.tsx:340
6974msgid "Remove from my feeds"
6975msgstr ""
6976···7064msgstr ""
70657066#: src/screens/Profile/components/ProfileFeedHeader.tsx:122
7067+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:74
7068#: src/view/com/posts/FeedShutdownMsg.tsx:44
07069msgid "Removed from your feeds"
7070msgstr ""
7071···7191msgid "Report feed"
7192msgstr ""
71937194+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:222
7195+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:225
7196msgid "Report list"
7197msgstr ""
7198···7214msgid "Report submitted"
7215msgstr ""
72167217+#: src/components/ReportDialog/SelectReportOptionView.tsx:44
7218msgid "Report this content"
7219msgstr ""
72207221#: src/components/moderation/ReportDialog/copy.ts:31
7222+#: src/components/ReportDialog/SelectReportOptionView.tsx:57
7223msgid "Report this feed"
7224msgstr ""
72257226#: src/components/moderation/ReportDialog/copy.ts:25
7227+#: src/components/ReportDialog/SelectReportOptionView.tsx:54
7228msgid "Report this list"
7229msgstr ""
72307231#: src/components/dms/ReportDialog.tsx:61
7232#: src/components/dms/ReportDialog.tsx:185
7233#: src/components/moderation/ReportDialog/copy.ts:43
7234+#: src/components/ReportDialog/SelectReportOptionView.tsx:63
7235msgid "Report this message"
7236msgstr ""
72377238#: src/components/moderation/ReportDialog/copy.ts:19
7239+#: src/components/ReportDialog/SelectReportOptionView.tsx:51
7240msgid "Report this post"
7241msgstr ""
72427243#: src/components/moderation/ReportDialog/copy.ts:37
7244+#: src/components/ReportDialog/SelectReportOptionView.tsx:60
7245msgid "Report this starter pack"
7246msgstr ""
72477248#: src/components/moderation/ReportDialog/copy.ts:13
7249+#: src/components/ReportDialog/SelectReportOptionView.tsx:48
7250msgid "Report this user"
7251msgstr ""
7252···7274msgid "Repost or quote post"
7275msgstr ""
72767277+#: src/screens/Post/PostRepostedBy.tsx:41
7278msgid "Reposted By"
7279msgstr ""
7280···73797380#: src/components/dms/MessageItem.tsx:322
7381#: src/components/Error.tsx:65
7382+#: src/components/Lists.tsx:110
7383#: src/components/moderation/ReportDialog/index.tsx:229
7384+#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoFallback.tsx:54
7385+#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoFallback.tsx:56
7386#: src/components/StarterPack/ProfileStarterPacks.tsx:346
7387#: src/screens/Login/LoginForm.tsx:323
7388#: src/screens/Login/LoginForm.tsx:330
···7416msgstr ""
74177418#: src/screens/Profile/ProfileFeed/index.tsx:93
7419+#: src/screens/ProfileList/components/ErrorScreen.tsx:35
7420#: src/screens/Settings/components/ChangeHandleDialog.tsx:569
7421#: src/screens/VideoFeed/index.tsx:1147
7422#: src/view/screens/NotFound.tsx:60
07423msgid "Returns to previous page"
7424msgstr ""
7425···7432#: src/components/dialogs/PostInteractionSettingsDialog.tsx:489
7433#: src/components/live/EditLiveDialog.tsx:216
7434#: src/components/live/EditLiveDialog.tsx:223
7435+#: src/components/StarterPack/QrCodeDialog.tsx:204
7436#: src/screens/Profile/Header/EditProfileDialog.tsx:238
7437#: src/screens/Profile/Header/EditProfileDialog.tsx:252
7438+#: src/screens/SavedFeeds.tsx:120
7439#: src/screens/Settings/components/ChangeHandleDialog.tsx:267
7440#: src/view/com/composer/GifAltText.tsx:193
7441#: src/view/com/composer/GifAltText.tsx:202
···7444#: src/view/com/composer/photos/ImageAltTextDialog.tsx:152
7445#: src/view/com/composer/photos/ImageAltTextDialog.tsx:162
7446#: src/view/com/modals/CreateOrEditList.tsx:315
07447msgid "Save"
7448msgstr ""
7449···74597460#: src/components/activity-notifications/SubscribeProfileDialog.tsx:191
7461#: src/components/activity-notifications/SubscribeProfileDialog.tsx:200
7462+#: src/screens/SavedFeeds.tsx:116
7463+#: src/screens/SavedFeeds.tsx:120
7464msgid "Save changes"
7465msgstr ""
746607467#: src/components/StarterPack/ShareDialog.tsx:138
7468+#: src/components/StarterPack/ShareDialog.tsx:144
7469msgid "Save image"
7470msgstr ""
7471···7477msgid "Save new handle"
7478msgstr ""
74797480+#: src/components/StarterPack/QrCodeDialog.tsx:196
7481msgid "Save QR code"
7482msgstr ""
7483···7492msgid "Saved"
7493msgstr ""
74947495+#: src/screens/SavedFeeds.tsx:184
7496msgid "Saved Feeds"
7497msgstr ""
7498···7503msgstr ""
75047505#: src/screens/Profile/components/ProfileFeedHeader.tsx:132
7506+#: src/screens/ProfileList/components/Header.tsx:85
7507msgid "Saved to your feeds"
7508msgstr ""
7509···7512msgstr ""
75137514#: src/components/dms/ChatEmptyPill.tsx:33
7515+#: src/components/NewskieDialog.tsx:121
7516#: src/view/com/notifications/NotificationFeedItem.tsx:751
7517#: src/view/com/notifications/NotificationFeedItem.tsx:776
7518msgid "Say hello!"
···7531msgid "Scroll right"
7532msgstr ""
75337534+#: src/screens/ProfileList/AboutSection.tsx:130
7535msgid "Scroll to top"
7536msgstr ""
7537···7664msgid "See more suggested profiles on the Explore page"
7665msgstr ""
76667667+#: src/screens/SavedFeeds.tsx:220
7668msgid "See this guide"
7669msgstr ""
76707671+#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/Scrubber.tsx:196
7672msgid "Seek slider. Use the arrow keys to seek forwards and backwards, and space to play/pause"
7673msgstr ""
7674···7768msgid "Select primary language"
7769msgstr ""
77707771+#: src/view/com/composer/videos/SubtitleFilePicker.tsx:60
7772+#: src/view/com/composer/videos/SubtitleFilePicker.tsx:67
7773msgid "Select subtitle file (.vtt)"
7774msgstr ""
7775···78747875#: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:101
7876#: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:107
7877+#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:103
7878+#: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:109
7879msgid "Send via direct message"
7880msgstr ""
7881···7971msgid "Sexually Suggestive"
7972msgstr ""
79737974+#: src/components/StarterPack/QrCodeDialog.tsx:192
7975#: src/screens/Hashtag.tsx:126
7976#: src/screens/StarterPack/StarterPackScreen.tsx:433
7977#: src/screens/Topic.tsx:102
07978msgid "Share"
7979msgstr ""
7980···80028003#: src/components/dialogs/LinkWarning.tsx:96
8004#: src/components/dialogs/LinkWarning.tsx:104
8005+#: src/components/StarterPack/ShareDialog.tsx:113
8006+#: src/components/StarterPack/ShareDialog.tsx:119
8007msgid "Share link"
8008msgstr ""
80098010+#: src/components/StarterPack/ShareDialog.tsx:72
8011msgid "Share link dialog"
8012msgstr ""
8013···8016msgid "Share post at:// URI"
8017msgstr ""
80188019+#: src/components/StarterPack/ShareDialog.tsx:123
8020+#: src/components/StarterPack/ShareDialog.tsx:133
8021msgid "Share QR code"
8022msgstr ""
8023···8029msgid "Share this starter pack"
8030msgstr ""
80318032+#: src/components/StarterPack/ShareDialog.tsx:84
8033msgid "Share this starter pack and help people join your community on Bluesky."
8034msgstr ""
80358036#: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:117
8037#: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:120
8038+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:172
8039+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:178
8040#: src/screens/StarterPack/StarterPackScreen.tsx:611
8041#: src/screens/StarterPack/StarterPackScreen.tsx:619
8042#: src/view/com/profile/ProfileMenu.tsx:246
···8053msgstr ""
80548055#: src/components/moderation/ContentHider.tsx:203
8056+#: src/components/moderation/LabelPreference.tsx:142
8057#: src/components/moderation/PostHider.tsx:134
8058msgid "Show"
8059msgstr ""
···8070msgid "Show anyway"
8071msgstr ""
80728073+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
8074+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
8075msgid "Show badge"
8076msgstr ""
80778078+#: src/lib/moderation/useLabelBehaviorDescription.ts:64
8079msgid "Show badge and filter from feeds"
8080msgstr ""
8081···8142msgid "Show samples of your saved feeds in your Following feed"
8143msgstr ""
81448145+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
8146msgid "Show warning"
8147msgstr ""
81488149+#: src/lib/moderation/useLabelBehaviorDescription.ts:59
8150msgid "Show warning and filter from feeds"
8151msgstr ""
8152···8325msgid "Something went wrong, please try again."
8326msgstr ""
83278328+#: src/components/Lists.tsx:174
8329msgid "Something went wrong!"
8330msgstr ""
8331···8389msgid "Start a new chat"
8390msgstr ""
83918392+#: src/screens/ProfileList/AboutSection.tsx:102
8393+#: src/screens/ProfileList/FeedSection.tsx:74
8394msgid "Start adding people"
8395msgstr ""
83968397+#: src/screens/ProfileList/AboutSection.tsx:108
8398+#: src/screens/ProfileList/FeedSection.tsx:80
8399msgid "Start adding people!"
8400msgstr ""
8401···8476msgid "Submit report"
8477msgstr ""
84788479+#: src/screens/ProfileList/components/SubscribeMenu.tsx:81
8480msgid "Subscribe"
8481msgstr ""
8482···8496msgid "Subscribe to this labeler"
8497msgstr ""
84988499+#: src/screens/ProfileList/components/SubscribeMenu.tsx:69
8500msgid "Subscribe to this list"
8501msgstr ""
8502···8539msgstr ""
85408541#: src/Navigation.tsx:326
08542#: src/view/screens/Support.tsx:34
8543+#: src/view/screens/Support.tsx:37
8544msgid "Support"
8545msgstr ""
8546···8648#: src/Navigation.tsx:336
8649#: src/screens/Settings/AboutSettings.tsx:84
8650#: src/screens/Settings/AboutSettings.tsx:87
8651+#: src/view/screens/TermsOfService.tsx:34
8652#: src/view/shell/Drawer.tsx:697
8653#: src/view/shell/Drawer.tsx:699
8654msgid "Terms of Service"
···8743msgid "The Bluesky web application"
8744msgstr ""
87458746+#: src/view/screens/CommunityGuidelines.tsx:41
8747msgid "The Community Guidelines have been moved to <0/>"
8748msgstr ""
87498750+#: src/view/screens/CopyrightPolicy.tsx:38
8751msgid "The Copyright Policy has been moved to <0/>"
8752msgstr ""
8753···8791msgid "The open social network."
8792msgstr ""
87938794+#: src/view/screens/PrivacyPolicy.tsx:38
8795msgid "The Privacy Policy has been moved to <0/>"
8796msgstr ""
8797···8809msgid "The starter pack that you are trying to view is invalid. You may delete this starter pack instead."
8810msgstr ""
88118812+#: src/components/ContextMenu/index.tsx:434
8813msgid "The subject of the context menu"
8814msgstr ""
88158816+#: src/view/screens/Support.tsx:40
8817msgid "The support form has been moved. If you need help, please <0/> or visit {HELP_DESK_URL} to get in touch with us."
8818msgstr ""
88198820+#: src/view/screens/TermsOfService.tsx:38
8821msgid "The Terms of Service have been moved to"
8822msgstr ""
8823···8838msgstr ""
88398840#: src/screens/Profile/components/ProfileFeedHeader.tsx:178
8841+#: src/screens/ProfileList/components/Header.tsx:88
8842+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:76
8843+#: src/screens/SavedFeeds.tsx:97
8844msgid "There was an issue contacting the server"
8845msgstr ""
8846···8854msgstr ""
88558856#: src/screens/Search/Explore.tsx:986
8857+#: src/view/com/posts/PostFeed.tsx:709
8858msgid "There was an issue fetching posts. Tap here to try again."
8859msgstr ""
8860···8911#: src/screens/List/ListHiddenScreen.tsx:63
8912#: src/screens/List/ListHiddenScreen.tsx:77
8913#: src/screens/List/ListHiddenScreen.tsx:99
8914+#: src/screens/ProfileList/components/Header.tsx:107
8915+#: src/screens/ProfileList/components/Header.tsx:125
8916+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:129
8917+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:147
8918+#: src/screens/ProfileList/components/SubscribeMenu.tsx:40
8919+#: src/screens/ProfileList/components/SubscribeMenu.tsx:59
8920msgid "There was an issue. Please check your internet connection and try again."
8921msgstr ""
8922···9007msgid "This feature allows users to receive notifications for your new posts and replies. Who do you want to enable this for?"
9008msgstr ""
90099010+#: src/screens/Settings/components/ExportCarDialog.tsx:95
9011msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost</0>."
9012msgstr ""
9013···90299030#: src/components/StarterPack/Main/PostsList.tsx:36
9031#: src/screens/Profile/ProfileFeed/index.tsx:192
9032+#: src/screens/ProfileList/FeedSection.tsx:71
9033msgid "This feed is empty."
9034msgstr ""
9035···9074msgid "This list – created by you – contains possible violations of Bluesky's community guidelines in its name or description."
9075msgstr ""
90769077+#: src/screens/ProfileList/AboutSection.tsx:98
9078msgid "This list is empty."
9079msgstr ""
9080···9155msgid "This user is included in the <0>{0}</0> list which you have muted."
9156msgstr ""
91579158+#: src/components/NewskieDialog.tsx:47
9159msgid "This user is new here. Press for more info about when they joined."
9160msgstr ""
9161···9343#: src/components/dms/MessagesListBlockedFooter.tsx:119
9344#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:208
9345#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:328
9346+#: src/screens/ProfileList/components/Header.tsx:171
9347+#: src/screens/ProfileList/components/Header.tsx:178
9348#: src/view/com/profile/ProfileMenu.tsx:490
09349msgid "Unblock"
9350msgstr ""
9351···9366msgid "Unblock Account?"
9367msgstr ""
93689369+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:254
9370+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:257
9371msgid "Unblock list"
9372msgstr ""
9373···9426msgstr ""
94279428#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerNative.tsx:152
9429+#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/VolumeControl.tsx:94
9430msgctxt "video"
9431msgid "Unmute"
9432msgstr ""
94339434+#: src/screens/ProfileList/components/Header.tsx:185
9435+#: src/screens/ProfileList/components/Header.tsx:192
9436msgid "Unmute"
9437msgstr ""
9438···9452msgid "Unmute conversation"
9453msgstr ""
94549455+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:264
9456+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:267
9457msgid "Unmute list"
9458msgstr ""
9459···9466msgid "Unmute video"
9467msgstr ""
94689469+#: src/screens/ProfileList/components/Header.tsx:156
9470+#: src/screens/ProfileList/components/Header.tsx:163
9471msgid "Unpin"
9472msgstr ""
94739474#: src/screens/Profile/components/ProfileFeedHeader.tsx:523
9475#: src/screens/Profile/components/ProfileFeedHeader.tsx:530
9476+#: src/screens/SavedFeeds.tsx:351
9477msgid "Unpin feed"
9478msgstr ""
9479···9491msgid "Unpin from profile"
9492msgstr ""
94939494+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:237
9495+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:240
9496msgid "Unpin moderation list"
9497msgstr ""
9498···9500msgid "Unpinned {0} from Home"
9501msgstr ""
95029503+#: src/screens/ProfileList/components/Header.tsx:75
9504msgid "Unpinned from your feeds"
9505+msgstr ""
9506+9507+#: src/screens/ProfileList/components/MoreOptionsMenu.tsx:109
9508+msgid "Unpinned list"
9509msgstr ""
95109511#: src/screens/Settings/Settings.tsx:474
···9643msgid "Use my default browser"
9644msgstr ""
96459646+#: src/screens/Feeds/NoSavedFeedsOfAnyType.tsx:56
9647msgid "Use recommended"
9648msgstr ""
9649···9870msgid "Video is playing"
9871msgstr ""
98729873+#: src/components/Post/Embed/VideoEmbed/index.web.tsx:219
9874msgid "Video not found."
9875msgstr ""
9876···9919msgid "View blocked user's profile"
9920msgstr ""
99219922+#: src/screens/Settings/components/ExportCarDialog.tsx:99
9923msgid "View blogpost for more details"
9924msgstr ""
9925···9927msgid "View debug entry"
9928msgstr ""
99299930+#: src/components/ReportDialog/SelectReportOptionView.tsx:140
9931#: src/screens/VideoFeed/index.tsx:659
9932#: src/screens/VideoFeed/index.tsx:677
9933msgid "View details"
9934msgstr ""
99359936+#: src/components/ReportDialog/SelectReportOptionView.tsx:135
9937msgid "View details for reporting a copyright violation"
9938msgstr ""
9939···9941msgid "View full thread"
9942msgstr ""
99439944+#: src/components/moderation/LabelsOnMe.tsx:51
9945msgid "View information about these labels"
9946msgstr ""
9947···9964#: src/components/ProfileHoverCard/index.web.tsx:486
9965#: src/components/ProfileHoverCard/index.web.tsx:513
9966#: src/view/com/posts/PostFeedErrorMessage.tsx:179
9967+#: src/view/com/util/PostMeta.tsx:90
9968+#: src/view/com/util/PostMeta.tsx:127
9969msgid "View profile"
9970msgstr ""
9971···9997msgid "View your default post interaction settings"
9998msgstr ""
999910000+#: src/view/com/home/HomeHeaderLayout.web.tsx:57
10001+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:72
10002msgid "View your feeds and explore more"
10003msgstr ""
10004···10032msgid "Visit your notification settings"
10033msgstr ""
1003410035+#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/VolumeControl.tsx:80
10036msgid "Volume"
10037msgstr ""
1003810039+#: src/components/moderation/LabelPreference.tsx:141
10040+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
10041+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
10042msgid "Warn"
10043msgstr ""
1004410045+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
10046msgid "Warn content"
10047msgstr ""
1004810049+#: src/lib/moderation/useLabelBehaviorDescription.ts:49
10050msgid "Warn content and filter from feeds"
10051msgstr ""
10052···10172msgid "We're sorry, but based on your device's location, you are currently located in a region where we cannot provide access at this time."
10173msgstr ""
1017410175+#: src/screens/ProfileList/index.tsx:87
10176msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
10177msgstr ""
10178···10188msgid "We're sorry! The post you are replying to has been deleted."
10189msgstr ""
1019010191+#: src/components/Lists.tsx:194
10192#: src/view/screens/NotFound.tsx:50
10193msgid "We're sorry! We can't find the page you were looking for."
10194msgstr ""
···10221msgid "Welcome back!"
10222msgstr ""
1022310224+#: src/components/NewskieDialog.tsx:121
10225msgid "Welcome, friend!"
10226msgstr ""
10227···10274msgid "Why are you appealing?"
10275msgstr ""
1027610277+#: src/components/ReportDialog/SelectReportOptionView.tsx:45
10278msgid "Why should this content be reviewed?"
10279msgstr ""
1028010281#: src/components/moderation/ReportDialog/copy.ts:32
10282+#: src/components/ReportDialog/SelectReportOptionView.tsx:58
10283msgid "Why should this feed be reviewed?"
10284msgstr ""
1028510286#: src/components/moderation/ReportDialog/copy.ts:26
10287+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
10288msgid "Why should this list be reviewed?"
10289msgstr ""
1029010291#: src/components/moderation/ReportDialog/copy.ts:44
10292+#: src/components/ReportDialog/SelectReportOptionView.tsx:64
10293msgid "Why should this message be reviewed?"
10294msgstr ""
1029510296#: src/components/moderation/ReportDialog/copy.ts:20
10297+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
10298msgid "Why should this post be reviewed?"
10299msgstr ""
1030010301#: src/components/moderation/ReportDialog/copy.ts:38
10302+#: src/components/ReportDialog/SelectReportOptionView.tsx:61
10303msgid "Why should this starter pack be reviewed?"
10304msgstr ""
1030510306#: src/components/moderation/ReportDialog/copy.ts:14
10307+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
10308msgid "Why should this user be reviewed?"
10309msgstr ""
10310···10336msgid "www.mylivestream.tv"
10337msgstr ""
1033810339+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:102
10340msgid "Yes"
10341msgstr ""
10342···10365msgid "Yesterday"
10366msgstr ""
1036710368+#: src/components/NewskieDialog.tsx:91
10369msgid "You"
10370msgstr ""
10371···10487msgid "You do not have any followers."
10488msgstr ""
1048910490+#: src/screens/Profile/KnownFollowers.tsx:112
10491msgid "You don't follow any users who follow @{name}."
10492msgstr ""
10493···10499msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
10500msgstr ""
1050110502+#: src/screens/SavedFeeds.tsx:149
10503msgid "You don't have any pinned feeds."
10504msgstr ""
1050510506+#: src/screens/SavedFeeds.tsx:191
10507msgid "You don't have any saved feeds."
10508msgstr ""
10509···10569msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
10570msgstr ""
1057110572+#: src/components/Lists.tsx:57
10573msgid "You have reached the end"
10574msgstr ""
10575···10634msgid "You must complete age assurance in order to access this screen."
10635msgstr ""
1063610637+#: src/components/StarterPack/QrCodeDialog.tsx:65
10638msgid "You must grant access to your photo library to save a QR code"
10639msgstr ""
10640···10810msgid "Your birth date"
10811msgstr ""
1081210813+#: src/components/Post/Embed/VideoEmbed/index.web.tsx:223
10814msgid "Your browser does not support the video format. Please try a different browser."
10815msgstr ""
10816
+1-1
src/logger/__tests__/logDump.test.ts
···1import {expect, test} from '@jest/globals'
23-import {add, ConsoleTransportEntry, getEntries} from '#/logger/logDump'
4import {LogContext, LogLevel} from '#/logger/types'
56test('works', () => {
···1import {expect, test} from '@jest/globals'
23+import {add, type ConsoleTransportEntry, getEntries} from '#/logger/logDump'
4import {LogContext, LogLevel} from '#/logger/types'
56test('works', () => {
+1-1
src/logger/logDump.ts
···1-import type {LogContext, LogLevel, Metadata} from '#/logger/types'
23export type ConsoleTransportEntry = {
4 id: string
···1+import {type LogContext, type LogLevel, type Metadata} from '#/logger/types'
23export type ConsoleTransportEntry = {
4 id: string
+1-1
src/logger/transports/bitdrift.ts
···1import {debug, error, info, warn} from '#/logger/bitdrift/lib'
2-import {LogLevel, Transport} from '#/logger/types'
3import {prepareMetadata} from '#/logger/util'
45const logFunctions = {
···1import {debug, error, info, warn} from '#/logger/bitdrift/lib'
2+import {LogLevel, type Transport} from '#/logger/types'
3import {prepareMetadata} from '#/logger/util'
45const logFunctions = {
+1-1
src/logger/transports/console.ts
···1import format from 'date-fns/format'
23-import {LogLevel, Transport} from '#/logger/types'
4import {prepareMetadata} from '#/logger/util'
5import {isWeb} from '#/platform/detection'
6
···1import format from 'date-fns/format'
23+import {LogLevel, type Transport} from '#/logger/types'
4import {prepareMetadata} from '#/logger/util'
5import {isWeb} from '#/platform/detection'
6
+1-1
src/logger/util.ts
···1-import {LogLevel, Metadata, Serializable} from '#/logger/types'
23export const enabledLogLevels: {
4 [key in LogLevel]: LogLevel[]
···1+import {LogLevel, type Metadata, type Serializable} from '#/logger/types'
23export const enabledLogLevels: {
4 [key in LogLevel]: LogLevel[]
-49
src/platform/polyfills.ts
···1import 'react-native-url-polyfill/auto'
2import 'fast-text-encoding'
3export {}
4-5-/**
6-https://github.com/MaxArt2501/base64-js
7-The MIT License (MIT)
8-Copyright (c) 2014 MaxArt2501
9- */
10-11-const b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
12-// Regular expression to check formal correctness of base64 encoded strings
13-const b64re =
14- /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/
15-16-globalThis.atob = (str: string): string => {
17- // atob can work with strings with whitespaces, even inside the encoded part,
18- // but only \t, \n, \f, \r and ' ', which can be stripped.
19- str = String(str).replace(/[\t\n\f\r ]+/g, '')
20- if (!b64re.test(str)) {
21- throw new TypeError(
22- "Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.",
23- )
24- }
25-26- // Adding the padding if missing, for simplicity
27- str += '=='.slice(2 - (str.length & 3))
28- var bitmap,
29- result = '',
30- r1,
31- r2,
32- i = 0
33- for (; i < str.length; ) {
34- bitmap =
35- (b64.indexOf(str.charAt(i++)) << 18) |
36- (b64.indexOf(str.charAt(i++)) << 12) |
37- ((r1 = b64.indexOf(str.charAt(i++))) << 6) |
38- (r2 = b64.indexOf(str.charAt(i++)))
39-40- result +=
41- r1 === 64
42- ? String.fromCharCode((bitmap >> 16) & 255)
43- : r2 === 64
44- ? String.fromCharCode((bitmap >> 16) & 255, (bitmap >> 8) & 255)
45- : String.fromCharCode(
46- (bitmap >> 16) & 255,
47- (bitmap >> 8) & 255,
48- bitmap & 255,
49- )
50- }
51- return result
52-}
···1-import React from 'react'
2-import {View} from 'react-native'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5···9import {InlineLinkText} from '#/components/Link'
10import {Text} from '#/components/Typography'
1112-export function NoFollowingFeed() {
13 const t = useTheme()
14 const {_} = useLingui()
15 const {mutateAsync: addSavedFeeds} = useAddSavedFeedsMutation()
1617- const addRecommendedFeeds = React.useCallback(
18- (e: any) => {
19- e.preventDefault()
2021- addSavedFeeds([
22- {
23- ...TIMELINE_SAVED_FEED,
24- pinned: true,
25- },
26- ])
2728- // prevent navigation
29- return false
30- },
31- [addSavedFeeds],
32- )
3334 return (
35 <View style={[a.flex_row, a.flex_wrap, a.align_center, a.py_md, a.px_lg]}>
···37 <Trans>
38 Looks like you're missing a following feed.{' '}
39 <InlineLinkText
40- to="/"
41 label={_(msg`Add the default feed of only people you follow`)}
42 onPress={addRecommendedFeeds}
43 style={[a.leading_snug]}>
···1+import {type GestureResponderEvent, View} from 'react-native'
02import {msg, Trans} from '@lingui/macro'
3import {useLingui} from '@lingui/react'
4···8import {InlineLinkText} from '#/components/Link'
9import {Text} from '#/components/Typography'
1011+export function NoFollowingFeed({onAddFeed}: {onAddFeed?: () => void}) {
12 const t = useTheme()
13 const {_} = useLingui()
14 const {mutateAsync: addSavedFeeds} = useAddSavedFeedsMutation()
1516+ const addRecommendedFeeds = (e: GestureResponderEvent) => {
17+ e.preventDefault()
01819+ addSavedFeeds([
20+ {
21+ ...TIMELINE_SAVED_FEED,
22+ pinned: true,
23+ },
24+ ])
2526+ onAddFeed?.()
27+28+ // prevent navigation
29+ return false as const
30+ }
3132 return (
33 <View style={[a.flex_row, a.flex_wrap, a.align_center, a.py_md, a.px_lg]}>
···35 <Trans>
36 Looks like you're missing a following feed.{' '}
37 <InlineLinkText
38+ to="#"
39 label={_(msg`Add the default feed of only people you follow`)}
40 onPress={addRecommendedFeeds}
41 style={[a.leading_snug]}>
+10-7
src/screens/Feeds/NoSavedFeedsOfAnyType.tsx
···1-import React from 'react'
2import {View} from 'react-native'
3import {TID} from '@atproto/common-web'
4import {msg, Trans} from '@lingui/macro'
···16 * feeds if pressed. It should only be presented to the user if they actually
17 * have no other feeds saved.
18 */
19-export function NoSavedFeedsOfAnyType() {
000020 const t = useTheme()
21 const {_} = useLingui()
22 const {isPending, mutateAsync: overwriteSavedFeeds} =
23 useOverwriteSavedFeedsMutation()
2425- const addRecommendedFeeds = React.useCallback(async () => {
026 await overwriteSavedFeeds(
27 RECOMMENDED_SAVED_FEEDS.map(f => ({
28 ...f,
29 id: TID.nextStr(),
30 })),
31 )
32- }, [overwriteSavedFeeds])
3334 return (
35 <View
···46 disabled={isPending}
47 label={_(msg`Apply default recommended feeds`)}
48 size="small"
49- variant="solid"
50- color="primary"
51 onPress={addRecommendedFeeds}>
52- <ButtonIcon icon={Plus} position="left" />
53 <ButtonText>{_(msg`Use recommended`)}</ButtonText>
54 </Button>
55 </View>
···01import {View} from 'react-native'
2import {TID} from '@atproto/common-web'
3import {msg, Trans} from '@lingui/macro'
···15 * feeds if pressed. It should only be presented to the user if they actually
16 * have no other feeds saved.
17 */
18+export function NoSavedFeedsOfAnyType({
19+ onAddRecommendedFeeds,
20+}: {
21+ onAddRecommendedFeeds?: () => void
22+}) {
23 const t = useTheme()
24 const {_} = useLingui()
25 const {isPending, mutateAsync: overwriteSavedFeeds} =
26 useOverwriteSavedFeedsMutation()
2728+ const addRecommendedFeeds = async () => {
29+ onAddRecommendedFeeds?.()
30 await overwriteSavedFeeds(
31 RECOMMENDED_SAVED_FEEDS.map(f => ({
32 ...f,
33 id: TID.nextStr(),
34 })),
35 )
36+ }
3738 return (
39 <View
···50 disabled={isPending}
51 label={_(msg`Apply default recommended feeds`)}
52 size="small"
53+ color="primary_subtle"
054 onPress={addRecommendedFeeds}>
55+ <ButtonIcon icon={Plus} />
56 <ButtonText>{_(msg`Use recommended`)}</ButtonText>
57 </Button>
58 </View>
+1-1
src/screens/Home/NoFeedsPinned.tsx
···67import {DISCOVER_SAVED_FEED, TIMELINE_SAVED_FEED} from '#/lib/constants'
8import {useOverwriteSavedFeedsMutation} from '#/state/queries/preferences'
9-import {UsePreferencesQueryResponse} from '#/state/queries/preferences'
10import {CenteredView} from '#/view/com/util/Views'
11import {atoms as a} from '#/alf'
12import {Button, ButtonIcon, ButtonText} from '#/components/Button'
···67import {DISCOVER_SAVED_FEED, TIMELINE_SAVED_FEED} from '#/lib/constants'
8import {useOverwriteSavedFeedsMutation} from '#/state/queries/preferences'
9+import {type UsePreferencesQueryResponse} from '#/state/queries/preferences'
10import {CenteredView} from '#/view/com/util/Views'
11import {atoms as a} from '#/alf'
12import {Button, ButtonIcon, ButtonText} from '#/components/Button'
+1-1
src/screens/List/ListHiddenScreen.tsx
···11import {RQKEY_ROOT as listQueryRoot} from '#/state/queries/list'
12import {useListBlockMutation, useListMuteMutation} from '#/state/queries/list'
13import {
14- UsePreferencesQueryResponse,
15 useRemoveFeedMutation,
16} from '#/state/queries/preferences'
17import {useSession} from '#/state/session'
···11import {RQKEY_ROOT as listQueryRoot} from '#/state/queries/list'
12import {useListBlockMutation, useListMuteMutation} from '#/state/queries/list'
13import {
14+ type UsePreferencesQueryResponse,
15 useRemoveFeedMutation,
16} from '#/state/queries/preferences'
17import {useSession} from '#/state/session'
+1-1
src/screens/Login/ChooseAccountForm.tsx
···56import {logEvent} from '#/lib/statsig/statsig'
7import {logger} from '#/logger'
8-import {SessionAccount, useSession, useSessionApi} from '#/state/session'
9import {useLoggedOutViewControls} from '#/state/shell/logged-out'
10import * as Toast from '#/view/com/util/Toast'
11import {atoms as a} from '#/alf'
···56import {logEvent} from '#/lib/statsig/statsig'
7import {logger} from '#/logger'
8+import {type SessionAccount, useSession, useSessionApi} from '#/state/session'
9import {useLoggedOutViewControls} from '#/state/shell/logged-out'
10import * as Toast from '#/view/com/util/Toast'
11import {atoms as a} from '#/alf'
+1-1
src/screens/Login/FormContainer.tsx
···1-import React from 'react'
2import {type StyleProp, View, type ViewStyle} from 'react-native'
034import {atoms as a, useBreakpoints, useTheme} from '#/alf'
5import {Text} from '#/components/Typography'
···01import {type StyleProp, View, type ViewStyle} from 'react-native'
2+import type React from 'react'
34import {atoms as a, useBreakpoints, useTheme} from '#/alf'
5import {Text} from '#/components/Typography'
+2-2
src/screens/Login/ScreenTransition.tsx
···1-import React from 'react'
2-import {StyleProp, ViewStyle} from 'react-native'
3import Animated, {FadeInRight, FadeOutLeft} from 'react-native-reanimated'
045export function ScreenTransition({
6 style,
···1+import {type StyleProp, type ViewStyle} from 'react-native'
02import Animated, {FadeInRight, FadeOutLeft} from 'react-native-reanimated'
3+import type React from 'react'
45export function ScreenTransition({
6 style,
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56-import {ActiveConvoStates} from '#/state/messages/convo'
7import {useModerationOpts} from '#/state/preferences/moderation-opts'
8import {useSession} from '#/state/session'
9import {atoms as a, useTheme} from '#/alf'
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {type ActiveConvoStates} from '#/state/messages/convo'
7import {useModerationOpts} from '#/state/preferences/moderation-opts'
8import {useSession} from '#/state/session'
9import {atoms as a, useTheme} from '#/alf'
···9} from '@atproto/api'
10import {msg} from '@lingui/macro'
11import {useLingui} from '@lingui/react'
12-import {RouteProp, useNavigation, useRoute} from '@react-navigation/native'
1314import {makeProfileLink} from '#/lib/routes/links'
15-import {CommonNavigatorParams, NavigationProp} from '#/lib/routes/types'
00016import {
17 convertBskyAppUrlIfNeeded,
18 isBskyPostUrl,
···9} from '@atproto/api'
10import {msg} from '@lingui/macro'
11import {useLingui} from '@lingui/react'
12+import {type RouteProp, useNavigation, useRoute} from '@react-navigation/native'
1314import {makeProfileLink} from '#/lib/routes/links'
15+import {
16+ type CommonNavigatorParams,
17+ type NavigationProp,
18+} from '#/lib/routes/types'
19import {
20 convertBskyAppUrlIfNeeded,
21 isBskyPostUrl,
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56-import {ConvoItem, ConvoItemError} from '#/state/messages/convo/types'
7import {atoms as a, useTheme} from '#/alf'
8import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
9import {InlineLinkText} from '#/components/Link'
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {type ConvoItem, ConvoItemError} from '#/state/messages/convo/types'
7import {atoms as a, useTheme} from '#/alf'
8import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
9import {InlineLinkText} from '#/components/Link'
···1import React from 'react'
2-import {TextStyle, View, ViewStyle} from 'react-native'
34import {capitalize} from '#/lib/strings/capitalize'
5import {useInterestsDisplayNames} from '#/screens/Onboarding/state'
···1import React from 'react'
2+import {type TextStyle, View, type ViewStyle} from 'react-native'
34import {capitalize} from '#/lib/strings/capitalize'
5import {useInterestsDisplayNames} from '#/screens/Onboarding/state'
···1import React from 'react'
2import {View} from 'react-native'
34-import {Avatar} from '#/screens/Onboarding/StepProfile/index'
5import {atoms as a, useTheme} from '#/alf'
67export function AvatarCreatorCircle({
···1import React from 'react'
2import {View} from 'react-native'
34+import {type Avatar} from '#/screens/Onboarding/StepProfile/index'
5import {atoms as a, useTheme} from '#/alf'
67export function AvatarCreatorCircle({
···3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56-import {Avatar} from '#/screens/Onboarding/StepProfile/index'
7import {
8- AvatarColor,
9 avatarColors,
10 emojiItems,
11- EmojiName,
12 emojiNames,
13} from '#/screens/Onboarding/StepProfile/types'
14import {atoms as a, useTheme} from '#/alf'
···3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {type Avatar} from '#/screens/Onboarding/StepProfile/index'
7import {
8+ type AvatarColor,
9 avatarColors,
10 emojiItems,
11+ type EmojiName,
12 emojiNames,
13} from '#/screens/Onboarding/StepProfile/types'
14import {atoms as a, useTheme} from '#/alf'
+4-1
src/screens/Post/PostLikedBy.tsx
···2import {Plural, Trans} from '@lingui/macro'
3import {useFocusEffect} from '@react-navigation/native'
45-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
0006import {makeRecordUri} from '#/lib/strings/url-helpers'
7import {usePostThreadQuery} from '#/state/queries/post-thread'
8import {useSetMinimalShellMode} from '#/state/shell'
···2import {Plural, Trans} from '@lingui/macro'
3import {useFocusEffect} from '@react-navigation/native'
45+import {
6+ type CommonNavigatorParams,
7+ type NativeStackScreenProps,
8+} from '#/lib/routes/types'
9import {makeRecordUri} from '#/lib/strings/url-helpers'
10import {usePostThreadQuery} from '#/state/queries/post-thread'
11import {useSetMinimalShellMode} from '#/state/shell'
+4-1
src/screens/Post/PostQuotes.tsx
···2import {Plural, Trans} from '@lingui/macro'
3import {useFocusEffect} from '@react-navigation/native'
45-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
0006import {makeRecordUri} from '#/lib/strings/url-helpers'
7import {usePostThreadQuery} from '#/state/queries/post-thread'
8import {useSetMinimalShellMode} from '#/state/shell'
···2import {Plural, Trans} from '@lingui/macro'
3import {useFocusEffect} from '@react-navigation/native'
45+import {
6+ type CommonNavigatorParams,
7+ type NativeStackScreenProps,
8+} from '#/lib/routes/types'
9import {makeRecordUri} from '#/lib/strings/url-helpers'
10import {usePostThreadQuery} from '#/state/queries/post-thread'
11import {useSetMinimalShellMode} from '#/state/shell'
+4-1
src/screens/Post/PostRepostedBy.tsx
···2import {Plural, Trans} from '@lingui/macro'
3import {useFocusEffect} from '@react-navigation/native'
45-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
0006import {makeRecordUri} from '#/lib/strings/url-helpers'
7import {usePostThreadQuery} from '#/state/queries/post-thread'
8import {useSetMinimalShellMode} from '#/state/shell'
···2import {Plural, Trans} from '@lingui/macro'
3import {useFocusEffect} from '@react-navigation/native'
45+import {
6+ type CommonNavigatorParams,
7+ type NativeStackScreenProps,
8+} from '#/lib/routes/types'
9import {makeRecordUri} from '#/lib/strings/url-helpers'
10import {usePostThreadQuery} from '#/state/queries/post-thread'
11import {useSetMinimalShellMode} from '#/state/shell'
···4import {useLingui} from '@lingui/react'
5import {useNavigation} from '@react-navigation/native'
67-import {NavigationProp} from '#/lib/routes/types'
8import {atoms as a, useTheme} from '#/alf'
9import {Button, ButtonText} from '#/components/Button'
10import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
···4import {useLingui} from '@lingui/react'
5import {useNavigation} from '@react-navigation/native'
67+import {type NavigationProp} from '#/lib/routes/types'
8import {atoms as a, useTheme} from '#/alf'
9import {Button, ButtonText} from '#/components/Button'
10import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
+3-3
src/screens/Profile/Header/GrowableAvatar.tsx
···1-import React from 'react'
2-import {StyleProp, View, ViewStyle} from 'react-native'
3import Animated, {
4 Extrapolation,
5 interpolate,
6- SharedValue,
7 useAnimatedStyle,
8} from 'react-native-reanimated'
0910import {isIOS} from '#/platform/detection'
11import {usePagerHeaderContext} from '#/view/com/pager/PagerHeaderContext'
···1+import {type StyleProp, View, type ViewStyle} from 'react-native'
02import Animated, {
3 Extrapolation,
4 interpolate,
5+ type SharedValue,
6 useAnimatedStyle,
7} from 'react-native-reanimated'
8+import type React from 'react'
910import {isIOS} from '#/platform/detection'
11import {usePagerHeaderContext} from '#/view/com/pager/PagerHeaderContext'
+3-2
src/screens/Profile/Header/GrowableBanner.tsx
···1-import React, {useEffect, useState} from 'react'
2import {View} from 'react-native'
3import {ActivityIndicator} from 'react-native'
4import Animated, {
5 Extrapolation,
6 interpolate,
7 runOnJS,
8- SharedValue,
9 useAnimatedProps,
10 useAnimatedReaction,
11 useAnimatedStyle,
···13import {useSafeAreaInsets} from 'react-native-safe-area-context'
14import {BlurView} from 'expo-blur'
15import {useIsFetching} from '@tanstack/react-query'
01617import {isIOS} from '#/platform/detection'
18import {RQKEY_ROOT as STARTERPACK_RQKEY_ROOT} from '#/state/queries/actor-starter-packs'
···1+import {useEffect, useState} from 'react'
2import {View} from 'react-native'
3import {ActivityIndicator} from 'react-native'
4import Animated, {
5 Extrapolation,
6 interpolate,
7 runOnJS,
8+ type SharedValue,
9 useAnimatedProps,
10 useAnimatedReaction,
11 useAnimatedStyle,
···13import {useSafeAreaInsets} from 'react-native-safe-area-context'
14import {BlurView} from 'expo-blur'
15import {useIsFetching} from '@tanstack/react-query'
16+import type React from 'react'
1718import {isIOS} from '#/platform/detection'
19import {RQKEY_ROOT as STARTERPACK_RQKEY_ROOT} from '#/state/queries/actor-starter-packs'
+4-1
src/screens/Profile/Header/StatusBarShadow.tsx
···1-import Animated, {SharedValue, useAnimatedStyle} from 'react-native-reanimated'
0002import {useSafeAreaInsets} from 'react-native-safe-area-context'
3import {LinearGradient} from 'expo-linear-gradient'
4
···1+import Animated, {
2+ type SharedValue,
3+ useAnimatedStyle,
4+} from 'react-native-reanimated'
5import {useSafeAreaInsets} from 'react-native-safe-area-context'
6import {LinearGradient} from 'expo-linear-gradient'
7
+5-5
src/screens/Profile/Header/index.tsx
···1import React, {memo, useState} from 'react'
2-import {LayoutChangeEvent, StyleSheet, View} from 'react-native'
3import Animated, {
4 runOnJS,
5 useAnimatedReaction,
···8} from 'react-native-reanimated'
9import {useSafeAreaInsets} from 'react-native-safe-area-context'
10import {
11- AppBskyActorDefs,
12- AppBskyLabelerDefs,
13- ModerationOpts,
14- RichText as RichTextAPI,
15} from '@atproto/api'
16import {useIsFocused} from '@react-navigation/native'
17
···1import React, {memo, useState} from 'react'
2+import {type LayoutChangeEvent, StyleSheet, View} from 'react-native'
3import Animated, {
4 runOnJS,
5 useAnimatedReaction,
···8} from 'react-native-reanimated'
9import {useSafeAreaInsets} from 'react-native-safe-area-context'
10import {
11+ type AppBskyActorDefs,
12+ type AppBskyLabelerDefs,
13+ type ModerationOpts,
14+ type RichText as RichTextAPI,
15} from '@atproto/api'
16import {useIsFocused} from '@react-navigation/native'
17
+5-2
src/screens/Profile/KnownFollowers.tsx
···1import React from 'react'
2-import {AppBskyActorDefs} from '@atproto/api'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {useFocusEffect} from '@react-navigation/native'
67import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
8-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
0009import {cleanError} from '#/lib/strings/errors'
10import {logger} from '#/logger'
11import {useProfileKnownFollowersQuery} from '#/state/queries/known-followers'
···1import React from 'react'
2+import {type AppBskyActorDefs} from '@atproto/api'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {useFocusEffect} from '@react-navigation/native'
67import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
8+import {
9+ type CommonNavigatorParams,
10+ type NativeStackScreenProps,
11+} from '#/lib/routes/types'
12import {cleanError} from '#/lib/strings/errors'
13import {logger} from '#/logger'
14import {useProfileKnownFollowersQuery} from '#/state/queries/known-followers'
+4-1
src/screens/Profile/ProfileFollowers.tsx
···2import {Plural} from '@lingui/macro'
3import {useFocusEffect} from '@react-navigation/native'
45-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
0006import {sanitizeDisplayName} from '#/lib/strings/display-names'
7import {useProfileQuery} from '#/state/queries/profile'
8import {useResolveDidQuery} from '#/state/queries/resolve-uri'
···2import {Plural} from '@lingui/macro'
3import {useFocusEffect} from '@react-navigation/native'
45+import {
6+ type CommonNavigatorParams,
7+ type NativeStackScreenProps,
8+} from '#/lib/routes/types'
9import {sanitizeDisplayName} from '#/lib/strings/display-names'
10import {useProfileQuery} from '#/state/queries/profile'
11import {useResolveDidQuery} from '#/state/queries/resolve-uri'
+4-1
src/screens/Profile/ProfileFollows.tsx
···2import {Plural} from '@lingui/macro'
3import {useFocusEffect} from '@react-navigation/native'
45-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
0006import {sanitizeDisplayName} from '#/lib/strings/display-names'
7import {useProfileQuery} from '#/state/queries/profile'
8import {useResolveDidQuery} from '#/state/queries/resolve-uri'
···2import {Plural} from '@lingui/macro'
3import {useFocusEffect} from '@react-navigation/native'
45+import {
6+ type CommonNavigatorParams,
7+ type NativeStackScreenProps,
8+} from '#/lib/routes/types'
9import {sanitizeDisplayName} from '#/lib/strings/display-names'
10import {useProfileQuery} from '#/state/queries/profile'
11import {useResolveDidQuery} from '#/state/queries/resolve-uri'
+4-1
src/screens/Profile/ProfileLabelerLikedBy.tsx
···3import {useLingui} from '@lingui/react'
4import {useFocusEffect} from '@react-navigation/native'
56-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
0007import {makeRecordUri} from '#/lib/strings/url-helpers'
8import {useSetMinimalShellMode} from '#/state/shell'
9import {ViewHeader} from '#/view/com/util/ViewHeader'
···3import {useLingui} from '@lingui/react'
4import {useFocusEffect} from '@react-navigation/native'
56+import {
7+ type CommonNavigatorParams,
8+ type NativeStackScreenProps,
9+} from '#/lib/routes/types'
10import {makeRecordUri} from '#/lib/strings/url-helpers'
11import {useSetMinimalShellMode} from '#/state/shell'
12import {ViewHeader} from '#/view/com/util/ViewHeader'
···1import {Image} from 'expo-image'
23-import {AppIconSet} from '#/screens/Settings/AppIconSettings/types'
4import {atoms as a, platform, useTheme} from '#/alf'
56export function AppIconImage({
···1import {Image} from 'expo-image'
23+import {type AppIconSet} from '#/screens/Settings/AppIconSettings/types'
4import {atoms as a, platform, useTheme} from '#/alf'
56export function AppIconImage({
···8 SlideInRight,
9 SlideOutLeft,
10} from 'react-native-reanimated'
11-import {ComAtprotoServerCreateAppPassword} from '@atproto/api'
12import {msg, Trans} from '@lingui/macro'
13import {useLingui} from '@lingui/react'
14import {useMutation} from '@tanstack/react-query'
···8 SlideInRight,
9 SlideOutLeft,
10} from 'react-native-reanimated'
11+import {type ComAtprotoServerCreateAppPassword} from '@atproto/api'
12import {msg, Trans} from '@lingui/macro'
13import {useLingui} from '@lingui/react'
14import {useMutation} from '@tanstack/react-query'
+2-2
src/screens/Settings/components/CopyButton.tsx
···1import {useCallback, useEffect, useState} from 'react'
2-import {GestureResponderEvent, View} from 'react-native'
3import Animated, {
4 FadeOutUp,
5 useReducedMotion,
···9import {Trans} from '@lingui/macro'
1011import {atoms as a, useTheme} from '#/alf'
12-import {Button, ButtonProps} from '#/components/Button'
13import {Text} from '#/components/Typography'
1415export function CopyButton({
···1import {useCallback, useEffect, useState} from 'react'
2+import {type GestureResponderEvent, View} from 'react-native'
3import Animated, {
4 FadeOutUp,
5 useReducedMotion,
···9import {Trans} from '@lingui/macro'
1011import {atoms as a, useTheme} from '#/alf'
12+import {Button, type ButtonProps} from '#/components/Button'
13import {Text} from '#/components/Typography'
1415export function CopyButton({
···7import {useAgent, useSessionApi} from '#/state/session'
8import {atoms as a, useBreakpoints, useTheme} from '#/alf'
9import {Button, ButtonIcon, ButtonText} from '#/components/Button'
10-import {DialogOuterProps} from '#/components/Dialog'
11import {Divider} from '#/components/Divider'
12import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
13import {Loader} from '#/components/Loader'
···7import {useAgent, useSessionApi} from '#/state/session'
8import {atoms as a, useBreakpoints, useTheme} from '#/alf'
9import {Button, ButtonIcon, ButtonText} from '#/components/Button'
10+import {type DialogOuterProps} from '#/components/Dialog'
11import {Divider} from '#/components/Divider'
12import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
13import {Loader} from '#/components/Loader'
···1-import React from 'react'
2import {View} from 'react-native'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
···18export function ExportCarDialog({
19 control,
20}: {
21- control: Dialog.DialogOuterProps['control']
22}) {
23 const {_} = useLingui()
24 const t = useTheme()
25 const agent = useAgent()
26- const [loading, setLoading] = React.useState(false)
2728- const download = React.useCallback(async () => {
29 if (!agent.session) {
30 return // shouldnt ever happen
31 }
···52 }, [_, control, agent])
5354 return (
55- <Dialog.Outer control={control}>
56 <Dialog.Handle />
57 <Dialog.ScrollableInner
58 accessibilityDescribedBy="dialog-description"
···63 </Text>
64 <Text
65 nativeID="dialog-description"
66- style={[a.text_sm, a.leading_normal, t.atoms.text_contrast_high]}>
67 <Trans>
68 Your account repository, containing all public data records, can
69 be downloaded as a "CAR" file. This file does not include media
···73 </Text>
7475 <Button
76- variant="solid"
77 color="primary"
78 size="large"
79 label={_(msg`Download CAR file`)}
···1+import {useCallback, useState} from 'react'
2import {View} from 'react-native'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
···18export function ExportCarDialog({
19 control,
20}: {
21+ control: Dialog.DialogControlProps
22}) {
23 const {_} = useLingui()
24 const t = useTheme()
25 const agent = useAgent()
26+ const [loading, setLoading] = useState(false)
2728+ const download = useCallback(async () => {
29 if (!agent.session) {
30 return // shouldnt ever happen
31 }
···52 }, [_, control, agent])
5354 return (
55+ <Dialog.Outer control={control} nativeOptions={{preventExpansion: true}}>
56 <Dialog.Handle />
57 <Dialog.ScrollableInner
58 accessibilityDescribedBy="dialog-description"
···63 </Text>
64 <Text
65 nativeID="dialog-description"
66+ style={[a.text_sm, a.leading_snug, t.atoms.text_contrast_high]}>
67 <Trans>
68 Your account repository, containing all public data records, can
69 be downloaded as a "CAR" file. This file does not include media
···73 </Text>
7475 <Button
076 color="primary"
77 size="large"
78 label={_(msg`Download CAR file`)}
+1-1
src/screens/Settings/components/PwiOptOut.tsx
···1import React from 'react'
2import {View} from 'react-native'
3-import {$Typed, ComAtprotoLabelDefs} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6
···1import React from 'react'
2import {View} from 'react-native'
3+import {type $Typed, ComAtprotoLabelDefs} from '@atproto/api'
4import {msg, Trans} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6
···1import {useState} from 'react'
2-import {ListRenderItemInfo, View} from 'react-native'
3import {KeyboardAwareScrollView} from 'react-native-keyboard-controller'
4-import {AppBskyFeedDefs, ModerationOpts} from '@atproto/api'
5import {Trans} from '@lingui/macro'
67import {DISCOVER_FEED_URI} from '#/lib/constants'
···1import {useState} from 'react'
2+import {type ListRenderItemInfo, View} from 'react-native'
3import {KeyboardAwareScrollView} from 'react-native-keyboard-controller'
4+import {type AppBskyFeedDefs, type ModerationOpts} from '@atproto/api'
5import {Trans} from '@lingui/macro'
67import {DISCOVER_FEED_URI} from '#/lib/constants'
+3-3
src/screens/StarterPack/Wizard/StepProfiles.tsx
···1import {useState} from 'react'
2-import {ListRenderItemInfo, View} from 'react-native'
3import {KeyboardAwareScrollView} from 'react-native-keyboard-controller'
4-import {AppBskyActorDefs, ModerationOpts} from '@atproto/api'
5import {Trans} from '@lingui/macro'
67import {isNative} from '#/platform/detection'
···16import {ScreenTransition} from '#/components/StarterPack/Wizard/ScreenTransition'
17import {WizardProfileCard} from '#/components/StarterPack/Wizard/WizardListCard'
18import {Text} from '#/components/Typography'
19-import * as bsky from '#/types/bsky'
2021function keyExtractor(item: AppBskyActorDefs.ProfileViewBasic) {
22 return item?.did ?? ''
···1import {useState} from 'react'
2+import {type ListRenderItemInfo, View} from 'react-native'
3import {KeyboardAwareScrollView} from 'react-native-keyboard-controller'
4+import {type AppBskyActorDefs, type ModerationOpts} from '@atproto/api'
5import {Trans} from '@lingui/macro'
67import {isNative} from '#/platform/detection'
···16import {ScreenTransition} from '#/components/StarterPack/Wizard/ScreenTransition'
17import {WizardProfileCard} from '#/components/StarterPack/Wizard/WizardListCard'
18import {Text} from '#/components/Typography'
19+import type * as bsky from '#/types/bsky'
2021function keyExtractor(item: AppBskyActorDefs.ProfileViewBasic) {
22 return item?.did ?? ''
+4-4
src/screens/VideoFeed/components/Header.tsx
···1import {useCallback} from 'react'
2-import {GestureResponderEvent, View} from 'react-native'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {useNavigation} from '@react-navigation/native'
67import {HITSLOP_30} from '#/lib/constants'
8-import {NavigationProp} from '#/lib/routes/types'
9import {sanitizeHandle} from '#/lib/strings/handles'
10import {useFeedSourceInfoQuery} from '#/state/queries/feed'
11import {UserAvatar} from '#/view/com/util/UserAvatar'
12-import {VideoFeedSourceContext} from '#/screens/VideoFeed/types'
13import {atoms as a, useBreakpoints} from '#/alf'
14-import {Button, ButtonProps} from '#/components/Button'
15import {ArrowLeft_Stroke2_Corner0_Rounded as ArrowLeft} from '#/components/icons/Arrow'
16import * as Layout from '#/components/Layout'
17import {BUTTON_VISUAL_ALIGNMENT_OFFSET} from '#/components/Layout/const'
···1import {useCallback} from 'react'
2+import {type GestureResponderEvent, View} from 'react-native'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {useNavigation} from '@react-navigation/native'
67import {HITSLOP_30} from '#/lib/constants'
8+import {type NavigationProp} from '#/lib/routes/types'
9import {sanitizeHandle} from '#/lib/strings/handles'
10import {useFeedSourceInfoQuery} from '#/state/queries/feed'
11import {UserAvatar} from '#/view/com/util/UserAvatar'
12+import {type VideoFeedSourceContext} from '#/screens/VideoFeed/types'
13import {atoms as a, useBreakpoints} from '#/alf'
14+import {Button, type ButtonProps} from '#/components/Button'
15import {ArrowLeft_Stroke2_Corner0_Rounded as ArrowLeft} from '#/components/icons/Arrow'
16import * as Layout from '#/components/Layout'
17import {BUTTON_VISUAL_ALIGNMENT_OFFSET} from '#/components/Layout/const'
+1-1
src/screens/VideoFeed/types.ts
···1-import {AuthorFilter} from '#/state/queries/post-feed'
23/**
4 * Kind of like `FeedDescriptor` but not
···1+import {type AuthorFilter} from '#/state/queries/post-feed'
23/**
4 * Kind of like `FeedDescriptor` but not
···1import {
2+ type ConvoState,
3+ type ConvoStateBackgrounded,
4+ type ConvoStateDisabled,
5+ type ConvoStateReady,
6+ type ConvoStateSuspended,
7 ConvoStatus,
8} from './types'
9
+1-1
src/state/messages/events/types.ts
···1-import {BskyAgent, ChatBskyConvoGetLog} from '@atproto/api'
23export type MessagesEventBusParams = {
4 agent: BskyAgent
···1+import {type BskyAgent, type ChatBskyConvoGetLog} from '@atproto/api'
23export type MessagesEventBusParams = {
4 agent: BskyAgent
+1-1
src/state/messages/index.tsx
···1-import React from 'react'
23import {CurrentConvoIdProvider} from '#/state/messages/current-convo-id'
4import {MessagesEventBusProvider} from '#/state/messages/events'
···1+import type React from 'react'
23import {CurrentConvoIdProvider} from '#/state/messages/current-convo-id'
4import {MessagesEventBusProvider} from '#/state/messages/events'
+2-2
src/state/persisted/index.web.ts
···4import {logger} from '#/logger'
5import {
6 defaults,
7- Schema,
8 tryParse,
9 tryStringify,
10} from '#/state/persisted/schema'
11-import {PersistedApi} from './types'
12import {normalizeData} from './util'
1314export type {PersistedAccount, Schema} from '#/state/persisted/schema'
···4import {logger} from '#/logger'
5import {
6 defaults,
7+ type Schema,
8 tryParse,
9 tryStringify,
10} from '#/state/persisted/schema'
11+import {type PersistedApi} from './types'
12import {normalizeData} from './util'
1314export type {PersistedAccount, Schema} from '#/state/persisted/schema'
+1-1
src/state/persisted/types.ts
···1-import type {Schema} from './schema'
23export type PersistedApi = {
4 init(): Promise<void>
···1+import {type Schema} from './schema'
23export type PersistedApi = {
4 init(): Promise<void>
+1-1
src/state/persisted/util.ts
···23import {dedupArray} from '#/lib/functions'
4import {logger} from '#/logger'
5-import {Schema} from '#/state/persisted/schema'
67export function normalizeData(data: Schema) {
8 const next = {...data}
···23import {dedupArray} from '#/lib/functions'
4import {logger} from '#/logger'
5+import {type Schema} from '#/state/persisted/schema'
67export function normalizeData(data: Schema) {
8 const next = {...data}
+5-1
src/state/queries/actor-autocomplete.ts
···1import React from 'react'
2-import {AppBskyActorDefs, moderateProfile, ModerationOpts} from '@atproto/api'
00003import {keepPreviousData, useQuery, useQueryClient} from '@tanstack/react-query'
45import {isJustAMute, moduiContainsHideableOffense} from '#/lib/moderation'
···1import React from 'react'
2+import {
3+ type AppBskyActorDefs,
4+ moderateProfile,
5+ type ModerationOpts,
6+} from '@atproto/api'
7import {keepPreviousData, useQuery, useQueryClient} from '@tanstack/react-query'
89import {isJustAMute, moduiContainsHideableOffense} from '#/lib/moderation'
+1-1
src/state/queries/app-passwords.ts
···1-import {ComAtprotoServerCreateAppPassword} from '@atproto/api'
2import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
34import {STALE} from '#/state/queries'
···1+import {type ComAtprotoServerCreateAppPassword} from '@atproto/api'
2import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
34import {STALE} from '#/state/queries'
+1-1
src/state/queries/invites.ts
···1-import {ComAtprotoServerDefs} from '@atproto/api'
2import {useQuery} from '@tanstack/react-query'
34import {cleanError} from '#/lib/strings/errors'
···1+import {type ComAtprotoServerDefs} from '@atproto/api'
2import {useQuery} from '@tanstack/react-query'
34import {cleanError} from '#/lib/strings/errors'
+7-4
src/state/queries/known-followers.ts
···1-import {AppBskyActorDefs, AppBskyGraphGetKnownFollowers} from '@atproto/api'
2import {
3- InfiniteData,
4- QueryClient,
5- QueryKey,
00006 useInfiniteQuery,
7} from '@tanstack/react-query'
8
···01import {
2+ type AppBskyActorDefs,
3+ type AppBskyGraphGetKnownFollowers,
4+} from '@atproto/api'
5+import {
6+ type InfiniteData,
7+ type QueryClient,
8+ type QueryKey,
9 useInfiniteQuery,
10} from '@tanstack/react-query'
11
+4-4
src/state/queries/my-blocked-accounts.ts
···1-import {AppBskyActorDefs, AppBskyGraphGetBlocks} from '@atproto/api'
2import {
3- InfiniteData,
4- QueryClient,
5- QueryKey,
6 useInfiniteQuery,
7} from '@tanstack/react-query'
8
···1+import {type AppBskyActorDefs, type AppBskyGraphGetBlocks} from '@atproto/api'
2import {
3+ type InfiniteData,
4+ type QueryClient,
5+ type QueryKey,
6 useInfiniteQuery,
7} from '@tanstack/react-query'
8
+2-2
src/state/queries/my-lists.ts
···1-import {AppBskyGraphDefs} from '@atproto/api'
2-import {QueryClient, useQuery} from '@tanstack/react-query'
34import {accumulate} from '#/lib/async/accumulate'
5import {STALE} from '#/state/queries'
···1+import {type AppBskyGraphDefs} from '@atproto/api'
2+import {type QueryClient, useQuery} from '@tanstack/react-query'
34import {accumulate} from '#/lib/async/accumulate'
5import {STALE} from '#/state/queries'
+4-4
src/state/queries/my-muted-accounts.ts
···1-import {AppBskyActorDefs, AppBskyGraphGetMutes} from '@atproto/api'
2import {
3- InfiniteData,
4- QueryClient,
5- QueryKey,
6 useInfiniteQuery,
7} from '@tanstack/react-query'
8
···1+import {type AppBskyActorDefs, type AppBskyGraphGetMutes} from '@atproto/api'
2import {
3+ type InfiniteData,
4+ type QueryClient,
5+ type QueryKey,
6 useInfiniteQuery,
7} from '@tanstack/react-query'
8
+1-1
src/state/queries/nuxs/types.ts
···1-import {AppBskyActorDefs} from '@atproto/api'
23export type Data = Record<string, unknown> | undefined
4
···1+import {type AppBskyActorDefs} from '@atproto/api'
23export type Data = Record<string, unknown> | undefined
4
+3-3
src/state/queries/nuxs/util.ts
···1-import {AppBskyActorDefs, nuxSchema} from '@atproto/api'
23import {
4- AppNux,
5- Nux,
6 nuxNames,
7 NuxSchemas,
8} from '#/state/queries/nuxs/definitions'
···1+import {type AppBskyActorDefs, nuxSchema} from '@atproto/api'
23import {
4+ type AppNux,
5+ type Nux,
6 nuxNames,
7 NuxSchemas,
8} from '#/state/queries/nuxs/definitions'
+1-1
src/state/queries/post-interaction-settings.ts
···1-import {AppBskyActorDefs} from '@atproto/api'
2import {useMutation, useQueryClient} from '@tanstack/react-query'
34import {preferencesQueryKey} from '#/state/queries/preferences'
···1+import {type AppBskyActorDefs} from '@atproto/api'
2import {useMutation, useQueryClient} from '@tanstack/react-query'
34import {preferencesQueryKey} from '#/state/queries/preferences'
+4-4
src/state/queries/post-liked-by.ts
···1-import {AppBskyActorDefs, AppBskyFeedGetLikes} from '@atproto/api'
2import {
3- InfiniteData,
4- QueryClient,
5- QueryKey,
6 useInfiniteQuery,
7} from '@tanstack/react-query'
8
···1+import {type AppBskyActorDefs, type AppBskyFeedGetLikes} from '@atproto/api'
2import {
3+ type InfiniteData,
4+ type QueryClient,
5+ type QueryKey,
6 useInfiniteQuery,
7} from '@tanstack/react-query'
8
···1import {
2+ type AppBskyActorDefs,
3 AppBskyEmbedRecord,
4+ type AppBskyFeedDefs,
5+ type AppBskyFeedGetQuotes,
6 AtUri,
7} from '@atproto/api'
8import {
9+ type InfiniteData,
10+ type QueryClient,
11+ type QueryKey,
12 useInfiniteQuery,
13} from '@tanstack/react-query'
14
+7-4
src/state/queries/post-reposted-by.ts
···1-import {AppBskyActorDefs, AppBskyFeedGetRepostedBy} from '@atproto/api'
2import {
3- InfiniteData,
4- QueryClient,
5- QueryKey,
00006 useInfiniteQuery,
7} from '@tanstack/react-query'
8
···01import {
2+ type AppBskyActorDefs,
3+ type AppBskyFeedGetRepostedBy,
4+} from '@atproto/api'
5+import {
6+ type InfiniteData,
7+ type QueryClient,
8+ type QueryKey,
9 useInfiniteQuery,
10} from '@tanstack/react-query'
11
···1import {
2- BskyFeedViewPreference,
3- BskyPreferences,
4- BskyThreadViewPreference,
5} from '@atproto/api'
67export type UsePreferencesQueryResponse = Omit<
···1import {
2+ type BskyFeedViewPreference,
3+ type BskyPreferences,
4+ type BskyThreadViewPreference,
5} from '@atproto/api'
67export type UsePreferencesQueryResponse = Omit<
+9-2
src/state/queries/profile-feedgens.ts
···1-import {AppBskyFeedGetActorFeeds, moderateFeedGenerator} from '@atproto/api'
2-import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query'
000000034import {useAgent} from '#/state/session'
5import {useModerationOpts} from '../preferences/moderation-opts'
···1+import {
2+ type AppBskyFeedGetActorFeeds,
3+ moderateFeedGenerator,
4+} from '@atproto/api'
5+import {
6+ type InfiniteData,
7+ type QueryKey,
8+ useInfiniteQuery,
9+} from '@tanstack/react-query'
1011import {useAgent} from '#/state/session'
12import {useModerationOpts} from '../preferences/moderation-opts'
+7-4
src/state/queries/profile-followers.ts
···1-import {AppBskyActorDefs, AppBskyGraphGetFollowers} from '@atproto/api'
2import {
3- InfiniteData,
4- QueryClient,
5- QueryKey,
00006 useInfiniteQuery,
7} from '@tanstack/react-query'
8
···01import {
2+ type AppBskyActorDefs,
3+ type AppBskyGraphGetFollowers,
4+} from '@atproto/api'
5+import {
6+ type InfiniteData,
7+ type QueryClient,
8+ type QueryKey,
9 useInfiniteQuery,
10} from '@tanstack/react-query'
11
+4-4
src/state/queries/profile-follows.ts
···1-import {AppBskyActorDefs, AppBskyGraphGetFollows} from '@atproto/api'
2import {
3- InfiniteData,
4- QueryClient,
5- QueryKey,
6 useInfiniteQuery,
7} from '@tanstack/react-query'
8
···1+import {type AppBskyActorDefs, type AppBskyGraphGetFollows} from '@atproto/api'
2import {
3+ type InfiniteData,
4+ type QueryClient,
5+ type QueryKey,
6 useInfiniteQuery,
7} from '@tanstack/react-query'
8
+6-2
src/state/queries/profile-lists.ts
···1-import {AppBskyGraphGetLists, moderateUserList} from '@atproto/api'
2-import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query'
000034import {useAgent} from '#/state/session'
5import {useModerationOpts} from '../preferences/moderation-opts'
···1+import {type AppBskyGraphGetLists, moderateUserList} from '@atproto/api'
2+import {
3+ type InfiniteData,
4+ type QueryKey,
5+ useInfiniteQuery,
6+} from '@tanstack/react-query'
78import {useAgent} from '#/state/session'
9import {useModerationOpts} from '../preferences/moderation-opts'
+4-4
src/state/queries/resolve-link.ts
···1-import {QueryClient, useQuery} from '@tanstack/react-query'
23import {STALE} from '#/state/queries/index'
4import {useAgent} from '../session'
···9const RQKEY_GIF_ROOT = 'resolve-gif'
10export const RQKEY_GIF = (url: string) => [RQKEY_GIF_ROOT, url]
1112-import {BskyAgent} from '@atproto/api'
1314-import {ResolvedLink, resolveGif, resolveLink} from '#/lib/api/resolve'
15-import {Gif} from './tenor'
1617export function useResolveLinkQuery(url: string) {
18 const agent = useAgent()
···1+import {type QueryClient, useQuery} from '@tanstack/react-query'
23import {STALE} from '#/state/queries/index'
4import {useAgent} from '../session'
···9const RQKEY_GIF_ROOT = 'resolve-gif'
10export const RQKEY_GIF = (url: string) => [RQKEY_GIF_ROOT, url]
1112+import {type BskyAgent} from '@atproto/api'
1314+import {type ResolvedLink, resolveGif, resolveLink} from '#/lib/api/resolve'
15+import {type Gif} from './tenor'
1617export function useResolveLinkQuery(url: string) {
18 const agent = useAgent()
+5-1
src/state/queries/resolve-uri.ts
···1import {AtUri} from '@atproto/api'
2-import {QueryClient, useQuery, UseQueryResult} from '@tanstack/react-query'
000034import {STALE} from '#/state/queries'
5import {useAgent} from '#/state/session'
···1import {AtUri} from '@atproto/api'
2+import {
3+ type QueryClient,
4+ useQuery,
5+ type UseQueryResult,
6+} from '@tanstack/react-query'
78import {STALE} from '#/state/queries'
9import {useAgent} from '#/state/session'
···1import React from 'react'
2import {
3+ type AppBskyActorDefs,
4+ type AppBskyFeedDefs,
5+ type AppBskyFeedSearchPosts,
6 AtUri,
7 moderatePost,
8} from '@atproto/api'
9import {
10+ type InfiniteData,
11+ type QueryClient,
12+ type QueryKey,
13 useInfiniteQuery,
14} from '@tanstack/react-query'
15
+6-2
src/state/queries/suggested-feeds.ts
···1-import {AppBskyFeedGetSuggestedFeeds} from '@atproto/api'
2-import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query'
000034import {STALE} from '#/state/queries'
5import {useAgent} from '#/state/session'
···1+import {type AppBskyFeedGetSuggestedFeeds} from '@atproto/api'
2+import {
3+ type InfiniteData,
4+ type QueryKey,
5+ useInfiniteQuery,
6+} from '@tanstack/react-query'
78import {STALE} from '#/state/queries'
9import {useAgent} from '#/state/session'
+3-3
src/state/queries/threadgate/index.ts
···1import {
2 AppBskyFeedDefs,
3- AppBskyFeedGetPostThread,
4 AppBskyFeedThreadgate,
5 AtUri,
6- BskyAgent,
7} from '@atproto/api'
8import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
9···11import {until} from '#/lib/async/until'
12import {STALE} from '#/state/queries'
13import {RQKEY_ROOT as postThreadQueryKeyRoot} from '#/state/queries/post-thread'
14-import {ThreadgateAllowUISetting} from '#/state/queries/threadgate/types'
15import {
16 createThreadgateRecord,
17 mergeThreadgateRecords,
···1import {
2 AppBskyFeedDefs,
3+ type AppBskyFeedGetPostThread,
4 AppBskyFeedThreadgate,
5 AtUri,
6+ type BskyAgent,
7} from '@atproto/api'
8import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
9···11import {until} from '#/lib/async/until'
12import {STALE} from '#/state/queries'
13import {RQKEY_ROOT as postThreadQueryKeyRoot} from '#/state/queries/post-thread'
14+import {type ThreadgateAllowUISetting} from '#/state/queries/threadgate/types'
15import {
16 createThreadgateRecord,
17 mergeThreadgateRecords,
+2-2
src/state/queries/threadgate/util.ts
···1-import {AppBskyFeedDefs, AppBskyFeedThreadgate} from '@atproto/api'
23-import {ThreadgateAllowUISetting} from '#/state/queries/threadgate/types'
4import * as bsky from '#/types/bsky'
56export function threadgateViewToAllowUISetting(
···1+import {type AppBskyFeedDefs, AppBskyFeedThreadgate} from '@atproto/api'
23+import {type ThreadgateAllowUISetting} from '#/state/queries/threadgate/types'
4import * as bsky from '#/types/bsky'
56export function threadgateViewToAllowUISetting(
+2-2
src/state/queries/unstable-profile-cache.ts
···1import {useCallback} from 'react'
2-import {QueryClient, useQueryClient} from '@tanstack/react-query'
34-import * as bsky from '#/types/bsky'
56const unstableProfileViewCacheQueryKeyRoot = 'unstableProfileViewCache'
7export const unstableProfileViewCacheQueryKey = (didOrHandle: string) => [
···1import {useCallback} from 'react'
2+import {type QueryClient, useQueryClient} from '@tanstack/react-query'
34+import type * as bsky from '#/types/bsky'
56const unstableProfileViewCacheQueryKeyRoot = 'unstableProfileViewCache'
7export const unstableProfileViewCacheQueryKey = (didOrHandle: string) => [
+8-4
src/state/queries/util.ts
···1import {
2- AppBskyActorDefs,
3 AppBskyEmbedRecord,
4 AppBskyEmbedRecordWithMedia,
5- AppBskyFeedDefs,
6 AppBskyFeedPost,
7- AtUri,
8} from '@atproto/api'
9-import {InfiniteData, QueryClient, QueryKey} from '@tanstack/react-query'
00001011import * as bsky from '#/types/bsky'
12
···1import {
2+ type AppBskyActorDefs,
3 AppBskyEmbedRecord,
4 AppBskyEmbedRecordWithMedia,
5+ type AppBskyFeedDefs,
6 AppBskyFeedPost,
7+ type AtUri,
8} from '@atproto/api'
9+import {
10+ type InfiniteData,
11+ type QueryClient,
12+ type QueryKey,
13+} from '@tanstack/react-query'
1415import * as bsky from '#/types/bsky'
16
+1-1
src/state/session/__tests__/session-test.ts
···2import {describe, expect, it, jest} from '@jest/globals'
34import {agentToSessionAccountOrThrow} from '../agent'
5-import {Action, getInitialState, reducer, State} from '../reducer'
67jest.mock('jwt-decode', () => ({
8 jwtDecode(_token: string) {
···2import {describe, expect, it, jest} from '@jest/globals'
34import {agentToSessionAccountOrThrow} from '../agent'
5+import {type Action, getInitialState, reducer, type State} from '../reducer'
67jest.mock('jwt-decode', () => ({
8 jwtDecode(_token: string) {
+1-1
src/state/session/util.ts
···3import {hasProp} from '#/lib/type-guards'
4import {logger} from '#/logger'
5import * as persisted from '#/state/persisted'
6-import {SessionAccount} from './types'
78export function readLastActiveAccount() {
9 const {currentAccount, accounts} = persisted.get('session')
···3import {hasProp} from '#/lib/type-guards'
4import {logger} from '#/logger'
5import * as persisted from '#/state/persisted'
6+import {type SessionAccount} from './types'
78export function readLastActiveAccount() {
9 const {currentAccount, accounts} = persisted.get('session')
-2
src/state/shell/index.tsx
···1-import type React from 'react'
2-3import {Provider as ColorModeProvider} from './color-mode'
4import {Provider as DrawerOpenProvider} from './drawer-open'
5import {Provider as DrawerSwipableProvider} from './drawer-swipe-disabled'
···001import {Provider as ColorModeProvider} from './color-mode'
2import {Provider as DrawerOpenProvider} from './drawer-open'
3import {Provider as DrawerSwipableProvider} from './drawer-swipe-disabled'
+1-1
src/state/shell/reminders.ts
···1import {simpleAreDatesEqual} from '#/lib/strings/time'
2import {logger} from '#/logger'
3import * as persisted from '#/state/persisted'
4-import {SessionAccount} from '../session'
5import {isOnboardingActive} from './onboarding'
67export function shouldRequestEmailConfirmation(account: SessionAccount) {
···1import {simpleAreDatesEqual} from '#/lib/strings/time'
2import {logger} from '#/logger'
3import * as persisted from '#/state/persisted'
4+import {type SessionAccount} from '../session'
5import {isOnboardingActive} from './onboarding'
67export function shouldRequestEmailConfirmation(account: SessionAccount) {
+1-1
src/types/bsky/index.ts
···1-import {ValidationResult} from '@atproto/lexicon'
23export * as post from '#/types/bsky/post'
4export * as profile from '#/types/bsky/profile'
···1+import {type ValidationResult} from '@atproto/lexicon'
23export * as post from '#/types/bsky/post'
4export * as profile from '#/types/bsky/profile'
···1-import React from 'react'
2import {View} from 'react-native'
034import {MAX_ALT_TEXT} from '#/lib/constants'
5import {CharProgress} from '#/view/com/composer/char-progress/CharProgress'
···01import {View} from 'react-native'
2+import type React from 'react'
34import {MAX_ALT_TEXT} from '#/lib/constants'
5import {CharProgress} from '#/view/com/composer/char-progress/CharProgress'
···1-import React from 'react'
2import {View} from 'react-native'
3import {KeyboardStickyView} from 'react-native-keyboard-controller'
4import {useSafeAreaInsets} from 'react-native-safe-area-context'
056import {isWeb} from '#/platform/detection'
7import {atoms as a, useTheme} from '#/alf'
···01import {View} from 'react-native'
2import {KeyboardStickyView} from 'react-native-keyboard-controller'
3import {useSafeAreaInsets} from 'react-native-safe-area-context'
4+import type React from 'react'
56import {isWeb} from '#/platform/detection'
7import {atoms as a, useTheme} from '#/alf'
···1-import {StyleProp, TextStyle, View, ViewStyle} from 'react-native'
000002// @ts-ignore no type definition -prf
3import ProgressCircle from 'react-native-progress/Circle'
4// @ts-ignore no type definition -prf
···1+import {
2+ type StyleProp,
3+ type TextStyle,
4+ View,
5+ type ViewStyle,
6+} from 'react-native'
7// @ts-ignore no type definition -prf
8import ProgressCircle from 'react-native-progress/Circle'
9// @ts-ignore no type definition -prf
-2
src/view/com/composer/photos/EditImageDialog.tsx
···1-import type React from 'react'
2-3import {type ComposerImage} from '#/state/gallery'
4import type * as Dialog from '#/components/Dialog'
5
···001import {type ComposerImage} from '#/state/gallery'
2import type * as Dialog from '#/components/Dialog'
3
···4import {useLingui} from '@lingui/react'
56import {logEvent} from '#/lib/statsig/statsig'
7-import {Gif} from '#/state/queries/tenor'
8import {atoms as a, useTheme} from '#/alf'
9import {Button} from '#/components/Button'
10import {GifSelectDialog} from '#/components/dialogs/GifSelect'
···4import {useLingui} from '@lingui/react'
56import {logEvent} from '#/lib/statsig/statsig'
7+import {type Gif} from '#/state/queries/tenor'
8import {atoms as a, useTheme} from '#/alf'
9import {Button} from '#/components/Button'
10import {GifSelectDialog} from '#/components/dialogs/GifSelect'
···1617import {URL_REGEX} from '@atproto/api'
18import {Mark} from '@tiptap/core'
19-import {Node as ProsemirrorNode} from '@tiptap/pm/model'
20import {Plugin, PluginKey} from '@tiptap/pm/state'
21import {Decoration, DecorationSet} from '@tiptap/pm/view'
22
···1617import {URL_REGEX} from '@atproto/api'
18import {Mark} from '@tiptap/core'
19+import {type Node as ProsemirrorNode} from '@tiptap/pm/model'
20import {Plugin, PluginKey} from '@tiptap/pm/state'
21import {Decoration, DecorationSet} from '@tiptap/pm/view'
22
···1617import {TAG_REGEX, TRAILING_PUNCTUATION_REGEX} from '@atproto/api'
18import {Mark} from '@tiptap/core'
19-import {Node as ProsemirrorNode} from '@tiptap/pm/model'
20import {Plugin, PluginKey} from '@tiptap/pm/state'
21import {Decoration, DecorationSet} from '@tiptap/pm/view'
22
···1617import {TAG_REGEX, TRAILING_PUNCTUATION_REGEX} from '@atproto/api'
18import {Mark} from '@tiptap/core'
19+import {type Node as ProsemirrorNode} from '@tiptap/pm/model'
20import {Plugin, PluginKey} from '@tiptap/pm/state'
21import {Decoration, DecorationSet} from '@tiptap/pm/view'
22
···1-import {Keyboard, StyleProp, ViewStyle} from 'react-native'
2-import {AnimatedStyle} from 'react-native-reanimated'
3-import {AppBskyFeedPostgate} from '@atproto/api'
4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67import {isNative} from '#/platform/detection'
8-import {ThreadgateAllowUISetting} from '#/state/queries/threadgate'
9import {native} from '#/alf'
10import {Button, ButtonIcon, ButtonText} from '#/components/Button'
11import * as Dialog from '#/components/Dialog'
···1+import {Keyboard, type StyleProp, type ViewStyle} from 'react-native'
2+import {type AnimatedStyle} from 'react-native-reanimated'
3+import {type AppBskyFeedPostgate} from '@atproto/api'
4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
67import {isNative} from '#/platform/detection'
8+import {type ThreadgateAllowUISetting} from '#/state/queries/threadgate'
9import {native} from '#/alf'
10import {Button, ButtonIcon, ButtonText} from '#/components/Button'
11import * as Dialog from '#/components/Dialog'
···1-import React, {useRef} from 'react'
2import {View} from 'react-native'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
056import {logger} from '#/logger'
7import * as Toast from '#/view/com/util/Toast'
···1+import {useRef} from 'react'
2import {View} from 'react-native'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5+import type React from 'react'
67import {logger} from '#/logger'
8import * as Toast from '#/view/com/util/Toast'
+2-2
src/view/com/composer/videos/VideoPreview.web.tsx
···1import {View} from 'react-native'
2-import {ImagePickerAsset} from 'expo-image-picker'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56-import {CompressedVideo} from '#/lib/media/video/types'
7import {clamp} from '#/lib/numbers'
8import {useAutoplayDisabled} from '#/state/preferences'
9import {ExternalEmbedRemoveBtn} from '#/view/com/composer/ExternalEmbedRemoveBtn'
···1import {View} from 'react-native'
2+import {type ImagePickerAsset} from 'expo-image-picker'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {type CompressedVideo} from '#/lib/media/video/types'
7import {clamp} from '#/lib/numbers'
8import {useAutoplayDisabled} from '#/state/preferences'
9import {ExternalEmbedRemoveBtn} from '#/view/com/composer/ExternalEmbedRemoveBtn'
···1import {View} from 'react-native'
2// @ts-expect-error no type definition
3import ProgressPie from 'react-native-progress/Pie'
4-import {ImagePickerAsset} from 'expo-image-picker'
56import {clamp} from '#/lib/numbers'
7import {isWeb} from '#/platform/detection'
···1import {View} from 'react-native'
2// @ts-expect-error no type definition
3import ProgressPie from 'react-native-progress/Pie'
4+import {type ImagePickerAsset} from 'expo-image-picker'
56import {clamp} from '#/lib/numbers'
7import {isWeb} from '#/platform/detection'
+1-1
src/view/com/composer/videos/pickVideo.web.ts
···1-import {ImagePickerAsset, ImagePickerResult} from 'expo-image-picker'
23import {SUPPORTED_MIME_TYPES} from '#/lib/constants'
4
···1+import {type ImagePickerAsset, type ImagePickerResult} from 'expo-image-picker'
23import {SUPPORTED_MIME_TYPES} from '#/lib/constants'
4
+8-1
src/view/com/feeds/FeedPage.tsx
···1-import {useCallback, useEffect, useMemo, useRef, useState} from 'react'
00000002import {View} from 'react-native'
3import {type AppBskyActorDefs, AppBskyFeedDefs} from '@atproto/api'
4import {msg} from '@lingui/macro'
···1+import {
2+ type JSX,
3+ useCallback,
4+ useEffect,
5+ useMemo,
6+ useRef,
7+ useState,
8+} from 'react'
9import {View} from 'react-native'
10import {type AppBskyActorDefs, AppBskyFeedDefs} from '@atproto/api'
11import {msg} from '@lingui/macro'
+2-1
src/view/com/home/HomeHeaderLayout.web.tsx
···1-import React from 'react'
2import {View} from 'react-native'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
056import {useKawaiiMode} from '#/state/preferences/kawaii'
7import {useSession} from '#/state/session'
···1+import {type JSX} from 'react'
2import {View} from 'react-native'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5+import type React from 'react'
67import {useKawaiiMode} from '#/state/preferences/kawaii'
8import {useSession} from '#/state/session'
+1
src/view/com/home/HomeHeaderLayoutMobile.tsx
···01import {View} from 'react-native'
2import Animated from 'react-native-reanimated'
3import {msg} from '@lingui/macro'
···1+import {type JSX} from 'react'
2import {View} from 'react-native'
3import Animated from 'react-native-reanimated'
4import {msg} from '@lingui/macro'
···6 *
7 */
89-import {TransformsStyle} from 'react-native'
10-import {MeasuredDimensions} from 'react-native-reanimated'
1112export type Dimensions = {
13 width: number
···6 *
7 */
89+import {type TransformsStyle} from 'react-native'
10+import {type MeasuredDimensions} from 'react-native-reanimated'
1112export type Dimensions = {
13 width: number
···5 * LICENSE file in the root directory of this source tree.
6 *
7 */
8-import {StyleSheet, TouchableOpacity, ViewStyle} from 'react-native'
9import {SafeAreaView} from 'react-native-safe-area-context'
10import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
11import {msg} from '@lingui/macro'
···5 * LICENSE file in the root directory of this source tree.
6 *
7 */
8+import {StyleSheet, TouchableOpacity, type ViewStyle} from 'react-native'
9import {SafeAreaView} from 'react-native-safe-area-context'
10import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
11import {msg} from '@lingui/macro'
···23import React from 'react'
4import {View} from 'react-native'
5-import {PanGesture} from 'react-native-gesture-handler'
6-import {SharedValue} from 'react-native-reanimated'
78-import {Dimensions} from '#/lib/media/types'
9import {
10- Dimensions as ImageDimensions,
11- ImageSource,
12- Transform,
13} from '../../@types'
1415type Props = {
···23import React from 'react'
4import {View} from 'react-native'
5+import {type PanGesture} from 'react-native-gesture-handler'
6+import {type SharedValue} from 'react-native-reanimated'
78+import {type Dimensions} from '#/lib/media/types'
9import {
10+ type Dimensions as ImageDimensions,
11+ type ImageSource,
12+ type Transform,
13} from '../../@types'
1415type Props = {
+1-1
src/view/com/lightbox/ImageViewing/transforms.ts
···1-import type {Position} from './@types'
23export type TransformMatrix = [
4 number,
···1+import {type Position} from './@types'
23export type TransformMatrix = [
4 number,
+1-1
src/view/com/lists/ListMembers.tsx
···1-import React, {useCallback} from 'react'
2import {
3 Dimensions,
4 type GestureResponderEvent,
···1+import React, {type JSX, useCallback} from 'react'
2import {
3 Dimensions,
4 type GestureResponderEvent,
+5-5
src/view/com/lists/MyLists.tsx
···1-import React from 'react'
2import {
3 ActivityIndicator,
4 FlatList as RNFlatList,
5 RefreshControl,
6- StyleProp,
7 View,
8- ViewStyle,
9} from 'react-native'
10-import {AppBskyGraphDefs as GraphDefs} from '@atproto/api'
11import {msg} from '@lingui/macro'
12import {useLingui} from '@lingui/react'
13···16import {s} from '#/lib/styles'
17import {logger} from '#/logger'
18import {useModerationOpts} from '#/state/preferences/moderation-opts'
19-import {MyListsFilter, useMyListsQuery} from '#/state/queries/my-lists'
20import {atoms as a, useTheme} from '#/alf'
21import {BulletList_Stroke2_Corner0_Rounded as ListIcon} from '#/components/icons/BulletList'
22import * as ListCard from '#/components/ListCard'
···1+import React, {type JSX} from 'react'
2import {
3 ActivityIndicator,
4 FlatList as RNFlatList,
5 RefreshControl,
6+ type StyleProp,
7 View,
8+ type ViewStyle,
9} from 'react-native'
10+import {type AppBskyGraphDefs as GraphDefs} from '@atproto/api'
11import {msg} from '@lingui/macro'
12import {useLingui} from '@lingui/react'
13···16import {s} from '#/lib/styles'
17import {logger} from '#/logger'
18import {useModerationOpts} from '#/state/preferences/moderation-opts'
19+import {type MyListsFilter, useMyListsQuery} from '#/state/queries/my-lists'
20import {atoms as a, useTheme} from '#/alf'
21import {BulletList_Stroke2_Corner0_Rounded as ListIcon} from '#/components/icons/BulletList'
22import * as ListCard from '#/components/ListCard'
+3-3
src/view/com/modals/InviteCodes.tsx
···6 View,
7} from 'react-native'
8import {setStringAsync} from 'expo-clipboard'
9-import {ComAtprotoServerDefs} from '@atproto/api'
10import {
11 FontAwesomeIcon,
12- FontAwesomeIconStyle,
13} from '@fortawesome/react-native-fontawesome'
14import {msg, Trans} from '@lingui/macro'
15import {useLingui} from '@lingui/react'
···22import {useInvitesAPI, useInvitesState} from '#/state/invites'
23import {useModalControls} from '#/state/modals'
24import {
25- InviteCodesQueryResponse,
26 useInviteCodesQuery,
27} from '#/state/queries/invites'
28import {ErrorMessage} from '../util/error/ErrorMessage'
···6 View,
7} from 'react-native'
8import {setStringAsync} from 'expo-clipboard'
9+import {type ComAtprotoServerDefs} from '@atproto/api'
10import {
11 FontAwesomeIcon,
12+ type FontAwesomeIconStyle,
13} from '@fortawesome/react-native-fontawesome'
14import {msg, Trans} from '@lingui/macro'
15import {useLingui} from '@lingui/react'
···22import {useInvitesAPI, useInvitesState} from '#/state/invites'
23import {useModalControls} from '#/state/modals'
24import {
25+ type InviteCodesQueryResponse,
26 useInviteCodesQuery,
27} from '#/state/queries/invites'
28import {ErrorMessage} from '../util/error/ErrorMessage'
+2-2
src/view/com/modals/UserAddRemoveLists.tsx
···5 useWindowDimensions,
6 View,
7} from 'react-native'
8-import {AppBskyGraphDefs as GraphDefs} from '@atproto/api'
9import {msg, Trans} from '@lingui/macro'
10import {useLingui} from '@lingui/react'
11···18import {useModalControls} from '#/state/modals'
19import {
20 getMembership,
21- ListMembersip,
22 useDangerousListMembershipsQuery,
23 useListMembershipAddMutation,
24 useListMembershipRemoveMutation,
···5 useWindowDimensions,
6 View,
7} from 'react-native'
8+import {type AppBskyGraphDefs as GraphDefs} from '@atproto/api'
9import {msg, Trans} from '@lingui/macro'
10import {useLingui} from '@lingui/react'
11···18import {useModalControls} from '#/state/modals'
19import {
20 getMembership,
21+ type ListMembersip,
22 useDangerousListMembershipsQuery,
23 useListMembershipAddMutation,
24 useListMembershipRemoveMutation,
···1-import {memo, useCallback, useEffect, useRef, useState} from 'react'
2import {
3 type LayoutChangeEvent,
4 type NativeScrollEvent,
···1+import {type JSX, memo, useCallback, useEffect, useRef, useState} from 'react'
2import {
3 type LayoutChangeEvent,
4 type NativeScrollEvent,
+8-3
src/view/com/pager/PagerWithHeader.web.tsx
···1import * as React from 'react'
2-import {ScrollView, View} from 'react-native'
03import {useAnimatedRef} from 'react-native-reanimated'
45-import {Pager, PagerRef, RenderTabBarFnProps} from '#/view/com/pager/Pager'
00006import {atoms as a, web} from '#/alf'
7import * as Layout from '#/components/Layout'
8-import {ListMethods} from '../util/List'
9import {TabBar} from './TabBar'
1011export interface PagerWithHeaderChildParams {
···1import * as React from 'react'
2+import {type JSX} from 'react'
3+import {type ScrollView, View} from 'react-native'
4import {useAnimatedRef} from 'react-native-reanimated'
56+import {
7+ Pager,
8+ type PagerRef,
9+ type RenderTabBarFnProps,
10+} from '#/view/com/pager/Pager'
11import {atoms as a, web} from '#/alf'
12import * as Layout from '#/components/Layout'
13+import {type ListMethods} from '../util/List'
14import {TabBar} from './TabBar'
1516export interface PagerWithHeaderChildParams {
···1import {useCallback, useMemo, useState} from 'react'
2-import {AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
···1import {useCallback, useMemo, useState} from 'react'
2+import {type AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
+2-2
src/view/com/post-thread/PostQuotes.tsx
···1import {useCallback, useState} from 'react'
2import {
3- AppBskyFeedDefs,
4 AppBskyFeedPost,
5 moderatePost,
6- ModerationDecision,
7} from '@atproto/api'
8import {msg} from '@lingui/macro'
9import {useLingui} from '@lingui/react'
···1import {useCallback, useState} from 'react'
2import {
3+ type AppBskyFeedDefs,
4 AppBskyFeedPost,
5 moderatePost,
6+ type ModerationDecision,
7} from '@atproto/api'
8import {msg} from '@lingui/macro'
9import {useLingui} from '@lingui/react'
+1-1
src/view/com/post-thread/PostRepostedBy.tsx
···1import {useCallback, useMemo, useState} from 'react'
2-import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
···1import {useCallback, useMemo, useState} from 'react'
2+import {type AppBskyActorDefs as ActorDefs} from '@atproto/api'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
+2-2
src/view/com/posts/CustomFeedEmptyState.tsx
···2import {StyleSheet, View} from 'react-native'
3import {
4 FontAwesomeIcon,
5- FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
7import {Trans} from '@lingui/macro'
8import {useNavigation} from '@react-navigation/native'
910import {usePalette} from '#/lib/hooks/usePalette'
11import {MagnifyingGlassIcon} from '#/lib/icons'
12-import {NavigationProp} from '#/lib/routes/types'
13import {s} from '#/lib/styles'
14import {isWeb} from '#/platform/detection'
15import {Button} from '../util/forms/Button'
···2import {StyleSheet, View} from 'react-native'
3import {
4 FontAwesomeIcon,
5+ type FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
7import {Trans} from '@lingui/macro'
8import {useNavigation} from '@react-navigation/native'
910import {usePalette} from '#/lib/hooks/usePalette'
11import {MagnifyingGlassIcon} from '#/lib/icons'
12+import {type NavigationProp} from '#/lib/routes/types'
13import {s} from '#/lib/styles'
14import {isWeb} from '#/platform/detection'
15import {Button} from '../util/forms/Button'
+2-2
src/view/com/posts/FollowingEmptyState.tsx
···2import {StyleSheet, View} from 'react-native'
3import {
4 FontAwesomeIcon,
5- FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
7import {Trans} from '@lingui/macro'
8import {useNavigation} from '@react-navigation/native'
910import {usePalette} from '#/lib/hooks/usePalette'
11import {MagnifyingGlassIcon} from '#/lib/icons'
12-import {NavigationProp} from '#/lib/routes/types'
13import {s} from '#/lib/styles'
14import {isWeb} from '#/platform/detection'
15import {Button} from '../util/forms/Button'
···2import {StyleSheet, View} from 'react-native'
3import {
4 FontAwesomeIcon,
5+ type FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
7import {Trans} from '@lingui/macro'
8import {useNavigation} from '@react-navigation/native'
910import {usePalette} from '#/lib/hooks/usePalette'
11import {MagnifyingGlassIcon} from '#/lib/icons'
12+import {type NavigationProp} from '#/lib/routes/types'
13import {s} from '#/lib/styles'
14import {isWeb} from '#/platform/detection'
15import {Button} from '../util/forms/Button'
+2-2
src/view/com/posts/FollowingEndOfFeed.tsx
···2import {Dimensions, StyleSheet, View} from 'react-native'
3import {
4 FontAwesomeIcon,
5- FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
7import {Trans} from '@lingui/macro'
8import {useNavigation} from '@react-navigation/native'
910import {usePalette} from '#/lib/hooks/usePalette'
11-import {NavigationProp} from '#/lib/routes/types'
12import {s} from '#/lib/styles'
13import {isWeb} from '#/platform/detection'
14import {Button} from '../util/forms/Button'
···2import {Dimensions, StyleSheet, View} from 'react-native'
3import {
4 FontAwesomeIcon,
5+ type FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
7import {Trans} from '@lingui/macro'
8import {useNavigation} from '@react-navigation/native'
910import {usePalette} from '#/lib/hooks/usePalette'
11+import {type NavigationProp} from '#/lib/routes/types'
12import {s} from '#/lib/styles'
13import {isWeb} from '#/platform/detection'
14import {Button} from '../util/forms/Button'
···1import React from 'react'
2-import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
···1import React from 'react'
2+import {type AppBskyActorDefs as ActorDefs} from '@atproto/api'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
+1-1
src/view/com/profile/ProfileFollows.tsx
···1import React from 'react'
2-import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
···1import React from 'react'
2+import {type AppBskyActorDefs as ActorDefs} from '@atproto/api'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
···1+import {type AlertButton, type AlertStatic} from 'react-native'
23class WebAlert implements Pick<AlertStatic, 'alert'> {
4 public alert(title: string, message?: string, buttons?: AlertButton[]): void {
+3-2
src/view/com/util/BottomSheetCustomBackdrop.tsx
···1-import React, {useMemo} from 'react'
2import {TouchableWithoutFeedback} from 'react-native'
3import Animated, {
4 Extrapolation,
5 interpolate,
6 useAnimatedStyle,
7} from 'react-native-reanimated'
8-import {BottomSheetBackdropProps} from '@discord/bottom-sheet/src'
9import {msg} from '@lingui/macro'
10import {useLingui} from '@lingui/react'
01112export function createCustomBackdrop(
13 onClose?: (() => void) | undefined,
···1+import {useMemo} from 'react'
2import {TouchableWithoutFeedback} from 'react-native'
3import Animated, {
4 Extrapolation,
5 interpolate,
6 useAnimatedStyle,
7} from 'react-native-reanimated'
8+import {type BottomSheetBackdropProps} from '@discord/bottom-sheet/src'
9import {msg} from '@lingui/macro'
10import {useLingui} from '@lingui/react'
11+import type React from 'react'
1213export function createCustomBackdrop(
14 onClose?: (() => void) | undefined,
+3-3
src/view/com/util/EmptyState.tsx
···1-import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
2-import {IconProp} from '@fortawesome/fontawesome-svg-core'
3import {
4 FontAwesomeIcon,
5- FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
78import {usePalette} from '#/lib/hooks/usePalette'
···1+import {type StyleProp, StyleSheet, View, type ViewStyle} from 'react-native'
2+import {type IconProp} from '@fortawesome/fontawesome-svg-core'
3import {
4 FontAwesomeIcon,
5+ type FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
78import {usePalette} from '#/lib/hooks/usePalette'
+2-2
src/view/com/util/EmptyStateWithButton.tsx
···1import {StyleSheet, View} from 'react-native'
2-import {IconProp} from '@fortawesome/fontawesome-svg-core'
3import {
4 FontAwesomeIcon,
5- FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
78import {usePalette} from '#/lib/hooks/usePalette'
···1import {StyleSheet, View} from 'react-native'
2+import {type IconProp} from '@fortawesome/fontawesome-svg-core'
3import {
4 FontAwesomeIcon,
5+ type FontAwesomeIconStyle,
6} from '@fortawesome/react-native-fontawesome'
78import {usePalette} from '#/lib/hooks/usePalette'
+2-2
src/view/com/util/ErrorBoundary.tsx
···1-import {Component, ErrorInfo, ReactNode} from 'react'
2-import {StyleProp, ViewStyle} from 'react-native'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
···1+import {Component, type ErrorInfo, type ReactNode} from 'react'
2+import {type StyleProp, type ViewStyle} from 'react-native'
3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5
-1
src/view/com/util/EventStopper.tsx
···1import {View, type ViewStyle} from 'react-native'
2-import type React from 'react'
34/**
5 * This utility function captures events and stops
···1import {View, type ViewStyle} from 'react-native'
023/**
4 * This utility function captures events and stops
+2-2
src/view/com/util/FeedInfoText.tsx
···1-import {StyleProp, StyleSheet, TextStyle} from 'react-native'
23import {sanitizeDisplayName} from '#/lib/strings/display-names'
4-import {TypographyVariant} from '#/lib/ThemeContext'
5import {useFeedSourceInfoQuery} from '#/state/queries/feed'
6import {TextLinkOnWebOnly} from './Link'
7import {LoadingPlaceholder} from './LoadingPlaceholder'
···1+import {type StyleProp, StyleSheet, type TextStyle} from 'react-native'
23import {sanitizeDisplayName} from '#/lib/strings/display-names'
4+import {type TypographyVariant} from '#/lib/ThemeContext'
5import {useFeedSourceInfoQuery} from '#/state/queries/feed'
6import {TextLinkOnWebOnly} from './Link'
7import {LoadingPlaceholder} from './LoadingPlaceholder'
+1-1
src/view/com/util/Link.tsx
···1-import {memo, useCallback, useMemo} from 'react'
2import {
3 type GestureResponderEvent,
4 Platform,
···1+import {type JSX, memo, useCallback, useMemo} from 'react'
2import {
3 type GestureResponderEvent,
4 Platform,
···1import {StyleSheet} from 'react-native'
2import {
3 FontAwesomeIcon,
4- FontAwesomeIconStyle,
5} from '@fortawesome/react-native-fontawesome'
67import {usePalette} from '#/lib/hooks/usePalette'
···1import {StyleSheet} from 'react-native'
2import {
3 FontAwesomeIcon,
4+ type FontAwesomeIconStyle,
5} from '@fortawesome/react-native-fontawesome'
67import {usePalette} from '#/lib/hooks/usePalette'
-17
src/view/com/util/LoadingScreen.tsx
···1-import {ActivityIndicator, View} from 'react-native'
2-3-import {s} from '#/lib/styles'
4-import * as Layout from '#/components/Layout'
5-6-/**
7- * @deprecated use Layout compoenents directly
8- */
9-export function LoadingScreen() {
10- return (
11- <Layout.Content>
12- <View style={s.p20}>
13- <ActivityIndicator size="large" />
14- </View>
15- </Layout.Content>
16- )
17-}
···00000000000000000
+1-1
src/view/com/util/MainScrollProvider.tsx
···1import React, {useCallback, useEffect} from 'react'
2-import {NativeScrollEvent} from 'react-native'
3import {interpolate, useSharedValue, withSpring} from 'react-native-reanimated'
4import EventEmitter from 'eventemitter3'
5
···1import React, {useCallback, useEffect} from 'react'
2+import {type NativeScrollEvent} from 'react-native'
3import {interpolate, useSharedValue, withSpring} from 'react-native-reanimated'
4import EventEmitter from 'eventemitter3'
5
-1
src/view/com/util/PostMeta.tsx
···4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6import {useQueryClient} from '@tanstack/react-query'
7-import type React from 'react'
89import {useActorStatus} from '#/lib/actor-status'
10import {makeProfileLink} from '#/lib/routes/links'
···4import {msg} from '@lingui/macro'
5import {useLingui} from '@lingui/react'
6import {useQueryClient} from '@tanstack/react-query'
078import {useActorStatus} from '#/lib/actor-status'
9import {makeProfileLink} from '#/lib/routes/links'
+8-3
src/view/com/util/PressableWithHover.tsx
···1-import {forwardRef, PropsWithChildren} from 'react'
2-import {Pressable, PressableProps, StyleProp, ViewStyle} from 'react-native'
3-import {View} from 'react-native'
0000045import {addStyle} from '#/lib/styles'
6import {useInteractionState} from '#/components/hooks/useInteractionState'
···1+import {forwardRef, type PropsWithChildren} from 'react'
2+import {
3+ Pressable,
4+ type PressableProps,
5+ type StyleProp,
6+ type ViewStyle,
7+} from 'react-native'
8+import {type View} from 'react-native'
910import {addStyle} from '#/lib/styles'
11import {useInteractionState} from '#/components/hooks/useInteractionState'
+2-2
src/view/com/util/TimeElapsed.tsx
···1-import React from 'react'
2-import {I18n} from '@lingui/core'
3import {useLingui} from '@lingui/react'
45import {useGetTimeAgo} from '#/lib/hooks/useTimeAgo'
···1+import React, {type JSX} from 'react'
2+import {type I18n} from '@lingui/core'
3import {useLingui} from '@lingui/react'
45import {useGetTimeAgo} from '#/lib/hooks/useTimeAgo'
···1import {forwardRef} from 'react'
2-import {FlatListComponent} from 'react-native'
3-import {View, ViewProps} from 'react-native'
4import Animated from 'react-native-reanimated'
5-import {FlatListPropsWithLayout} from 'react-native-reanimated'
67// If you explode these into functions, don't forget to forwardRef!
8
···1import {forwardRef} from 'react'
2+import {type FlatListComponent} from 'react-native'
3+import {View, type ViewProps} from 'react-native'
4import Animated from 'react-native-reanimated'
5+import {type FlatListPropsWithLayout} from 'react-native-reanimated'
67// If you explode these into functions, don't forget to forwardRef!
8
+1-1
src/view/com/util/WebAuxClickWrapper.tsx
···1-import React from 'react'
2import {Platform} from 'react-native'
034const onMouseUp = (e: React.MouseEvent & {target: HTMLElement}) => {
5 // Only handle whenever it is the middle button
···01import {Platform} from 'react-native'
2+import type React from 'react'
34const onMouseUp = (e: React.MouseEvent & {target: HTMLElement}) => {
5 // Only handle whenever it is the middle button
+3-3
src/view/com/util/error/ErrorMessage.tsx
···1import {
2- StyleProp,
3 StyleSheet,
4 TouchableOpacity,
5 View,
6- ViewStyle,
7} from 'react-native'
8import {
9 FontAwesomeIcon,
10- FontAwesomeIconStyle,
11} from '@fortawesome/react-native-fontawesome'
12import {msg} from '@lingui/macro'
13import {useLingui} from '@lingui/react'
···1import {
2+ type StyleProp,
3 StyleSheet,
4 TouchableOpacity,
5 View,
6+ type ViewStyle,
7} from 'react-native'
8import {
9 FontAwesomeIcon,
10+ type FontAwesomeIconStyle,
11} from '@fortawesome/react-native-fontawesome'
12import {msg} from '@lingui/macro'
13import {useLingui} from '@lingui/react'
+1-1
src/view/com/util/error/ErrorScreen.tsx
···1import {View} from 'react-native'
2import {
3 FontAwesomeIcon,
4- FontAwesomeIconStyle,
5} from '@fortawesome/react-native-fontawesome'
6import {msg, Trans} from '@lingui/macro'
7import {useLingui} from '@lingui/react'
···1import {View} from 'react-native'
2import {
3 FontAwesomeIcon,
4+ type FontAwesomeIconStyle,
5} from '@fortawesome/react-native-fontawesome'
6import {msg, Trans} from '@lingui/macro'
7import {useLingui} from '@lingui/react'
+1-1
src/view/com/util/fab/FAB.web.tsx
···1import {View} from 'react-native'
23import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
4-import {FABInner, FABProps} from './FABInner'
56export const FAB = (_opts: FABProps) => {
7 const {isDesktop} = useWebMediaQueries()
···1import {View} from 'react-native'
23import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
4+import {FABInner, type FABProps} from './FABInner'
56export const FAB = (_opts: FABProps) => {
7 const {isDesktop} = useWebMediaQueries()
+12-5
src/view/com/util/fab/FABInner.tsx
···1-import {ComponentProps} from 'react'
2-import {StyleSheet, TouchableWithoutFeedback} from 'react-native'
000003import Animated from 'react-native-reanimated'
4import {useSafeAreaInsets} from 'react-native-safe-area-context'
5import {LinearGradient} from 'expo-linear-gradient'
···12import {gradients} from '#/lib/styles'
13import {isWeb} from '#/platform/detection'
14import {ios} from '#/alf'
01516-export interface FABProps
17- extends ComponentProps<typeof TouchableWithoutFeedback> {
18 testID?: string
19 icon: JSX.Element
020}
2122-export function FABInner({testID, icon, onPress, ...props}: FABProps) {
23 const insets = useSafeAreaInsets()
24 const {isMobile, isTablet} = useWebMediaQueries()
25 const playHaptic = useHaptics()
···51 playHaptic('Heavy')
52 })}
53 targetScale={0.9}
054 {...props}>
55 <LinearGradient
56 colors={[gradients.blueLight.start, gradients.blueLight.end]}
···1+import {type ComponentProps, type JSX} from 'react'
2+import {
3+ type Pressable,
4+ type StyleProp,
5+ StyleSheet,
6+ type ViewStyle,
7+} from 'react-native'
8import Animated from 'react-native-reanimated'
9import {useSafeAreaInsets} from 'react-native-safe-area-context'
10import {LinearGradient} from 'expo-linear-gradient'
···17import {gradients} from '#/lib/styles'
18import {isWeb} from '#/platform/detection'
19import {ios} from '#/alf'
20+import {atoms as a} from '#/alf'
2122+export interface FABProps extends ComponentProps<typeof Pressable> {
023 testID?: string
24 icon: JSX.Element
25+ style?: StyleProp<ViewStyle>
26}
2728+export function FABInner({testID, icon, onPress, style, ...props}: FABProps) {
29 const insets = useSafeAreaInsets()
30 const {isMobile, isTablet} = useWebMediaQueries()
31 const playHaptic = useHaptics()
···57 playHaptic('Heavy')
58 })}
59 targetScale={0.9}
60+ style={[a.rounded_full, style]}
61 {...props}>
62 <LinearGradient
63 colors={[gradients.blueLight.start, gradients.blueLight.end]}
···4import {type AppBskyEmbedImages} from '@atproto/api'
5import {msg} from '@lingui/macro'
6import {useLingui} from '@lingui/react'
7-import type React from 'react'
89import {type Dimensions} from '#/lib/media/types'
10import {
···4import {type AppBskyEmbedImages} from '@atproto/api'
5import {msg} from '@lingui/macro'
6import {useLingui} from '@lingui/react'
078import {type Dimensions} from '#/lib/media/types'
9import {
···1+import {Image, type ImageProps, type ImageSource} from 'expo-image'
23interface HighPriorityImageProps extends ImageProps {
4 source: ImageSource
+1-1
src/view/com/util/layouts/LoggedOutLayout.tsx
···1-import React from 'react'
2import {ScrollView, StyleSheet, View} from 'react-native'
034import {useColorSchemeStyle} from '#/lib/hooks/useColorSchemeStyle'
5import {useIsKeyboardVisible} from '#/lib/hooks/useIsKeyboardVisible'
···01import {ScrollView, StyleSheet, View} from 'react-native'
2+import type React from 'react'
34import {useColorSchemeStyle} from '#/lib/hooks/useColorSchemeStyle'
5import {useIsKeyboardVisible} from '#/lib/hooks/useIsKeyboardVisible'
+1-1
src/view/icons/Logomark.tsx
···1-import Svg, {Path, PathProps, SvgProps} from 'react-native-svg'
23import {usePalette} from '#/lib/hooks/usePalette'
4
···1+import Svg, {Path, type PathProps, type SvgProps} from 'react-native-svg'
23import {usePalette} from '#/lib/hooks/usePalette'
4
+4-1
src/view/screens/CommunityGuidelines.tsx
···5import {useFocusEffect} from '@react-navigation/native'
67import {usePalette} from '#/lib/hooks/usePalette'
8-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
0009import {s} from '#/lib/styles'
10import {useSetMinimalShellMode} from '#/state/shell'
11import {TextLink} from '#/view/com/util/Link'
···5import {useFocusEffect} from '@react-navigation/native'
67import {usePalette} from '#/lib/hooks/usePalette'
8+import {
9+ type CommonNavigatorParams,
10+ type NativeStackScreenProps,
11+} from '#/lib/routes/types'
12import {s} from '#/lib/styles'
13import {useSetMinimalShellMode} from '#/state/shell'
14import {TextLink} from '#/view/com/util/Link'
+4-1
src/view/screens/CopyrightPolicy.tsx
···5import {useFocusEffect} from '@react-navigation/native'
67import {usePalette} from '#/lib/hooks/usePalette'
8-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
0009import {s} from '#/lib/styles'
10import {useSetMinimalShellMode} from '#/state/shell'
11import {TextLink} from '#/view/com/util/Link'
···5import {useFocusEffect} from '@react-navigation/native'
67import {usePalette} from '#/lib/hooks/usePalette'
8+import {
9+ type CommonNavigatorParams,
10+ type NativeStackScreenProps,
11+} from '#/lib/routes/types'
12import {s} from '#/lib/styles'
13import {useSetMinimalShellMode} from '#/state/shell'
14import {TextLink} from '#/view/com/util/Link'
+1-1
src/view/screens/NotFound.tsx
···9} from '@react-navigation/native'
1011import {usePalette} from '#/lib/hooks/usePalette'
12-import {NavigationProp} from '#/lib/routes/types'
13import {s} from '#/lib/styles'
14import {useSetMinimalShellMode} from '#/state/shell'
15import {Button} from '#/view/com/util/forms/Button'
···9} from '@react-navigation/native'
1011import {usePalette} from '#/lib/hooks/usePalette'
12+import {type NavigationProp} from '#/lib/routes/types'
13import {s} from '#/lib/styles'
14import {useSetMinimalShellMode} from '#/state/shell'
15import {Button} from '#/view/com/util/forms/Button'
+4-1
src/view/screens/ProfileFeedLikedBy.tsx
···3import {useLingui} from '@lingui/react'
4import {useFocusEffect} from '@react-navigation/native'
56-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
0007import {makeRecordUri} from '#/lib/strings/url-helpers'
8import {useSetMinimalShellMode} from '#/state/shell'
9import {PostLikedBy as PostLikedByComponent} from '#/view/com/post-thread/PostLikedBy'
···3import {useLingui} from '@lingui/react'
4import {useFocusEffect} from '@react-navigation/native'
56+import {
7+ type CommonNavigatorParams,
8+ type NativeStackScreenProps,
9+} from '#/lib/routes/types'
10import {makeRecordUri} from '#/lib/strings/url-helpers'
11import {useSetMinimalShellMode} from '#/state/shell'
12import {PostLikedBy as PostLikedByComponent} from '#/view/com/post-thread/PostLikedBy'
···2import {View} from 'react-native'
34import {ScrollProvider} from '#/lib/ScrollContext'
5-import {List, ListMethods} from '#/view/com/util/List'
6import {Button, ButtonText} from '#/components/Button'
7import * as Toggle from '#/components/forms/Toggle'
8import {Text} from '#/components/Typography'
···2import {View} from 'react-native'
34import {ScrollProvider} from '#/lib/ScrollContext'
5+import {List, type ListMethods} from '#/view/com/util/List'
6import {Button, ButtonText} from '#/components/Button'
7import * as Toggle from '#/components/forms/Toggle'
8import {Text} from '#/components/Typography'
+4-1
src/view/screens/Support.tsx
···56import {HELP_DESK_URL} from '#/lib/constants'
7import {usePalette} from '#/lib/hooks/usePalette'
8-import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
0009import {s} from '#/lib/styles'
10import {useSetMinimalShellMode} from '#/state/shell'
11import {TextLink} from '#/view/com/util/Link'
···56import {HELP_DESK_URL} from '#/lib/constants'
7import {usePalette} from '#/lib/hooks/usePalette'
8+import {
9+ type CommonNavigatorParams,
10+ type NativeStackScreenProps,
11+} from '#/lib/routes/types'
12import {s} from '#/lib/styles'
13import {useSetMinimalShellMode} from '#/state/shell'
14import {TextLink} from '#/view/com/util/Link'
+1-1
src/view/shell/Drawer.tsx
···1-import React, {type ComponentProps} from 'react'
2import {Linking, ScrollView, TouchableOpacity, View} from 'react-native'
3import {useSafeAreaInsets} from 'react-native-safe-area-context'
4import {msg, Plural, plural, Trans} from '@lingui/macro'
···1+import React, {type ComponentProps, type JSX} from 'react'
2import {Linking, ScrollView, TouchableOpacity, View} from 'react-native'
3import {useSafeAreaInsets} from 'react-native-safe-area-context'
4import {msg, Plural, plural, Trans} from '@lingui/macro'
+1-1
src/view/shell/bottom-bar/BottomBar.tsx
···1-import {useCallback} from 'react'
2import {type GestureResponderEvent, View} from 'react-native'
3import Animated from 'react-native-reanimated'
4import {useSafeAreaInsets} from 'react-native-safe-area-context'
···1+import {type JSX, useCallback} from 'react'
2import {type GestureResponderEvent, View} from 'react-native'
3import Animated from 'react-native-reanimated'
4import {useSafeAreaInsets} from 'react-native-safe-area-context'