run linter

This commit is contained in:
Samuel Newman
2024-03-12 22:02:28 +00:00
parent a3c09f9f86
commit 1512b5cf68
465 changed files with 4136 additions and 3714 deletions
+4 -2
View File
@@ -1,8 +1,10 @@
import React, {ReactNode, createContext, useContext} from 'react'
import React, {createContext, ReactNode, useContext} from 'react'
import {TextStyle, ViewStyle} from 'react-native'
import {darkTheme, defaultTheme, dimTheme} from './themes'
import {ThemeName} from '#/alf/themes'
import {darkTheme, defaultTheme, dimTheme} from './themes'
export type ColorScheme = 'light' | 'dark'
export type PaletteColorName =
@@ -1,5 +1,5 @@
import {describe, it, expect} from '@jest/globals'
import {RichText} from '@atproto/api'
import {describe, expect, it} from '@jest/globals'
import {hasMutedWord} from '../moderatePost_wrapped'
+5 -4
View File
@@ -1,13 +1,14 @@
import React from 'react'
import {AppState, AppStateStatus} from 'react-native'
import AsyncStorage from '@react-native-async-storage/async-storage'
import {createClient, SegmentClient} from '@segment/analytics-react-native'
import {sha256} from 'js-sha256'
import React from 'react'
import {AppState, AppStateStatus} from 'react-native'
import {Native} from 'sentry-expo'
import {useSession, SessionAccount} from '#/state/session'
import {ScreenPropertiesMap, TrackPropertiesMap} from './types'
import {logger} from '#/logger'
import {SessionAccount, useSession} from '#/state/session'
import {ScreenPropertiesMap, TrackPropertiesMap} from './types'
type AppInfo = {
build?: string | undefined
+4 -3
View File
@@ -1,11 +1,12 @@
import React from 'react'
import {createClient} from '@segment/analytics-react'
import {sha256} from 'js-sha256'
import React from 'react'
import {Browser} from 'sentry-expo'
import {ScreenPropertiesMap, TrackPropertiesMap} from './types'
import {useSession, SessionAccount} from '#/state/session'
import {logger} from '#/logger'
import {SessionAccount, useSession} from '#/state/session'
import {ScreenPropertiesMap, TrackPropertiesMap} from './types'
type SegmentClient = ReturnType<typeof createClient>
+1 -1
View File
@@ -1,4 +1,4 @@
import {BskyAgent, stringifyLex, jsonToLex} from '@atproto/api'
import {BskyAgent, jsonToLex, stringifyLex} from '@atproto/api'
import RNFS from 'react-native-fs'
const GET_TIMEOUT = 15e3 // 15s
+4 -3
View File
@@ -1,11 +1,12 @@
import {
AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia,
AppBskyFeedDefs,
AppBskyFeedPost,
AppBskyEmbedRecordWithMedia,
AppBskyEmbedRecord,
} from '@atproto/api'
import {ReasonFeedSource} from './feed/types'
import {isPostInLanguage} from '../../locale/helpers'
import {ReasonFeedSource} from './feed/types'
type FeedViewPost = AppBskyFeedDefs.FeedViewPost
export type FeedTunerFn = (
+3 -1
View File
@@ -2,9 +2,11 @@ import {
AppBskyFeedDefs,
AppBskyFeedGetAuthorFeed as GetAuthorFeed,
} from '@atproto/api'
import {FeedAPI, FeedAPIResponse} from './types'
import {getAgent} from '#/state/session'
import {FeedAPI, FeedAPIResponse} from './types'
export class AuthorFeedAPI implements FeedAPI {
constructor(public params: GetAuthorFeed.QueryParams) {}
+4 -2
View File
@@ -2,9 +2,11 @@ import {
AppBskyFeedDefs,
AppBskyFeedGetFeed as GetCustomFeed,
} from '@atproto/api'
import {FeedAPI, FeedAPIResponse} from './types'
import {getAgent} from '#/state/session'
import {getContentLanguages} from '#/state/preferences/languages'
import {getAgent} from '#/state/session'
import {FeedAPI, FeedAPIResponse} from './types'
export class CustomFeedAPI implements FeedAPI {
constructor(public params: GetCustomFeed.QueryParams) {}
+3 -1
View File
@@ -1,7 +1,9 @@
import {AppBskyFeedDefs} from '@atproto/api'
import {FeedAPI, FeedAPIResponse} from './types'
import {getAgent} from '#/state/session'
import {FeedAPI, FeedAPIResponse} from './types'
export class FollowingFeedAPI implements FeedAPI {
constructor() {}
+5 -3
View File
@@ -1,9 +1,11 @@
import {AppBskyFeedDefs} from '@atproto/api'
import {FeedAPI, FeedAPIResponse} from './types'
import {FollowingFeedAPI} from './following'
import {CustomFeedAPI} from './custom'
import {PROD_DEFAULT_FEED} from '#/lib/constants'
import {CustomFeedAPI} from './custom'
import {FollowingFeedAPI} from './following'
import {FeedAPI, FeedAPIResponse} from './types'
// HACK
// the feed API does not include any facilities for passing down
// non-post elements. adding that is a bit of a heavy lift, and we
+3 -1
View File
@@ -2,9 +2,11 @@ import {
AppBskyFeedDefs,
AppBskyFeedGetActorLikes as GetActorLikes,
} from '@atproto/api'
import {FeedAPI, FeedAPIResponse} from './types'
import {getAgent} from '#/state/session'
import {FeedAPI, FeedAPIResponse} from './types'
export class LikesFeedAPI implements FeedAPI {
constructor(public params: GetActorLikes.QueryParams) {}
+3 -1
View File
@@ -2,9 +2,11 @@ import {
AppBskyFeedDefs,
AppBskyFeedGetListFeed as GetListFeed,
} from '@atproto/api'
import {FeedAPI, FeedAPIResponse} from './types'
import {getAgent} from '#/state/session'
import {FeedAPI, FeedAPIResponse} from './types'
export class ListFeedAPI implements FeedAPI {
constructor(public params: GetListFeed.QueryParams) {}
+9 -7
View File
@@ -1,14 +1,16 @@
import {AppBskyFeedDefs, AppBskyFeedGetTimeline} from '@atproto/api'
import shuffle from 'lodash.shuffle'
import {timeout} from 'lib/async/timeout'
import {bundleAsync} from 'lib/async/bundle'
import {timeout} from 'lib/async/timeout'
import {feedUriToHref} from 'lib/strings/url-helpers'
import {FeedTuner} from '../feed-manip'
import {FeedAPI, FeedAPIResponse, ReasonFeedSource} from './types'
import {FeedParams} from '#/state/queries/post-feed'
import {FeedTunerFn} from '../feed-manip'
import {getAgent} from '#/state/session'
import shuffle from 'lodash.shuffle'
import {getContentLanguages} from '#/state/preferences/languages'
import {FeedParams} from '#/state/queries/post-feed'
import {getAgent} from '#/state/session'
import {FeedTuner} from '../feed-manip'
import {FeedTunerFn} from '../feed-manip'
import {FeedAPI, FeedAPIResponse, ReasonFeedSource} from './types'
const REQUEST_WAIT_MS = 500 // 500ms
const POST_AGE_CUTOFF = 60e3 * 60 * 24 // 24hours
+5 -3
View File
@@ -1,6 +1,6 @@
import {
AppBskyEmbedImages,
AppBskyEmbedExternal,
AppBskyEmbedImages,
AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia,
AppBskyFeedThreadgate,
@@ -12,13 +12,15 @@ import {
} from '@atproto/api'
import {AtUri} from '@atproto/api'
import {isNetworkError} from 'lib/strings/errors'
import {LinkMeta} from '../link-meta/link-meta'
import {shortenLinks} from 'lib/strings/rich-text-manip'
import {isWeb} from 'platform/detection'
import {ImageModel} from 'state/models/media/image'
import {shortenLinks} from 'lib/strings/rich-text-manip'
import {logger} from '#/logger'
import {ThreadgateSetting} from '#/state/queries/threadgate'
import {LinkMeta} from '../link-meta/link-meta'
export interface ExternalEmbedDraft {
uri: string
isLoading: boolean
+1 -1
View File
@@ -1,5 +1,5 @@
import VersionNumber from 'react-native-version-number'
import * as Updates from 'expo-updates'
import VersionNumber from 'react-native-version-number'
export const updateChannel = Updates.channel
export const appVersion = `${VersionNumber.appVersion} (${VersionNumber.buildVersion})`
+1 -1
View File
@@ -1,7 +1,7 @@
import {
AppBskyFeedDefs,
AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia,
AppBskyFeedDefs,
} from '@atproto/api'
export function isEmbedByEmbedder(
+4 -4
View File
@@ -1,11 +1,11 @@
import {useCallback} from 'react'
import {isWeb} from '#/platform/detection'
import {useAnalytics} from '#/lib/analytics/analytics'
import {useSessionApi, SessionAccount} from '#/state/session'
import * as Toast from '#/view/com/util/Toast'
import {useCloseAllActiveElements} from '#/state/util'
import {isWeb} from '#/platform/detection'
import {SessionAccount, useSessionApi} from '#/state/session'
import {useLoggedOutViewControls} from '#/state/shell/logged-out'
import {useCloseAllActiveElements} from '#/state/util'
import * as Toast from '#/view/com/util/Toast'
export function useAccountSwitcher() {
const {track} = useAnalytics()
@@ -1,4 +1,4 @@
import {useRef, useEffect} from 'react'
import {useEffect, useRef} from 'react'
import {useAnimatedScrollHandler as useAnimatedScrollHandler_BUGGY} from 'react-native-reanimated'
export const useAnimatedScrollHandler: typeof useAnimatedScrollHandler_BUGGY = (
+2 -2
View File
@@ -1,6 +1,6 @@
import React from 'react'
import {useTheme} from 'lib/ThemeContext'
import {choose} from 'lib/functions'
import {useTheme} from 'lib/ThemeContext'
import React from 'react'
export function useCustomPalette<T>({light, dark}: {light: T; dark: T}) {
const theme = useTheme()
+3 -3
View File
@@ -1,7 +1,7 @@
import {useEffect, useRef, useMemo, ForwardedRef} from 'react'
import {Platform, findNodeHandle} from 'react-native'
import type {ScrollView} from 'react-native'
import {mergeRefs} from 'lib/merge-refs'
import {ForwardedRef, useEffect, useMemo, useRef} from 'react'
import type {ScrollView} from 'react-native'
import {findNodeHandle, Platform} from 'react-native'
type Props<Scrollable extends ScrollView = ScrollView> = {
cursor?: string
+2 -2
View File
@@ -1,8 +1,8 @@
import React from 'react'
import * as Linking from 'expo-linking'
import {isNative} from 'platform/detection'
import {useComposerControls} from 'state/shell'
import React from 'react'
import {useSession} from 'state/session'
import {useComposerControls} from 'state/shell'
import {useCloseAllActiveElements} from 'state/util'
type IntentType = 'compose'
+2 -2
View File
@@ -1,6 +1,6 @@
import {useState, useEffect} from 'react'
import {Keyboard} from 'react-native'
import {isIOS} from 'platform/detection'
import {useEffect, useState} from 'react'
import {Keyboard} from 'react-native'
export function useIsKeyboardVisible({
iosUseWillEvents,
+1
View File
@@ -1,4 +1,5 @@
import {interpolate, useAnimatedStyle} from 'react-native-reanimated'
import {useMinimalShellMode as useMinimalShellModeState} from '#/state/shell/minimal-mode'
import {useShellLayout} from '#/state/shell/shell-layout'
+3 -3
View File
@@ -1,9 +1,9 @@
import React from 'react'
import {useNavigation} from '@react-navigation/core'
import {AllNavigatorParams, NavigationProp} from 'lib/routes/types'
import type {NavigationAction} from '@react-navigation/routers'
import {NavigationState} from '@react-navigation/native'
import type {NavigationAction} from '@react-navigation/routers'
import {useDedupe} from 'lib/hooks/useDedupe'
import {AllNavigatorParams, NavigationProp} from 'lib/routes/types'
import React from 'react'
export type DebouncedNavigationProp = Pick<
NavigationProp,
+2 -1
View File
@@ -1,9 +1,10 @@
import {t} from '@lingui/macro'
import * as Updates from 'expo-updates'
import {useCallback, useEffect} from 'react'
import {AppState} from 'react-native'
import {logger} from '#/logger'
import {useModalControls} from '#/state/modals'
import {t} from '@lingui/macro'
export function useOTAUpdate() {
const {openModal} = useModalControls()
+2 -1
View File
@@ -1,6 +1,7 @@
import {useMemo} from 'react'
import {TextStyle, ViewStyle} from 'react-native'
import {useTheme, PaletteColorName, PaletteColor} from '../ThemeContext'
import {PaletteColor, PaletteColorName, useTheme} from '../ThemeContext'
export interface UsePaletteValue {
colors: PaletteColor
+1 -1
View File
@@ -1,7 +1,7 @@
import {Camera} from 'expo-camera'
import * as MediaLibrary from 'expo-media-library'
import {Linking} from 'react-native'
import {isWeb} from 'platform/detection'
import {Linking} from 'react-native'
import {Alert} from 'view/com/util/Alert'
const openPermissionAlert = (perm: string) => {
+2 -2
View File
@@ -1,8 +1,8 @@
import {useEffect} from 'react'
import {useNavigation} from '@react-navigation/native'
import {NavigationProp} from 'lib/routes/types'
import {bskyTitle} from 'lib/strings/headings'
import {useEffect} from 'react'
import {useUnreadNotifications} from '#/state/queries/notifications/unread'
export function useSetTitle(title?: string) {
+1 -1
View File
@@ -1,6 +1,6 @@
import {useEffect, useState} from 'react'
import {useNavigation} from '@react-navigation/native'
import {getTabState, TabState} from 'lib/routes/helpers'
import {useEffect, useState} from 'react'
export function useTabFocusEffect(
tabName: string,
+1 -1
View File
@@ -1,4 +1,4 @@
import {useState, useRef, useEffect, useCallback} from 'react'
import {useCallback, useEffect, useRef, useState} from 'react'
type Task<TServerState> = {
isOn: boolean
+1
View File
@@ -1,4 +1,5 @@
import {useEffect} from 'react'
import {isWeb} from '#/platform/detection'
let refCount = 0
+1 -1
View File
@@ -1,5 +1,5 @@
import {useMediaQuery} from 'react-responsive'
import {isNative} from 'platform/detection'
import {useMediaQuery} from 'react-responsive'
export function useWebMediaQueries() {
const isDesktop = useMediaQuery({minWidth: 1300})
+1 -1
View File
@@ -1,5 +1,5 @@
import {useMemo, useState, useEffect} from 'react'
import {EventArg, useNavigation} from '@react-navigation/core'
import {useEffect, useMemo, useState} from 'react'
if ('scrollRestoration' in history) {
// Tell the brower not to mess with the scroll.
+1 -1
View File
@@ -1,6 +1,6 @@
import React from 'react'
import {StyleProp, TextStyle, ViewStyle} from 'react-native'
import Svg, {Path, Rect, Line, Ellipse} from 'react-native-svg'
import Svg, {Ellipse, Line, Path, Rect} from 'react-native-svg'
export function GridIcon({
style,
+6 -4
View File
@@ -1,11 +1,13 @@
import {AppBskyFeedPost, BskyAgent} from '@atproto/api'
import * as apilib from 'lib/api/index'
import {LikelyType, LinkMeta} from './link-meta'
import {ComposerOptsQuote} from 'state/shell/composer'
import {useFetchDid} from '#/state/queries/handle'
import {useGetPost} from '#/state/queries/post'
// import {match as matchRoute} from 'view/routes'
import {convertBskyAppUrlIfNeeded, makeRecordUri} from '../strings/url-helpers'
import {ComposerOptsQuote} from 'state/shell/composer'
import {useGetPost} from '#/state/queries/post'
import {useFetchDid} from '#/state/queries/handle'
import {LikelyType, LinkMeta} from './link-meta'
// TODO
// import {Home} from 'view/screens/Home'
+3 -2
View File
@@ -1,9 +1,10 @@
import {BskyAgent} from '@atproto/api'
import {isBskyAppUrl} from '../strings/url-helpers'
import {extractBskyMeta} from './bsky'
import {LINK_META_PROXY} from 'lib/constants'
import {getGiphyMetaUri} from 'lib/strings/embed-player'
import {isBskyAppUrl} from '../strings/url-helpers'
import {extractBskyMeta} from './bsky'
export enum LikelyType {
HTML,
Text,
+1 -1
View File
@@ -1,5 +1,5 @@
import {Image} from 'react-native'
import type {Dimensions} from 'lib/media/types'
import {Image} from 'react-native'
const sizes: Map<string, Dimensions> = new Map()
const activeRequests: Map<string, Promise<Dimensions>> = new Map()
+8 -7
View File
@@ -1,13 +1,14 @@
import RNFetchBlob from 'rn-fetch-blob'
import ImageResizer from '@bam.tech/react-native-image-resizer'
import {Image as RNImage, Share as RNShare} from 'react-native'
import {Image} from 'react-native-image-crop-picker'
import * as RNFS from 'react-native-fs'
import uuid from 'react-native-uuid'
import * as Sharing from 'expo-sharing'
import * as MediaLibrary from 'expo-media-library'
import {Dimensions} from './types'
import * as Sharing from 'expo-sharing'
import {isAndroid, isIOS} from 'platform/detection'
import {Image as RNImage, Share as RNShare} from 'react-native'
import * as RNFS from 'react-native-fs'
import {Image} from 'react-native-image-crop-picker'
import uuid from 'react-native-uuid'
import RNFetchBlob from 'rn-fetch-blob'
import {Dimensions} from './types'
export async function compressIfNeeded(
img: Image,
+3 -2
View File
@@ -1,6 +1,7 @@
import {Dimensions} from './types'
import {Image as RNImage} from 'react-native-image-crop-picker'
import {getDataUriSize, blobToDataUri} from './util'
import {Dimensions} from './types'
import {blobToDataUri, getDataUriSize} from './util'
export async function compressIfNeeded(
img: RNImage,
+3 -2
View File
@@ -1,7 +1,8 @@
import {Image as RNImage} from 'react-native-image-crop-picker'
import RNFS from 'react-native-fs'
import {CropperOptions} from './types'
import {Image as RNImage} from 'react-native-image-crop-picker'
import {compressIfNeeded} from './manip'
import {CropperOptions} from './types'
let _imageCounter = 0
async function getFile() {
+2 -1
View File
@@ -3,9 +3,10 @@ import {
launchImageLibraryAsync,
MediaTypeOptions,
} from 'expo-image-picker'
import {getDataUriSize} from './util'
import * as Toast from 'view/com/util/Toast'
import {getDataUriSize} from './util'
export async function openPicker(opts?: ImagePickerOptions) {
const response = await launchImageLibraryAsync({
exif: false,
+2 -1
View File
@@ -1,8 +1,9 @@
import {
Image as RNImage,
openCamera as openCameraFn,
openCropper as openCropperFn,
Image as RNImage,
} from 'react-native-image-crop-picker'
import {CameraOpts, CropperOptions} from './types'
export {openPicker} from './picker.shared'
+2 -1
View File
@@ -1,7 +1,8 @@
/// <reference lib="dom" />
import {CameraOpts, CropperOptions} from './types'
import {Image as RNImage} from 'react-native-image-crop-picker'
import {CameraOpts, CropperOptions} from './types'
export {openPicker} from './picker.shared'
import {unstable__openModal} from '#/state/modals'
+4 -4
View File
@@ -1,12 +1,12 @@
import {
AppBskyActorDefs,
AppBskyEmbedExternal,
AppBskyEmbedImages,
AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia,
moderatePost,
AppBskyActorDefs,
AppBskyFeedPost,
AppBskyRichtextFacet,
AppBskyEmbedImages,
AppBskyEmbedExternal,
moderatePost,
} from '@atproto/api'
type ModeratePost = typeof moderatePost
+1 -1
View File
@@ -1,4 +1,4 @@
import {ModerationCause, ProfileModeration, PostModeration} from '@atproto/api'
import {ModerationCause, PostModeration, ProfileModeration} from '@atproto/api'
export interface ModerationCauseDescription {
name: string
+6 -4
View File
@@ -1,12 +1,14 @@
import * as Notifications from 'expo-notifications'
import {QueryClient} from '@tanstack/react-query'
import {resetToTab} from '../../Navigation'
import {devicePlatform, isIOS} from 'platform/detection'
import * as Notifications from 'expo-notifications'
import {track} from 'lib/analytics/analytics'
import {devicePlatform, isIOS} from 'platform/detection'
import {logger} from '#/logger'
import {RQKEY as RQKEY_NOTIFS} from '#/state/queries/notifications/feed'
import {truncateAndInvalidate} from '#/state/queries/util'
import {SessionAccount, getAgent} from '#/state/session'
import {getAgent, SessionAccount} from '#/state/session'
import {resetToTab} from '../../Navigation'
const SERVICE_DID = (serviceUrl?: string) =>
serviceUrl?.includes('staging')
+2 -1
View File
@@ -1,5 +1,6 @@
import {focusManager, QueryClient} from '@tanstack/react-query'
import {AppState, AppStateStatus} from 'react-native'
import {QueryClient, focusManager} from '@tanstack/react-query'
import {isNative} from '#/platform/detection'
focusManager.setEventListener(onFocus => {
+2 -1
View File
@@ -1,5 +1,6 @@
import {NavigationProp} from '@react-navigation/native'
import {State, RouteParams} from './types'
import {RouteParams, State} from './types'
export function getRootNavigation<T extends {}>(
nav: NavigationProp<T>,
+1 -1
View File
@@ -1,4 +1,4 @@
import {RouteParams, Route} from './types'
import {Route, RouteParams} from './types'
export class Router {
routes: [string, Route][] = []
+1 -1
View File
@@ -3,9 +3,9 @@
* avoid future conflicts and/or circular deps
*/
import * as info from 'expo-updates'
import {Platform} from 'react-native'
import app from 'react-native-version-number'
import * as info from 'expo-updates'
import {init} from 'sentry-expo'
/**
+3 -2
View File
@@ -1,9 +1,10 @@
import {isIOS, isAndroid} from 'platform/detection'
// import * as Sharing from 'expo-sharing'
import Clipboard from '@react-native-clipboard/clipboard'
import * as Toast from '../view/com/util/Toast'
import {isAndroid, isIOS} from 'platform/detection'
import {Share} from 'react-native'
import * as Toast from '../view/com/util/Toast'
/**
* This function shares a URL using the native Share API if available, or copies it to the clipboard
* and displays a toast message if not (mostly on web)
+2 -1
View File
@@ -1,11 +1,12 @@
import {sha256} from 'js-sha256'
import React from 'react'
import {
Statsig,
StatsigProvider,
useGate as useStatsigGate,
} from 'statsig-react-native-expo'
import {useSession} from '../../state/session'
import {sha256} from 'js-sha256'
const statsigOptions = {
environment: {
+2 -1
View File
@@ -1,11 +1,12 @@
import {sha256} from 'js-sha256'
import React from 'react'
import {
Statsig,
StatsigProvider,
useGate as useStatsigGate,
} from 'statsig-react'
import {useSession} from '../../state/session'
import {sha256} from 'js-sha256'
const statsigOptions = {
environment: {
+1
View File
@@ -1,4 +1,5 @@
import {ModerationUI} from '@atproto/api'
import {describeModerationCause} from '../moderation'
// \u2705 = ✅
+1 -1
View File
@@ -1,5 +1,5 @@
import {Dimensions} from 'react-native'
import {isWeb} from 'platform/detection'
import {Dimensions} from 'react-native'
const {height: SCREEN_HEIGHT} = Dimensions.get('window')
export const embedPlayerSources = [
+1
View File
@@ -1,4 +1,5 @@
import {AppBskyRichtextFacet, RichText} from '@atproto/api'
import {linkRequiresWarning} from './url-helpers'
export function richTextToString(rt: RichText, loose: boolean): string {
+1
View File
@@ -1,4 +1,5 @@
import {RichText, UnicodeString} from '@atproto/api'
import {toShortUrl} from './url-helpers'
export function shortenLinks(rt: RichText): RichText {
+1 -1
View File
@@ -1,7 +1,7 @@
import {AtUri} from '@atproto/api'
import {BSKY_SERVICE} from 'lib/constants'
import TLDs from 'tlds'
import psl from 'psl'
import TLDs from 'tlds'
export const BSKY_APP_HOST = 'https://bsky.app'
+3 -2
View File
@@ -1,6 +1,7 @@
import {Dimensions, StyleProp, StyleSheet, TextStyle} from 'react-native'
import {Theme, TypographyVariant} from './ThemeContext'
import {isWeb} from 'platform/detection'
import {Dimensions, StyleProp, StyleSheet, TextStyle} from 'react-native'
import {Theme, TypographyVariant} from './ThemeContext'
// 1 is lightest, 2 is light, 3 is mid, 4 is dark, 5 is darkest
export const colors = {
+4 -3
View File
@@ -1,8 +1,9 @@
import {Platform} from 'react-native'
import type {Theme} from './ThemeContext'
import {colors} from './styles'
import {darkPalette, lightPalette, dimPalette} from '#/alf/themes'
import {darkPalette, dimPalette, lightPalette} from '#/alf/themes'
import {colors} from './styles'
import type {Theme} from './ThemeContext'
export const defaultTheme: Theme = {
colorScheme: 'light',