diff --git a/app.config.js b/app.config.js
index 096756b084..d16b494d09 100644
--- a/app.config.js
+++ b/app.config.js
@@ -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',
diff --git a/assets/adaptive-icon.png b/assets/adaptive-icon.png
deleted file mode 100644
index 1dda9a342c..0000000000
Binary files a/assets/adaptive-icon.png and /dev/null differ
diff --git a/assets/cloud-splash.png b/assets/cloud-splash.png
deleted file mode 100644
index 188625331d..0000000000
Binary files a/assets/cloud-splash.png and /dev/null differ
diff --git a/assets/default-avatar.jpg b/assets/default-avatar.jpg
deleted file mode 100644
index ab141651e7..0000000000
Binary files a/assets/default-avatar.jpg and /dev/null differ
diff --git a/assets/default-avatar.png b/assets/default-avatar.png
new file mode 100644
index 0000000000..d2bd03842f
Binary files /dev/null and b/assets/default-avatar.png differ
diff --git a/assets/favicon.png b/assets/favicon.png
index 24ec61e0a5..ddf55f4c81 100644
Binary files a/assets/favicon.png and b/assets/favicon.png differ
diff --git a/assets/icon-android-background.png b/assets/icon-android-background.png
new file mode 100644
index 0000000000..2c9d153823
Binary files /dev/null and b/assets/icon-android-background.png differ
diff --git a/assets/icon-android-foreground.png b/assets/icon-android-foreground.png
new file mode 100644
index 0000000000..7a6d477d6f
Binary files /dev/null and b/assets/icon-android-foreground.png differ
diff --git a/assets/icon.png b/assets/icon.png
index 1dda9a342c..7dc2c31a67 100644
Binary files a/assets/icon.png and b/assets/icon.png differ
diff --git a/assets/splash-with-logo.png b/assets/splash-with-logo.png
new file mode 100644
index 0000000000..d012d724c2
Binary files /dev/null and b/assets/splash-with-logo.png differ
diff --git a/assets/splash.png b/assets/splash.png
new file mode 100644
index 0000000000..603f1f3791
Binary files /dev/null and b/assets/splash.png differ
diff --git a/assets/tabs-explainer.jpg b/assets/tabs-explainer.jpg
deleted file mode 100644
index 64f0a8fe5b..0000000000
Binary files a/assets/tabs-explainer.jpg and /dev/null differ
diff --git a/docs/build.md b/docs/build.md
index 2bf7324b9d..c0ffefeefb 100644
--- a/docs/build.md
+++ b/docs/build.md
@@ -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`
diff --git a/package.json b/package.json
index 758b7fbea0..d1d12e2237 100644
--- a/package.json
+++ b/package.json
@@ -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",
diff --git a/src/App.native.tsx b/src/App.native.tsx
index d11d05e705..6402b4a898 100644
--- a/src/App.native.tsx
+++ b/src/App.native.tsx
@@ -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 (
-
-
-
-
- {/* All components should be within this provider */}
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+ {/* All components should be within this provider */}
+
+
+
+
+
+
+
+
+
+
+
+
)
}
diff --git a/src/Navigation.tsx b/src/Navigation.tsx
index 3f6b5ba20c..252699e538 100644
--- a/src/Navigation.tsx
+++ b/src/Navigation.tsx
@@ -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) {
ProfileFeedScreen}
- options={{title: title('Feed')}}
+ options={{title: title('Feed'), requireAuth: true}}
/>
- FeedsScreen} />
+ FeedsScreen}
+ options={{requireAuth: true}}
+ />
{commonScreens(FeedsTab as typeof HomeTab)}
)
@@ -489,7 +492,6 @@ function RoutesContainer({children}: React.PropsWithChildren<{}>) {
linking={LINKING}
theme={theme}
onReady={() => {
- SplashScreen.hideAsync()
logModuleInitTime()
onReady()
}}>
diff --git a/src/Splash.tsx b/src/Splash.tsx
new file mode 100644
index 0000000000..92ed366f96
--- /dev/null
+++ b/src/Splash.tsx
@@ -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 (
+
+ )
+})
+
+type Props = {
+ isReady: boolean
+}
+
+SplashScreen.preventAutoHideAsync().catch(() => {})
+
+const AnimatedLogo = Animated.createAnimatedComponent(Logo)
+
+export function Splash(props: React.PropsWithChildren) {
+ 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 (
+
+ {!isAnimationComplete && (
+
+ )}
+
+
+
+
+ }>
+ {!isAnimationComplete && (
+
+ )}
+
+
+ {props.children}
+
+
+
+ )
+}
diff --git a/src/lib/assets.native.ts b/src/lib/assets.native.ts
index d7ef9a05eb..754bc9d2b0 100644
--- a/src/lib/assets.native.ts
+++ b/src/lib/assets.native.ts
@@ -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')
diff --git a/src/lib/assets.ts b/src/lib/assets.ts
index 216478762d..8859607d56 100644
--- a/src/lib/assets.ts
+++ b/src/lib/assets.ts
@@ -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'}
diff --git a/src/lib/build-flags.ts b/src/lib/build-flags.ts
index faefdd6ab7..cf05114e02 100644
--- a/src/lib/build-flags.ts
+++ b/src/lib/build-flags.ts
@@ -1,2 +1,2 @@
export const LOGIN_INCLUDE_DEV_SERVERS = true
-export const PWI_ENABLED = false
+export const PWI_ENABLED = true
diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po
index 6cb186fe50..d36445b59d 100644
--- a/src/locale/locales/en/messages.po
+++ b/src/locale/locales/en/messages.po
@@ -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 ""
diff --git a/src/locale/locales/hi/messages.po b/src/locale/locales/hi/messages.po
index cd7151d8d9..77930e51f6 100644
--- a/src/locale/locales/hi/messages.po
+++ b/src/locale/locales/hi/messages.po
@@ -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 "आपके पास कोई सूची नहीं है।।"
diff --git a/src/locale/locales/ja/messages.po b/src/locale/locales/ja/messages.po
index b6877181c0..449ad6b9ba 100644
--- a/src/locale/locales/ja/messages.po
+++ b/src/locale/locales/ja/messages.po
@@ -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 "リストがありません。"
diff --git a/src/state/queries/actor-autocomplete.ts b/src/state/queries/actor-autocomplete.ts
index fbd1b38f9d..fe207371d0 100644
--- a/src/state/queries/actor-autocomplete.ts
+++ b/src/state/queries/actor-autocomplete.ts
@@ -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({
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
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(
diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts
index efdb42dd2b..423de4ae87 100644
--- a/src/state/queries/post-feed.ts
+++ b/src/state/queries/post-feed.ts
@@ -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
diff --git a/src/state/shell/logged-out.tsx b/src/state/shell/logged-out.tsx
index a06a6d969f..8fe2a9c01f 100644
--- a/src/state/shell/logged-out.tsx
+++ b/src/state/shell/logged-out.tsx
@@ -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
diff --git a/src/view/com/auth/HomeLoggedOutCTA.tsx b/src/view/com/auth/HomeLoggedOutCTA.tsx
new file mode 100644
index 0000000000..32b873ac67
--- /dev/null
+++ b/src/view/com/auth/HomeLoggedOutCTA.tsx
@@ -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 (
+
+
+
+ Bluesky
+
+
+ See what's next
+
+
+
+
+
+ Create a new account
+
+
+
+
+ Sign In
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+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: {},
+})
diff --git a/src/view/com/auth/LoggedOut.tsx b/src/view/com/auth/LoggedOut.tsx
index fcff4f7821..b0b2bf7edc 100644
--- a/src/view/com/auth/LoggedOut.tsx
+++ b/src/view/com/auth/LoggedOut.tsx
@@ -33,7 +33,9 @@ export function LoggedOut({onDismiss}: {onDismiss?: () => void}) {
const {requestedAccountSwitchTo} = useLoggedOutView()
const [screenState, setScreenState] = React.useState(
requestedAccountSwitchTo
- ? ScreenState.S_Login
+ ? requestedAccountSwitchTo === 'new'
+ ? ScreenState.S_CreateAccount
+ : ScreenState.S_Login
: ScreenState.S_LoginOrCreateAccount,
)
const {isMobile} = useWebMediaQueries()
diff --git a/src/view/com/auth/SplashScreen.tsx b/src/view/com/auth/SplashScreen.tsx
index d88627f65a..bb2d657ea4 100644
--- a/src/view/com/auth/SplashScreen.tsx
+++ b/src/view/com/auth/SplashScreen.tsx
@@ -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 = ({
-
- Bluesky
-
-
- See what's next
+
+
+
+
+
+
+
+ What's next?
@@ -65,6 +70,7 @@ const styles = StyleSheet.create({
hero: {
flex: 2,
justifyContent: 'center',
+ alignItems: 'center',
},
btns: {
paddingBottom: 40,
diff --git a/src/view/com/auth/SplashScreen.web.tsx b/src/view/com/auth/SplashScreen.web.tsx
index 08cf701da6..4e942f66e3 100644
--- a/src/view/com/auth/SplashScreen.web.tsx
+++ b/src/view/com/auth/SplashScreen.web.tsx
@@ -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'},
]}>
-
- Bluesky
-
-
- See what's next
-
+
+
+
+
+
+
}) {
)
}
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,
},
diff --git a/src/view/com/feeds/ProfileFeedgens.tsx b/src/view/com/feeds/ProfileFeedgens.tsx
index ff65055011..8665fbfacf 100644
--- a/src/view/com/feeds/ProfileFeedgens.tsx
+++ b/src/view/com/feeds/ProfileFeedgens.tsx
@@ -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={
-
- }
+ 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}
diff --git a/src/view/com/lists/ListMembers.tsx b/src/view/com/lists/ListMembers.tsx
index a31ca47936..2aef7d766e 100644
--- a/src/view/com/lists/ListMembers.tsx
+++ b/src/view/com/lists/ListMembers.tsx
@@ -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={
-
- }
+ 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}
/>
diff --git a/src/view/com/lists/MyLists.tsx b/src/view/com/lists/MyLists.tsx
index 586ad234e9..a2a6b06511 100644
--- a/src/view/com/lists/MyLists.tsx
+++ b/src/view/com/lists/MyLists.tsx
@@ -119,31 +119,51 @@ export function MyLists({
[error, onRefresh, renderItem, pal],
)
- const FlatListCom = inline ? RNFlatList : List
- return (
-
- {items.length > 0 && (
- (item.uri ? item.uri : item._reactKey)}
- renderItem={renderItemInner}
- refreshControl={
-
- }
- contentContainerStyle={[s.contentContainer]}
- removeClippedSubviews={true}
- // @ts-ignore our .web version only -prf
- desktopFixedHeight
- />
- )}
-
- )
+ if (inline) {
+ return (
+
+ {items.length > 0 && (
+ (item.uri ? item.uri : item._reactKey)}
+ renderItem={renderItemInner}
+ refreshControl={
+
+ }
+ contentContainerStyle={[s.contentContainer]}
+ removeClippedSubviews={true}
+ // @ts-ignore our .web version only -prf
+ desktopFixedHeight
+ />
+ )}
+
+ )
+ } else {
+ return (
+
+ {items.length > 0 && (
+ (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
+ />
+ )}
+
+ )
+ }
}
const styles = StyleSheet.create({
diff --git a/src/view/com/lists/ProfileLists.tsx b/src/view/com/lists/ProfileLists.tsx
index e3d9bd0b43..db981717f1 100644
--- a/src/view/com/lists/ProfileLists.tsx
+++ b/src/view/com/lists/ProfileLists.tsx
@@ -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(
data={items}
keyExtractor={(item: any) => item._reactKey}
renderItem={renderItemInner}
- refreshControl={
-
- }
+ 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}
diff --git a/src/view/com/notifications/Feed.tsx b/src/view/com/notifications/Feed.tsx
index 52d534c4fd..a99fe2c1dd 100644
--- a/src/view/com/notifications/Feed.tsx
+++ b/src/view/com/notifications/Feed.tsx
@@ -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={
-
- }
+ refreshing={isPTRing}
+ onRefresh={onRefresh}
onEndReached={onEndReached}
onEndReachedThreshold={0.6}
onScrolledDownChange={onScrolledDownChange}
diff --git a/src/view/com/pager/FeedsTabBarMobile.tsx b/src/view/com/pager/FeedsTabBarMobile.tsx
index 5be1a846ab..0727a51ac0 100644
--- a/src/view/com/pager/FeedsTabBarMobile.tsx
+++ b/src/view/com/pager/FeedsTabBarMobile.tsx
@@ -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()
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(
/>
-
- {isSandbox ? 'SANDBOX' : 'Bluesky'}
-
+
+
+
{hasSession && (
item.actor.did}
- refreshControl={
-
- }
+ refreshing={isPTRing}
+ onRefresh={onRefresh}
onEndReached={onEndReached}
renderItem={renderItem}
initialNumToRender={15}
diff --git a/src/view/com/post-thread/PostRepostedBy.tsx b/src/view/com/post-thread/PostRepostedBy.tsx
index 5cc0063885..a2d3be5583 100644
--- a/src/view/com/post-thread/PostRepostedBy.tsx
+++ b/src/view/com/post-thread/PostRepostedBy.tsx
@@ -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}) {
item.did}
- refreshControl={
-
- }
+ refreshing={isPTRing}
+ onRefresh={onRefresh}
onEndReached={onEndReached}
renderItem={renderItem}
initialNumToRender={15}
diff --git a/src/view/com/post-thread/PostThread.tsx b/src/view/com/post-thread/PostThread.tsx
index f27da331f9..6cd1f35519 100644
--- a/src/view/com/post-thread/PostThread.tsx
+++ b/src/view/com/post-thread/PostThread.tsx
@@ -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={
-
- }
+ 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 {
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
diff --git a/src/view/com/posts/Feed.tsx b/src/view/com/posts/Feed.tsx
index 9194bb163d..49ea7644fc 100644
--- a/src/view/com/posts/Feed.tsx
+++ b/src/view/com/posts/Feed.tsx
@@ -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={
-
- }
+ 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={
diff --git a/src/view/com/profile/ProfileCard.tsx b/src/view/com/profile/ProfileCard.tsx
index 21972f274e..c5b2dc528a 100644
--- a/src/view/com/profile/ProfileCard.tsx
+++ b/src/view/com/profile/ProfileCard.tsx
@@ -50,6 +50,9 @@ export function ProfileCard({
return null
}
const moderation = moderateProfile(profile, moderationOpts)
+ if (moderation.account.filter) {
+ return null
+ }
return (
item.did}
- refreshControl={
-
- }
+ refreshing={isPTRing}
+ onRefresh={onRefresh}
onEndReached={onEndReached}
renderItem={renderItem}
initialNumToRender={15}
diff --git a/src/view/com/profile/ProfileFollows.tsx b/src/view/com/profile/ProfileFollows.tsx
index 5265ee07ea..091922dd90 100644
--- a/src/view/com/profile/ProfileFollows.tsx
+++ b/src/view/com/profile/ProfileFollows.tsx
@@ -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}) {
item.did}
- refreshControl={
-
- }
+ refreshing={isPTRing}
+ onRefresh={onRefresh}
onEndReached={onEndReached}
renderItem={renderItem}
initialNumToRender={15}
diff --git a/src/view/com/util/List.tsx b/src/view/com/util/List.tsx
index 5947fe87a1..a84dacaef2 100644
--- a/src/view/com/util/List.tsx
+++ b/src/view/com/util/List.tsx
@@ -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 = Omit<
FlatListProps,
- '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
const SCROLLED_DOWN_LIMIT = 200
function ListImpl(
- {onScrolledDownChange, ...props}: ListProps,
+ {
+ onScrolledDownChange,
+ refreshing,
+ onRefresh,
+ headerOffset,
+ style,
+ ...props
+ }: ListProps,
ref: React.Ref,
) {
const isScrolledDown = useSharedValue(false)
const contextScrollHandlers = useScrollHandlers()
+ const pal = usePalette('default')
function handleScrolledDownChange(didScrollDown: boolean) {
startTransition(() => {
@@ -49,11 +64,35 @@ function ListImpl(
},
})
+ let refreshControl
+ if (refreshing !== undefined || onRefresh !== undefined) {
+ refreshControl = (
+
+ )
+ }
+
+ let contentOffset
+ if (headerOffset != null) {
+ style = addStyle(style, {
+ paddingTop: headerOffset,
+ })
+ contentOffset = {x: 0, y: headerOffset * -1}
+ }
+
return (
)
diff --git a/src/view/com/util/moderation/ContentHider.tsx b/src/view/com/util/moderation/ContentHider.tsx
index b1ea76621b..1269b7ebf6 100644
--- a/src/view/com/util/moderation/ContentHider.tsx
+++ b/src/view/com/util/moderation/ContentHider.tsx
@@ -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({
{desc.name}
- {!moderation.noOverride && (
-
-
- {override ? 'Hide' : 'Show'}
-
-
- )}
+
+
+ {moderation.noOverride ? (
+ Learn more
+ ) : override ? (
+ Hide
+ ) : (
+ Show
+ )}
+
+
{override && {children}}
diff --git a/src/view/com/util/moderation/ScreenHider.tsx b/src/view/com/util/moderation/ScreenHider.tsx
index 946f937e9e..86f0cbf7bf 100644
--- a/src/view/com/util/moderation/ScreenHider.tsx
+++ b/src/view/com/util/moderation/ScreenHider.tsx
@@ -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 (
-
+
- Content Warning
+ {isNoPwi ? (
+ Sign-in Required
+ ) : (
+ Content Warning
+ )}
- This {screenDescription} has been flagged:
-
- {desc.name}.
-
- {
- openModal({
- name: 'moderation-details',
- context: 'account',
- moderation,
- })
- }}
- accessibilityRole="button"
- accessibilityLabel={_(msg`Learn more about this warning`)}
- accessibilityHint="">
-
- Learn More
-
-
+ {isNoPwi ? (
+
+ This account has requested that users sign in to view their profile.
+
+ ) : (
+ <>
+ This {screenDescription} has been flagged:
+
+ {desc.name}.
+
+ {
+ openModal({
+ name: 'moderation-details',
+ context: 'account',
+ moderation,
+ })
+ }}
+ accessibilityRole="button"
+ accessibilityLabel={_(msg`Learn more about this warning`)}
+ accessibilityHint="">
+
+ Learn More
+
+
+ >
+ )}{' '}
{isMobile && }
@@ -116,7 +134,7 @@ export function ScreenHider({
)}
-
+
)
}
diff --git a/src/view/icons/Logo.tsx b/src/view/icons/Logo.tsx
new file mode 100644
index 0000000000..15ab5a11c0
--- /dev/null
+++ b/src/view/icons/Logo.tsx
@@ -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 (
+
+ )
+})
diff --git a/src/view/icons/Logotype.tsx b/src/view/icons/Logotype.tsx
new file mode 100644
index 0000000000..847607a3e4
--- /dev/null
+++ b/src/view/icons/Logotype.tsx
@@ -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 (
+
+ )
+}
diff --git a/src/view/icons.ts b/src/view/icons/index.tsx
similarity index 100%
rename from src/view/icons.ts
rename to src/view/icons/index.tsx
diff --git a/src/view/screens/Feeds.tsx b/src/view/screens/Feeds.tsx
index d2d0aafb8f..9ce745c126 100644
--- a/src/view/screens/Feeds.tsx
+++ b/src/view/screens/Feeds.tsx
@@ -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={
-
- }
+ refreshing={isPTR}
+ onRefresh={isUserSearching ? undefined : onPullToRefresh}
initialNumToRender={10}
onEndReached={onEndReached}
// @ts-ignore our .web version only -prf
diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx
index 42a958b95d..bfe4402653 100644
--- a/src/view/screens/Home.tsx
+++ b/src/view/screens/Home.tsx
@@ -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">
-
+
)
}
diff --git a/src/view/screens/Profile.tsx b/src/view/screens/Profile.tsx
index 9088dda6d7..12c3a098b2 100644
--- a/src/view/screens/Profile.tsx
+++ b/src/view/screens/Profile.tsx
@@ -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(() => {
return [
diff --git a/src/view/screens/Search/Search.tsx b/src/view/screens/Search/Search.tsx
index 7404068054..cc72498330 100644
--- a/src/view/screens/Search/Search.tsx
+++ b/src/view/screens/Search/Search.tsx
@@ -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={
-
- }
+ 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 ? (
+ (
+
+
+
+ )}
+ initialPage={0}>
+
+
+
+
+
+
+
+ ) : (
+
+
+
+ Suggested Follows
+
+
+
+
+
+ )
+ }
+
return query ? (
(
-
+
)}
initialPage={0}>
-
-
-
- ) : hasSession ? (
-
-
-
- Suggested Follows
-
-
-
-
-
) : (
)}
-
- Search for posts and users.
-
+
+
+
+ {isDesktop ? (
+ Find users with the search tool on the right
+ ) : (
+ Find users on Bluesky
+ )}
+
+
)
diff --git a/src/view/shell/Drawer.tsx b/src/view/shell/Drawer.tsx
index 4d3a9531de..4fb8565e80 100644
--- a/src/view/shell/Drawer.tsx
+++ b/src/view/shell/Drawer.tsx
@@ -231,9 +231,9 @@ let DrawerContent = ({}: {}): React.ReactNode => {
onPress={onPressNotifications}
/>
)}
-
{hasSession && (
<>
+
{
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 (
{