Merge branch 'consolidate-list-props' into web-layout
@@ -43,7 +43,7 @@ module.exports = function () {
|
||||
icon: './assets/icon.png',
|
||||
userInterfaceStyle: 'automatic',
|
||||
splash: {
|
||||
image: './assets/cloud-splash.png',
|
||||
image: './assets/splash.png',
|
||||
resizeMode: 'cover',
|
||||
backgroundColor: '#ffffff',
|
||||
},
|
||||
@@ -73,9 +73,12 @@ module.exports = function () {
|
||||
},
|
||||
android: {
|
||||
versionCode: ANDROID_VERSION_CODE,
|
||||
icon: './assets/icon.png',
|
||||
adaptiveIcon: {
|
||||
foregroundImage: './assets/adaptive-icon.png',
|
||||
backgroundColor: '#ffffff',
|
||||
foregroundImage: './assets/icon-android-foreground.png',
|
||||
monochromeImage: './assets/icon-android-foreground.png',
|
||||
backgroundImage: './assets/icon-android-background.png',
|
||||
backgroundColor: '#1185FE',
|
||||
},
|
||||
googleServicesFile: './google-services.json',
|
||||
package: 'xyz.blueskyweb.app',
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 696 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 223 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 237 KiB |
|
After Width: | Height: | Size: 360 KiB |
|
After Width: | Height: | Size: 354 KiB |
|
Before Width: | Height: | Size: 78 KiB |
@@ -10,6 +10,7 @@
|
||||
- After initial setup:
|
||||
- Copy `google-services.json.example` to `google-services.json` or provide your own `google-services.json`. (A real firebase project is NOT required)
|
||||
- `npx expo prebuild` -> you will also need to run this anytime `app.json` or native `package.json` deps change
|
||||
- `yarn intl:build` -> you will also need to run this anytime `./src/locale/{locale}/messages.po` change
|
||||
- Start the dev servers
|
||||
- `git clone git@github.com:bluesky-social/atproto.git`
|
||||
- `cd atproto`
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"intl:compile": "lingui compile"
|
||||
},
|
||||
"dependencies": {
|
||||
"@atproto/api": "^0.7.3",
|
||||
"@atproto/api": "^0.7.4",
|
||||
"@bam.tech/react-native-image-resizer": "^3.0.4",
|
||||
"@braintree/sanitize-url": "^6.0.2",
|
||||
"@emoji-mart/react": "^1.1.1",
|
||||
@@ -54,6 +54,7 @@
|
||||
"@react-native-clipboard/clipboard": "^1.10.0",
|
||||
"@react-native-community/blur": "^4.3.0",
|
||||
"@react-native-community/datetimepicker": "7.2.0",
|
||||
"@react-native-masked-view/masked-view": "^0.3.1",
|
||||
"@react-native-menu/menu": "^0.8.0",
|
||||
"@react-native-picker/picker": "2.4.10",
|
||||
"@react-navigation/bottom-tabs": "^6.5.7",
|
||||
|
||||
@@ -6,6 +6,10 @@ import {RootSiblingParent} from 'react-native-root-siblings'
|
||||
import * as SplashScreen from 'expo-splash-screen'
|
||||
import {GestureHandlerRootView} from 'react-native-gesture-handler'
|
||||
import {QueryClientProvider} from '@tanstack/react-query'
|
||||
import {
|
||||
SafeAreaProvider,
|
||||
initialWindowMetrics,
|
||||
} from 'react-native-safe-area-context'
|
||||
|
||||
import 'view/icons'
|
||||
|
||||
@@ -34,6 +38,7 @@ import {
|
||||
} from 'state/session'
|
||||
import {Provider as UnreadNotifsProvider} from 'state/queries/notifications/unread'
|
||||
import * as persisted from '#/state/persisted'
|
||||
import {Splash} from '#/Splash'
|
||||
|
||||
SplashScreen.preventAutoHideAsync()
|
||||
|
||||
@@ -53,27 +58,28 @@ function InnerApp() {
|
||||
resumeSession(account)
|
||||
}, [resumeSession])
|
||||
|
||||
// wait for session to resume
|
||||
if (isInitialLoad) return null
|
||||
|
||||
return (
|
||||
<React.Fragment
|
||||
// Resets the entire tree below when it changes:
|
||||
key={currentAccount?.did}>
|
||||
<LoggedOutViewProvider>
|
||||
<UnreadNotifsProvider>
|
||||
<ThemeProvider theme={colorMode}>
|
||||
{/* All components should be within this provider */}
|
||||
<RootSiblingParent>
|
||||
<GestureHandlerRootView style={s.h100pct}>
|
||||
<TestCtrls />
|
||||
<Shell />
|
||||
</GestureHandlerRootView>
|
||||
</RootSiblingParent>
|
||||
</ThemeProvider>
|
||||
</UnreadNotifsProvider>
|
||||
</LoggedOutViewProvider>
|
||||
</React.Fragment>
|
||||
<SafeAreaProvider initialMetrics={initialWindowMetrics}>
|
||||
<Splash isReady={!isInitialLoad}>
|
||||
<React.Fragment
|
||||
// Resets the entire tree below when it changes:
|
||||
key={currentAccount?.did}>
|
||||
<LoggedOutViewProvider>
|
||||
<UnreadNotifsProvider>
|
||||
<ThemeProvider theme={colorMode}>
|
||||
{/* All components should be within this provider */}
|
||||
<RootSiblingParent>
|
||||
<GestureHandlerRootView style={s.h100pct}>
|
||||
<TestCtrls />
|
||||
<Shell />
|
||||
</GestureHandlerRootView>
|
||||
</RootSiblingParent>
|
||||
</ThemeProvider>
|
||||
</UnreadNotifsProvider>
|
||||
</LoggedOutViewProvider>
|
||||
</React.Fragment>
|
||||
</Splash>
|
||||
</SafeAreaProvider>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import * as React from 'react'
|
||||
import {StyleSheet} from 'react-native'
|
||||
import * as SplashScreen from 'expo-splash-screen'
|
||||
import {
|
||||
NavigationContainer,
|
||||
createNavigationContainerRef,
|
||||
@@ -182,7 +181,7 @@ function commonScreens(Stack: typeof HomeTab, unreadCountLabel?: string) {
|
||||
<Stack.Screen
|
||||
name="ProfileFeed"
|
||||
getComponent={() => ProfileFeedScreen}
|
||||
options={{title: title('Feed')}}
|
||||
options={{title: title('Feed'), requireAuth: true}}
|
||||
/>
|
||||
<Stack.Screen
|
||||
name="ProfileFeedLikedBy"
|
||||
@@ -327,7 +326,11 @@ function FeedsTabNavigator() {
|
||||
animationDuration: 250,
|
||||
contentStyle,
|
||||
}}>
|
||||
<FeedsTab.Screen name="Feeds" getComponent={() => FeedsScreen} />
|
||||
<FeedsTab.Screen
|
||||
name="Feeds"
|
||||
getComponent={() => FeedsScreen}
|
||||
options={{requireAuth: true}}
|
||||
/>
|
||||
{commonScreens(FeedsTab as typeof HomeTab)}
|
||||
</FeedsTab.Navigator>
|
||||
)
|
||||
@@ -489,7 +492,6 @@ function RoutesContainer({children}: React.PropsWithChildren<{}>) {
|
||||
linking={LINKING}
|
||||
theme={theme}
|
||||
onReady={() => {
|
||||
SplashScreen.hideAsync()
|
||||
logModuleInitTime()
|
||||
onReady()
|
||||
}}>
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
import React, {useCallback, useEffect} from 'react'
|
||||
import {View, StyleSheet} from 'react-native'
|
||||
import * as SplashScreen from 'expo-splash-screen'
|
||||
import LinearGradient from 'react-native-linear-gradient'
|
||||
import Animated, {
|
||||
interpolate,
|
||||
runOnJS,
|
||||
useAnimatedStyle,
|
||||
useSharedValue,
|
||||
withTiming,
|
||||
Easing,
|
||||
} from 'react-native-reanimated'
|
||||
import MaskedView from '@react-native-masked-view/masked-view'
|
||||
import {useSafeAreaInsets} from 'react-native-safe-area-context'
|
||||
import Svg, {Path, SvgProps} from 'react-native-svg'
|
||||
|
||||
export const Logo = React.forwardRef(function LogoImpl(props: SvgProps, ref) {
|
||||
const width = 1000
|
||||
const height = width * (67 / 64)
|
||||
return (
|
||||
<Svg
|
||||
fill="none"
|
||||
// @ts-ignore it's fiiiiine
|
||||
ref={ref}
|
||||
viewBox="0 0 64 66"
|
||||
style={{width, height}}>
|
||||
<Path
|
||||
fill="#fff"
|
||||
d="M13.873 3.77C21.21 9.243 29.103 20.342 32 26.3v15.732c0-.335-.13.043-.41.858-1.512 4.414-7.418 21.642-20.923 7.87-7.111-7.252-3.819-14.503 9.125-16.692-7.405 1.252-15.73-.817-18.014-8.93C1.12 22.804 0 8.431 0 6.488 0-3.237 8.579-.18 13.873 3.77ZM50.127 3.77C42.79 9.243 34.897 20.342 32 26.3v15.732c0-.335.13.043.41.858 1.512 4.414 7.418 21.642 20.923 7.87 7.111-7.252 3.819-14.503-9.125-16.692 7.405 1.252 15.73-.817 18.014-8.93C62.88 22.804 64 8.431 64 6.488 64-3.237 55.422-.18 50.127 3.77Z"
|
||||
/>
|
||||
</Svg>
|
||||
)
|
||||
})
|
||||
|
||||
type Props = {
|
||||
isReady: boolean
|
||||
}
|
||||
|
||||
SplashScreen.preventAutoHideAsync().catch(() => {})
|
||||
|
||||
const AnimatedLogo = Animated.createAnimatedComponent(Logo)
|
||||
|
||||
export function Splash(props: React.PropsWithChildren<Props>) {
|
||||
const insets = useSafeAreaInsets()
|
||||
const intro = useSharedValue(0)
|
||||
const outroLogo = useSharedValue(0)
|
||||
const outroApp = useSharedValue(0)
|
||||
const [isAnimationComplete, setIsAnimationComplete] = React.useState(false)
|
||||
|
||||
const logoAnimations = useAnimatedStyle(() => {
|
||||
return {
|
||||
transform: [
|
||||
{
|
||||
scale: interpolate(intro.value, [0, 1], [0.8, 1], 'clamp'),
|
||||
},
|
||||
{
|
||||
scale: interpolate(
|
||||
outroLogo.value,
|
||||
[0, 0.06, 0.08, 1],
|
||||
[1, 0.8, 0.8, 800],
|
||||
'clamp',
|
||||
),
|
||||
},
|
||||
],
|
||||
opacity: interpolate(intro.value, [0, 1], [0, 1], 'clamp'),
|
||||
}
|
||||
})
|
||||
|
||||
const appAnimation = useAnimatedStyle(() => {
|
||||
return {
|
||||
transform: [
|
||||
{
|
||||
scale: interpolate(
|
||||
outroApp.value,
|
||||
[0, 0.7, 1],
|
||||
[1.1, 1.1, 1],
|
||||
'clamp',
|
||||
),
|
||||
},
|
||||
],
|
||||
opacity: interpolate(outroApp.value, [0, 0.7, 1], [0, 0, 1], 'clamp'),
|
||||
}
|
||||
})
|
||||
|
||||
const onFinish = useCallback(() => setIsAnimationComplete(true), [])
|
||||
|
||||
useEffect(() => {
|
||||
if (props.isReady) {
|
||||
// hide on mount
|
||||
SplashScreen.hideAsync().catch(() => {})
|
||||
|
||||
intro.value = withTiming(
|
||||
1,
|
||||
{duration: 200, easing: Easing.out(Easing.cubic)},
|
||||
async () => {
|
||||
outroLogo.value = withTiming(
|
||||
1,
|
||||
{duration: 1200, easing: Easing.in(Easing.cubic)},
|
||||
() => {
|
||||
runOnJS(onFinish)()
|
||||
},
|
||||
)
|
||||
outroApp.value = withTiming(
|
||||
1,
|
||||
{duration: 1200, easing: Easing.inOut(Easing.cubic)},
|
||||
() => {
|
||||
runOnJS(onFinish)()
|
||||
},
|
||||
)
|
||||
},
|
||||
)
|
||||
}
|
||||
}, [onFinish, intro, outroLogo, outroApp, props.isReady])
|
||||
|
||||
return (
|
||||
<View style={{flex: 1}}>
|
||||
{!isAnimationComplete && (
|
||||
<LinearGradient
|
||||
colors={['#0A7AFF', '#59B9FF']}
|
||||
style={[StyleSheet.absoluteFillObject]}
|
||||
/>
|
||||
)}
|
||||
|
||||
<MaskedView
|
||||
style={[StyleSheet.absoluteFillObject]}
|
||||
maskElement={
|
||||
<Animated.View
|
||||
style={[
|
||||
StyleSheet.absoluteFillObject,
|
||||
{
|
||||
// Transparent background because mask is based off alpha channel.
|
||||
backgroundColor: 'transparent',
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
transform: [{translateY: -(insets.top / 2)}, {scale: 0.1}], // scale from 1000px to 100px
|
||||
},
|
||||
]}>
|
||||
<AnimatedLogo style={[logoAnimations]} />
|
||||
</Animated.View>
|
||||
}>
|
||||
{!isAnimationComplete && (
|
||||
<View
|
||||
style={[StyleSheet.absoluteFillObject, {backgroundColor: 'white'}]}
|
||||
/>
|
||||
)}
|
||||
|
||||
<Animated.View style={[{flex: 1}, appAnimation]}>
|
||||
{props.children}
|
||||
</Animated.View>
|
||||
</MaskedView>
|
||||
</View>
|
||||
)
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
import {ImageRequireSource} from 'react-native'
|
||||
|
||||
export const DEF_AVATAR: ImageRequireSource = require('../../assets/default-avatar.jpg')
|
||||
export const TABS_EXPLAINER: ImageRequireSource = require('../../assets/tabs-explainer.jpg')
|
||||
export const CLOUD_SPLASH: ImageRequireSource = require('../../assets/cloud-splash.png')
|
||||
export const DEF_AVATAR: ImageRequireSource = require('../../assets/default-avatar.png')
|
||||
export const CLOUD_SPLASH: ImageRequireSource = require('../../assets/splash.png')
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
import {ImageRequireSource} from 'react-native'
|
||||
|
||||
// @ts-ignore we need to pretend -prf
|
||||
export const DEF_AVATAR: ImageRequireSource = {uri: '/img/default-avatar.jpg'}
|
||||
export const DEF_AVATAR: ImageRequireSource = {uri: '/img/default-avatar.png'}
|
||||
// @ts-ignore we need to pretend -prf
|
||||
export const TABS_EXPLAINER: ImageRequireSource = {
|
||||
uri: '/img/tabs-explainer.jpg',
|
||||
}
|
||||
// @ts-ignore we need to pretend -prf
|
||||
export const CLOUD_SPLASH: ImageRequireSource = {uri: '/img/cloud-splash.png'}
|
||||
export const CLOUD_SPLASH: ImageRequireSource = {uri: '/img/splash.png'}
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
export const LOGIN_INCLUDE_DEV_SERVERS = true
|
||||
export const PWI_ENABLED = false
|
||||
export const PWI_ENABLED = true
|
||||
|
||||
@@ -47,7 +47,7 @@ msgstr ""
|
||||
msgid "{invitesAvailable} invite codes available"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:87
|
||||
#: src/view/screens/Search/Search.tsx:88
|
||||
msgid "{message}"
|
||||
msgstr ""
|
||||
|
||||
@@ -95,7 +95,7 @@ msgstr ""
|
||||
|
||||
#: src/view/com/modals/ListAddRemoveUsers.tsx:264
|
||||
#: src/view/com/modals/UserAddRemoveLists.tsx:193
|
||||
#: src/view/screens/ProfileList.tsx:783
|
||||
#: src/view/screens/ProfileList.tsx:753
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
@@ -103,7 +103,7 @@ msgstr ""
|
||||
msgid "Add a content warning"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:773
|
||||
#: src/view/screens/ProfileList.tsx:743
|
||||
msgid "Add a user to this list"
|
||||
msgstr ""
|
||||
|
||||
@@ -142,7 +142,7 @@ msgstr ""
|
||||
msgid "Add to Lists"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:280
|
||||
#: src/view/screens/ProfileFeed.tsx:275
|
||||
msgid "Add to my feeds"
|
||||
msgstr ""
|
||||
|
||||
@@ -228,7 +228,7 @@ msgstr ""
|
||||
msgid "Are you sure you'd like to discard this draft?"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:375
|
||||
#: src/view/screens/ProfileList.tsx:351
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
@@ -250,9 +250,9 @@ msgstr ""
|
||||
#: src/view/com/auth/login/LoginForm.tsx:249
|
||||
#: src/view/com/auth/login/SetNewPasswordForm.tsx:148
|
||||
#: src/view/com/modals/report/InputIssueDetails.tsx:45
|
||||
#: src/view/com/post-thread/PostThread.tsx:392
|
||||
#: src/view/com/post-thread/PostThread.tsx:442
|
||||
#: src/view/com/post-thread/PostThread.tsx:450
|
||||
#: src/view/com/post-thread/PostThread.tsx:395
|
||||
#: src/view/com/post-thread/PostThread.tsx:445
|
||||
#: src/view/com/post-thread/PostThread.tsx:453
|
||||
#: src/view/com/profile/ProfileHeader.tsx:672
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
@@ -275,15 +275,15 @@ msgstr ""
|
||||
msgid "Block Account"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:545
|
||||
#: src/view/screens/ProfileList.tsx:521
|
||||
msgid "Block accounts"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:495
|
||||
#: src/view/screens/ProfileList.tsx:471
|
||||
msgid "Block list"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:330
|
||||
#: src/view/screens/ProfileList.tsx:306
|
||||
msgid "Block these accounts?"
|
||||
msgstr ""
|
||||
|
||||
@@ -303,14 +303,19 @@ msgstr ""
|
||||
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:248
|
||||
#: src/view/com/post-thread/PostThread.tsx:251
|
||||
msgid "Blocked post."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:332
|
||||
#: src/view/screens/ProfileList.tsx:308
|
||||
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
|
||||
msgid "Blog"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
|
||||
#: src/view/com/auth/SplashScreen.tsx:26
|
||||
msgid "Bluesky"
|
||||
msgstr ""
|
||||
@@ -343,6 +348,10 @@ msgstr ""
|
||||
msgid "Build version {0} {1}"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
|
||||
msgid "Business"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
|
||||
#: src/view/com/util/UserAvatar.tsx:221
|
||||
#: src/view/com/util/UserBanner.tsx:38
|
||||
@@ -368,7 +377,7 @@ msgstr ""
|
||||
#: src/view/com/modals/LinkWarning.tsx:85
|
||||
#: src/view/com/modals/Repost.tsx:73
|
||||
#: src/view/com/modals/Waitlist.tsx:136
|
||||
#: src/view/screens/Search/Search.tsx:558
|
||||
#: src/view/screens/Search/Search.tsx:592
|
||||
#: src/view/shell/desktop/Search.tsx:182
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
@@ -473,7 +482,7 @@ msgid "Clear all storage data (restart after this)"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/forms/SearchInput.tsx:73
|
||||
#: src/view/screens/Search/Search.tsx:543
|
||||
#: src/view/screens/Search/Search.tsx:577
|
||||
msgid "Clear search query"
|
||||
msgstr ""
|
||||
|
||||
@@ -551,7 +560,7 @@ msgstr ""
|
||||
msgid "Content Languages"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:69
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:78
|
||||
msgid "Content Warning"
|
||||
msgstr ""
|
||||
|
||||
@@ -573,7 +582,7 @@ msgstr ""
|
||||
msgid "Copy"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:407
|
||||
#: src/view/screens/ProfileList.tsx:383
|
||||
msgid "Copy link to list"
|
||||
msgstr ""
|
||||
|
||||
@@ -593,14 +602,15 @@ msgstr ""
|
||||
msgid "Copyright Policy"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:103
|
||||
#: src/view/screens/ProfileFeed.tsx:98
|
||||
msgid "Could not load feed"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:860
|
||||
#: src/view/screens/ProfileList.tsx:829
|
||||
msgid "Could not load list"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
|
||||
#: src/view/com/auth/SplashScreen.tsx:41
|
||||
msgid "Create a new account"
|
||||
msgstr ""
|
||||
@@ -609,6 +619,7 @@ msgstr ""
|
||||
msgid "Create Account"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
|
||||
#: src/view/com/auth/SplashScreen.tsx:38
|
||||
msgid "Create new account"
|
||||
msgstr ""
|
||||
@@ -643,8 +654,8 @@ msgstr ""
|
||||
msgid "Delete app password"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:374
|
||||
#: src/view/screens/ProfileList.tsx:434
|
||||
#: src/view/screens/ProfileList.tsx:350
|
||||
#: src/view/screens/ProfileList.tsx:410
|
||||
msgid "Delete List"
|
||||
msgstr ""
|
||||
|
||||
@@ -664,7 +675,7 @@ msgstr ""
|
||||
msgid "Delete this post?"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:240
|
||||
#: src/view/com/post-thread/PostThread.tsx:243
|
||||
msgid "Deleted post."
|
||||
msgstr ""
|
||||
|
||||
@@ -739,7 +750,7 @@ msgstr ""
|
||||
msgid "Edit image"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:422
|
||||
#: src/view/screens/ProfileList.tsx:398
|
||||
msgid "Edit list details"
|
||||
msgstr ""
|
||||
|
||||
@@ -787,7 +798,7 @@ msgstr ""
|
||||
msgid "Enable this setting to only see replies between people you follow."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Profile.tsx:471
|
||||
#: src/view/screens/Profile.tsx:425
|
||||
msgid "End of feed"
|
||||
msgstr ""
|
||||
|
||||
@@ -815,7 +826,7 @@ msgstr ""
|
||||
msgid "Enter your username and password"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:105
|
||||
#: src/view/screens/Search/Search.tsx:106
|
||||
msgid "Error:"
|
||||
msgstr ""
|
||||
|
||||
@@ -836,7 +847,7 @@ msgstr ""
|
||||
msgid "Feed offline"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/feeds/FeedPage.tsx:140
|
||||
#: src/view/com/feeds/FeedPage.tsx:143
|
||||
msgid "Feed Preferences"
|
||||
msgstr ""
|
||||
|
||||
@@ -847,8 +858,8 @@ msgstr ""
|
||||
|
||||
#: src/view/screens/Feeds.tsx:475
|
||||
#: src/view/screens/Profile.tsx:164
|
||||
#: src/view/shell/bottom-bar/BottomBar.tsx:160
|
||||
#: src/view/shell/desktop/LeftNav.tsx:333
|
||||
#: src/view/shell/bottom-bar/BottomBar.tsx:163
|
||||
#: src/view/shell/desktop/LeftNav.tsx:335
|
||||
#: src/view/shell/Drawer.tsx:455
|
||||
#: src/view/shell/Drawer.tsx:456
|
||||
msgid "Feeds"
|
||||
@@ -862,6 +873,14 @@ msgstr ""
|
||||
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:422
|
||||
msgid "Find users on Bluesky"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:420
|
||||
msgid "Find users with the search tool on the right"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
|
||||
msgid "Finding similar accounts..."
|
||||
msgstr ""
|
||||
@@ -940,17 +959,17 @@ msgstr ""
|
||||
msgid "Get Started"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/LoggedOut.tsx:68
|
||||
#: src/view/com/auth/LoggedOut.tsx:69
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:105
|
||||
#: src/view/com/auth/LoggedOut.tsx:70
|
||||
#: src/view/com/auth/LoggedOut.tsx:71
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:123
|
||||
#: src/view/shell/desktop/LeftNav.tsx:103
|
||||
msgid "Go back"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:107
|
||||
#: src/view/screens/ProfileFeed.tsx:112
|
||||
#: src/view/screens/ProfileFeed.tsx:117
|
||||
#: src/view/screens/ProfileList.tsx:869
|
||||
#: src/view/screens/ProfileList.tsx:874
|
||||
#: src/view/screens/ProfileList.tsx:838
|
||||
#: src/view/screens/ProfileList.tsx:843
|
||||
msgid "Go Back"
|
||||
msgstr ""
|
||||
|
||||
@@ -974,6 +993,7 @@ msgid "Here is your app password."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/notifications/FeedItem.tsx:316
|
||||
#: src/view/com/util/moderation/ContentHider.tsx:103
|
||||
msgid "Hide"
|
||||
msgstr ""
|
||||
|
||||
@@ -1082,6 +1102,10 @@ msgstr ""
|
||||
msgid "Invite codes: {invitesAvailable} available"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/modals/Waitlist.tsx:67
|
||||
msgid "Join the waitlist"
|
||||
msgstr ""
|
||||
@@ -1107,9 +1131,13 @@ msgstr ""
|
||||
msgid "Languages"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/ContentHider.tsx:101
|
||||
msgid "Learn more"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/PostAlerts.tsx:47
|
||||
#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:88
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:104
|
||||
msgid "Learn More"
|
||||
msgstr ""
|
||||
|
||||
@@ -1117,7 +1145,7 @@ msgstr ""
|
||||
#: src/view/com/util/moderation/PostAlerts.tsx:40
|
||||
#: src/view/com/util/moderation/PostHider.tsx:76
|
||||
#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:85
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:101
|
||||
msgid "Learn more about this warning"
|
||||
msgstr ""
|
||||
|
||||
@@ -1147,7 +1175,7 @@ msgstr ""
|
||||
#~ msgid "Light"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:643
|
||||
#: src/view/screens/ProfileFeed.tsx:627
|
||||
msgid "Like this feed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1177,22 +1205,22 @@ msgid "List Name"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Profile.tsx:165
|
||||
#: src/view/shell/desktop/LeftNav.tsx:373
|
||||
#: src/view/shell/desktop/LeftNav.tsx:372
|
||||
#: src/view/shell/Drawer.tsx:471
|
||||
#: src/view/shell/Drawer.tsx:472
|
||||
msgid "Lists"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:257
|
||||
#: src/view/com/post-thread/PostThread.tsx:265
|
||||
#: src/view/com/post-thread/PostThread.tsx:260
|
||||
#: src/view/com/post-thread/PostThread.tsx:268
|
||||
msgid "Load more posts"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Notifications.tsx:141
|
||||
#: src/view/screens/Notifications.tsx:144
|
||||
msgid "Load new notifications"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/feeds/FeedPage.tsx:185
|
||||
#: src/view/com/feeds/FeedPage.tsx:189
|
||||
msgid "Load new posts"
|
||||
msgstr ""
|
||||
|
||||
@@ -1216,7 +1244,7 @@ msgstr ""
|
||||
msgid "Login to account that is not listed"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:482
|
||||
#: src/view/screens/ProfileFeed.tsx:472
|
||||
msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!"
|
||||
msgstr ""
|
||||
|
||||
@@ -1236,18 +1264,18 @@ msgstr ""
|
||||
msgid "Mentioned users"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:503
|
||||
#: src/view/screens/Search/Search.tsx:537
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/posts/FeedErrorMessage.tsx:194
|
||||
#: src/view/screens/ProfileFeed.tsx:490
|
||||
#: src/view/screens/ProfileFeed.tsx:480
|
||||
msgid "Message from server"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Moderation.tsx:64
|
||||
#: src/view/screens/Settings.tsx:563
|
||||
#: src/view/shell/desktop/LeftNav.tsx:391
|
||||
#: src/view/shell/desktop/LeftNav.tsx:390
|
||||
#: src/view/shell/Drawer.tsx:490
|
||||
#: src/view/shell/Drawer.tsx:491
|
||||
msgid "Moderation"
|
||||
@@ -1266,8 +1294,8 @@ msgid "More feeds"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/profile/ProfileHeader.tsx:548
|
||||
#: src/view/screens/ProfileFeed.tsx:370
|
||||
#: src/view/screens/ProfileList.tsx:606
|
||||
#: src/view/screens/ProfileFeed.tsx:365
|
||||
#: src/view/screens/ProfileList.tsx:582
|
||||
msgid "More options"
|
||||
msgstr ""
|
||||
|
||||
@@ -1279,15 +1307,15 @@ msgstr ""
|
||||
msgid "Mute Account"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:533
|
||||
#: src/view/screens/ProfileList.tsx:509
|
||||
msgid "Mute accounts"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:480
|
||||
#: src/view/screens/ProfileList.tsx:456
|
||||
msgid "Mute list"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:293
|
||||
#: src/view/screens/ProfileList.tsx:269
|
||||
msgid "Mute these accounts?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1307,7 +1335,7 @@ msgstr ""
|
||||
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:295
|
||||
#: src/view/screens/ProfileList.tsx:271
|
||||
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
|
||||
msgstr ""
|
||||
|
||||
@@ -1345,12 +1373,12 @@ msgstr ""
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/feeds/FeedPage.tsx:196
|
||||
#: src/view/com/feeds/FeedPage.tsx:200
|
||||
#: src/view/screens/Feeds.tsx:510
|
||||
#: src/view/screens/Profile.tsx:389
|
||||
#: src/view/screens/ProfileFeed.tsx:451
|
||||
#: src/view/screens/ProfileList.tsx:212
|
||||
#: src/view/screens/ProfileList.tsx:244
|
||||
#: src/view/screens/Profile.tsx:353
|
||||
#: src/view/screens/ProfileFeed.tsx:441
|
||||
#: src/view/screens/ProfileList.tsx:192
|
||||
#: src/view/screens/ProfileList.tsx:220
|
||||
#: src/view/shell/desktop/LeftNav.tsx:246
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
@@ -1379,8 +1407,8 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:636
|
||||
#: src/view/screens/ProfileList.tsx:740
|
||||
#: src/view/screens/ProfileFeed.tsx:620
|
||||
#: src/view/screens/ProfileList.tsx:710
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
@@ -1398,9 +1426,9 @@ msgstr ""
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
|
||||
#: src/view/screens/Search/Search.tsx:270
|
||||
#: src/view/screens/Search/Search.tsx:298
|
||||
#: src/view/screens/Search/Search.tsx:581
|
||||
#: src/view/screens/Search/Search.tsx:271
|
||||
#: src/view/screens/Search/Search.tsx:299
|
||||
#: src/view/screens/Search/Search.tsx:615
|
||||
#: src/view/shell/desktop/Search.tsx:210
|
||||
msgid "No results found for {query}"
|
||||
msgstr ""
|
||||
@@ -1429,10 +1457,10 @@ msgstr ""
|
||||
#~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting."
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/view/screens/Notifications.tsx:108
|
||||
#: src/view/screens/Notifications.tsx:132
|
||||
#: src/view/screens/Notifications.tsx:109
|
||||
#: src/view/screens/Notifications.tsx:133
|
||||
#: src/view/shell/bottom-bar/BottomBar.tsx:187
|
||||
#: src/view/shell/desktop/LeftNav.tsx:355
|
||||
#: src/view/shell/desktop/LeftNav.tsx:354
|
||||
#: src/view/shell/Drawer.tsx:416
|
||||
#: src/view/shell/Drawer.tsx:417
|
||||
msgid "Notifications"
|
||||
@@ -1570,12 +1598,12 @@ msgid "Please tell us why you think this decision was incorrect."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/composer/Composer.tsx:331
|
||||
#: src/view/com/post-thread/PostThread.tsx:223
|
||||
#: src/view/com/post-thread/PostThread.tsx:226
|
||||
#: src/view/screens/PostThread.tsx:78
|
||||
msgid "Post"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:382
|
||||
#: src/view/com/post-thread/PostThread.tsx:385
|
||||
msgid "Post hidden"
|
||||
msgstr ""
|
||||
|
||||
@@ -1587,7 +1615,7 @@ msgstr ""
|
||||
msgid "Post Languages"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:434
|
||||
#: src/view/com/post-thread/PostThread.tsx:437
|
||||
msgid "Post not found"
|
||||
msgstr ""
|
||||
|
||||
@@ -1690,7 +1718,7 @@ msgstr ""
|
||||
|
||||
#: src/view/com/feeds/FeedSourceCard.tsx:105
|
||||
#: src/view/com/feeds/FeedSourceCard.tsx:172
|
||||
#: src/view/screens/ProfileFeed.tsx:280
|
||||
#: src/view/screens/ProfileFeed.tsx:275
|
||||
msgid "Remove from my feeds"
|
||||
msgstr ""
|
||||
|
||||
@@ -1735,11 +1763,11 @@ msgstr ""
|
||||
msgid "Report Account"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:300
|
||||
#: src/view/screens/ProfileFeed.tsx:295
|
||||
msgid "Report feed"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:448
|
||||
#: src/view/screens/ProfileList.tsx:424
|
||||
msgid "Report List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1851,8 +1879,8 @@ msgstr ""
|
||||
|
||||
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
|
||||
#: src/view/com/util/forms/SearchInput.tsx:64
|
||||
#: src/view/screens/Search/Search.tsx:381
|
||||
#: src/view/screens/Search/Search.tsx:533
|
||||
#: src/view/screens/Search/Search.tsx:401
|
||||
#: src/view/screens/Search/Search.tsx:567
|
||||
#: src/view/shell/bottom-bar/BottomBar.tsx:138
|
||||
#: src/view/shell/desktop/LeftNav.tsx:315
|
||||
#: src/view/shell/desktop/Search.tsx:161
|
||||
@@ -1863,13 +1891,14 @@ msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:390
|
||||
msgid "Search for posts and users."
|
||||
msgstr ""
|
||||
#~ msgid "Search for posts and users."
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/view/com/modals/ChangeEmail.tsx:110
|
||||
msgid "Security Step Required"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
|
||||
#: src/view/com/auth/SplashScreen.tsx:29
|
||||
msgid "See what's next"
|
||||
msgstr ""
|
||||
@@ -1944,7 +1973,7 @@ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your f
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Settings.tsx:277
|
||||
#: src/view/shell/desktop/LeftNav.tsx:427
|
||||
#: src/view/shell/desktop/LeftNav.tsx:426
|
||||
#: src/view/shell/Drawer.tsx:546
|
||||
#: src/view/shell/Drawer.tsx:547
|
||||
msgid "Settings"
|
||||
@@ -1956,11 +1985,11 @@ msgstr ""
|
||||
|
||||
#: src/view/com/profile/ProfileHeader.tsx:338
|
||||
#: src/view/com/util/forms/PostDropdownBtn.tsx:129
|
||||
#: src/view/screens/ProfileList.tsx:407
|
||||
#: src/view/screens/ProfileList.tsx:383
|
||||
msgid "Share"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:312
|
||||
#: src/view/screens/ProfileFeed.tsx:307
|
||||
msgid "Share feed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1968,11 +1997,12 @@ msgstr ""
|
||||
#~ msgid "Share link"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/ContentHider.tsx:105
|
||||
#: src/view/screens/Settings.tsx:316
|
||||
msgid "Show"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:114
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:132
|
||||
msgid "Show anyway"
|
||||
msgstr ""
|
||||
|
||||
@@ -2000,13 +2030,15 @@ msgstr ""
|
||||
msgid "Show users"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
|
||||
#: src/view/com/auth/login/Login.tsx:98
|
||||
#: src/view/com/auth/SplashScreen.tsx:49
|
||||
#: src/view/shell/NavSignupCard.tsx:52
|
||||
#: src/view/shell/NavSignupCard.tsx:53
|
||||
#: src/view/shell/NavSignupCard.tsx:58
|
||||
#: src/view/shell/NavSignupCard.tsx:59
|
||||
msgid "Sign in"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
|
||||
#: src/view/com/auth/SplashScreen.tsx:52
|
||||
#: src/view/com/auth/SplashScreen.web.tsx:84
|
||||
msgid "Sign In"
|
||||
@@ -2030,16 +2062,20 @@ msgstr ""
|
||||
msgid "Sign out"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/shell/NavSignupCard.tsx:43
|
||||
#: src/view/shell/NavSignupCard.tsx:44
|
||||
#: src/view/shell/NavSignupCard.tsx:46
|
||||
#: src/view/shell/NavSignupCard.tsx:49
|
||||
#: src/view/shell/NavSignupCard.tsx:50
|
||||
#: src/view/shell/NavSignupCard.tsx:52
|
||||
msgid "Sign up"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/shell/NavSignupCard.tsx:36
|
||||
#: src/view/shell/NavSignupCard.tsx:42
|
||||
msgid "Sign up or sign in to join the conversation"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:76
|
||||
msgid "Sign-in Required"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Settings.tsx:327
|
||||
msgid "Signed in as"
|
||||
msgstr ""
|
||||
@@ -2077,15 +2113,15 @@ msgstr ""
|
||||
msgid "Submit"
|
||||
msgstr "Submit"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:597
|
||||
#: src/view/screens/ProfileList.tsx:573
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:593
|
||||
#: src/view/screens/ProfileList.tsx:569
|
||||
msgid "Subscribe to this list"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:354
|
||||
#: src/view/screens/Search/Search.tsx:357
|
||||
msgid "Suggested Follows"
|
||||
msgstr ""
|
||||
|
||||
@@ -2135,7 +2171,7 @@ msgstr ""
|
||||
msgid "The Copyright Policy has been moved to <0/>"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:437
|
||||
#: src/view/com/post-thread/PostThread.tsx:440
|
||||
msgid "The post may have been deleted."
|
||||
msgstr ""
|
||||
|
||||
@@ -2159,10 +2195,14 @@ msgstr ""
|
||||
msgid "This {0} has been labeled."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:72
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:88
|
||||
msgid "This {screenDescription} has been flagged:"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:83
|
||||
msgid "This account has requested that users sign in to view their profile."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/posts/FeedErrorMessage.tsx:107
|
||||
msgid "This content is not viewable without a Bluesky account."
|
||||
msgstr ""
|
||||
@@ -2222,11 +2262,11 @@ msgstr ""
|
||||
msgid "Try again"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:495
|
||||
#: src/view/screens/ProfileList.tsx:471
|
||||
msgid "Un-block list"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:480
|
||||
#: src/view/screens/ProfileList.tsx:456
|
||||
msgid "Un-mute list"
|
||||
msgstr ""
|
||||
|
||||
@@ -2262,7 +2302,7 @@ msgstr ""
|
||||
msgid "Unmute thread"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:463
|
||||
#: src/view/screens/ProfileList.tsx:439
|
||||
msgid "Unpin moderation list"
|
||||
msgstr ""
|
||||
|
||||
@@ -2311,7 +2351,7 @@ msgstr ""
|
||||
msgid "Username or email address"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:767
|
||||
#: src/view/screens/ProfileList.tsx:737
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
@@ -2368,7 +2408,7 @@ msgstr ""
|
||||
#~ msgid "We're sorry, but this feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:237
|
||||
#: src/view/screens/Search/Search.tsx:238
|
||||
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
|
||||
msgstr ""
|
||||
|
||||
@@ -2444,16 +2484,16 @@ msgstr ""
|
||||
msgid "You don't have any saved feeds."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:385
|
||||
#: src/view/com/post-thread/PostThread.tsx:388
|
||||
msgid "You have blocked the author or you have been blocked by the author."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/feeds/ProfileFeedgens.tsx:154
|
||||
#: src/view/com/feeds/ProfileFeedgens.tsx:141
|
||||
msgid "You have no feeds."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/lists/MyLists.tsx:89
|
||||
#: src/view/com/lists/ProfileLists.tsx:158
|
||||
#: src/view/com/lists/ProfileLists.tsx:145
|
||||
msgid "You have no lists."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ msgstr ""
|
||||
msgid "{invitesAvailable} invite codes available"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:87
|
||||
#: src/view/screens/Search/Search.tsx:88
|
||||
msgid "{message}"
|
||||
msgstr ""
|
||||
|
||||
@@ -95,7 +95,7 @@ msgstr "अकाउंट के विकल्प"
|
||||
|
||||
#: src/view/com/modals/ListAddRemoveUsers.tsx:264
|
||||
#: src/view/com/modals/UserAddRemoveLists.tsx:193
|
||||
#: src/view/screens/ProfileList.tsx:783
|
||||
#: src/view/screens/ProfileList.tsx:753
|
||||
msgid "Add"
|
||||
msgstr "ऐड करो"
|
||||
|
||||
@@ -103,7 +103,7 @@ msgstr "ऐड करो"
|
||||
msgid "Add a content warning"
|
||||
msgstr "सामग्री चेतावनी जोड़ें"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:773
|
||||
#: src/view/screens/ProfileList.tsx:743
|
||||
msgid "Add a user to this list"
|
||||
msgstr "इस सूची में किसी को जोड़ें"
|
||||
|
||||
@@ -142,7 +142,7 @@ msgstr "अपने डोमेन में निम्नलिखित DN
|
||||
msgid "Add to Lists"
|
||||
msgstr "सूचियों में जोड़ें"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:280
|
||||
#: src/view/screens/ProfileFeed.tsx:275
|
||||
msgid "Add to my feeds"
|
||||
msgstr "इस फ़ीड को सहेजें"
|
||||
|
||||
@@ -228,7 +228,7 @@ msgstr "क्या आप वाकई ऐप पासवर्ड \"{name}\"
|
||||
msgid "Are you sure you'd like to discard this draft?"
|
||||
msgstr "क्या आप वाकई इस ड्राफ्ट को हटाना करना चाहेंगे?"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:375
|
||||
#: src/view/screens/ProfileList.tsx:351
|
||||
msgid "Are you sure?"
|
||||
msgstr "क्या आप वास्तव में इसे करना चाहते हैं?"
|
||||
|
||||
@@ -250,9 +250,9 @@ msgstr "कलात्मक या गैर-कामुक नग्नत
|
||||
#: src/view/com/auth/login/LoginForm.tsx:249
|
||||
#: src/view/com/auth/login/SetNewPasswordForm.tsx:148
|
||||
#: src/view/com/modals/report/InputIssueDetails.tsx:45
|
||||
#: src/view/com/post-thread/PostThread.tsx:392
|
||||
#: src/view/com/post-thread/PostThread.tsx:442
|
||||
#: src/view/com/post-thread/PostThread.tsx:450
|
||||
#: src/view/com/post-thread/PostThread.tsx:395
|
||||
#: src/view/com/post-thread/PostThread.tsx:445
|
||||
#: src/view/com/post-thread/PostThread.tsx:453
|
||||
#: src/view/com/profile/ProfileHeader.tsx:672
|
||||
msgid "Back"
|
||||
msgstr "वापस"
|
||||
@@ -275,15 +275,15 @@ msgstr "जन्मदिन:"
|
||||
msgid "Block Account"
|
||||
msgstr "खाता ब्लॉक करें"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:545
|
||||
#: src/view/screens/ProfileList.tsx:521
|
||||
msgid "Block accounts"
|
||||
msgstr "खाता ब्लॉक करें"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:495
|
||||
#: src/view/screens/ProfileList.tsx:471
|
||||
msgid "Block list"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:330
|
||||
#: src/view/screens/ProfileList.tsx:306
|
||||
msgid "Block these accounts?"
|
||||
msgstr "खाता ब्लॉक करें?"
|
||||
|
||||
@@ -303,14 +303,19 @@ msgstr "अवरुद्ध खाते आपके थ्रेड्स
|
||||
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
|
||||
msgstr "अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते। आप उनकी सामग्री नहीं देख पाएंगे और उन्हें आपकी सामग्री देखने से रोका जाएगा।"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:248
|
||||
#: src/view/com/post-thread/PostThread.tsx:251
|
||||
msgid "Blocked post."
|
||||
msgstr "ब्लॉक पोस्ट।"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:332
|
||||
#: src/view/screens/ProfileList.tsx:308
|
||||
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
|
||||
msgstr "अवरोधन सार्वजनिक है. अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते।"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
|
||||
msgid "Blog"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
|
||||
#: src/view/com/auth/SplashScreen.tsx:26
|
||||
msgid "Bluesky"
|
||||
msgstr "Bluesky"
|
||||
@@ -343,6 +348,10 @@ msgstr "Bluesky.Social"
|
||||
msgid "Build version {0} {1}"
|
||||
msgstr "Build version {0} {1}"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
|
||||
msgid "Business"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
|
||||
#: src/view/com/util/UserAvatar.tsx:221
|
||||
#: src/view/com/util/UserBanner.tsx:38
|
||||
@@ -368,7 +377,7 @@ msgstr "केवल अक्षर, संख्या, रिक्त स्
|
||||
#: src/view/com/modals/LinkWarning.tsx:85
|
||||
#: src/view/com/modals/Repost.tsx:73
|
||||
#: src/view/com/modals/Waitlist.tsx:136
|
||||
#: src/view/screens/Search/Search.tsx:558
|
||||
#: src/view/screens/Search/Search.tsx:592
|
||||
#: src/view/shell/desktop/Search.tsx:182
|
||||
msgid "Cancel"
|
||||
msgstr "कैंसिल"
|
||||
@@ -469,7 +478,7 @@ msgid "Clear all storage data (restart after this)"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/forms/SearchInput.tsx:73
|
||||
#: src/view/screens/Search/Search.tsx:543
|
||||
#: src/view/screens/Search/Search.tsx:577
|
||||
msgid "Clear search query"
|
||||
msgstr "खोज क्वेरी साफ़ करें"
|
||||
|
||||
@@ -547,7 +556,7 @@ msgstr "सामग्री फ़िल्टरिंग"
|
||||
msgid "Content Languages"
|
||||
msgstr "सामग्री भाषा"
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:69
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:78
|
||||
msgid "Content Warning"
|
||||
msgstr "सामग्री चेतावनी"
|
||||
|
||||
@@ -569,7 +578,7 @@ msgstr "कॉपी कर ली"
|
||||
msgid "Copy"
|
||||
msgstr "कॉपी"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:407
|
||||
#: src/view/screens/ProfileList.tsx:383
|
||||
msgid "Copy link to list"
|
||||
msgstr ""
|
||||
|
||||
@@ -589,14 +598,15 @@ msgstr "पोस्ट टेक्स्ट कॉपी करें"
|
||||
msgid "Copyright Policy"
|
||||
msgstr "कॉपीराइट नीति"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:103
|
||||
#: src/view/screens/ProfileFeed.tsx:98
|
||||
msgid "Could not load feed"
|
||||
msgstr "फ़ीड लोड नहीं कर सकता"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:860
|
||||
#: src/view/screens/ProfileList.tsx:829
|
||||
msgid "Could not load list"
|
||||
msgstr "सूची लोड नहीं कर सकता"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
|
||||
#: src/view/com/auth/SplashScreen.tsx:41
|
||||
msgid "Create a new account"
|
||||
msgstr "नया खाता बनाएं"
|
||||
@@ -605,6 +615,7 @@ msgstr "नया खाता बनाएं"
|
||||
msgid "Create Account"
|
||||
msgstr "खाता बनाएँ"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
|
||||
#: src/view/com/auth/SplashScreen.tsx:38
|
||||
msgid "Create new account"
|
||||
msgstr "नया खाता बनाएं"
|
||||
@@ -639,8 +650,8 @@ msgstr "खाता हटाएं"
|
||||
msgid "Delete app password"
|
||||
msgstr "अप्प पासवर्ड हटाएं"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:374
|
||||
#: src/view/screens/ProfileList.tsx:434
|
||||
#: src/view/screens/ProfileList.tsx:350
|
||||
#: src/view/screens/ProfileList.tsx:410
|
||||
msgid "Delete List"
|
||||
msgstr "सूची हटाएँ"
|
||||
|
||||
@@ -660,7 +671,7 @@ msgstr "पोस्ट को हटाएं"
|
||||
msgid "Delete this post?"
|
||||
msgstr "इस पोस्ट को डीलीट करें?"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:240
|
||||
#: src/view/com/post-thread/PostThread.tsx:243
|
||||
msgid "Deleted post."
|
||||
msgstr "यह पोस्ट मिटाई जा चुकी है"
|
||||
|
||||
@@ -735,7 +746,7 @@ msgstr "प्रत्येक कोड एक बार काम करत
|
||||
msgid "Edit image"
|
||||
msgstr "छवि संपादित करें"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:422
|
||||
#: src/view/screens/ProfileList.tsx:398
|
||||
msgid "Edit list details"
|
||||
msgstr "सूची विवरण संपादित करें"
|
||||
|
||||
@@ -783,7 +794,7 @@ msgstr "ईमेल:"
|
||||
msgid "Enable this setting to only see replies between people you follow."
|
||||
msgstr "इस सेटिंग को केवल उन लोगों के बीच जवाब देखने में सक्षम करें जिन्हें आप फॉलो करते हैं।।"
|
||||
|
||||
#: src/view/screens/Profile.tsx:471
|
||||
#: src/view/screens/Profile.tsx:425
|
||||
msgid "End of feed"
|
||||
msgstr ""
|
||||
|
||||
@@ -811,7 +822,7 @@ msgstr "नीचे अपना नया ईमेल पता दर्ज
|
||||
msgid "Enter your username and password"
|
||||
msgstr "अपने यूज़रनेम और पासवर्ड दर्ज करें"
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:105
|
||||
#: src/view/screens/Search/Search.tsx:106
|
||||
msgid "Error:"
|
||||
msgstr ""
|
||||
|
||||
@@ -832,7 +843,7 @@ msgstr "अनुशंसित फ़ीड लोड करने में
|
||||
msgid "Feed offline"
|
||||
msgstr "फ़ीड ऑफ़लाइन है"
|
||||
|
||||
#: src/view/com/feeds/FeedPage.tsx:140
|
||||
#: src/view/com/feeds/FeedPage.tsx:143
|
||||
msgid "Feed Preferences"
|
||||
msgstr "फ़ीड प्राथमिकता"
|
||||
|
||||
@@ -843,8 +854,8 @@ msgstr "प्रतिक्रिया"
|
||||
|
||||
#: src/view/screens/Feeds.tsx:475
|
||||
#: src/view/screens/Profile.tsx:164
|
||||
#: src/view/shell/bottom-bar/BottomBar.tsx:160
|
||||
#: src/view/shell/desktop/LeftNav.tsx:333
|
||||
#: src/view/shell/bottom-bar/BottomBar.tsx:163
|
||||
#: src/view/shell/desktop/LeftNav.tsx:335
|
||||
#: src/view/shell/Drawer.tsx:455
|
||||
#: src/view/shell/Drawer.tsx:456
|
||||
msgid "Feeds"
|
||||
@@ -858,6 +869,14 @@ msgstr "सामग्री को व्यवस्थित करने
|
||||
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
|
||||
msgstr "फ़ीड कस्टम एल्गोरिदम हैं जिन्हें उपयोगकर्ता थोड़ी कोडिंग विशेषज्ञता के साथ बनाते हैं। <0/> अधिक जानकारी के लिए."
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:422
|
||||
msgid "Find users on Bluesky"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:420
|
||||
msgid "Find users with the search tool on the right"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
|
||||
msgid "Finding similar accounts..."
|
||||
msgstr "मिलते-जुलते खाते ढूँढना"
|
||||
@@ -932,17 +951,17 @@ msgstr "गैलरी"
|
||||
msgid "Get Started"
|
||||
msgstr "प्रारंभ करें"
|
||||
|
||||
#: src/view/com/auth/LoggedOut.tsx:68
|
||||
#: src/view/com/auth/LoggedOut.tsx:69
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:105
|
||||
#: src/view/com/auth/LoggedOut.tsx:70
|
||||
#: src/view/com/auth/LoggedOut.tsx:71
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:123
|
||||
#: src/view/shell/desktop/LeftNav.tsx:103
|
||||
msgid "Go back"
|
||||
msgstr "वापस जाओ"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:107
|
||||
#: src/view/screens/ProfileFeed.tsx:112
|
||||
#: src/view/screens/ProfileFeed.tsx:117
|
||||
#: src/view/screens/ProfileList.tsx:869
|
||||
#: src/view/screens/ProfileList.tsx:874
|
||||
#: src/view/screens/ProfileList.tsx:838
|
||||
#: src/view/screens/ProfileList.tsx:843
|
||||
msgid "Go Back"
|
||||
msgstr "वापस जाओ"
|
||||
|
||||
@@ -966,6 +985,7 @@ msgid "Here is your app password."
|
||||
msgstr "यहां आपका ऐप पासवर्ड है."
|
||||
|
||||
#: src/view/com/notifications/FeedItem.tsx:316
|
||||
#: src/view/com/util/moderation/ContentHider.tsx:103
|
||||
msgid "Hide"
|
||||
msgstr "इसे छिपाएं"
|
||||
|
||||
@@ -1074,6 +1094,10 @@ msgstr ""
|
||||
msgid "Invite codes: {invitesAvailable} available"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/modals/Waitlist.tsx:67
|
||||
msgid "Join the waitlist"
|
||||
msgstr "प्रतीक्षा सूची में शामिल हों"
|
||||
@@ -1099,9 +1123,13 @@ msgstr "भाषा सेटिंग्स"
|
||||
msgid "Languages"
|
||||
msgstr "भाषा"
|
||||
|
||||
#: src/view/com/util/moderation/ContentHider.tsx:101
|
||||
msgid "Learn more"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/PostAlerts.tsx:47
|
||||
#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:88
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:104
|
||||
msgid "Learn More"
|
||||
msgstr "अधिक जानें"
|
||||
|
||||
@@ -1109,7 +1137,7 @@ msgstr "अधिक जानें"
|
||||
#: src/view/com/util/moderation/PostAlerts.tsx:40
|
||||
#: src/view/com/util/moderation/PostHider.tsx:76
|
||||
#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:85
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:101
|
||||
msgid "Learn more about this warning"
|
||||
msgstr "इस चेतावनी के बारे में अधिक जानें"
|
||||
|
||||
@@ -1139,7 +1167,7 @@ msgstr "चित्र पुस्तकालय"
|
||||
#~ msgid "Light"
|
||||
#~ msgstr "लाइट मोड"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:643
|
||||
#: src/view/screens/ProfileFeed.tsx:627
|
||||
msgid "Like this feed"
|
||||
msgstr "इस फ़ीड को लाइक करो"
|
||||
|
||||
@@ -1169,22 +1197,22 @@ msgid "List Name"
|
||||
msgstr "सूची का नाम"
|
||||
|
||||
#: src/view/screens/Profile.tsx:165
|
||||
#: src/view/shell/desktop/LeftNav.tsx:373
|
||||
#: src/view/shell/desktop/LeftNav.tsx:372
|
||||
#: src/view/shell/Drawer.tsx:471
|
||||
#: src/view/shell/Drawer.tsx:472
|
||||
msgid "Lists"
|
||||
msgstr "सूची"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:257
|
||||
#: src/view/com/post-thread/PostThread.tsx:265
|
||||
#: src/view/com/post-thread/PostThread.tsx:260
|
||||
#: src/view/com/post-thread/PostThread.tsx:268
|
||||
msgid "Load more posts"
|
||||
msgstr "अधिक पोस्ट लोड करें"
|
||||
|
||||
#: src/view/screens/Notifications.tsx:141
|
||||
#: src/view/screens/Notifications.tsx:144
|
||||
msgid "Load new notifications"
|
||||
msgstr "नई सूचनाएं लोड करें"
|
||||
|
||||
#: src/view/com/feeds/FeedPage.tsx:185
|
||||
#: src/view/com/feeds/FeedPage.tsx:189
|
||||
msgid "Load new posts"
|
||||
msgstr "नई पोस्ट लोड करें"
|
||||
|
||||
@@ -1208,7 +1236,7 @@ msgstr ""
|
||||
msgid "Login to account that is not listed"
|
||||
msgstr "उस खाते में लॉग इन करें जो सूचीबद्ध नहीं है"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:482
|
||||
#: src/view/screens/ProfileFeed.tsx:472
|
||||
msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!"
|
||||
msgstr ""
|
||||
|
||||
@@ -1228,18 +1256,18 @@ msgstr ""
|
||||
msgid "Mentioned users"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:503
|
||||
#: src/view/screens/Search/Search.tsx:537
|
||||
msgid "Menu"
|
||||
msgstr "मेनू"
|
||||
|
||||
#: src/view/com/posts/FeedErrorMessage.tsx:194
|
||||
#: src/view/screens/ProfileFeed.tsx:490
|
||||
#: src/view/screens/ProfileFeed.tsx:480
|
||||
msgid "Message from server"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Moderation.tsx:64
|
||||
#: src/view/screens/Settings.tsx:563
|
||||
#: src/view/shell/desktop/LeftNav.tsx:391
|
||||
#: src/view/shell/desktop/LeftNav.tsx:390
|
||||
#: src/view/shell/Drawer.tsx:490
|
||||
#: src/view/shell/Drawer.tsx:491
|
||||
msgid "Moderation"
|
||||
@@ -1258,8 +1286,8 @@ msgid "More feeds"
|
||||
msgstr "अधिक फ़ीड"
|
||||
|
||||
#: src/view/com/profile/ProfileHeader.tsx:548
|
||||
#: src/view/screens/ProfileFeed.tsx:370
|
||||
#: src/view/screens/ProfileList.tsx:606
|
||||
#: src/view/screens/ProfileFeed.tsx:365
|
||||
#: src/view/screens/ProfileList.tsx:582
|
||||
msgid "More options"
|
||||
msgstr "अधिक विकल्प"
|
||||
|
||||
@@ -1271,15 +1299,15 @@ msgstr "अधिक विकल्प"
|
||||
msgid "Mute Account"
|
||||
msgstr "खाता म्यूट करें"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:533
|
||||
#: src/view/screens/ProfileList.tsx:509
|
||||
msgid "Mute accounts"
|
||||
msgstr "खातों को म्यूट करें"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:480
|
||||
#: src/view/screens/ProfileList.tsx:456
|
||||
msgid "Mute list"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:293
|
||||
#: src/view/screens/ProfileList.tsx:269
|
||||
msgid "Mute these accounts?"
|
||||
msgstr "इन खातों को म्यूट करें?"
|
||||
|
||||
@@ -1299,7 +1327,7 @@ msgstr "म्यूट किए गए खाते"
|
||||
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
|
||||
msgstr "म्यूट किए गए खातों की पोस्ट आपके फ़ीड और आपकी सूचनाओं से हटा दी जाती हैं। म्यूट पूरी तरह से निजी हैं."
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:295
|
||||
#: src/view/screens/ProfileList.tsx:271
|
||||
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
|
||||
msgstr "म्यूट करना निजी है. म्यूट किए गए खाते आपके साथ इंटरैक्ट कर सकते हैं, लेकिन आप उनकी पोस्ट नहीं देखेंगे या उनसे सूचनाएं प्राप्त नहीं करेंगे।"
|
||||
|
||||
@@ -1337,12 +1365,12 @@ msgstr "अपने फ़ॉलोअर्स और डेटा तक प
|
||||
msgid "New"
|
||||
msgstr "नया"
|
||||
|
||||
#: src/view/com/feeds/FeedPage.tsx:196
|
||||
#: src/view/com/feeds/FeedPage.tsx:200
|
||||
#: src/view/screens/Feeds.tsx:510
|
||||
#: src/view/screens/Profile.tsx:389
|
||||
#: src/view/screens/ProfileFeed.tsx:451
|
||||
#: src/view/screens/ProfileList.tsx:212
|
||||
#: src/view/screens/ProfileList.tsx:244
|
||||
#: src/view/screens/Profile.tsx:353
|
||||
#: src/view/screens/ProfileFeed.tsx:441
|
||||
#: src/view/screens/ProfileList.tsx:192
|
||||
#: src/view/screens/ProfileList.tsx:220
|
||||
#: src/view/shell/desktop/LeftNav.tsx:246
|
||||
msgid "New post"
|
||||
msgstr "नई पोस्ट"
|
||||
@@ -1371,8 +1399,8 @@ msgstr "अगली फोटो"
|
||||
msgid "No"
|
||||
msgstr "नहीं"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:636
|
||||
#: src/view/screens/ProfileList.tsx:740
|
||||
#: src/view/screens/ProfileFeed.tsx:620
|
||||
#: src/view/screens/ProfileList.tsx:710
|
||||
msgid "No description"
|
||||
msgstr "कोई विवरण नहीं"
|
||||
|
||||
@@ -1390,9 +1418,9 @@ msgstr "\"{query}\" के लिए कोई परिणाम नहीं
|
||||
#~ msgstr "{0} के लिए कोई परिणाम नहीं मिला"
|
||||
|
||||
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
|
||||
#: src/view/screens/Search/Search.tsx:270
|
||||
#: src/view/screens/Search/Search.tsx:298
|
||||
#: src/view/screens/Search/Search.tsx:581
|
||||
#: src/view/screens/Search/Search.tsx:271
|
||||
#: src/view/screens/Search/Search.tsx:299
|
||||
#: src/view/screens/Search/Search.tsx:615
|
||||
#: src/view/shell/desktop/Search.tsx:210
|
||||
msgid "No results found for {query}"
|
||||
msgstr ""
|
||||
@@ -1421,10 +1449,10 @@ msgstr ""
|
||||
#~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting."
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/view/screens/Notifications.tsx:108
|
||||
#: src/view/screens/Notifications.tsx:132
|
||||
#: src/view/screens/Notifications.tsx:109
|
||||
#: src/view/screens/Notifications.tsx:133
|
||||
#: src/view/shell/bottom-bar/BottomBar.tsx:187
|
||||
#: src/view/shell/desktop/LeftNav.tsx:355
|
||||
#: src/view/shell/desktop/LeftNav.tsx:354
|
||||
#: src/view/shell/Drawer.tsx:416
|
||||
#: src/view/shell/Drawer.tsx:417
|
||||
msgid "Notifications"
|
||||
@@ -1562,12 +1590,12 @@ msgid "Please tell us why you think this decision was incorrect."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/composer/Composer.tsx:331
|
||||
#: src/view/com/post-thread/PostThread.tsx:223
|
||||
#: src/view/com/post-thread/PostThread.tsx:226
|
||||
#: src/view/screens/PostThread.tsx:78
|
||||
msgid "Post"
|
||||
msgstr "पोस्ट"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:382
|
||||
#: src/view/com/post-thread/PostThread.tsx:385
|
||||
msgid "Post hidden"
|
||||
msgstr "छुपा पोस्ट"
|
||||
|
||||
@@ -1579,7 +1607,7 @@ msgstr "पोस्ट भाषा"
|
||||
msgid "Post Languages"
|
||||
msgstr "पोस्ट भाषा"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:434
|
||||
#: src/view/com/post-thread/PostThread.tsx:437
|
||||
msgid "Post not found"
|
||||
msgstr "पोस्ट नहीं मिला"
|
||||
|
||||
@@ -1682,7 +1710,7 @@ msgstr "फ़ीड हटाएँ"
|
||||
|
||||
#: src/view/com/feeds/FeedSourceCard.tsx:105
|
||||
#: src/view/com/feeds/FeedSourceCard.tsx:172
|
||||
#: src/view/screens/ProfileFeed.tsx:280
|
||||
#: src/view/screens/ProfileFeed.tsx:275
|
||||
msgid "Remove from my feeds"
|
||||
msgstr "मेरे फ़ीड से हटाएँ"
|
||||
|
||||
@@ -1727,11 +1755,11 @@ msgstr "रिपोर्ट {collectionName}"
|
||||
msgid "Report Account"
|
||||
msgstr "रिपोर्ट"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:300
|
||||
#: src/view/screens/ProfileFeed.tsx:295
|
||||
msgid "Report feed"
|
||||
msgstr "रिपोर्ट फ़ीड"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:448
|
||||
#: src/view/screens/ProfileList.tsx:424
|
||||
msgid "Report List"
|
||||
msgstr "रिपोर्ट सूची"
|
||||
|
||||
@@ -1843,8 +1871,8 @@ msgstr "सहेजे गए फ़ीड"
|
||||
|
||||
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
|
||||
#: src/view/com/util/forms/SearchInput.tsx:64
|
||||
#: src/view/screens/Search/Search.tsx:381
|
||||
#: src/view/screens/Search/Search.tsx:533
|
||||
#: src/view/screens/Search/Search.tsx:401
|
||||
#: src/view/screens/Search/Search.tsx:567
|
||||
#: src/view/shell/bottom-bar/BottomBar.tsx:138
|
||||
#: src/view/shell/desktop/LeftNav.tsx:315
|
||||
#: src/view/shell/desktop/Search.tsx:161
|
||||
@@ -1855,13 +1883,14 @@ msgid "Search"
|
||||
msgstr "खोज"
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:390
|
||||
msgid "Search for posts and users."
|
||||
msgstr ""
|
||||
#~ msgid "Search for posts and users."
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/view/com/modals/ChangeEmail.tsx:110
|
||||
msgid "Security Step Required"
|
||||
msgstr "सुरक्षा चरण आवश्यक"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
|
||||
#: src/view/com/auth/SplashScreen.tsx:29
|
||||
msgid "See what's next"
|
||||
msgstr "आगे क्या है"
|
||||
@@ -1936,7 +1965,7 @@ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your f
|
||||
msgstr "इस सेटिंग को अपने निम्नलिखित फ़ीड में अपने सहेजे गए फ़ीड के नमूने दिखाने के लिए \"हाँ\" पर सेट करें। यह एक प्रयोगात्मक विशेषता है।।"
|
||||
|
||||
#: src/view/screens/Settings.tsx:277
|
||||
#: src/view/shell/desktop/LeftNav.tsx:427
|
||||
#: src/view/shell/desktop/LeftNav.tsx:426
|
||||
#: src/view/shell/Drawer.tsx:546
|
||||
#: src/view/shell/Drawer.tsx:547
|
||||
msgid "Settings"
|
||||
@@ -1948,11 +1977,11 @@ msgstr "यौन गतिविधि या कामुक नग्नत
|
||||
|
||||
#: src/view/com/profile/ProfileHeader.tsx:338
|
||||
#: src/view/com/util/forms/PostDropdownBtn.tsx:129
|
||||
#: src/view/screens/ProfileList.tsx:407
|
||||
#: src/view/screens/ProfileList.tsx:383
|
||||
msgid "Share"
|
||||
msgstr "शेयर"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:312
|
||||
#: src/view/screens/ProfileFeed.tsx:307
|
||||
msgid "Share feed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1960,11 +1989,12 @@ msgstr ""
|
||||
#~ msgid "Share link"
|
||||
#~ msgstr "लिंक शेयर करें"
|
||||
|
||||
#: src/view/com/util/moderation/ContentHider.tsx:105
|
||||
#: src/view/screens/Settings.tsx:316
|
||||
msgid "Show"
|
||||
msgstr "दिखाओ"
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:114
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:132
|
||||
msgid "Show anyway"
|
||||
msgstr "दिखाओ"
|
||||
|
||||
@@ -1992,13 +2022,15 @@ msgstr "रीपोस्ट दिखाएँ"
|
||||
msgid "Show users"
|
||||
msgstr "लोग दिखाएँ"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
|
||||
#: src/view/com/auth/login/Login.tsx:98
|
||||
#: src/view/com/auth/SplashScreen.tsx:49
|
||||
#: src/view/shell/NavSignupCard.tsx:52
|
||||
#: src/view/shell/NavSignupCard.tsx:53
|
||||
#: src/view/shell/NavSignupCard.tsx:58
|
||||
#: src/view/shell/NavSignupCard.tsx:59
|
||||
msgid "Sign in"
|
||||
msgstr "साइन इन करें"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
|
||||
#: src/view/com/auth/SplashScreen.tsx:52
|
||||
#: src/view/com/auth/SplashScreen.web.tsx:84
|
||||
msgid "Sign In"
|
||||
@@ -2022,16 +2054,20 @@ msgstr "साइन इन करें"
|
||||
msgid "Sign out"
|
||||
msgstr "साइन आउट"
|
||||
|
||||
#: src/view/shell/NavSignupCard.tsx:43
|
||||
#: src/view/shell/NavSignupCard.tsx:44
|
||||
#: src/view/shell/NavSignupCard.tsx:46
|
||||
#: src/view/shell/NavSignupCard.tsx:49
|
||||
#: src/view/shell/NavSignupCard.tsx:50
|
||||
#: src/view/shell/NavSignupCard.tsx:52
|
||||
msgid "Sign up"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/shell/NavSignupCard.tsx:36
|
||||
#: src/view/shell/NavSignupCard.tsx:42
|
||||
msgid "Sign up or sign in to join the conversation"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:76
|
||||
msgid "Sign-in Required"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Settings.tsx:327
|
||||
msgid "Signed in as"
|
||||
msgstr "आपने इस रूप में साइन इन करा है:"
|
||||
@@ -2069,15 +2105,15 @@ msgstr "Storybook"
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:597
|
||||
#: src/view/screens/ProfileList.tsx:573
|
||||
msgid "Subscribe"
|
||||
msgstr "सब्सक्राइब"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:593
|
||||
#: src/view/screens/ProfileList.tsx:569
|
||||
msgid "Subscribe to this list"
|
||||
msgstr "इस सूची को सब्सक्राइब करें"
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:354
|
||||
#: src/view/screens/Search/Search.tsx:357
|
||||
msgid "Suggested Follows"
|
||||
msgstr "अनुशंसित लोग"
|
||||
|
||||
@@ -2127,7 +2163,7 @@ msgstr "सामुदायिक दिशानिर्देशों क
|
||||
msgid "The Copyright Policy has been moved to <0/>"
|
||||
msgstr "कॉपीराइट नीति को <0/> पर स्थानांतरित कर दिया गया है"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:437
|
||||
#: src/view/com/post-thread/PostThread.tsx:440
|
||||
msgid "The post may have been deleted."
|
||||
msgstr "हो सकता है कि यह पोस्ट हटा दी गई हो।"
|
||||
|
||||
@@ -2151,10 +2187,14 @@ msgstr "एप्लिकेशन में एक अप्रत्याश
|
||||
msgid "This {0} has been labeled."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:72
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:88
|
||||
msgid "This {screenDescription} has been flagged:"
|
||||
msgstr "यह {screenDescription} फ्लैग किया गया है:"
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:83
|
||||
msgid "This account has requested that users sign in to view their profile."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/posts/FeedErrorMessage.tsx:107
|
||||
msgid "This content is not viewable without a Bluesky account."
|
||||
msgstr ""
|
||||
@@ -2214,11 +2254,11 @@ msgstr "अनुवाद"
|
||||
msgid "Try again"
|
||||
msgstr "फिर से कोशिश करो"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:495
|
||||
#: src/view/screens/ProfileList.tsx:471
|
||||
msgid "Un-block list"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:480
|
||||
#: src/view/screens/ProfileList.tsx:456
|
||||
msgid "Un-mute list"
|
||||
msgstr ""
|
||||
|
||||
@@ -2254,7 +2294,7 @@ msgstr "अनम्यूट खाता"
|
||||
msgid "Unmute thread"
|
||||
msgstr "थ्रेड को अनम्यूट करें"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:463
|
||||
#: src/view/screens/ProfileList.tsx:439
|
||||
msgid "Unpin moderation list"
|
||||
msgstr ""
|
||||
|
||||
@@ -2303,7 +2343,7 @@ msgstr "लोग सूचियाँ"
|
||||
msgid "Username or email address"
|
||||
msgstr "यूजर नाम या ईमेल पता"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:767
|
||||
#: src/view/screens/ProfileList.tsx:737
|
||||
msgid "Users"
|
||||
msgstr "यूजर लोग"
|
||||
|
||||
@@ -2360,7 +2400,7 @@ msgstr "हम आपके हमारी सेवा में शामि
|
||||
#~ msgid "We're sorry, but this feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:237
|
||||
#: src/view/screens/Search/Search.tsx:238
|
||||
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
|
||||
msgstr ""
|
||||
|
||||
@@ -2436,16 +2476,16 @@ msgstr ""
|
||||
msgid "You don't have any saved feeds."
|
||||
msgstr "आपके पास कोई सहेजी गई फ़ीड नहीं है."
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:385
|
||||
#: src/view/com/post-thread/PostThread.tsx:388
|
||||
msgid "You have blocked the author or you have been blocked by the author."
|
||||
msgstr "आपने लेखक को अवरुद्ध किया है या आपने लेखक द्वारा अवरुद्ध किया है।।"
|
||||
|
||||
#: src/view/com/feeds/ProfileFeedgens.tsx:154
|
||||
#: src/view/com/feeds/ProfileFeedgens.tsx:141
|
||||
msgid "You have no feeds."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/lists/MyLists.tsx:89
|
||||
#: src/view/com/lists/ProfileLists.tsx:158
|
||||
#: src/view/com/lists/ProfileLists.tsx:145
|
||||
msgid "You have no lists."
|
||||
msgstr "आपके पास कोई सूची नहीं है।।"
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ msgstr ""
|
||||
msgid "{invitesAvailable} invite codes available"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:87
|
||||
#: src/view/screens/Search/Search.tsx:88
|
||||
msgid "{message}"
|
||||
msgstr "{message}"
|
||||
|
||||
@@ -75,7 +75,7 @@ msgstr "アカウントオプション"
|
||||
|
||||
#: src/view/com/modals/ListAddRemoveUsers.tsx:264
|
||||
#: src/view/com/modals/UserAddRemoveLists.tsx:193
|
||||
#: src/view/screens/ProfileList.tsx:783
|
||||
#: src/view/screens/ProfileList.tsx:753
|
||||
msgid "Add"
|
||||
msgstr "追加"
|
||||
|
||||
@@ -83,7 +83,7 @@ msgstr "追加"
|
||||
msgid "Add a content warning"
|
||||
msgstr "コンテンツ警告を追加"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:773
|
||||
#: src/view/screens/ProfileList.tsx:743
|
||||
msgid "Add a user to this list"
|
||||
msgstr "リストにユーザーを追加"
|
||||
|
||||
@@ -122,7 +122,7 @@ msgstr "次のDNSレコードをドメインに追加してください:"
|
||||
msgid "Add to Lists"
|
||||
msgstr "リストに追加"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:280
|
||||
#: src/view/screens/ProfileFeed.tsx:275
|
||||
msgid "Add to my feeds"
|
||||
msgstr "マイフィードに追加"
|
||||
|
||||
@@ -204,7 +204,7 @@ msgstr "本当にアプリパスワード「{name}」を削除しますか?"
|
||||
msgid "Are you sure you'd like to discard this draft?"
|
||||
msgstr "本当にこの下書きを破棄しますか?"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:375
|
||||
#: src/view/screens/ProfileList.tsx:351
|
||||
msgid "Are you sure?"
|
||||
msgstr "本当ですか?"
|
||||
|
||||
@@ -222,9 +222,9 @@ msgstr "芸術的または非エロティックなヌード。"
|
||||
#: src/view/com/auth/login/LoginForm.tsx:249
|
||||
#: src/view/com/auth/login/SetNewPasswordForm.tsx:148
|
||||
#: src/view/com/modals/report/InputIssueDetails.tsx:45
|
||||
#: src/view/com/post-thread/PostThread.tsx:392
|
||||
#: src/view/com/post-thread/PostThread.tsx:442
|
||||
#: src/view/com/post-thread/PostThread.tsx:450
|
||||
#: src/view/com/post-thread/PostThread.tsx:395
|
||||
#: src/view/com/post-thread/PostThread.tsx:445
|
||||
#: src/view/com/post-thread/PostThread.tsx:453
|
||||
#: src/view/com/profile/ProfileHeader.tsx:672
|
||||
msgid "Back"
|
||||
msgstr "戻る"
|
||||
@@ -247,15 +247,15 @@ msgstr "誕生日:"
|
||||
msgid "Block Account"
|
||||
msgstr "アカウントのブロック"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:545
|
||||
#: src/view/screens/ProfileList.tsx:521
|
||||
msgid "Block accounts"
|
||||
msgstr "アカウントのブロック"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:495
|
||||
#: src/view/screens/ProfileList.tsx:471
|
||||
msgid "Block list"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:330
|
||||
#: src/view/screens/ProfileList.tsx:306
|
||||
msgid "Block these accounts?"
|
||||
msgstr "これらのアカウントをブロックしますか?"
|
||||
|
||||
@@ -275,14 +275,19 @@ msgstr "ブロックされたアカウントは、スレッド内で返信した
|
||||
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
|
||||
msgstr "ブロックされたアカウントは、スレッド内で返信したり、ユーザーに言及したり、その他の方法でユーザーとやり取りすることはできません。あなたは相手のコンテンツを見ることができず、相手はあなたのコンテンツを見ることができなくなります。"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:248
|
||||
#: src/view/com/post-thread/PostThread.tsx:251
|
||||
msgid "Blocked post."
|
||||
msgstr "投稿をブロックしました。"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:332
|
||||
#: src/view/screens/ProfileList.tsx:308
|
||||
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
|
||||
msgstr "ブロックは公開されます。ブロックされたアカウントは、スレッド内で返信したり、ユーザーに言及したり、その他の方法でユーザーとやり取りすることはできません。"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
|
||||
msgid "Blog"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
|
||||
#: src/view/com/auth/SplashScreen.tsx:26
|
||||
msgid "Bluesky"
|
||||
msgstr "Bluesky"
|
||||
@@ -315,6 +320,10 @@ msgstr "Bluesky.Social"
|
||||
msgid "Build version {0} {1}"
|
||||
msgstr "ビルドバージョン {0} {1}"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
|
||||
msgid "Business"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
|
||||
#: src/view/com/util/UserAvatar.tsx:221
|
||||
#: src/view/com/util/UserBanner.tsx:38
|
||||
@@ -340,7 +349,7 @@ msgstr "文字、数字、スペース、ハイフン、およびアンダース
|
||||
#: src/view/com/modals/LinkWarning.tsx:85
|
||||
#: src/view/com/modals/Repost.tsx:73
|
||||
#: src/view/com/modals/Waitlist.tsx:136
|
||||
#: src/view/screens/Search/Search.tsx:558
|
||||
#: src/view/screens/Search/Search.tsx:592
|
||||
#: src/view/shell/desktop/Search.tsx:182
|
||||
msgid "Cancel"
|
||||
msgstr "キャンセル"
|
||||
@@ -441,7 +450,7 @@ msgid "Clear all storage data (restart after this)"
|
||||
msgstr "すべてのストレージデータをクリア(この後再起動)"
|
||||
|
||||
#: src/view/com/util/forms/SearchInput.tsx:73
|
||||
#: src/view/screens/Search/Search.tsx:543
|
||||
#: src/view/screens/Search/Search.tsx:577
|
||||
msgid "Clear search query"
|
||||
msgstr "検索クエリをクリア"
|
||||
|
||||
@@ -519,7 +528,7 @@ msgstr "コンテンツフィルタリング"
|
||||
msgid "Content Languages"
|
||||
msgstr "コンテンツ言語"
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:69
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:78
|
||||
msgid "Content Warning"
|
||||
msgstr "コンテンツ警告"
|
||||
|
||||
@@ -541,7 +550,7 @@ msgstr "コピー済み"
|
||||
msgid "Copy"
|
||||
msgstr "コピー"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:407
|
||||
#: src/view/screens/ProfileList.tsx:383
|
||||
msgid "Copy link to list"
|
||||
msgstr ""
|
||||
|
||||
@@ -561,14 +570,15 @@ msgstr "投稿テキストをコピー"
|
||||
msgid "Copyright Policy"
|
||||
msgstr "著作権ポリシー"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:103
|
||||
#: src/view/screens/ProfileFeed.tsx:98
|
||||
msgid "Could not load feed"
|
||||
msgstr "フィードのロードに失敗"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:860
|
||||
#: src/view/screens/ProfileList.tsx:829
|
||||
msgid "Could not load list"
|
||||
msgstr "リストのロードに失敗"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
|
||||
#: src/view/com/auth/SplashScreen.tsx:41
|
||||
msgid "Create a new account"
|
||||
msgstr "新しいアカウントを作成"
|
||||
@@ -577,6 +587,7 @@ msgstr "新しいアカウントを作成"
|
||||
msgid "Create Account"
|
||||
msgstr "アカウントを作成"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
|
||||
#: src/view/com/auth/SplashScreen.tsx:38
|
||||
msgid "Create new account"
|
||||
msgstr "新しいアカウントを作成"
|
||||
@@ -607,8 +618,8 @@ msgstr "アカウントを削除"
|
||||
msgid "Delete app password"
|
||||
msgstr "アプリパスワードを削除"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:374
|
||||
#: src/view/screens/ProfileList.tsx:434
|
||||
#: src/view/screens/ProfileList.tsx:350
|
||||
#: src/view/screens/ProfileList.tsx:410
|
||||
msgid "Delete List"
|
||||
msgstr "リストを削除"
|
||||
|
||||
@@ -628,7 +639,7 @@ msgstr "投稿を削除"
|
||||
msgid "Delete this post?"
|
||||
msgstr "この投稿を削除しますか?"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:240
|
||||
#: src/view/com/post-thread/PostThread.tsx:243
|
||||
msgid "Deleted post."
|
||||
msgstr "投稿を削除しました。"
|
||||
|
||||
@@ -703,7 +714,7 @@ msgstr "それぞれのコードは一度ずつ動作します。定期的によ
|
||||
msgid "Edit image"
|
||||
msgstr "画像を編集"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:422
|
||||
#: src/view/screens/ProfileList.tsx:398
|
||||
msgid "Edit list details"
|
||||
msgstr "リストの詳細を編集"
|
||||
|
||||
@@ -751,7 +762,7 @@ msgstr "Eメール:"
|
||||
msgid "Enable this setting to only see replies between people you follow."
|
||||
msgstr "この設定を有効にすると、フォローしているユーザー間の応答だけが表示されます。"
|
||||
|
||||
#: src/view/screens/Profile.tsx:471
|
||||
#: src/view/screens/Profile.tsx:425
|
||||
msgid "End of feed"
|
||||
msgstr ""
|
||||
|
||||
@@ -779,7 +790,7 @@ msgstr "以下に新しいメールアドレスを入力してください。"
|
||||
msgid "Enter your username and password"
|
||||
msgstr "ユーザー名とパスワードを入力"
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:105
|
||||
#: src/view/screens/Search/Search.tsx:106
|
||||
msgid "Error:"
|
||||
msgstr "エラー:"
|
||||
|
||||
@@ -800,7 +811,7 @@ msgstr "推奨フィードのロードに失敗"
|
||||
msgid "Feed offline"
|
||||
msgstr "フィードはオフライン"
|
||||
|
||||
#: src/view/com/feeds/FeedPage.tsx:140
|
||||
#: src/view/com/feeds/FeedPage.tsx:143
|
||||
msgid "Feed Preferences"
|
||||
msgstr "フィード設定"
|
||||
|
||||
@@ -811,8 +822,8 @@ msgstr "フィードバック"
|
||||
|
||||
#: src/view/screens/Feeds.tsx:475
|
||||
#: src/view/screens/Profile.tsx:164
|
||||
#: src/view/shell/bottom-bar/BottomBar.tsx:160
|
||||
#: src/view/shell/desktop/LeftNav.tsx:333
|
||||
#: src/view/shell/bottom-bar/BottomBar.tsx:163
|
||||
#: src/view/shell/desktop/LeftNav.tsx:335
|
||||
#: src/view/shell/Drawer.tsx:455
|
||||
#: src/view/shell/Drawer.tsx:456
|
||||
msgid "Feeds"
|
||||
@@ -826,6 +837,14 @@ msgstr "フィードはコンテンツを整理する為にユーザーによっ
|
||||
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
|
||||
msgstr "フィードはユーザーがプログラミングの専門知識を持って構築するカスタムアルゴリズムです。詳細については、<0/>を参照してください。"
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:422
|
||||
msgid "Find users on Bluesky"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:420
|
||||
msgid "Find users with the search tool on the right"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
|
||||
msgid "Finding similar accounts..."
|
||||
msgstr "似通ったアカウントを検索中..."
|
||||
@@ -900,17 +919,17 @@ msgstr "ギャラリー"
|
||||
msgid "Get Started"
|
||||
msgstr "はじめに"
|
||||
|
||||
#: src/view/com/auth/LoggedOut.tsx:68
|
||||
#: src/view/com/auth/LoggedOut.tsx:69
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:105
|
||||
#: src/view/com/auth/LoggedOut.tsx:70
|
||||
#: src/view/com/auth/LoggedOut.tsx:71
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:123
|
||||
#: src/view/shell/desktop/LeftNav.tsx:103
|
||||
msgid "Go back"
|
||||
msgstr "戻る"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:107
|
||||
#: src/view/screens/ProfileFeed.tsx:112
|
||||
#: src/view/screens/ProfileFeed.tsx:117
|
||||
#: src/view/screens/ProfileList.tsx:869
|
||||
#: src/view/screens/ProfileList.tsx:874
|
||||
#: src/view/screens/ProfileList.tsx:838
|
||||
#: src/view/screens/ProfileList.tsx:843
|
||||
msgid "Go Back"
|
||||
msgstr "戻る"
|
||||
|
||||
@@ -934,6 +953,7 @@ msgid "Here is your app password."
|
||||
msgstr "アプリパスワードをお知らせします。"
|
||||
|
||||
#: src/view/com/notifications/FeedItem.tsx:316
|
||||
#: src/view/com/util/moderation/ContentHider.tsx:103
|
||||
msgid "Hide"
|
||||
msgstr "非表示"
|
||||
|
||||
@@ -1029,6 +1049,10 @@ msgstr "招待コードが確認できません。正しく入力されている
|
||||
msgid "Invite codes: {invitesAvailable} available"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/modals/Waitlist.tsx:67
|
||||
msgid "Join the waitlist"
|
||||
msgstr "待機リストに参加"
|
||||
@@ -1054,9 +1078,13 @@ msgstr "言語設定"
|
||||
msgid "Languages"
|
||||
msgstr "言語"
|
||||
|
||||
#: src/view/com/util/moderation/ContentHider.tsx:101
|
||||
msgid "Learn more"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/PostAlerts.tsx:47
|
||||
#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:88
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:104
|
||||
msgid "Learn More"
|
||||
msgstr "詳細"
|
||||
|
||||
@@ -1064,7 +1092,7 @@ msgstr "詳細"
|
||||
#: src/view/com/util/moderation/PostAlerts.tsx:40
|
||||
#: src/view/com/util/moderation/PostHider.tsx:76
|
||||
#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:85
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:101
|
||||
msgid "Learn more about this warning"
|
||||
msgstr "この警告の詳細"
|
||||
|
||||
@@ -1090,7 +1118,7 @@ msgstr "パスワードをリセットしましょう!"
|
||||
msgid "Library"
|
||||
msgstr "ライブラリー"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:643
|
||||
#: src/view/screens/ProfileFeed.tsx:627
|
||||
msgid "Like this feed"
|
||||
msgstr "このフィードをいいね"
|
||||
|
||||
@@ -1116,22 +1144,22 @@ msgid "List Name"
|
||||
msgstr "リスト名"
|
||||
|
||||
#: src/view/screens/Profile.tsx:165
|
||||
#: src/view/shell/desktop/LeftNav.tsx:373
|
||||
#: src/view/shell/desktop/LeftNav.tsx:372
|
||||
#: src/view/shell/Drawer.tsx:471
|
||||
#: src/view/shell/Drawer.tsx:472
|
||||
msgid "Lists"
|
||||
msgstr "リスト"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:257
|
||||
#: src/view/com/post-thread/PostThread.tsx:265
|
||||
#: src/view/com/post-thread/PostThread.tsx:260
|
||||
#: src/view/com/post-thread/PostThread.tsx:268
|
||||
msgid "Load more posts"
|
||||
msgstr "より多くの投稿をロード"
|
||||
|
||||
#: src/view/screens/Notifications.tsx:141
|
||||
#: src/view/screens/Notifications.tsx:144
|
||||
msgid "Load new notifications"
|
||||
msgstr "新しい通知をロード"
|
||||
|
||||
#: src/view/com/feeds/FeedPage.tsx:185
|
||||
#: src/view/com/feeds/FeedPage.tsx:189
|
||||
msgid "Load new posts"
|
||||
msgstr "新しい投稿をロード"
|
||||
|
||||
@@ -1155,7 +1183,7 @@ msgstr ""
|
||||
msgid "Login to account that is not listed"
|
||||
msgstr "リストにないアカウントにログイン"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:482
|
||||
#: src/view/screens/ProfileFeed.tsx:472
|
||||
msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!"
|
||||
msgstr ""
|
||||
|
||||
@@ -1175,18 +1203,18 @@ msgstr ""
|
||||
msgid "Mentioned users"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:503
|
||||
#: src/view/screens/Search/Search.tsx:537
|
||||
msgid "Menu"
|
||||
msgstr "メニュー"
|
||||
|
||||
#: src/view/com/posts/FeedErrorMessage.tsx:194
|
||||
#: src/view/screens/ProfileFeed.tsx:490
|
||||
#: src/view/screens/ProfileFeed.tsx:480
|
||||
msgid "Message from server"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Moderation.tsx:64
|
||||
#: src/view/screens/Settings.tsx:563
|
||||
#: src/view/shell/desktop/LeftNav.tsx:391
|
||||
#: src/view/shell/desktop/LeftNav.tsx:390
|
||||
#: src/view/shell/Drawer.tsx:490
|
||||
#: src/view/shell/Drawer.tsx:491
|
||||
msgid "Moderation"
|
||||
@@ -1205,8 +1233,8 @@ msgid "More feeds"
|
||||
msgstr "その他のフィード"
|
||||
|
||||
#: src/view/com/profile/ProfileHeader.tsx:548
|
||||
#: src/view/screens/ProfileFeed.tsx:370
|
||||
#: src/view/screens/ProfileList.tsx:606
|
||||
#: src/view/screens/ProfileFeed.tsx:365
|
||||
#: src/view/screens/ProfileList.tsx:582
|
||||
msgid "More options"
|
||||
msgstr "その他のオプション"
|
||||
|
||||
@@ -1214,15 +1242,15 @@ msgstr "その他のオプション"
|
||||
msgid "Mute Account"
|
||||
msgstr "アカウントをミュート"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:533
|
||||
#: src/view/screens/ProfileList.tsx:509
|
||||
msgid "Mute accounts"
|
||||
msgstr "アカウントをミュート"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:480
|
||||
#: src/view/screens/ProfileList.tsx:456
|
||||
msgid "Mute list"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:293
|
||||
#: src/view/screens/ProfileList.tsx:269
|
||||
msgid "Mute these accounts?"
|
||||
msgstr "これらのアカウントをミュートしますか?"
|
||||
|
||||
@@ -1242,7 +1270,7 @@ msgstr "ミュート済みアカウント"
|
||||
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
|
||||
msgstr "ミュート済みのアカウントは、フィードと通知からの投稿が削除されます。ミュート設定は知られることはありません。"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:295
|
||||
#: src/view/screens/ProfileList.tsx:271
|
||||
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
|
||||
msgstr "ミュートはプライベートです。ミュート済みアカウントはユーザーと相互作用することができますが、そのアカウントの投稿や通知を受信することはできません。"
|
||||
|
||||
@@ -1276,12 +1304,12 @@ msgstr "決してフォロワーやデータへのアクセスを失わないで
|
||||
msgid "New"
|
||||
msgstr "新規"
|
||||
|
||||
#: src/view/com/feeds/FeedPage.tsx:196
|
||||
#: src/view/com/feeds/FeedPage.tsx:200
|
||||
#: src/view/screens/Feeds.tsx:510
|
||||
#: src/view/screens/Profile.tsx:389
|
||||
#: src/view/screens/ProfileFeed.tsx:451
|
||||
#: src/view/screens/ProfileList.tsx:212
|
||||
#: src/view/screens/ProfileList.tsx:244
|
||||
#: src/view/screens/Profile.tsx:353
|
||||
#: src/view/screens/ProfileFeed.tsx:441
|
||||
#: src/view/screens/ProfileList.tsx:192
|
||||
#: src/view/screens/ProfileList.tsx:220
|
||||
#: src/view/shell/desktop/LeftNav.tsx:246
|
||||
msgid "New post"
|
||||
msgstr "新しい投稿"
|
||||
@@ -1310,8 +1338,8 @@ msgstr "次の画像"
|
||||
msgid "No"
|
||||
msgstr "なし"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:636
|
||||
#: src/view/screens/ProfileList.tsx:740
|
||||
#: src/view/screens/ProfileFeed.tsx:620
|
||||
#: src/view/screens/ProfileList.tsx:710
|
||||
msgid "No description"
|
||||
msgstr "説明なし"
|
||||
|
||||
@@ -1324,9 +1352,9 @@ msgid "No results found for \"{query}\""
|
||||
msgstr "「\\{query}」の検索結果がない"
|
||||
|
||||
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
|
||||
#: src/view/screens/Search/Search.tsx:270
|
||||
#: src/view/screens/Search/Search.tsx:298
|
||||
#: src/view/screens/Search/Search.tsx:581
|
||||
#: src/view/screens/Search/Search.tsx:271
|
||||
#: src/view/screens/Search/Search.tsx:299
|
||||
#: src/view/screens/Search/Search.tsx:615
|
||||
#: src/view/shell/desktop/Search.tsx:210
|
||||
msgid "No results found for {query}"
|
||||
msgstr "\\{query}の検索結果がない"
|
||||
@@ -1347,10 +1375,10 @@ msgstr "該当なし。"
|
||||
msgid "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."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Notifications.tsx:108
|
||||
#: src/view/screens/Notifications.tsx:132
|
||||
#: src/view/screens/Notifications.tsx:109
|
||||
#: src/view/screens/Notifications.tsx:133
|
||||
#: src/view/shell/bottom-bar/BottomBar.tsx:187
|
||||
#: src/view/shell/desktop/LeftNav.tsx:355
|
||||
#: src/view/shell/desktop/LeftNav.tsx:354
|
||||
#: src/view/shell/Drawer.tsx:416
|
||||
#: src/view/shell/Drawer.tsx:417
|
||||
msgid "Notifications"
|
||||
@@ -1488,12 +1516,12 @@ msgid "Please tell us why you think this decision was incorrect."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/composer/Composer.tsx:331
|
||||
#: src/view/com/post-thread/PostThread.tsx:223
|
||||
#: src/view/com/post-thread/PostThread.tsx:226
|
||||
#: src/view/screens/PostThread.tsx:78
|
||||
msgid "Post"
|
||||
msgstr "投稿"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:382
|
||||
#: src/view/com/post-thread/PostThread.tsx:385
|
||||
msgid "Post hidden"
|
||||
msgstr "投稿非表示"
|
||||
|
||||
@@ -1505,7 +1533,7 @@ msgstr "ポスト言語"
|
||||
msgid "Post Languages"
|
||||
msgstr "投稿言語"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:434
|
||||
#: src/view/com/post-thread/PostThread.tsx:437
|
||||
msgid "Post not found"
|
||||
msgstr "投稿が見つからない"
|
||||
|
||||
@@ -1603,7 +1631,7 @@ msgstr "フィードを削除"
|
||||
|
||||
#: src/view/com/feeds/FeedSourceCard.tsx:105
|
||||
#: src/view/com/feeds/FeedSourceCard.tsx:172
|
||||
#: src/view/screens/ProfileFeed.tsx:280
|
||||
#: src/view/screens/ProfileFeed.tsx:275
|
||||
msgid "Remove from my feeds"
|
||||
msgstr "マイフィードから削除"
|
||||
|
||||
@@ -1648,11 +1676,11 @@ msgstr "レポート \\{collectionName}"
|
||||
msgid "Report Account"
|
||||
msgstr "レポートアカウント"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:300
|
||||
#: src/view/screens/ProfileFeed.tsx:295
|
||||
msgid "Report feed"
|
||||
msgstr "レポートフィード"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:448
|
||||
#: src/view/screens/ProfileList.tsx:424
|
||||
msgid "Report List"
|
||||
msgstr "レポートリスト"
|
||||
|
||||
@@ -1748,8 +1776,8 @@ msgstr "保存済みフィード"
|
||||
|
||||
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
|
||||
#: src/view/com/util/forms/SearchInput.tsx:64
|
||||
#: src/view/screens/Search/Search.tsx:381
|
||||
#: src/view/screens/Search/Search.tsx:533
|
||||
#: src/view/screens/Search/Search.tsx:401
|
||||
#: src/view/screens/Search/Search.tsx:567
|
||||
#: src/view/shell/bottom-bar/BottomBar.tsx:138
|
||||
#: src/view/shell/desktop/LeftNav.tsx:315
|
||||
#: src/view/shell/desktop/Search.tsx:161
|
||||
@@ -1760,13 +1788,14 @@ msgid "Search"
|
||||
msgstr "検索"
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:390
|
||||
msgid "Search for posts and users."
|
||||
msgstr "投稿とユーザーを検索します。"
|
||||
#~ msgid "Search for posts and users."
|
||||
#~ msgstr "投稿とユーザーを検索します。"
|
||||
|
||||
#: src/view/com/modals/ChangeEmail.tsx:110
|
||||
msgid "Security Step Required"
|
||||
msgstr "必要なセキュリティ手順"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
|
||||
#: src/view/com/auth/SplashScreen.tsx:29
|
||||
msgid "See what's next"
|
||||
msgstr "次を見る"
|
||||
@@ -1841,7 +1870,7 @@ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your f
|
||||
msgstr "保存したフィードのサンプルを次のフィードに表示するには、この設定を「はい」にします。これは実験的な機能です。"
|
||||
|
||||
#: src/view/screens/Settings.tsx:277
|
||||
#: src/view/shell/desktop/LeftNav.tsx:427
|
||||
#: src/view/shell/desktop/LeftNav.tsx:426
|
||||
#: src/view/shell/Drawer.tsx:546
|
||||
#: src/view/shell/Drawer.tsx:547
|
||||
msgid "Settings"
|
||||
@@ -1853,19 +1882,20 @@ msgstr "性行為またはエロティックなヌード。"
|
||||
|
||||
#: src/view/com/profile/ProfileHeader.tsx:338
|
||||
#: src/view/com/util/forms/PostDropdownBtn.tsx:129
|
||||
#: src/view/screens/ProfileList.tsx:407
|
||||
#: src/view/screens/ProfileList.tsx:383
|
||||
msgid "Share"
|
||||
msgstr "共有"
|
||||
|
||||
#: src/view/screens/ProfileFeed.tsx:312
|
||||
#: src/view/screens/ProfileFeed.tsx:307
|
||||
msgid "Share feed"
|
||||
msgstr "フィードを共有"
|
||||
|
||||
#: src/view/com/util/moderation/ContentHider.tsx:105
|
||||
#: src/view/screens/Settings.tsx:316
|
||||
msgid "Show"
|
||||
msgstr "表示"
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:114
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:132
|
||||
msgid "Show anyway"
|
||||
msgstr "とにかく表示"
|
||||
|
||||
@@ -1893,13 +1923,15 @@ msgstr "再投稿を表示"
|
||||
msgid "Show users"
|
||||
msgstr "ユーザーを表示"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
|
||||
#: src/view/com/auth/login/Login.tsx:98
|
||||
#: src/view/com/auth/SplashScreen.tsx:49
|
||||
#: src/view/shell/NavSignupCard.tsx:52
|
||||
#: src/view/shell/NavSignupCard.tsx:53
|
||||
#: src/view/shell/NavSignupCard.tsx:58
|
||||
#: src/view/shell/NavSignupCard.tsx:59
|
||||
msgid "Sign in"
|
||||
msgstr "サインイン"
|
||||
|
||||
#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
|
||||
#: src/view/com/auth/SplashScreen.tsx:52
|
||||
#: src/view/com/auth/SplashScreen.web.tsx:84
|
||||
msgid "Sign In"
|
||||
@@ -1923,16 +1955,20 @@ msgstr "サインイン"
|
||||
msgid "Sign out"
|
||||
msgstr "サインアウト"
|
||||
|
||||
#: src/view/shell/NavSignupCard.tsx:43
|
||||
#: src/view/shell/NavSignupCard.tsx:44
|
||||
#: src/view/shell/NavSignupCard.tsx:46
|
||||
#: src/view/shell/NavSignupCard.tsx:49
|
||||
#: src/view/shell/NavSignupCard.tsx:50
|
||||
#: src/view/shell/NavSignupCard.tsx:52
|
||||
msgid "Sign up"
|
||||
msgstr "サインアップ"
|
||||
|
||||
#: src/view/shell/NavSignupCard.tsx:36
|
||||
#: src/view/shell/NavSignupCard.tsx:42
|
||||
msgid "Sign up or sign in to join the conversation"
|
||||
msgstr "登録またはログインして会話に参加する"
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:76
|
||||
msgid "Sign-in Required"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/Settings.tsx:327
|
||||
msgid "Signed in as"
|
||||
msgstr "サインイン済み"
|
||||
@@ -1970,15 +2006,15 @@ msgstr "ストーリーブック"
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:597
|
||||
#: src/view/screens/ProfileList.tsx:573
|
||||
msgid "Subscribe"
|
||||
msgstr "登録"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:593
|
||||
#: src/view/screens/ProfileList.tsx:569
|
||||
msgid "Subscribe to this list"
|
||||
msgstr "このリストに登録"
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:354
|
||||
#: src/view/screens/Search/Search.tsx:357
|
||||
msgid "Suggested Follows"
|
||||
msgstr "推奨されるフォロー"
|
||||
|
||||
@@ -2024,7 +2060,7 @@ msgstr "コミュニティ ガイドラインが<0/>に移動された"
|
||||
msgid "The Copyright Policy has been moved to <0/>"
|
||||
msgstr "著作権ポリシーが<0/>に移動された"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:437
|
||||
#: src/view/com/post-thread/PostThread.tsx:440
|
||||
msgid "The post may have been deleted."
|
||||
msgstr "投稿が削除された可能性があります。"
|
||||
|
||||
@@ -2048,10 +2084,14 @@ msgstr "アプリケーションに予期しない問題が発生しました。
|
||||
msgid "This {0} has been labeled."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:72
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:88
|
||||
msgid "This {screenDescription} has been flagged:"
|
||||
msgstr "この\\{screenDescription}にはフラグが設定されています。"
|
||||
|
||||
#: src/view/com/util/moderation/ScreenHider.tsx:83
|
||||
msgid "This account has requested that users sign in to view their profile."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/posts/FeedErrorMessage.tsx:107
|
||||
msgid "This content is not viewable without a Bluesky account."
|
||||
msgstr ""
|
||||
@@ -2111,11 +2151,11 @@ msgstr "翻訳"
|
||||
msgid "Try again"
|
||||
msgstr "再試行"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:495
|
||||
#: src/view/screens/ProfileList.tsx:471
|
||||
msgid "Un-block list"
|
||||
msgstr ""
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:480
|
||||
#: src/view/screens/ProfileList.tsx:456
|
||||
msgid "Un-mute list"
|
||||
msgstr ""
|
||||
|
||||
@@ -2151,7 +2191,7 @@ msgstr "アカウントのミュート解除"
|
||||
msgid "Unmute thread"
|
||||
msgstr "スレッドのミュート解除"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:463
|
||||
#: src/view/screens/ProfileList.tsx:439
|
||||
msgid "Unpin moderation list"
|
||||
msgstr ""
|
||||
|
||||
@@ -2200,7 +2240,7 @@ msgstr "ユーザーリスト"
|
||||
msgid "Username or email address"
|
||||
msgstr "ユーザー名またはEメールアドレス"
|
||||
|
||||
#: src/view/screens/ProfileList.tsx:767
|
||||
#: src/view/screens/ProfileList.tsx:737
|
||||
msgid "Users"
|
||||
msgstr "ユーザー"
|
||||
|
||||
@@ -2245,7 +2285,7 @@ msgstr "サイトへアクセス"
|
||||
msgid "We're so excited to have you join us!"
|
||||
msgstr "あなたが参加してくれることをとても楽しみにしています!"
|
||||
|
||||
#: src/view/screens/Search/Search.tsx:237
|
||||
#: src/view/screens/Search/Search.tsx:238
|
||||
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
|
||||
msgstr "申し訳ありませんが、検索を完了できませんでした。数分後に再試行してください。"
|
||||
|
||||
@@ -2317,16 +2357,16 @@ msgstr "保存されたフィードがありません!"
|
||||
msgid "You don't have any saved feeds."
|
||||
msgstr "保存されたフィードがありません。"
|
||||
|
||||
#: src/view/com/post-thread/PostThread.tsx:385
|
||||
#: src/view/com/post-thread/PostThread.tsx:388
|
||||
msgid "You have blocked the author or you have been blocked by the author."
|
||||
msgstr "著者をブロックしたか、または著者によってブロックされました。"
|
||||
|
||||
#: src/view/com/feeds/ProfileFeedgens.tsx:154
|
||||
#: src/view/com/feeds/ProfileFeedgens.tsx:141
|
||||
msgid "You have no feeds."
|
||||
msgstr ""
|
||||
|
||||
#: src/view/com/lists/MyLists.tsx:89
|
||||
#: src/view/com/lists/ProfileLists.tsx:158
|
||||
#: src/view/com/lists/ProfileLists.tsx:145
|
||||
msgid "You have no lists."
|
||||
msgstr "リストがありません。"
|
||||
|
||||
|
||||
@@ -1,16 +1,27 @@
|
||||
import React from 'react'
|
||||
import {AppBskyActorDefs} from '@atproto/api'
|
||||
import {AppBskyActorDefs, ModerationOpts, moderateProfile} from '@atproto/api'
|
||||
import {useQuery, useQueryClient} from '@tanstack/react-query'
|
||||
|
||||
import {logger} from '#/logger'
|
||||
import {getAgent} from '#/state/session'
|
||||
import {useMyFollowsQuery} from '#/state/queries/my-follows'
|
||||
import {STALE} from '#/state/queries'
|
||||
import {
|
||||
DEFAULT_LOGGED_OUT_PREFERENCES,
|
||||
getModerationOpts,
|
||||
useModerationOpts,
|
||||
} from './preferences'
|
||||
|
||||
const DEFAULT_MOD_OPTS = getModerationOpts({
|
||||
userDid: '',
|
||||
preferences: DEFAULT_LOGGED_OUT_PREFERENCES,
|
||||
})
|
||||
|
||||
export const RQKEY = (prefix: string) => ['actor-autocomplete', prefix]
|
||||
|
||||
export function useActorAutocompleteQuery(prefix: string) {
|
||||
const {data: follows, isFetching} = useMyFollowsQuery()
|
||||
const moderationOpts = useModerationOpts()
|
||||
|
||||
return useQuery<AppBskyActorDefs.ProfileViewBasic[]>({
|
||||
staleTime: STALE.MINUTES.ONE,
|
||||
@@ -22,9 +33,20 @@ export function useActorAutocompleteQuery(prefix: string) {
|
||||
limit: 8,
|
||||
})
|
||||
: undefined
|
||||
return computeSuggestions(prefix, follows, res?.data.actors)
|
||||
return res?.data.actors || []
|
||||
},
|
||||
enabled: !isFetching,
|
||||
select: React.useCallback(
|
||||
(data: AppBskyActorDefs.ProfileViewBasic[]) => {
|
||||
return computeSuggestions(
|
||||
prefix,
|
||||
follows,
|
||||
data,
|
||||
moderationOpts || DEFAULT_MOD_OPTS,
|
||||
)
|
||||
},
|
||||
[prefix, follows, moderationOpts],
|
||||
),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -32,6 +54,7 @@ export type ActorAutocompleteFn = ReturnType<typeof useActorAutocompleteFn>
|
||||
export function useActorAutocompleteFn() {
|
||||
const queryClient = useQueryClient()
|
||||
const {data: follows} = useMyFollowsQuery()
|
||||
const moderationOpts = useModerationOpts()
|
||||
|
||||
return React.useCallback(
|
||||
async ({query, limit = 8}: {query: string; limit?: number}) => {
|
||||
@@ -54,9 +77,14 @@ export function useActorAutocompleteFn() {
|
||||
}
|
||||
}
|
||||
|
||||
return computeSuggestions(query, follows, res?.data.actors)
|
||||
return computeSuggestions(
|
||||
query,
|
||||
follows,
|
||||
res?.data.actors,
|
||||
moderationOpts || DEFAULT_MOD_OPTS,
|
||||
)
|
||||
},
|
||||
[follows, queryClient],
|
||||
[follows, queryClient, moderationOpts],
|
||||
)
|
||||
}
|
||||
|
||||
@@ -64,6 +92,7 @@ function computeSuggestions(
|
||||
prefix: string,
|
||||
follows: AppBskyActorDefs.ProfileViewBasic[] | undefined,
|
||||
searched: AppBskyActorDefs.ProfileViewBasic[] = [],
|
||||
moderationOpts: ModerationOpts,
|
||||
) {
|
||||
let items: AppBskyActorDefs.ProfileViewBasic[] = []
|
||||
if (follows) {
|
||||
@@ -76,10 +105,14 @@ function computeSuggestions(
|
||||
handle: item.handle,
|
||||
displayName: item.displayName,
|
||||
avatar: item.avatar,
|
||||
labels: item.labels,
|
||||
})
|
||||
}
|
||||
}
|
||||
return items
|
||||
return items.filter(profile => {
|
||||
const mod = moderateProfile(profile, moderationOpts)
|
||||
return !mod.account.filter
|
||||
})
|
||||
}
|
||||
|
||||
function prefixMatch(
|
||||
|
||||
@@ -409,6 +409,9 @@ export function* findAllPostsInQueryData(
|
||||
}
|
||||
|
||||
function assertSomePostsPassModeration(feed: AppBskyFeedDefs.FeedViewPost[]) {
|
||||
// no posts in this feed
|
||||
if (feed.length === 0) return true
|
||||
|
||||
// assume false
|
||||
let somePostsPassModeration = false
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ type Controls = {
|
||||
/**
|
||||
* The did of the account to populate the login form with.
|
||||
*/
|
||||
requestedAccount?: string
|
||||
requestedAccount?: string | 'none' | 'new'
|
||||
}) => void
|
||||
/**
|
||||
* Clears the requested account so that next time the logged out view is
|
||||
|
||||
@@ -0,0 +1,165 @@
|
||||
import React from 'react'
|
||||
import {StyleSheet, TouchableOpacity, View} from 'react-native'
|
||||
import {useLingui} from '@lingui/react'
|
||||
import {Trans, msg} from '@lingui/macro'
|
||||
import {ScrollView} from '../util/Views'
|
||||
import {Text} from '../util/text/Text'
|
||||
import {usePalette} from '#/lib/hooks/usePalette'
|
||||
import {colors, s} from '#/lib/styles'
|
||||
import {TextLink} from '../util/Link'
|
||||
import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
|
||||
import {useLoggedOutViewControls} from '#/state/shell/logged-out'
|
||||
|
||||
export function HomeLoggedOutCTA() {
|
||||
const pal = usePalette('default')
|
||||
const {_} = useLingui()
|
||||
const {isMobile} = useWebMediaQueries()
|
||||
const {requestSwitchToAccount} = useLoggedOutViewControls()
|
||||
|
||||
const showCreateAccount = React.useCallback(() => {
|
||||
requestSwitchToAccount({requestedAccount: 'new'})
|
||||
}, [requestSwitchToAccount])
|
||||
|
||||
const showSignIn = React.useCallback(() => {
|
||||
requestSwitchToAccount({requestedAccount: 'none'})
|
||||
}, [requestSwitchToAccount])
|
||||
|
||||
return (
|
||||
<ScrollView style={styles.container} testID="loggedOutCTA">
|
||||
<View style={[styles.hero, isMobile && styles.heroMobile]}>
|
||||
<Text style={[styles.title, pal.link]}>
|
||||
<Trans>Bluesky</Trans>
|
||||
</Text>
|
||||
<Text
|
||||
style={[
|
||||
styles.subtitle,
|
||||
isMobile && styles.subtitleMobile,
|
||||
pal.textLight,
|
||||
]}>
|
||||
<Trans>See what's next</Trans>
|
||||
</Text>
|
||||
</View>
|
||||
<View
|
||||
testID="signinOrCreateAccount"
|
||||
style={isMobile ? undefined : styles.btnsDesktop}>
|
||||
<TouchableOpacity
|
||||
testID="createAccountButton"
|
||||
style={[
|
||||
styles.btn,
|
||||
isMobile && styles.btnMobile,
|
||||
{backgroundColor: colors.blue3},
|
||||
]}
|
||||
onPress={showCreateAccount}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Create new account`)}
|
||||
accessibilityHint="Opens flow to create a new Bluesky account">
|
||||
<Text
|
||||
style={[
|
||||
s.white,
|
||||
styles.btnLabel,
|
||||
isMobile && styles.btnLabelMobile,
|
||||
]}>
|
||||
<Trans>Create a new account</Trans>
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
<TouchableOpacity
|
||||
testID="signInButton"
|
||||
style={[styles.btn, isMobile && styles.btnMobile, pal.btn]}
|
||||
onPress={showSignIn}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Sign in`)}
|
||||
accessibilityHint="Opens flow to sign into your existing Bluesky account">
|
||||
<Text
|
||||
style={[
|
||||
pal.text,
|
||||
styles.btnLabel,
|
||||
isMobile && styles.btnLabelMobile,
|
||||
]}>
|
||||
<Trans>Sign In</Trans>
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
|
||||
<View style={[styles.footer, pal.view, pal.border]}>
|
||||
<TextLink
|
||||
type="2xl"
|
||||
href="https://blueskyweb.xyz"
|
||||
text={_(msg`Business`)}
|
||||
style={[styles.footerLink, pal.link]}
|
||||
/>
|
||||
<TextLink
|
||||
type="2xl"
|
||||
href="https://blueskyweb.xyz/blog"
|
||||
text={_(msg`Blog`)}
|
||||
style={[styles.footerLink, pal.link]}
|
||||
/>
|
||||
<TextLink
|
||||
type="2xl"
|
||||
href="https://blueskyweb.xyz/join"
|
||||
text={_(msg`Jobs`)}
|
||||
style={[styles.footerLink, pal.link]}
|
||||
/>
|
||||
</View>
|
||||
</ScrollView>
|
||||
)
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
height: '100%',
|
||||
},
|
||||
hero: {
|
||||
justifyContent: 'center',
|
||||
paddingTop: 100,
|
||||
paddingBottom: 30,
|
||||
},
|
||||
heroMobile: {
|
||||
paddingBottom: 50,
|
||||
},
|
||||
title: {
|
||||
textAlign: 'center',
|
||||
fontSize: 68,
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
subtitle: {
|
||||
textAlign: 'center',
|
||||
fontSize: 48,
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
subtitleMobile: {
|
||||
fontSize: 42,
|
||||
},
|
||||
btnsDesktop: {
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'center',
|
||||
gap: 20,
|
||||
marginHorizontal: 20,
|
||||
},
|
||||
btn: {
|
||||
borderRadius: 32,
|
||||
width: 230,
|
||||
paddingVertical: 12,
|
||||
marginBottom: 20,
|
||||
},
|
||||
btnMobile: {
|
||||
flex: 1,
|
||||
width: 'auto',
|
||||
marginHorizontal: 20,
|
||||
paddingVertical: 16,
|
||||
},
|
||||
btnLabel: {
|
||||
textAlign: 'center',
|
||||
fontSize: 18,
|
||||
},
|
||||
btnLabelMobile: {
|
||||
textAlign: 'center',
|
||||
fontSize: 21,
|
||||
},
|
||||
|
||||
footer: {
|
||||
flexDirection: 'row',
|
||||
gap: 20,
|
||||
justifyContent: 'center',
|
||||
},
|
||||
footerLink: {},
|
||||
})
|
||||
@@ -33,7 +33,9 @@ export function LoggedOut({onDismiss}: {onDismiss?: () => void}) {
|
||||
const {requestedAccountSwitchTo} = useLoggedOutView()
|
||||
const [screenState, setScreenState] = React.useState<ScreenState>(
|
||||
requestedAccountSwitchTo
|
||||
? ScreenState.S_Login
|
||||
? requestedAccountSwitchTo === 'new'
|
||||
? ScreenState.S_CreateAccount
|
||||
: ScreenState.S_Login
|
||||
: ScreenState.S_LoginOrCreateAccount,
|
||||
)
|
||||
const {isMobile} = useWebMediaQueries()
|
||||
|
||||
@@ -7,6 +7,8 @@ import {usePalette} from 'lib/hooks/usePalette'
|
||||
import {CenteredView} from '../util/Views'
|
||||
import {Trans, msg} from '@lingui/macro'
|
||||
import {useLingui} from '@lingui/react'
|
||||
import {Logo} from '#/view/icons/Logo'
|
||||
import {Logotype} from '#/view/icons/Logotype'
|
||||
|
||||
export const SplashScreen = ({
|
||||
onPressSignin,
|
||||
@@ -22,11 +24,14 @@ export const SplashScreen = ({
|
||||
<CenteredView style={[styles.container, pal.view]}>
|
||||
<ErrorBoundary>
|
||||
<View style={styles.hero}>
|
||||
<Text style={[styles.title, pal.link]}>
|
||||
<Trans>Bluesky</Trans>
|
||||
</Text>
|
||||
<Text style={[styles.subtitle, pal.textLight]}>
|
||||
<Trans>See what's next</Trans>
|
||||
<Logo width={92} fill="sky" />
|
||||
|
||||
<View style={{paddingTop: 40, paddingBottom: 6}}>
|
||||
<Logotype width={161} />
|
||||
</View>
|
||||
|
||||
<Text type="lg-medium" style={[pal.textLight]}>
|
||||
<Trans>What's next?</Trans>
|
||||
</Text>
|
||||
</View>
|
||||
<View testID="signinOrCreateAccount" style={styles.btns}>
|
||||
@@ -65,6 +70,7 @@ const styles = StyleSheet.create({
|
||||
hero: {
|
||||
flex: 2,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
},
|
||||
btns: {
|
||||
paddingBottom: 40,
|
||||
|
||||
@@ -10,6 +10,8 @@ import {CenteredView} from '../util/Views'
|
||||
import {isWeb} from 'platform/detection'
|
||||
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
|
||||
import {Trans} from '@lingui/macro'
|
||||
import {Logo} from '#/view/icons/Logo'
|
||||
import {Logotype} from '#/view/icons/Logotype'
|
||||
|
||||
export const SplashScreen = ({
|
||||
onDismiss,
|
||||
@@ -55,14 +57,15 @@ export const SplashScreen = ({
|
||||
styles.containerInner,
|
||||
isMobileWeb && styles.containerInnerMobile,
|
||||
pal.border,
|
||||
{alignItems: 'center'},
|
||||
]}>
|
||||
<ErrorBoundary>
|
||||
<Text style={isMobileWeb ? styles.titleMobile : styles.title}>
|
||||
Bluesky
|
||||
</Text>
|
||||
<Text style={isMobileWeb ? styles.subtitleMobile : styles.subtitle}>
|
||||
See what's next
|
||||
</Text>
|
||||
<Logo width={92} fill="sky" />
|
||||
|
||||
<View style={{paddingTop: 40, paddingBottom: 20}}>
|
||||
<Logotype width={161} />
|
||||
</View>
|
||||
|
||||
<View testID="signinOrCreateAccount" style={styles.btns}>
|
||||
<TouchableOpacity
|
||||
testID="createAccountButton"
|
||||
@@ -117,8 +120,6 @@ function Footer({styles}: {styles: ReturnType<typeof useStyles>}) {
|
||||
)
|
||||
}
|
||||
const useStyles = () => {
|
||||
const {isTabletOrMobile} = useWebMediaQueries()
|
||||
const isMobileWeb = isWeb && isTabletOrMobile
|
||||
return StyleSheet.create({
|
||||
container: {
|
||||
height: '100%',
|
||||
@@ -161,8 +162,7 @@ const useStyles = () => {
|
||||
paddingBottom: 30,
|
||||
},
|
||||
btns: {
|
||||
flexDirection: isMobileWeb ? 'column' : 'row',
|
||||
gap: 20,
|
||||
gap: 10,
|
||||
justifyContent: 'center',
|
||||
paddingBottom: 40,
|
||||
},
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
import React from 'react'
|
||||
import {
|
||||
Dimensions,
|
||||
RefreshControl,
|
||||
StyleProp,
|
||||
StyleSheet,
|
||||
View,
|
||||
ViewStyle,
|
||||
} from 'react-native'
|
||||
import {Dimensions, StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
|
||||
import {useQueryClient} from '@tanstack/react-query'
|
||||
import {List, ListRef} from '../util/List'
|
||||
import {FeedSourceCardLoaded} from './FeedSourceCard'
|
||||
@@ -180,22 +173,14 @@ export const ProfileFeedgens = React.forwardRef<
|
||||
data={items}
|
||||
keyExtractor={(item: any) => item._reactKey || item.uri}
|
||||
renderItem={renderItemInner}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
progressViewOffset={headerOffset}
|
||||
/>
|
||||
}
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
headerOffset={headerOffset}
|
||||
contentContainerStyle={{
|
||||
minHeight: Dimensions.get('window').height * 1.5,
|
||||
}}
|
||||
style={{paddingTop: headerOffset}}
|
||||
indicatorStyle={theme.colorScheme === 'dark' ? 'white' : 'black'}
|
||||
removeClippedSubviews={true}
|
||||
contentOffset={{x: 0, y: headerOffset * -1}}
|
||||
// @ts-ignore our .web version only -prf
|
||||
desktopFixedHeight
|
||||
onEndReached={onEndReached}
|
||||
|
||||
@@ -2,7 +2,6 @@ import React from 'react'
|
||||
import {
|
||||
ActivityIndicator,
|
||||
Dimensions,
|
||||
RefreshControl,
|
||||
StyleProp,
|
||||
View,
|
||||
ViewStyle,
|
||||
@@ -15,7 +14,6 @@ import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
|
||||
import {ProfileCard} from '../profile/ProfileCard'
|
||||
import {Button} from '../util/forms/Button'
|
||||
import {useAnalytics} from 'lib/analytics/analytics'
|
||||
import {usePalette} from 'lib/hooks/usePalette'
|
||||
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
|
||||
import {useListMembersQuery} from '#/state/queries/list-members'
|
||||
import {logger} from '#/logger'
|
||||
@@ -51,7 +49,6 @@ export function ListMembers({
|
||||
headerOffset?: number
|
||||
desktopFixedHeightOffset?: number
|
||||
}) {
|
||||
const pal = usePalette('default')
|
||||
const {track} = useAnalytics()
|
||||
const [isRefreshing, setIsRefreshing] = React.useState(false)
|
||||
const {isMobile} = useWebMediaQueries()
|
||||
@@ -215,24 +212,16 @@ export function ListMembers({
|
||||
renderItem={renderItem}
|
||||
ListHeaderComponent={renderHeader}
|
||||
ListFooterComponent={Footer}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isRefreshing}
|
||||
onRefresh={onRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
progressViewOffset={headerOffset}
|
||||
/>
|
||||
}
|
||||
refreshing={isRefreshing}
|
||||
onRefresh={onRefresh}
|
||||
headerOffset={headerOffset}
|
||||
contentContainerStyle={{
|
||||
minHeight: Dimensions.get('window').height * 1.5,
|
||||
}}
|
||||
style={{paddingTop: headerOffset}}
|
||||
onScrolledDownChange={onScrolledDownChange}
|
||||
onEndReached={onEndReached}
|
||||
onEndReachedThreshold={0.6}
|
||||
removeClippedSubviews={true}
|
||||
contentOffset={{x: 0, y: headerOffset * -1}}
|
||||
// @ts-ignore our .web version only -prf
|
||||
desktopFixedHeight={desktopFixedHeightOffset || true}
|
||||
/>
|
||||
|
||||
@@ -119,31 +119,51 @@ export function MyLists({
|
||||
[error, onRefresh, renderItem, pal],
|
||||
)
|
||||
|
||||
const FlatListCom = inline ? RNFlatList : List
|
||||
return (
|
||||
<View testID={testID} style={style}>
|
||||
{items.length > 0 && (
|
||||
<FlatListCom
|
||||
testID={testID ? `${testID}-flatlist` : undefined}
|
||||
data={items}
|
||||
keyExtractor={item => (item.uri ? item.uri : item._reactKey)}
|
||||
renderItem={renderItemInner}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
/>
|
||||
}
|
||||
contentContainerStyle={[s.contentContainer]}
|
||||
removeClippedSubviews={true}
|
||||
// @ts-ignore our .web version only -prf
|
||||
desktopFixedHeight
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
)
|
||||
if (inline) {
|
||||
return (
|
||||
<View testID={testID} style={style}>
|
||||
{items.length > 0 && (
|
||||
<RNFlatList
|
||||
testID={testID ? `${testID}-flatlist` : undefined}
|
||||
data={items}
|
||||
keyExtractor={item => (item.uri ? item.uri : item._reactKey)}
|
||||
renderItem={renderItemInner}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
/>
|
||||
}
|
||||
contentContainerStyle={[s.contentContainer]}
|
||||
removeClippedSubviews={true}
|
||||
// @ts-ignore our .web version only -prf
|
||||
desktopFixedHeight
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
)
|
||||
} else {
|
||||
return (
|
||||
<View testID={testID} style={style}>
|
||||
{items.length > 0 && (
|
||||
<List
|
||||
testID={testID ? `${testID}-flatlist` : undefined}
|
||||
data={items}
|
||||
keyExtractor={item => (item.uri ? item.uri : item._reactKey)}
|
||||
renderItem={renderItemInner}
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
contentContainerStyle={[s.contentContainer]}
|
||||
removeClippedSubviews={true}
|
||||
// @ts-ignore our .web version only -prf
|
||||
desktopFixedHeight
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
import React from 'react'
|
||||
import {
|
||||
Dimensions,
|
||||
RefreshControl,
|
||||
StyleProp,
|
||||
StyleSheet,
|
||||
View,
|
||||
ViewStyle,
|
||||
} from 'react-native'
|
||||
import {Dimensions, StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
|
||||
import {useQueryClient} from '@tanstack/react-query'
|
||||
import {List, ListRef} from '../util/List'
|
||||
import {ListCard} from './ListCard'
|
||||
@@ -182,22 +175,14 @@ export const ProfileLists = React.forwardRef<SectionRef, ProfileListsProps>(
|
||||
data={items}
|
||||
keyExtractor={(item: any) => item._reactKey}
|
||||
renderItem={renderItemInner}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
progressViewOffset={headerOffset}
|
||||
/>
|
||||
}
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
headerOffset={headerOffset}
|
||||
contentContainerStyle={{
|
||||
minHeight: Dimensions.get('window').height * 1.5,
|
||||
}}
|
||||
style={{paddingTop: headerOffset}}
|
||||
indicatorStyle={theme.colorScheme === 'dark' ? 'white' : 'black'}
|
||||
removeClippedSubviews={true}
|
||||
contentOffset={{x: 0, y: headerOffset * -1}}
|
||||
// @ts-ignore our .web version only -prf
|
||||
desktopFixedHeight
|
||||
onEndReached={onEndReached}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
import React from 'react'
|
||||
import {CenteredView} from '../util/Views'
|
||||
import {ActivityIndicator, RefreshControl, StyleSheet, View} from 'react-native'
|
||||
import {ActivityIndicator, StyleSheet, View} from 'react-native'
|
||||
import {FeedItem} from './FeedItem'
|
||||
import {NotificationFeedLoadingPlaceholder} from '../util/LoadingPlaceholder'
|
||||
import {ErrorMessage} from '../util/error/ErrorMessage'
|
||||
import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
|
||||
import {EmptyState} from '../util/EmptyState'
|
||||
import {s} from 'lib/styles'
|
||||
import {usePalette} from 'lib/hooks/usePalette'
|
||||
import {useNotificationFeedQuery} from '#/state/queries/notifications/feed'
|
||||
import {useUnreadNotificationsApi} from '#/state/queries/notifications/unread'
|
||||
import {logger} from '#/logger'
|
||||
@@ -30,7 +29,6 @@ export function Feed({
|
||||
onScrolledDownChange: (isScrolledDown: boolean) => void
|
||||
ListHeaderComponent?: () => JSX.Element
|
||||
}) {
|
||||
const pal = usePalette('default')
|
||||
const [isPTRing, setIsPTRing] = React.useState(false)
|
||||
|
||||
const moderationOpts = useModerationOpts()
|
||||
@@ -152,14 +150,8 @@ export function Feed({
|
||||
renderItem={renderItem}
|
||||
ListHeaderComponent={ListHeaderComponent}
|
||||
ListFooterComponent={FeedFooter}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
/>
|
||||
}
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
onEndReached={onEndReached}
|
||||
onEndReachedThreshold={0.6}
|
||||
onScrolledDownChange={onScrolledDownChange}
|
||||
|
||||
@@ -3,12 +3,9 @@ import {StyleSheet, TouchableOpacity, View} from 'react-native'
|
||||
import {TabBar} from 'view/com/pager/TabBar'
|
||||
import {RenderTabBarFnProps} from 'view/com/pager/Pager'
|
||||
import {usePalette} from 'lib/hooks/usePalette'
|
||||
import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
|
||||
import {Link} from '../util/Link'
|
||||
import {Text} from '../util/text/Text'
|
||||
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
|
||||
import {FontAwesomeIconStyle} from '@fortawesome/react-native-fontawesome'
|
||||
import {s} from 'lib/styles'
|
||||
import {HITSLOP_10} from 'lib/constants'
|
||||
import Animated from 'react-native-reanimated'
|
||||
import {msg} from '@lingui/macro'
|
||||
@@ -21,17 +18,17 @@ import {usePinnedFeedsInfos} from '#/state/queries/feed'
|
||||
import {isWeb} from 'platform/detection'
|
||||
import {useNavigation} from '@react-navigation/native'
|
||||
import {NavigationProp} from 'lib/routes/types'
|
||||
import {Logo} from '#/view/icons/Logo'
|
||||
|
||||
export function FeedsTabBar(
|
||||
props: RenderTabBarFnProps & {testID?: string; onPressSelected: () => void},
|
||||
) {
|
||||
const pal = usePalette('default')
|
||||
const {isSandbox, hasSession} = useSession()
|
||||
const {hasSession} = useSession()
|
||||
const {_} = useLingui()
|
||||
const setDrawerOpen = useSetDrawerOpen()
|
||||
const navigation = useNavigation<NavigationProp>()
|
||||
const {feeds, hasPinnedCustom} = usePinnedFeedsInfos()
|
||||
const brandBlue = useColorSchemeStyle(s.brandBlue, s.blue3)
|
||||
const {headerHeight} = useShellLayout()
|
||||
const {headerMinimalShellTransform} = useMinimalShellMode()
|
||||
const pinnedDisplayNames = hasSession ? feeds.map(f => f.displayName) : []
|
||||
@@ -86,9 +83,9 @@ export function FeedsTabBar(
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
<Text style={[brandBlue, s.bold, styles.title]}>
|
||||
{isSandbox ? 'SANDBOX' : 'Bluesky'}
|
||||
</Text>
|
||||
<View>
|
||||
<Logo width={30} />
|
||||
</View>
|
||||
<View style={[pal.view, {width: 18}]}>
|
||||
{hasSession && (
|
||||
<Link
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
import React, {useCallback, useMemo, useState} from 'react'
|
||||
import {ActivityIndicator, RefreshControl, StyleSheet, View} from 'react-native'
|
||||
import {ActivityIndicator, StyleSheet, View} from 'react-native'
|
||||
import {AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
|
||||
import {CenteredView} from '../util/Views'
|
||||
import {List} from '../util/List'
|
||||
import {ErrorMessage} from '../util/error/ErrorMessage'
|
||||
import {ProfileCardWithFollowBtn} from '../profile/ProfileCard'
|
||||
import {usePalette} from 'lib/hooks/usePalette'
|
||||
import {logger} from '#/logger'
|
||||
import {useResolveUriQuery} from '#/state/queries/resolve-uri'
|
||||
import {usePostLikedByQuery} from '#/state/queries/post-liked-by'
|
||||
import {cleanError} from '#/lib/strings/errors'
|
||||
|
||||
export function PostLikedBy({uri}: {uri: string}) {
|
||||
const pal = usePalette('default')
|
||||
const [isPTRing, setIsPTRing] = useState(false)
|
||||
const {
|
||||
data: resolvedUri,
|
||||
@@ -88,14 +86,8 @@ export function PostLikedBy({uri}: {uri: string}) {
|
||||
<List
|
||||
data={likes}
|
||||
keyExtractor={item => item.actor.did}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
/>
|
||||
}
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
onEndReached={onEndReached}
|
||||
renderItem={renderItem}
|
||||
initialNumToRender={15}
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
import React, {useMemo, useCallback, useState} from 'react'
|
||||
import {ActivityIndicator, RefreshControl, StyleSheet, View} from 'react-native'
|
||||
import {ActivityIndicator, StyleSheet, View} from 'react-native'
|
||||
import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
|
||||
import {CenteredView} from '../util/Views'
|
||||
import {List} from '../util/List'
|
||||
import {ProfileCardWithFollowBtn} from '../profile/ProfileCard'
|
||||
import {ErrorMessage} from '../util/error/ErrorMessage'
|
||||
import {usePalette} from 'lib/hooks/usePalette'
|
||||
import {logger} from '#/logger'
|
||||
import {useResolveUriQuery} from '#/state/queries/resolve-uri'
|
||||
import {usePostRepostedByQuery} from '#/state/queries/post-reposted-by'
|
||||
import {cleanError} from '#/lib/strings/errors'
|
||||
|
||||
export function PostRepostedBy({uri}: {uri: string}) {
|
||||
const pal = usePalette('default')
|
||||
const [isPTRing, setIsPTRing] = useState(false)
|
||||
const {
|
||||
data: resolvedUri,
|
||||
@@ -89,14 +87,8 @@ export function PostRepostedBy({uri}: {uri: string}) {
|
||||
<List
|
||||
data={repostedBy}
|
||||
keyExtractor={item => item.did}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
/>
|
||||
}
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
onEndReached={onEndReached}
|
||||
renderItem={renderItem}
|
||||
initialNumToRender={15}
|
||||
|
||||
@@ -2,7 +2,6 @@ import React, {useEffect, useRef} from 'react'
|
||||
import {
|
||||
ActivityIndicator,
|
||||
Pressable,
|
||||
RefreshControl,
|
||||
StyleSheet,
|
||||
TouchableOpacity,
|
||||
View,
|
||||
@@ -157,7 +156,9 @@ function PostThreadLoaded({
|
||||
// construct content
|
||||
const posts = React.useMemo(() => {
|
||||
let arr = [TOP_COMPONENT].concat(
|
||||
Array.from(flattenThreadSkeleton(sortThread(thread, threadViewPrefs))),
|
||||
Array.from(
|
||||
flattenThreadSkeleton(sortThread(thread, threadViewPrefs), hasSession),
|
||||
),
|
||||
)
|
||||
if (arr.length > maxVisible) {
|
||||
arr = arr.slice(0, maxVisible).concat([LOAD_MORE])
|
||||
@@ -166,7 +167,7 @@ function PostThreadLoaded({
|
||||
arr.push(BOTTOM_COMPONENT)
|
||||
}
|
||||
return arr
|
||||
}, [thread, maxVisible, threadViewPrefs])
|
||||
}, [thread, maxVisible, threadViewPrefs, hasSession])
|
||||
|
||||
/**
|
||||
* NOTE
|
||||
@@ -347,14 +348,8 @@ function PostThreadLoaded({
|
||||
}
|
||||
keyExtractor={item => item._reactKey}
|
||||
renderItem={renderItem}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onPTR}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
/>
|
||||
}
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onPTR}
|
||||
onContentSizeChange={onContentSizeChange}
|
||||
style={s.hContentRegion}
|
||||
// @ts-ignore our .web version only -prf
|
||||
@@ -468,20 +463,24 @@ function isThreadPost(v: unknown): v is ThreadPost {
|
||||
|
||||
function* flattenThreadSkeleton(
|
||||
node: ThreadNode,
|
||||
hasSession: boolean,
|
||||
): Generator<YieldedItem, void> {
|
||||
if (node.type === 'post') {
|
||||
if (node.parent) {
|
||||
yield* flattenThreadSkeleton(node.parent)
|
||||
yield* flattenThreadSkeleton(node.parent, hasSession)
|
||||
} else if (node.ctx.isParentLoading) {
|
||||
yield PARENT_SPINNER
|
||||
}
|
||||
if (!hasSession && node.ctx.depth > 0 && hasPwiOptOut(node)) {
|
||||
return
|
||||
}
|
||||
yield node
|
||||
if (node.ctx.isHighlightedPost && !node.post.viewer?.replyDisabled) {
|
||||
yield REPLY_PROMPT
|
||||
}
|
||||
if (node.replies?.length) {
|
||||
for (const reply of node.replies) {
|
||||
yield* flattenThreadSkeleton(reply)
|
||||
yield* flattenThreadSkeleton(reply, hasSession)
|
||||
}
|
||||
} else if (node.ctx.isChildLoading) {
|
||||
yield CHILD_SPINNER
|
||||
@@ -493,6 +492,10 @@ function* flattenThreadSkeleton(
|
||||
}
|
||||
}
|
||||
|
||||
function hasPwiOptOut(node: ThreadPost) {
|
||||
return !!node.post.author.labels?.find(l => l.val === '!no-unauthenticated')
|
||||
}
|
||||
|
||||
function hasBranchingReplies(node: ThreadNode) {
|
||||
if (node.type !== 'post') {
|
||||
return false
|
||||
|
||||
@@ -3,7 +3,6 @@ import {
|
||||
ActivityIndicator,
|
||||
AppState,
|
||||
Dimensions,
|
||||
RefreshControl,
|
||||
StyleProp,
|
||||
StyleSheet,
|
||||
View,
|
||||
@@ -16,7 +15,6 @@ import {FeedErrorMessage} from './FeedErrorMessage'
|
||||
import {FeedSlice} from './FeedSlice'
|
||||
import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
|
||||
import {useAnalytics} from 'lib/analytics/analytics'
|
||||
import {usePalette} from 'lib/hooks/usePalette'
|
||||
import {useTheme} from 'lib/ThemeContext'
|
||||
import {logger} from '#/logger'
|
||||
import {
|
||||
@@ -70,7 +68,6 @@ let Feed = ({
|
||||
ListHeaderComponent?: () => JSX.Element
|
||||
extraData?: any
|
||||
}): React.ReactNode => {
|
||||
const pal = usePalette('default')
|
||||
const theme = useTheme()
|
||||
const {track} = useAnalytics()
|
||||
const queryClient = useQueryClient()
|
||||
@@ -276,25 +273,17 @@ let Feed = ({
|
||||
renderItem={renderItem}
|
||||
ListFooterComponent={FeedFooter}
|
||||
ListHeaderComponent={ListHeaderComponent}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
progressViewOffset={headerOffset}
|
||||
/>
|
||||
}
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
headerOffset={headerOffset}
|
||||
contentContainerStyle={{
|
||||
minHeight: Dimensions.get('window').height * 1.5,
|
||||
}}
|
||||
style={{paddingTop: headerOffset}}
|
||||
onScrolledDownChange={onScrolledDownChange}
|
||||
indicatorStyle={theme.colorScheme === 'dark' ? 'white' : 'black'}
|
||||
onEndReached={onEndReached}
|
||||
onEndReachedThreshold={2} // number of posts left to trigger load more
|
||||
removeClippedSubviews={true}
|
||||
contentOffset={{x: 0, y: headerOffset * -1}}
|
||||
extraData={extraData}
|
||||
// @ts-ignore our .web version only -prf
|
||||
desktopFixedHeight={
|
||||
|
||||
@@ -50,6 +50,9 @@ export function ProfileCard({
|
||||
return null
|
||||
}
|
||||
const moderation = moderateProfile(profile, moderationOpts)
|
||||
if (moderation.account.filter) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
<Link
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
import React from 'react'
|
||||
import {ActivityIndicator, RefreshControl, StyleSheet, View} from 'react-native'
|
||||
import {ActivityIndicator, StyleSheet, View} from 'react-native'
|
||||
import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
|
||||
import {CenteredView} from '../util/Views'
|
||||
import {List} from '../util/List'
|
||||
import {ErrorMessage} from '../util/error/ErrorMessage'
|
||||
import {ProfileCardWithFollowBtn} from './ProfileCard'
|
||||
import {usePalette} from 'lib/hooks/usePalette'
|
||||
import {useProfileFollowersQuery} from '#/state/queries/profile-followers'
|
||||
import {useResolveDidQuery} from '#/state/queries/resolve-uri'
|
||||
import {logger} from '#/logger'
|
||||
import {cleanError} from '#/lib/strings/errors'
|
||||
|
||||
export function ProfileFollowers({name}: {name: string}) {
|
||||
const pal = usePalette('default')
|
||||
const [isPTRing, setIsPTRing] = React.useState(false)
|
||||
const {
|
||||
data: resolvedDid,
|
||||
@@ -90,14 +88,8 @@ export function ProfileFollowers({name}: {name: string}) {
|
||||
<List
|
||||
data={followers}
|
||||
keyExtractor={item => item.did}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
/>
|
||||
}
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
onEndReached={onEndReached}
|
||||
renderItem={renderItem}
|
||||
initialNumToRender={15}
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
import React from 'react'
|
||||
import {ActivityIndicator, RefreshControl, StyleSheet, View} from 'react-native'
|
||||
import {ActivityIndicator, StyleSheet, View} from 'react-native'
|
||||
import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
|
||||
import {CenteredView} from '../util/Views'
|
||||
import {List} from '../util/List'
|
||||
import {ErrorMessage} from '../util/error/ErrorMessage'
|
||||
import {ProfileCardWithFollowBtn} from './ProfileCard'
|
||||
import {usePalette} from 'lib/hooks/usePalette'
|
||||
import {useProfileFollowsQuery} from '#/state/queries/profile-follows'
|
||||
import {useResolveDidQuery} from '#/state/queries/resolve-uri'
|
||||
import {logger} from '#/logger'
|
||||
import {cleanError} from '#/lib/strings/errors'
|
||||
|
||||
export function ProfileFollows({name}: {name: string}) {
|
||||
const pal = usePalette('default')
|
||||
const [isPTRing, setIsPTRing] = React.useState(false)
|
||||
const {
|
||||
data: resolvedDid,
|
||||
@@ -90,14 +88,8 @@ export function ProfileFollows({name}: {name: string}) {
|
||||
<List
|
||||
data={follows}
|
||||
keyExtractor={item => item.did}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
/>
|
||||
}
|
||||
refreshing={isPTRing}
|
||||
onRefresh={onRefresh}
|
||||
onEndReached={onEndReached}
|
||||
renderItem={renderItem}
|
||||
initialNumToRender={15}
|
||||
|
||||
@@ -1,27 +1,42 @@
|
||||
import React, {memo, startTransition} from 'react'
|
||||
import {FlatListProps} from 'react-native'
|
||||
import {FlatListProps, RefreshControl} from 'react-native'
|
||||
import {FlatList_INTERNAL} from './Views'
|
||||
import {addStyle} from 'lib/styles'
|
||||
import {useScrollHandlers} from '#/lib/ScrollContext'
|
||||
import {runOnJS, useSharedValue} from 'react-native-reanimated'
|
||||
import {useAnimatedScrollHandler} from '#/lib/hooks/useAnimatedScrollHandler_FIXED'
|
||||
import {usePalette} from '#/lib/hooks/usePalette'
|
||||
|
||||
export type ListMethods = FlatList_INTERNAL
|
||||
export type ListProps<ItemT> = Omit<
|
||||
FlatListProps<ItemT>,
|
||||
'onScroll' // Use ScrollContext instead.
|
||||
| 'onScroll' // Use ScrollContext instead.
|
||||
| 'refreshControl' // Pass refreshing and/or onRefresh instead.
|
||||
| 'contentOffset' // Pass headerOffset instead.
|
||||
> & {
|
||||
onScrolledDownChange?: (isScrolledDown: boolean) => void
|
||||
headerOffset?: number
|
||||
refreshing?: boolean
|
||||
onRefresh?: () => void
|
||||
}
|
||||
export type ListRef = React.MutableRefObject<FlatList_INTERNAL | null>
|
||||
|
||||
const SCROLLED_DOWN_LIMIT = 200
|
||||
|
||||
function ListImpl<ItemT>(
|
||||
{onScrolledDownChange, ...props}: ListProps<ItemT>,
|
||||
{
|
||||
onScrolledDownChange,
|
||||
refreshing,
|
||||
onRefresh,
|
||||
headerOffset,
|
||||
style,
|
||||
...props
|
||||
}: ListProps<ItemT>,
|
||||
ref: React.Ref<ListMethods>,
|
||||
) {
|
||||
const isScrolledDown = useSharedValue(false)
|
||||
const contextScrollHandlers = useScrollHandlers()
|
||||
const pal = usePalette('default')
|
||||
|
||||
function handleScrolledDownChange(didScrollDown: boolean) {
|
||||
startTransition(() => {
|
||||
@@ -49,11 +64,35 @@ function ListImpl<ItemT>(
|
||||
},
|
||||
})
|
||||
|
||||
let refreshControl
|
||||
if (refreshing !== undefined || onRefresh !== undefined) {
|
||||
refreshControl = (
|
||||
<RefreshControl
|
||||
refreshing={refreshing ?? false}
|
||||
onRefresh={onRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
progressViewOffset={headerOffset}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
let contentOffset
|
||||
if (headerOffset != null) {
|
||||
style = addStyle(style, {
|
||||
paddingTop: headerOffset,
|
||||
})
|
||||
contentOffset = {x: 0, y: headerOffset * -1}
|
||||
}
|
||||
|
||||
return (
|
||||
<FlatList_INTERNAL
|
||||
{...props}
|
||||
contentOffset={contentOffset}
|
||||
refreshControl={refreshControl}
|
||||
onScroll={scrollHandler}
|
||||
scrollEventThrottle={1}
|
||||
style={style}
|
||||
ref={ref}
|
||||
/>
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ import {Text} from '../text/Text'
|
||||
import {ShieldExclamation} from 'lib/icons'
|
||||
import {describeModerationCause} from 'lib/moderation'
|
||||
import {useLingui} from '@lingui/react'
|
||||
import {msg} from '@lingui/macro'
|
||||
import {msg, Trans} from '@lingui/macro'
|
||||
import {useModalControls} from '#/state/modals'
|
||||
import {isPostMediaBlurred} from 'lib/moderation'
|
||||
|
||||
@@ -95,13 +95,17 @@ export function ContentHider({
|
||||
<Text type="md" style={pal.text}>
|
||||
{desc.name}
|
||||
</Text>
|
||||
{!moderation.noOverride && (
|
||||
<View style={styles.showBtn}>
|
||||
<Text type="lg" style={pal.link}>
|
||||
{override ? 'Hide' : 'Show'}
|
||||
</Text>
|
||||
</View>
|
||||
)}
|
||||
<View style={styles.showBtn}>
|
||||
<Text type="lg" style={pal.link}>
|
||||
{moderation.noOverride ? (
|
||||
<Trans>Learn more</Trans>
|
||||
) : override ? (
|
||||
<Trans>Hide</Trans>
|
||||
) : (
|
||||
<Trans>Show</Trans>
|
||||
)}
|
||||
</Text>
|
||||
</View>
|
||||
</Pressable>
|
||||
{override && <View style={childContainerStyle}>{children}</View>}
|
||||
</View>
|
||||
|
||||
@@ -22,6 +22,7 @@ import {Trans, msg} from '@lingui/macro'
|
||||
import {useLingui} from '@lingui/react'
|
||||
import {useModalControls} from '#/state/modals'
|
||||
import {s} from '#/lib/styles'
|
||||
import {CenteredView} from '../Views'
|
||||
|
||||
export function ScreenHider({
|
||||
testID,
|
||||
@@ -53,41 +54,58 @@ export function ScreenHider({
|
||||
)
|
||||
}
|
||||
|
||||
const isNoPwi =
|
||||
moderation.cause?.type === 'label' &&
|
||||
moderation.cause?.labelDef.id === '!no-unauthenticated'
|
||||
const desc = describeModerationCause(moderation.cause, 'account')
|
||||
return (
|
||||
<View style={[styles.container, pal.view, containerStyle]}>
|
||||
<CenteredView
|
||||
style={[styles.container, pal.view, containerStyle]}
|
||||
sideBorders>
|
||||
<View style={styles.iconContainer}>
|
||||
<View style={[styles.icon, palInverted.view]}>
|
||||
<FontAwesomeIcon
|
||||
icon="exclamation"
|
||||
icon={isNoPwi ? ['far', 'eye-slash'] : 'exclamation'}
|
||||
style={pal.textInverted as FontAwesomeIconStyle}
|
||||
size={24}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<Text type="title-2xl" style={[styles.title, pal.text]}>
|
||||
<Trans>Content Warning</Trans>
|
||||
{isNoPwi ? (
|
||||
<Trans>Sign-in Required</Trans>
|
||||
) : (
|
||||
<Trans>Content Warning</Trans>
|
||||
)}
|
||||
</Text>
|
||||
<Text type="2xl" style={[styles.description, pal.textLight]}>
|
||||
<Trans>This {screenDescription} has been flagged:</Trans>
|
||||
<Text type="2xl-medium" style={[pal.text, s.ml5]}>
|
||||
{desc.name}.
|
||||
</Text>
|
||||
<TouchableWithoutFeedback
|
||||
onPress={() => {
|
||||
openModal({
|
||||
name: 'moderation-details',
|
||||
context: 'account',
|
||||
moderation,
|
||||
})
|
||||
}}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Learn more about this warning`)}
|
||||
accessibilityHint="">
|
||||
<Text type="2xl" style={pal.link}>
|
||||
<Trans>Learn More</Trans>
|
||||
</Text>
|
||||
</TouchableWithoutFeedback>
|
||||
{isNoPwi ? (
|
||||
<Trans>
|
||||
This account has requested that users sign in to view their profile.
|
||||
</Trans>
|
||||
) : (
|
||||
<>
|
||||
<Trans>This {screenDescription} has been flagged:</Trans>
|
||||
<Text type="2xl-medium" style={[pal.text, s.ml5]}>
|
||||
{desc.name}.
|
||||
</Text>
|
||||
<TouchableWithoutFeedback
|
||||
onPress={() => {
|
||||
openModal({
|
||||
name: 'moderation-details',
|
||||
context: 'account',
|
||||
moderation,
|
||||
})
|
||||
}}
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={_(msg`Learn more about this warning`)}
|
||||
accessibilityHint="">
|
||||
<Text type="2xl" style={pal.link}>
|
||||
<Trans>Learn More</Trans>
|
||||
</Text>
|
||||
</TouchableWithoutFeedback>
|
||||
</>
|
||||
)}{' '}
|
||||
</Text>
|
||||
{isMobile && <View style={styles.spacer} />}
|
||||
<View style={styles.btnContainer}>
|
||||
@@ -116,7 +134,7 @@ export function ScreenHider({
|
||||
</Button>
|
||||
)}
|
||||
</View>
|
||||
</View>
|
||||
</CenteredView>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
import React from 'react'
|
||||
import Svg, {
|
||||
Path,
|
||||
Defs,
|
||||
LinearGradient,
|
||||
Stop,
|
||||
SvgProps,
|
||||
PathProps,
|
||||
} from 'react-native-svg'
|
||||
|
||||
import {colors} from '#/lib/styles'
|
||||
|
||||
const ratio = 57 / 64
|
||||
|
||||
type Props = {
|
||||
fill?: PathProps['fill']
|
||||
} & SvgProps
|
||||
|
||||
export const Logo = React.forwardRef(function LogoImpl(props: Props, ref) {
|
||||
const {fill, ...rest} = props
|
||||
const gradient = fill === 'sky'
|
||||
const _fill = gradient ? 'url(#sky)' : fill || colors.blue3
|
||||
// @ts-ignore it's fiiiiine
|
||||
const size = parseInt(rest.width || 32)
|
||||
return (
|
||||
<Svg
|
||||
fill="none"
|
||||
// @ts-ignore it's fiiiiine
|
||||
ref={ref}
|
||||
viewBox="0 0 64 57"
|
||||
{...rest}
|
||||
style={{width: size, height: size * ratio}}>
|
||||
{gradient && (
|
||||
<Defs>
|
||||
<LinearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
|
||||
<Stop offset="0" stopColor="#0A7AFF" stopOpacity="1" />
|
||||
<Stop offset="1" stopColor="#59B9FF" stopOpacity="1" />
|
||||
</LinearGradient>
|
||||
</Defs>
|
||||
)}
|
||||
|
||||
<Path
|
||||
fill={_fill}
|
||||
d="M13.873 3.805C21.21 9.332 29.103 20.537 32 26.55v15.882c0-.338-.13.044-.41.867-1.512 4.456-7.418 21.847-20.923 7.944-7.111-7.32-3.819-14.64 9.125-16.85-7.405 1.264-15.73-.825-18.014-9.015C1.12 23.022 0 8.51 0 6.55 0-3.268 8.579-.182 13.873 3.805ZM50.127 3.805C42.79 9.332 34.897 20.537 32 26.55v15.882c0-.338.13.044.41.867 1.512 4.456 7.418 21.847 20.923 7.944 7.111-7.32 3.819-14.64-9.125-16.85 7.405 1.264 15.73-.825 18.014-9.015C62.88 23.022 64 8.51 64 6.55c0-9.818-8.578-6.732-13.873-2.745Z"
|
||||
/>
|
||||
</Svg>
|
||||
)
|
||||
})
|
||||
@@ -0,0 +1,28 @@
|
||||
import React from 'react'
|
||||
import Svg, {Path, SvgProps, PathProps} from 'react-native-svg'
|
||||
|
||||
import {colors} from '#/lib/styles'
|
||||
|
||||
const ratio = 17 / 64
|
||||
|
||||
export function Logotype({
|
||||
fill,
|
||||
...rest
|
||||
}: {fill?: PathProps['fill']} & SvgProps) {
|
||||
// @ts-ignore it's fiiiiine
|
||||
const size = parseInt(rest.width || 32)
|
||||
|
||||
return (
|
||||
<Svg
|
||||
fill="none"
|
||||
viewBox="0 0 64 17"
|
||||
{...rest}
|
||||
width={size}
|
||||
height={Number(size) * ratio}>
|
||||
<Path
|
||||
fill={fill || colors.black}
|
||||
d="M8.478 6.252c1.503.538 2.3 1.78 2.3 3.172 0 2.356-1.576 3.785-4.6 3.785H0V0h5.974c2.875 0 4.267 1.466 4.267 3.413 0 1.3-.594 2.245-1.763 2.839Zm-2.69-4.193H2.504v3.45h3.284c1.28 0 1.967-.667 1.967-1.78 0-1.02-.705-1.67-1.967-1.67Zm-3.284 9.072h3.544c1.41 0 2.17-.65 2.17-1.818 0-1.224-.723-1.837-2.17-1.837H2.504v3.655ZM14.251 13.209h-2.337V0h2.337v13.209ZM22.001 8.998V3.636h2.338v9.573h-2.263v-1.392c-.724 1.076-1.726 1.614-3.006 1.614-2.022 0-3.34-1.224-3.34-3.45V3.636h2.338v5.955c0 1.206.594 1.818 1.8 1.818 1.132 0 2.133-.835 2.133-2.411ZM34.979 8.59v.556h-7.161c.167 1.651 1.076 2.467 2.486 2.467 1.076 0 1.8-.463 2.189-1.372h2.244c-.5 1.947-2.17 3.19-4.452 3.19-1.428 0-2.579-.463-3.45-1.372-.872-.91-1.318-2.115-1.318-3.637 0-1.502.427-2.708 1.299-3.636.872-.909 2.004-1.372 3.432-1.372 1.447 0 2.597.482 3.45 1.428.854.946 1.28 2.208 1.28 3.747Zm-4.75-3.358c-1.28 0-2.17.742-2.393 2.281h4.805c-.204-1.391-1.057-2.281-2.411-2.281ZM40.16 13.469c-2.783 0-4.249-1.095-4.379-3.303h2.282c.13 1.188.724 1.633 2.134 1.633 1.261 0 1.892-.39 1.892-1.15 0-.687-.445-1.02-1.874-1.262l-1.094-.185c-2.097-.353-3.136-1.318-3.136-2.894 0-1.8 1.429-2.894 3.97-2.894 2.728 0 4.138 1.075 4.23 3.246h-2.207c-.056-1.169-.742-1.577-2.023-1.577-1.113 0-1.67.371-1.67 1.113 0 .668.483.965 1.596 1.169l1.206.186c2.32.426 3.32 1.28 3.32 2.912 0 1.93-1.557 3.006-4.247 3.006ZM54.667 13.209h-2.671l-2.783-4.453-1.447 1.447v3.006h-2.3V0h2.3v7.606l3.896-3.97h2.783l-3.618 3.618 3.84 5.955ZM60.772 6.048l.78-2.412H64l-3.692 10.352c-.39 1.057-.872 1.818-1.484 2.245-.612.426-1.484.63-2.634.63-.39 0-.724-.018-1.02-.055V14.97h.89c1.057 0 1.577-.65 1.577-1.54 0-.445-.149-1.094-.446-1.929l-2.746-7.866h2.487l.779 2.393c.575 1.8 1.076 3.58 1.521 5.343.408-1.521.928-3.302 1.54-5.324Z"
|
||||
/>
|
||||
</Svg>
|
||||
)
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import React from 'react'
|
||||
import {ActivityIndicator, StyleSheet, View, RefreshControl} from 'react-native'
|
||||
import {ActivityIndicator, StyleSheet, View} from 'react-native'
|
||||
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
|
||||
import {FontAwesomeIconStyle} from '@fortawesome/react-native-fontawesome'
|
||||
import {ViewHeader} from 'view/com/util/ViewHeader'
|
||||
@@ -487,14 +487,8 @@ export function FeedsScreen(_props: Props) {
|
||||
keyExtractor={item => item.key}
|
||||
contentContainerStyle={styles.contentContainer}
|
||||
renderItem={renderItem}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTR}
|
||||
onRefresh={isUserSearching ? undefined : onPullToRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
/>
|
||||
}
|
||||
refreshing={isPTR}
|
||||
onRefresh={isUserSearching ? undefined : onPullToRefresh}
|
||||
initialNumToRender={10}
|
||||
onEndReached={onEndReached}
|
||||
// @ts-ignore our .web version only -prf
|
||||
|
||||
@@ -9,6 +9,7 @@ import {CustomFeedEmptyState} from 'view/com/posts/CustomFeedEmptyState'
|
||||
import {FeedsTabBar} from '../com/pager/FeedsTabBar'
|
||||
import {Pager, RenderTabBarFnProps} from 'view/com/pager/Pager'
|
||||
import {FeedPage} from 'view/com/feeds/FeedPage'
|
||||
import {HomeLoggedOutCTA} from '../com/auth/HomeLoggedOutCTA'
|
||||
import {useSetMinimalShellMode, useSetDrawerSwipeDisabled} from '#/state/shell'
|
||||
import {usePreferencesQuery} from '#/state/queries/preferences'
|
||||
import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types'
|
||||
@@ -199,12 +200,7 @@ function HomeScreenReady({
|
||||
onPageScrollStateChanged={onPageScrollStateChanged}
|
||||
renderTabBar={renderTabBar}
|
||||
tabBarPosition="top">
|
||||
<FeedPage
|
||||
testID="customFeedPage"
|
||||
isPageFocused={true}
|
||||
feed={`feedgen|at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot`}
|
||||
renderEmptyState={renderCustomFeedEmptyState}
|
||||
/>
|
||||
<HomeLoggedOutCTA />
|
||||
</Pager>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -153,7 +153,7 @@ function ProfileScreenLoaded({
|
||||
const isMe = profile.did === currentAccount?.did
|
||||
const showRepliesTab = hasSession
|
||||
const showLikesTab = isMe
|
||||
const showFeedsTab = isMe || extraInfoQuery.data?.hasFeedgens
|
||||
const showFeedsTab = hasSession && (isMe || extraInfoQuery.data?.hasFeedgens)
|
||||
const showListsTab = hasSession && (isMe || extraInfoQuery.data?.hasLists)
|
||||
const sectionTitles = useMemo<string[]>(() => {
|
||||
return [
|
||||
|
||||
@@ -3,7 +3,6 @@ import {
|
||||
View,
|
||||
StyleSheet,
|
||||
ActivityIndicator,
|
||||
RefreshControl,
|
||||
TextInput,
|
||||
Pressable,
|
||||
Platform,
|
||||
@@ -185,7 +184,6 @@ type SearchResultSlice =
|
||||
|
||||
function SearchScreenPostResults({query}: {query: string}) {
|
||||
const {_} = useLingui()
|
||||
const pal = usePalette('default')
|
||||
const [isPTR, setIsPTR] = React.useState(false)
|
||||
const {
|
||||
isFetched,
|
||||
@@ -254,14 +252,8 @@ function SearchScreenPostResults({query}: {query: string}) {
|
||||
}
|
||||
}}
|
||||
keyExtractor={item => item.key}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isPTR}
|
||||
onRefresh={onPullToRefresh}
|
||||
tintColor={pal.colors.text}
|
||||
titleColor={pal.colors.text}
|
||||
/>
|
||||
}
|
||||
refreshing={isPTR}
|
||||
onRefresh={onPullToRefresh}
|
||||
onEndReached={onEndReached}
|
||||
// @ts-ignore web only -prf
|
||||
desktopFixedHeight
|
||||
@@ -304,7 +296,8 @@ function SearchScreenUserResults({query}: {query: string}) {
|
||||
)
|
||||
}
|
||||
|
||||
const SECTIONS = ['Posts', 'Users']
|
||||
const SECTIONS_LOGGEDOUT = ['Users']
|
||||
const SECTIONS_LOGGEDIN = ['Posts', 'Users']
|
||||
export function SearchScreenInner({query}: {query?: string}) {
|
||||
const pal = usePalette('default')
|
||||
const setMinimalShellMode = useSetMinimalShellMode()
|
||||
@@ -320,44 +313,62 @@ export function SearchScreenInner({query}: {query?: string}) {
|
||||
[setDrawerSwipeDisabled, setMinimalShellMode],
|
||||
)
|
||||
|
||||
if (hasSession) {
|
||||
return query ? (
|
||||
<Pager
|
||||
tabBarPosition="top"
|
||||
onPageSelected={onPageSelected}
|
||||
renderTabBar={props => (
|
||||
<CenteredView sideBorders style={pal.border}>
|
||||
<TabBar items={SECTIONS_LOGGEDIN} {...props} />
|
||||
</CenteredView>
|
||||
)}
|
||||
initialPage={0}>
|
||||
<View>
|
||||
<SearchScreenPostResults query={query} />
|
||||
</View>
|
||||
<View>
|
||||
<SearchScreenUserResults query={query} />
|
||||
</View>
|
||||
</Pager>
|
||||
) : (
|
||||
<View>
|
||||
<CenteredView sideBorders style={pal.border}>
|
||||
<Text
|
||||
type="title"
|
||||
style={[
|
||||
pal.text,
|
||||
pal.border,
|
||||
{
|
||||
display: 'flex',
|
||||
paddingVertical: 12,
|
||||
paddingHorizontal: 18,
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
]}>
|
||||
<Trans>Suggested Follows</Trans>
|
||||
</Text>
|
||||
</CenteredView>
|
||||
|
||||
<SearchScreenSuggestedFollows />
|
||||
</View>
|
||||
)
|
||||
}
|
||||
|
||||
return query ? (
|
||||
<Pager
|
||||
tabBarPosition="top"
|
||||
onPageSelected={onPageSelected}
|
||||
renderTabBar={props => (
|
||||
<CenteredView sideBorders style={pal.border}>
|
||||
<TabBar items={SECTIONS} {...props} />
|
||||
<TabBar items={SECTIONS_LOGGEDOUT} {...props} />
|
||||
</CenteredView>
|
||||
)}
|
||||
initialPage={0}>
|
||||
<View>
|
||||
<SearchScreenPostResults query={query} />
|
||||
</View>
|
||||
<View>
|
||||
<SearchScreenUserResults query={query} />
|
||||
</View>
|
||||
</Pager>
|
||||
) : hasSession ? (
|
||||
<View>
|
||||
<CenteredView sideBorders style={pal.border}>
|
||||
<Text
|
||||
type="title"
|
||||
style={[
|
||||
pal.text,
|
||||
pal.border,
|
||||
{
|
||||
display: 'flex',
|
||||
paddingVertical: 12,
|
||||
paddingHorizontal: 18,
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
]}>
|
||||
<Trans>Suggested Follows</Trans>
|
||||
</Text>
|
||||
</CenteredView>
|
||||
|
||||
<SearchScreenSuggestedFollows />
|
||||
</View>
|
||||
) : (
|
||||
<CenteredView sideBorders style={pal.border}>
|
||||
<View
|
||||
@@ -383,13 +394,27 @@ export function SearchScreenInner({query}: {query?: string}) {
|
||||
</Text>
|
||||
)}
|
||||
|
||||
<Text
|
||||
style={[
|
||||
pal.textLight,
|
||||
{textAlign: 'center', paddingVertical: 12, paddingHorizontal: 18},
|
||||
]}>
|
||||
<Trans>Search for posts and users.</Trans>
|
||||
</Text>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
paddingVertical: 30,
|
||||
gap: 15,
|
||||
}}>
|
||||
<MagnifyingGlassIcon
|
||||
strokeWidth={3}
|
||||
size={isDesktop ? 60 : 60}
|
||||
style={pal.textLight}
|
||||
/>
|
||||
<Text type="xl" style={[pal.textLight, {paddingHorizontal: 18}]}>
|
||||
{isDesktop ? (
|
||||
<Trans>Find users with the search tool on the right</Trans>
|
||||
) : (
|
||||
<Trans>Find users on Bluesky</Trans>
|
||||
)}
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</CenteredView>
|
||||
)
|
||||
|
||||
@@ -231,9 +231,9 @@ let DrawerContent = ({}: {}): React.ReactNode => {
|
||||
onPress={onPressNotifications}
|
||||
/>
|
||||
)}
|
||||
<FeedsMenuItem isActive={isAtFeeds} onPress={onPressMyFeeds} />
|
||||
{hasSession && (
|
||||
<>
|
||||
<FeedsMenuItem isActive={isAtFeeds} onPress={onPressMyFeeds} />
|
||||
<ListsMenuItem onPress={onPressLists} />
|
||||
<ModerationMenuItem onPress={onPressModeration} />
|
||||
<ProfileMenuItem
|
||||
|
||||
@@ -14,13 +14,19 @@ import {useCloseAllActiveElements} from '#/state/util'
|
||||
let NavSignupCard = ({}: {}): React.ReactNode => {
|
||||
const {_} = useLingui()
|
||||
const pal = usePalette('default')
|
||||
const {setShowLoggedOut} = useLoggedOutViewControls()
|
||||
const {requestSwitchToAccount} = useLoggedOutViewControls()
|
||||
const closeAllActiveElements = useCloseAllActiveElements()
|
||||
|
||||
const showLoggedOut = React.useCallback(() => {
|
||||
const showSignIn = React.useCallback(() => {
|
||||
closeAllActiveElements()
|
||||
setShowLoggedOut(true)
|
||||
}, [setShowLoggedOut, closeAllActiveElements])
|
||||
requestSwitchToAccount({requestedAccount: 'none'})
|
||||
}, [requestSwitchToAccount, closeAllActiveElements])
|
||||
|
||||
const showCreateAccount = React.useCallback(() => {
|
||||
closeAllActiveElements()
|
||||
requestSwitchToAccount({requestedAccount: 'new'})
|
||||
// setShowLoggedOut(true)
|
||||
}, [requestSwitchToAccount, closeAllActiveElements])
|
||||
|
||||
return (
|
||||
<View
|
||||
@@ -39,7 +45,7 @@ let NavSignupCard = ({}: {}): React.ReactNode => {
|
||||
|
||||
<View style={{flexDirection: 'row', paddingTop: 12, gap: 8}}>
|
||||
<Button
|
||||
onPress={showLoggedOut}
|
||||
onPress={showCreateAccount}
|
||||
accessibilityHint={_(msg`Sign up`)}
|
||||
accessibilityLabel={_(msg`Sign up`)}>
|
||||
<Text type="md" style={[{color: 'white'}, s.bold]}>
|
||||
@@ -48,7 +54,7 @@ let NavSignupCard = ({}: {}): React.ReactNode => {
|
||||
</Button>
|
||||
<Button
|
||||
type="default"
|
||||
onPress={showLoggedOut}
|
||||
onPress={showSignIn}
|
||||
accessibilityHint={_(msg`Sign in`)}
|
||||
accessibilityLabel={_(msg`Sign in`)}>
|
||||
<Text type="md" style={[pal.text, s.bold]}>
|
||||
|
||||
@@ -138,31 +138,31 @@ export function BottomBar({navigation}: BottomTabBarProps) {
|
||||
accessibilityLabel={_(msg`Search`)}
|
||||
accessibilityHint=""
|
||||
/>
|
||||
<Btn
|
||||
testID="bottomBarFeedsBtn"
|
||||
icon={
|
||||
isAtFeeds ? (
|
||||
<HashtagIcon
|
||||
size={24}
|
||||
style={[styles.ctrlIcon, pal.text, styles.feedsIcon]}
|
||||
strokeWidth={4}
|
||||
/>
|
||||
) : (
|
||||
<HashtagIcon
|
||||
size={24}
|
||||
style={[styles.ctrlIcon, pal.text, styles.feedsIcon]}
|
||||
strokeWidth={2.25}
|
||||
/>
|
||||
)
|
||||
}
|
||||
onPress={onPressFeeds}
|
||||
accessibilityRole="tab"
|
||||
accessibilityLabel={_(msg`Feeds`)}
|
||||
accessibilityHint=""
|
||||
/>
|
||||
|
||||
{hasSession && (
|
||||
<>
|
||||
<Btn
|
||||
testID="bottomBarFeedsBtn"
|
||||
icon={
|
||||
isAtFeeds ? (
|
||||
<HashtagIcon
|
||||
size={24}
|
||||
style={[styles.ctrlIcon, pal.text, styles.feedsIcon]}
|
||||
strokeWidth={4}
|
||||
/>
|
||||
) : (
|
||||
<HashtagIcon
|
||||
size={24}
|
||||
style={[styles.ctrlIcon, pal.text, styles.feedsIcon]}
|
||||
strokeWidth={2.25}
|
||||
/>
|
||||
)
|
||||
}
|
||||
onPress={onPressFeeds}
|
||||
accessibilityRole="tab"
|
||||
accessibilityLabel={_(msg`Feeds`)}
|
||||
accessibilityHint=""
|
||||
/>
|
||||
<Btn
|
||||
testID="bottomBarNotificationsBtn"
|
||||
icon={
|
||||
|
||||
@@ -65,20 +65,20 @@ export function BottomBarWeb() {
|
||||
)
|
||||
}}
|
||||
</NavItem>
|
||||
<NavItem routeName="Feeds" href="/feeds">
|
||||
{({isActive}) => {
|
||||
return (
|
||||
<HashtagIcon
|
||||
size={22}
|
||||
style={[styles.ctrlIcon, pal.text, styles.feedsIcon]}
|
||||
strokeWidth={isActive ? 4 : 2.5}
|
||||
/>
|
||||
)
|
||||
}}
|
||||
</NavItem>
|
||||
|
||||
{hasSession && (
|
||||
<>
|
||||
<NavItem routeName="Feeds" href="/feeds">
|
||||
{({isActive}) => {
|
||||
return (
|
||||
<HashtagIcon
|
||||
size={22}
|
||||
style={[styles.ctrlIcon, pal.text, styles.feedsIcon]}
|
||||
strokeWidth={isActive ? 4 : 2.5}
|
||||
/>
|
||||
)
|
||||
}}
|
||||
</NavItem>
|
||||
<NavItem routeName="Notifications" href="/notifications">
|
||||
{({isActive}) => {
|
||||
const Icon = isActive ? BellIconSolid : BellIcon
|
||||
|
||||
@@ -314,27 +314,26 @@ export function DesktopLeftNav() {
|
||||
}
|
||||
label={_(msg`Search`)}
|
||||
/>
|
||||
<NavItem
|
||||
href="/feeds"
|
||||
icon={
|
||||
<HashtagIcon
|
||||
strokeWidth={2.25}
|
||||
style={pal.text as FontAwesomeIconStyle}
|
||||
size={isDesktop ? 24 : 28}
|
||||
/>
|
||||
}
|
||||
iconFilled={
|
||||
<HashtagIcon
|
||||
strokeWidth={2.5}
|
||||
style={pal.text as FontAwesomeIconStyle}
|
||||
size={isDesktop ? 24 : 28}
|
||||
/>
|
||||
}
|
||||
label={_(msg`Feeds`)}
|
||||
/>
|
||||
|
||||
{hasSession && (
|
||||
<>
|
||||
<NavItem
|
||||
href="/feeds"
|
||||
icon={
|
||||
<HashtagIcon
|
||||
strokeWidth={2.25}
|
||||
style={pal.text as FontAwesomeIconStyle}
|
||||
size={isDesktop ? 24 : 28}
|
||||
/>
|
||||
}
|
||||
iconFilled={
|
||||
<HashtagIcon
|
||||
strokeWidth={2.5}
|
||||
style={pal.text as FontAwesomeIconStyle}
|
||||
size={isDesktop ? 24 : 28}
|
||||
/>
|
||||
}
|
||||
label={_(msg`Feeds`)}
|
||||
/>
|
||||
<NavItem
|
||||
href="/notifications"
|
||||
count={numUnread}
|
||||
|
||||
@@ -19,10 +19,6 @@ import {useTheme} from 'lib/ThemeContext'
|
||||
import {usePalette} from 'lib/hooks/usePalette'
|
||||
import {RoutesContainer, TabsNavigator} from '../../Navigation'
|
||||
import {isStateAtTabRoot} from 'lib/routes/helpers'
|
||||
import {
|
||||
SafeAreaProvider,
|
||||
initialWindowMetrics,
|
||||
} from 'react-native-safe-area-context'
|
||||
import {
|
||||
useIsDrawerOpen,
|
||||
useSetDrawerOpen,
|
||||
@@ -107,14 +103,12 @@ export const Shell: React.FC = function ShellImpl() {
|
||||
const pal = usePalette('default')
|
||||
const theme = useTheme()
|
||||
return (
|
||||
<SafeAreaProvider initialMetrics={initialWindowMetrics} style={pal.view}>
|
||||
<View testID="mobileShellView" style={[styles.outerContainer, pal.view]}>
|
||||
<StatusBar style={theme.colorScheme === 'dark' ? 'light' : 'dark'} />
|
||||
<RoutesContainer>
|
||||
<ShellInner />
|
||||
</RoutesContainer>
|
||||
</View>
|
||||
</SafeAreaProvider>
|
||||
<View testID="mobileShellView" style={[styles.outerContainer, pal.view]}>
|
||||
<StatusBar style={theme.colorScheme === 'dark' ? 'light' : 'dark'} />
|
||||
<RoutesContainer>
|
||||
<ShellInner />
|
||||
</RoutesContainer>
|
||||
</View>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -48,10 +48,10 @@
|
||||
typed-emitter "^2.1.0"
|
||||
zod "^3.21.4"
|
||||
|
||||
"@atproto/api@^0.7.3":
|
||||
version "0.7.3"
|
||||
resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.7.3.tgz#3224000353619970d5e397a157c6e189e195ef47"
|
||||
integrity sha512-fKU+W+S4kKxClE6IcPBHPZAjcyBYxG28S0FW/bv3T/ZYDkNxGzDV4xuoHOyEDGtB30slltl5U83njuuRZs5xtw==
|
||||
"@atproto/api@^0.7.4":
|
||||
version "0.7.4"
|
||||
resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.7.4.tgz#0dd6e725c88d1f941c57670dc82b60fde10f4ec6"
|
||||
integrity sha512-7DBy6/OcXemzCPzA0dx52LLYRABBs8bq9Docs3is+WRgEx5/Pd1kHSAlCHIaBhsym8fZ3/U4Fks/5FSHkSm4yQ==
|
||||
dependencies:
|
||||
"@atproto/common-web" "^0.2.3"
|
||||
"@atproto/lexicon" "^0.3.1"
|
||||
@@ -4448,6 +4448,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@react-native-community/eslint-plugin/-/eslint-plugin-1.3.0.tgz#9e558170c106bbafaa1ef502bd8e6d4651012bf9"
|
||||
integrity sha512-+zDZ20NUnSWghj7Ku5aFphMzuM9JulqCW+aPXT6IfIXFbb8tzYTTOSeRFOtuekJ99ibW2fUCSsjuKNlwDIbHFg==
|
||||
|
||||
"@react-native-masked-view/masked-view@^0.3.1":
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@react-native-masked-view/masked-view/-/masked-view-0.3.1.tgz#5bd76f17004a6ccbcec03856893777ee91f23d29"
|
||||
integrity sha512-uVm8U6nwFIlUd1iDIB5cS+lDadApKR+l8k4k84d9hn+GN4lzAIJhUZ9syYX7c022MxNgAlbxoFLt0pqKoyaAGg==
|
||||
|
||||
"@react-native-menu/menu@^0.8.0":
|
||||
version "0.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@react-native-menu/menu/-/menu-0.8.0.tgz#dbf227c2081e5ffd3d2073ee68ecc84cf8639727"
|
||||
|
||||