···11-import {useCallback, useRef} from 'react'
11+import {type JSX, useCallback, useRef} from 'react'
22import {Linking} from 'react-native'
33import * as Notifications from 'expo-notifications'
44import {i18n, type MessageDescriptor} from '@lingui/core'
-1
src/alf/typography.tsx
···33import {type StyleProp, type TextStyle} from 'react-native'
44import {UITextView} from 'react-native-uitextview'
55import createEmojiRegex from 'emoji-regex'
66-import type React from 'react'
7687import {isNative} from '#/platform/detection'
98import {isIOS} from '#/platform/detection'
···55 type ViewStyle,
66} from 'react-native'
77import {type SharedValue} from 'react-native-reanimated'
88-import type React from 'react'
98109import type * as Dialog from '#/components/Dialog'
1110import {
+1-2
src/components/Dialog/types.ts
···55 type StyleProp,
66 type ViewStyle,
77} from 'react-native'
88-import type React from 'react'
98109import {type ViewStyleProp} from '#/alf'
1110import {type BottomSheetViewProps} from '../../../modules/bottom-sheet'
···3433 */
3534export type DialogControlProps = DialogControlRefProps & {
3635 id: string
3737- ref: React.RefObject<DialogControlRefProps>
3636+ ref: React.RefObject<DialogControlRefProps | null>
3837 isOpen?: boolean
3938}
4039
-1
src/components/Lists.tsx
···22import {type StyleProp, View, type ViewStyle} from 'react-native'
33import {msg, Trans} from '@lingui/macro'
44import {useLingui} from '@lingui/react'
55-import type React from 'react'
6576import {cleanError} from '#/lib/strings/errors'
87import {CenteredView} from '#/view/com/util/Views'
···11import {View} from 'react-native'
22import {msg, Trans} from '@lingui/macro'
33import {useLingui} from '@lingui/react'
44-import type React from 'react'
5465import {atoms as a, useTheme} from '#/alf'
76import {Button, ButtonText} from '#/components/Button'
···11import {type SvgProps} from 'react-native-svg'
22-import type React from 'react'
3243import {PressableWithHover} from '#/view/com/util/PressableWithHover'
54import {atoms as a, useTheme, web} from '#/alf'
···22import {View} from 'react-native'
33import {msg} from '@lingui/macro'
44import {useLingui} from '@lingui/react'
55-import type React from 'react'
6576import {isFirefox, isTouchDevice} from '#/lib/browser'
87import {clamp} from '#/lib/numbers'
···33import Animated, {FadeIn, FadeOut} from 'react-native-reanimated'
44import {msg} from '@lingui/macro'
55import {useLingui} from '@lingui/react'
66-import type React from 'react'
7687import {isSafari, isTouchDevice} from '#/lib/browser'
98import {atoms as a} from '#/alf'
···1010import {type AppBskyEmbedVideo} from '@atproto/api'
1111import {msg} from '@lingui/macro'
1212import {useLingui} from '@lingui/react'
1313-import type React from 'react'
14131514import {isFirefox} from '#/lib/browser'
1615import {ErrorBoundary} from '#/view/com/util/ErrorBoundary'
···3837 useActiveVideoWeb()
3938 const [onScreen, setOnScreen] = useState(false)
4039 const [isFullscreen] = useFullscreen()
4141- const lastKnownTime = useRef<number | undefined>()
4040+ const lastKnownTime = useRef<number | undefined>(undefined)
42414342 useEffect(() => {
4443 if (!ref.current) return
-1
src/components/PostControls/PostMenu/index.tsx
···88} from '@atproto/api'
99import {msg} from '@lingui/macro'
1010import {useLingui} from '@lingui/react'
1111-import type React from 'react'
12111312import {type Shadow} from '#/state/cache/post-shadow'
1413import {EventStopper} from '#/view/com/util/EventStopper'
···33import {msg, Trans} from '@lingui/macro'
44import {useLingui} from '@lingui/react'
55import {useNavigation} from '@react-navigation/native'
66-import type React from 'react'
7687import {makeProfileLink} from '#/lib/routes/links'
98import {type NavigationProp} from '#/lib/routes/types'
-1
src/components/PostControls/ShareMenu/index.tsx
···99} from '@atproto/api'
1010import {msg} from '@lingui/macro'
1111import {useLingui} from '@lingui/react'
1212-import type React from 'react'
13121413import {makeProfileLink} from '#/lib/routes/links'
1514import {shareUrl} from '#/lib/sharing'
-2
src/components/ProfileHoverCard/types.ts
···11-import type React from 'react'
22-31import {type ViewStyleProp} from '#/alf'
4253export type ProfileHoverCardProps = ViewStyleProp & {
···33import {type ChatBskyConvoDefs} from '@atproto/api'
44import {msg} from '@lingui/macro'
55import {useLingui} from '@lingui/react'
66-import type React from 'react'
7687import {useConvoActive} from '#/state/messages/convo'
98import {useSession} from '#/state/session'
···11import React from 'react'
22-import {AccessibilityProps, TextStyle, View, ViewStyle} from 'react-native'
22+import {
33+ type AccessibilityProps,
44+ type TextStyle,
55+ View,
66+ type ViewStyle,
77+} from 'react-native'
3849import {atoms as a, native, useTheme} from '#/alf'
510import * as Toggle from '#/components/forms/Toggle'
···712813type ItemProps = Omit<Toggle.ItemProps, 'style' | 'role' | 'children'> &
914 AccessibilityProps & {
1010- children: React.ReactElement
1515+ children: React.ReactElement<any>
1116 testID?: string
1217 }
1318
+1-1
src/components/hooks/useFullscreen.ts
···1414 return () => document.removeEventListener('fullscreenchange', onChange)
1515}
16161717-export function useFullscreen(ref?: React.RefObject<HTMLElement>) {
1717+export function useFullscreen(ref?: React.RefObject<HTMLElement | null>) {
1818 if (!isWeb) throw new Error("'useFullscreen' is a web-only hook")
1919 const isFullscreen = useSyncExternalStore(fullscreenSubscribe, () =>
2020 Boolean(document.fullscreenElement),
-1
src/components/moderation/LabelPreference.tsx
···55} from '@atproto/api'
66import {msg, Trans} from '@lingui/macro'
77import {useLingui} from '@lingui/react'
88-import type React from 'react'
98109import {useGlobalLabelStrings} from '#/lib/moderation/useGlobalLabelStrings'
1110import {useLabelBehaviorDescription} from '#/lib/moderation/useLabelBehaviorDescription'
+1-1
src/lib/hooks/useAnimatedValue.ts
···22import {Animated} from 'react-native'
3344export function useAnimatedValue(initialValue: number) {
55- const lazyRef = React.useRef<Animated.Value>()
55+ const lazyRef = React.useRef<Animated.Value>(undefined)
6677 if (lazyRef.current === undefined) {
88 lazyRef.current = new Animated.Value(initialValue)
···1313 * returns a ref callback function that can be used to merge multiple refs into a single ref.
1414 */
1515export function mergeRefs<T = any>(
1616- refs: Array<React.MutableRefObject<T> | React.LegacyRef<T>>,
1616+ refs: Array<React.MutableRefObject<T> | React.Ref<T>>,
1717): React.RefCallback<T> {
1818 return value => {
1919 refs.forEach(ref => {
···11-import type React from 'react'
22-31import {Provider as ColorModeProvider} from './color-mode'
42import {Provider as DrawerOpenProvider} from './drawer-open'
53import {Provider as DrawerSwipableProvider} from './drawer-swipe-disabled'
···11-import {useCallback, useEffect, useMemo, useRef, useState} from 'react'
11+import {
22+ type JSX,
33+ useCallback,
44+ useEffect,
55+ useMemo,
66+ useRef,
77+ useState,
88+} from 'react'
29import {View} from 'react-native'
310import {type AppBskyActorDefs, AppBskyFeedDefs} from '@atproto/api'
411import {msg} from '@lingui/macro'
+2-1
src/view/com/home/HomeHeaderLayout.web.tsx
···11-import React from 'react'
11+import {type JSX} from 'react'
22import {View} from 'react-native'
33import {msg} from '@lingui/macro'
44import {useLingui} from '@lingui/react'
55+import type React from 'react'
5667import {useKawaiiMode} from '#/state/preferences/kawaii'
78import {useSession} from '#/state/session'
+1
src/view/com/home/HomeHeaderLayoutMobile.tsx
···11+import {type JSX} from 'react'
12import {View} from 'react-native'
23import Animated from 'react-native-reanimated'
34import {msg} from '@lingui/macro'
+1-1
src/view/com/lists/ListMembers.tsx
···11-import React, {useCallback} from 'react'
11+import React, {type JSX, useCallback} from 'react'
22import {
33 Dimensions,
44 type GestureResponderEvent,
+5-5
src/view/com/lists/MyLists.tsx
···11-import React from 'react'
11+import React, {type JSX} from 'react'
22import {
33 ActivityIndicator,
44 FlatList as RNFlatList,
55 RefreshControl,
66- StyleProp,
66+ type StyleProp,
77 View,
88- ViewStyle,
88+ type ViewStyle,
99} from 'react-native'
1010-import {AppBskyGraphDefs as GraphDefs} from '@atproto/api'
1010+import {type AppBskyGraphDefs as GraphDefs} from '@atproto/api'
1111import {msg} from '@lingui/macro'
1212import {useLingui} from '@lingui/react'
1313···1616import {s} from '#/lib/styles'
1717import {logger} from '#/logger'
1818import {useModerationOpts} from '#/state/preferences/moderation-opts'
1919-import {MyListsFilter, useMyListsQuery} from '#/state/queries/my-lists'
1919+import {type MyListsFilter, useMyListsQuery} from '#/state/queries/my-lists'
2020import {atoms as a, useTheme} from '#/alf'
2121import {BulletList_Stroke2_Corner0_Rounded as ListIcon} from '#/components/icons/BulletList'
2222import * as ListCard from '#/components/ListCard'
···11-import {memo, useCallback, useEffect, useRef, useState} from 'react'
11+import {type JSX, memo, useCallback, useEffect, useRef, useState} from 'react'
22import {
33 type LayoutChangeEvent,
44 type NativeScrollEvent,
+8-3
src/view/com/pager/PagerWithHeader.web.tsx
···11import * as React from 'react'
22-import {ScrollView, View} from 'react-native'
22+import {type JSX} from 'react'
33+import {type ScrollView, View} from 'react-native'
34import {useAnimatedRef} from 'react-native-reanimated'
4555-import {Pager, PagerRef, RenderTabBarFnProps} from '#/view/com/pager/Pager'
66+import {
77+ Pager,
88+ type PagerRef,
99+ type RenderTabBarFnProps,
1010+} from '#/view/com/pager/Pager'
611import {atoms as a, web} from '#/alf'
712import * as Layout from '#/components/Layout'
88-import {ListMethods} from '../util/List'
1313+import {type ListMethods} from '../util/List'
914import {TabBar} from './TabBar'
10151116export interface PagerWithHeaderChildParams {
···44import {msg} from '@lingui/macro'
55import {useLingui} from '@lingui/react'
66import {useQueryClient} from '@tanstack/react-query'
77-import type React from 'react'
8798import {useActorStatus} from '#/lib/actor-status'
109import {makeProfileLink} from '#/lib/routes/links'
+2-2
src/view/com/util/TimeElapsed.tsx
···11-import React from 'react'
22-import {I18n} from '@lingui/core'
11+import React, {type JSX} from 'react'
22+import {type I18n} from '@lingui/core'
33import {useLingui} from '@lingui/react'
4455import {useGetTimeAgo} from '#/lib/hooks/useTimeAgo'
+2
src/view/com/util/ViewHeader.tsx
···11+import {type JSX} from 'react'
22+13import {Header} from '#/components/Layout'
2435/**
···11-import {ComponentProps} from 'react'
22-import {StyleSheet, TouchableWithoutFeedback} from 'react-native'
11+import {type ComponentProps, type JSX} from 'react'
22+import {StyleSheet, type TouchableWithoutFeedback} from 'react-native'
33import Animated from 'react-native-reanimated'
44import {useSafeAreaInsets} from 'react-native-safe-area-context'
55import {LinearGradient} from 'expo-linear-gradient'
···44import {type AppBskyEmbedImages} from '@atproto/api'
55import {msg} from '@lingui/macro'
66import {useLingui} from '@lingui/react'
77-import type React from 'react'
8798import {type Dimensions} from '#/lib/media/types'
109import {useLargeAltBadgeEnabled} from '#/state/preferences/large-alt-badge'
···11-import React, {type ComponentProps} from 'react'
11+import React, {type ComponentProps, type JSX} from 'react'
22import {Linking, ScrollView, TouchableOpacity, View} from 'react-native'
33import {useSafeAreaInsets} from 'react-native-safe-area-context'
44import {msg, Plural, plural, Trans} from '@lingui/macro'
+1-1
src/view/shell/bottom-bar/BottomBar.tsx
···11-import {useCallback} from 'react'
11+import {type JSX, useCallback} from 'react'
22import {type GestureResponderEvent, View} from 'react-native'
33import Animated from 'react-native-reanimated'
44import {useSafeAreaInsets} from 'react-native-safe-area-context'