From 53fa6b2493c43ee4c5f986c8efa2ade62d02b4c6 Mon Sep 17 00:00:00 2001 From: Austin McKinley <54160+amckinley@users.noreply.github.com> Date: Tue, 2 Jun 2026 11:04:28 -0700 Subject: [PATCH 01/31] ci: add dependabot config with 7-day cooldown (#10475) Co-authored-by: Claude Opus 4.7 (1M context) --- .github/dependabot.yml | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..9404af75f7 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,44 @@ +version: 2 +# Dependabot auto-update config. +# +# Cooldown (7 days) is the point of this config: it delays version-update +# PRs until a newly-published version has aged. Supply-chain attacks like +# the tanstack Shai-Hulud compromise (2026-05-11) live minutes-to-hours +# before the registry yanks them; a 7-day cooldown keeps poisoned +# versions out of our lockfiles. +# +# Security updates bypass cooldown and continue to flow immediately. See: +# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/dependabot-options-reference#cooldown +# +# Auto-merge is deliberately NOT enabled. Every dependabot PR gets human +# review. + +updates: + - package-ecosystem: npm + directory: / + schedule: + interval: weekly + day: monday + cooldown: + default-days: 7 + open-pull-requests-limit: 5 + groups: + production: + dependency-type: production + update-types: [minor, patch] + development: + dependency-type: development + update-types: [minor, patch] + + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + day: monday + cooldown: + default-days: 7 + open-pull-requests-limit: 3 + groups: + actions: + patterns: ["*"] + update-types: [minor, patch] From 8e5ac6790f643d68436d22db80f891a1d9cf7fba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jun 2026 11:55:39 -0700 Subject: [PATCH 02/31] Bump slackapi/slack-github-action from 2.1.1 to 3.0.3 (#10693) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-submit-android.yml | 6 +++--- .github/workflows/build-submit-ios.yml | 2 +- .github/workflows/bundle-deploy-eas-update.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-submit-android.yml b/.github/workflows/build-submit-android.yml index 719b2e836e..fe9d5b1c5b 100644 --- a/.github/workflows/build-submit-android.yml +++ b/.github/workflows/build-submit-android.yml @@ -128,7 +128,7 @@ jobs: - name: 🔔 Notify Slack of Production Build if: ${{ inputs.profile == 'production' }} - uses: slackapi/slack-github-action@v2.1.1 + uses: slackapi/slack-github-action@v3.0.3 with: webhook: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }} webhook-type: incoming-webhook @@ -138,7 +138,7 @@ jobs: - name: 🔔 Notify Slack of Testflight Build if: ${{ inputs.profile != 'production' }} - uses: slackapi/slack-github-action@v2.1.1 + uses: slackapi/slack-github-action@v3.0.3 with: webhook: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }} webhook-type: incoming-webhook @@ -174,7 +174,7 @@ jobs: - name: 🔔 Notify Slack of Production APK Build if: ${{ inputs.profile == 'production' }} - uses: slackapi/slack-github-action@v2.1.1 + uses: slackapi/slack-github-action@v3.0.3 with: webhook: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }} webhook-type: incoming-webhook diff --git a/.github/workflows/build-submit-ios.yml b/.github/workflows/build-submit-ios.yml index 151941f5e4..d2cc7a7abb 100644 --- a/.github/workflows/build-submit-ios.yml +++ b/.github/workflows/build-submit-ios.yml @@ -155,7 +155,7 @@ jobs: - name: 🔔 Notify Slack of Production Build if: ${{ inputs.profile == 'production' }} - uses: slackapi/slack-github-action@v2.1.1 + uses: slackapi/slack-github-action@v3.0.3 with: webhook: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }} webhook-type: incoming-webhook diff --git a/.github/workflows/bundle-deploy-eas-update.yml b/.github/workflows/bundle-deploy-eas-update.yml index 22ea2d5cba..983494dd18 100644 --- a/.github/workflows/bundle-deploy-eas-update.yml +++ b/.github/workflows/bundle-deploy-eas-update.yml @@ -386,7 +386,7 @@ jobs: path: build.apk - name: 🔔 Notify Slack - uses: slackapi/slack-github-action@v2.1.1 + uses: slackapi/slack-github-action@v3.0.3 with: webhook: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }} webhook-type: incoming-webhook From a2c8b47b8721eca2cd14dd64e56ef0246457dc01 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jun 2026 11:56:46 -0700 Subject: [PATCH 03/31] Bump marocchino/sticky-pull-request-comment from 2 to 3 (#10692) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/pull-request-comment.yml | 6 +++--- .github/workflows/pull-request-commit.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pull-request-comment.yml b/.github/workflows/pull-request-comment.yml index c0d4e45da7..a497a5625d 100644 --- a/.github/workflows/pull-request-comment.yml +++ b/.github/workflows/pull-request-comment.yml @@ -94,7 +94,7 @@ jobs: core.setOutput('head-ref', pr.data.head.ref); - name: 💬 Drop a comment - uses: marocchino/sticky-pull-request-comment@v2 + uses: marocchino/sticky-pull-request-comment@v3 with: header: pull-request-eas-build-${{ steps.pr-info.outputs.head-sha }} number: ${{ github.event.issue.number }} @@ -181,7 +181,7 @@ jobs: RUNTIME_VERSION: - name: 💬 Drop a comment - uses: marocchino/sticky-pull-request-comment@v2 + uses: marocchino/sticky-pull-request-comment@v3 env: ISSUE_NUMBER: ${{ github.event.issue.number }} with: @@ -198,7 +198,7 @@ jobs: *Generated by [PR labeler](https://github.com/expo/expo/actions/workflows/pr-labeler.yml) 🤖* - name: 💬 Drop a comment - uses: marocchino/sticky-pull-request-comment@v2 + uses: marocchino/sticky-pull-request-comment@v3 if: failure() with: header: pull-request-eas-build-${{ steps.pr-info.outputs.head-sha }} diff --git a/.github/workflows/pull-request-commit.yml b/.github/workflows/pull-request-commit.yml index 722af1f000..976fa35662 100644 --- a/.github/workflows/pull-request-commit.yml +++ b/.github/workflows/pull-request-commit.yml @@ -96,7 +96,7 @@ jobs: excluded_assets: "(.+).chunk.js|(.+).js.map|(.+).json|(.+).png|(.+).svg|(.+).webp|(.+).jpg|(.+).ico" - name: 💬 Drop a comment - uses: marocchino/sticky-pull-request-comment@v2 + uses: marocchino/sticky-pull-request-comment@v3 with: header: bundle-diff message: | @@ -133,7 +133,7 @@ jobs: profile: pull-request - name: 💬 Drop a comment - uses: marocchino/sticky-pull-request-comment@v2 + uses: marocchino/sticky-pull-request-comment@v3 if: ${{ steps.fingerprint.outputs.includes-changes }} with: header: fingerprint-diff @@ -151,7 +151,7 @@ jobs: *Generated by [PR labeler](https://github.com/expo/expo/actions/workflows/pr-labeler.yml) 🤖* - name: 💬 Delete comment - uses: marocchino/sticky-pull-request-comment@v2 + uses: marocchino/sticky-pull-request-comment@v3 if: ${{ !steps.fingerprint.outputs.includes-changes }} with: header: fingerprint-diff From d08ab487d87457b6cb8d804a48cd4b37952dd45e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jun 2026 11:57:43 -0700 Subject: [PATCH 04/31] Bump actions/create-github-app-token from 1 to 3 (#10691) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/sync-internal.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sync-internal.yaml b/.github/workflows/sync-internal.yaml index 562ce96bea..03120eaebc 100644 --- a/.github/workflows/sync-internal.yaml +++ b/.github/workflows/sync-internal.yaml @@ -15,7 +15,7 @@ jobs: fetch-depth: 0 - name: Generate GitHub App Token id: app-token - uses: actions/create-github-app-token@v1 + uses: actions/create-github-app-token@v3 with: app-id: ${{ vars.SYNC_INTERNAL_APP_ID }} private-key: ${{ secrets.SYNC_INTERNAL_PK }} From 56496520d6cfbbb6699587b7949df81efa548810 Mon Sep 17 00:00:00 2001 From: DS Boyce <260543580+ds-boyce@users.noreply.github.com> Date: Tue, 2 Jun 2026 12:02:49 -0700 Subject: [PATCH 05/31] Create logged-out view for group chat invites (#10598) Co-authored-by: Samuel Newman --- assets/images/chat-desktop-bg-dark.webp | Bin 0 -> 264956 bytes assets/images/chat-desktop-bg-light.webp | Bin 0 -> 220052 bytes assets/images/chat-mobile-bg-dark.webp | Bin 0 -> 68756 bytes assets/images/chat-mobile-bg-light.webp | Bin 0 -> 65602 bytes src/App.native.tsx | 12 +- src/App.web.tsx | 12 +- src/Navigation.tsx | 14 + src/components/AvatarBubbles.tsx | 26 +- src/components/Link.tsx | 10 + ...ry.native.ts => useLandingEntry.native.ts} | 32 +- ...StarterPackEntry.ts => useLandingEntry.ts} | 12 +- .../intents/GroupChatJoinDialog.tsx | 432 ++++++++++++++++++ src/components/intents/IntentDialogs.tsx | 71 ++- src/lib/constants.ts | 1 + src/lib/hooks/useIntentHandler.ts | 51 +++ src/lib/strings/url-helpers.ts | 22 + src/screens/Messages/JoinRequest.tsx | 305 +++++++++++++ .../Messages/components/InviteLinkDialog.tsx | 4 +- .../components/MessagesListGroupInfoPanel.tsx | 9 +- src/screens/Onboarding/StepFinished/index.tsx | 4 +- src/screens/Signup/index.tsx | 2 +- .../StarterPack/StarterPackLandingScreen.tsx | 2 +- src/screens/StarterPack/StarterPackScreen.tsx | 2 +- src/state/preferences/moderation-opts.tsx | 4 +- src/state/queries/join-links.ts | 72 +++ .../messages/request-join-group-chat.ts | 37 ++ .../messages/withdraw-join-group-chat.ts | 38 ++ src/state/shell/landing.tsx | 66 +++ src/state/shell/logged-out.tsx | 42 +- src/view/com/auth/LoggedOut.tsx | 49 +- src/view/com/util/Link.tsx | 23 +- src/view/icons/LogomarkWithType.tsx | 55 +++ 32 files changed, 1331 insertions(+), 78 deletions(-) create mode 100644 assets/images/chat-desktop-bg-dark.webp create mode 100644 assets/images/chat-desktop-bg-light.webp create mode 100644 assets/images/chat-mobile-bg-dark.webp create mode 100644 assets/images/chat-mobile-bg-light.webp rename src/components/hooks/{useStarterPackEntry.native.ts => useLandingEntry.native.ts} (64%) rename src/components/hooks/{useStarterPackEntry.ts => useLandingEntry.ts} (76%) create mode 100644 src/components/intents/GroupChatJoinDialog.tsx create mode 100644 src/screens/Messages/JoinRequest.tsx create mode 100644 src/state/queries/join-links.ts create mode 100644 src/state/queries/messages/request-join-group-chat.ts create mode 100644 src/state/queries/messages/withdraw-join-group-chat.ts create mode 100644 src/state/shell/landing.tsx create mode 100644 src/view/icons/LogomarkWithType.tsx diff --git a/assets/images/chat-desktop-bg-dark.webp b/assets/images/chat-desktop-bg-dark.webp new file mode 100644 index 0000000000000000000000000000000000000000..9a3929f2f210b2597e7b8936358f85a2ae97cb66 GIT binary patch literal 264956 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%0D&IvS+H?9*eOlf+rY5X6?-a06bFA5VK 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

}BtX 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 Dp>5*g literal 0 HcmV?d00001 diff --git a/assets/images/chat-desktop-bg-light.webp b/assets/images/chat-desktop-bg-light.webp new file mode 100644 index 0000000000000000000000000000000000000000..099a1045a3afc32a8b118b6d5a072dc27a5e4798 GIT binary patch literal 220052 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

xhVN@Z^Mn~9swZQ;KJY(Ot`kZRS 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

4D29ATHO;R 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�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 A%>V!Z literal 0 HcmV?d00001 diff --git a/src/App.native.tsx b/src/App.native.tsx index 2654c6ed83..22dd39f9d7 100644 --- a/src/App.native.tsx +++ b/src/App.native.tsx @@ -47,18 +47,18 @@ import { import {readLastActiveAccount} from '#/state/session/util' import {Provider as ShellStateProvider} from '#/state/shell' import {Provider as ComposerProvider} from '#/state/shell/composer' +import {Provider as LandingProvider} from '#/state/shell/landing' import {Provider as LoggedOutViewProvider} from '#/state/shell/logged-out' import {Provider as OnboardingProvider} from '#/state/shell/onboarding' import {Provider as ProgressGuideProvider} from '#/state/shell/progress-guide' import {Provider as SelectedFeedProvider} from '#/state/shell/selected-feed' -import {Provider as StarterPackProvider} from '#/state/shell/starter-pack' import {Provider as HiddenRepliesProvider} from '#/state/threadgate-hidden-replies' import {TestCtrls} from '#/view/com/testing/TestCtrls' import {Shell} from '#/view/shell' import {atoms as a, ThemeProvider as Alf} from '#/alf' import {useColorModeTheme} from '#/alf/util/useColorModeTheme' import {Provider as ContextMenuProvider} from '#/components/ContextMenu' -import {useStarterPackEntry} from '#/components/hooks/useStarterPackEntry' +import {useLandingEntry} from '#/components/hooks/useLandingEntry' import {Provider as IntentDialogProvider} from '#/components/intents/IntentDialogs' import {Provider as LightboxStateProvider} from '#/components/Lightbox/state' import {Provider as PolicyUpdateOverlayProvider} from '#/components/PolicyUpdateOverlay' @@ -113,7 +113,7 @@ function InnerApp() { const {resumeSession} = useSessionApi() const theme = useColorModeTheme() const {t: l} = useLingui() - const hasCheckedReferrer = useStarterPackEntry() + const hasCheckedLanding = useLandingEntry() // init useEffect(() => { @@ -146,7 +146,7 @@ function InnerApp() { - + - + - + diff --git a/src/App.web.tsx b/src/App.web.tsx index 5c22b3c921..6faf6f2218 100644 --- a/src/App.web.tsx +++ b/src/App.web.tsx @@ -40,17 +40,17 @@ import { import {readLastActiveAccount} from '#/state/session/util' import {Provider as ShellStateProvider} from '#/state/shell' import {Provider as ComposerProvider} from '#/state/shell/composer' +import {Provider as LandingProvider} from '#/state/shell/landing' import {Provider as LoggedOutViewProvider} from '#/state/shell/logged-out' import {Provider as OnboardingProvider} from '#/state/shell/onboarding' import {Provider as ProgressGuideProvider} from '#/state/shell/progress-guide' import {Provider as SelectedFeedProvider} from '#/state/shell/selected-feed' -import {Provider as StarterPackProvider} from '#/state/shell/starter-pack' import {Provider as HiddenRepliesProvider} from '#/state/threadgate-hidden-replies' import {Shell} from '#/view/shell/index' import {ThemeProvider as Alf} from '#/alf' import {useColorModeTheme} from '#/alf/util/useColorModeTheme' import {Provider as ContextMenuProvider} from '#/components/ContextMenu' -import {useStarterPackEntry} from '#/components/hooks/useStarterPackEntry' +import {useLandingEntry} from '#/components/hooks/useLandingEntry' import {Provider as IntentDialogProvider} from '#/components/intents/IntentDialogs' import {Provider as LightboxStateProvider} from '#/components/Lightbox/state' import {Provider as PolicyUpdateOverlayProvider} from '#/components/PolicyUpdateOverlay' @@ -92,7 +92,7 @@ function InnerApp() { const {resumeSession} = useSessionApi() const theme = useColorModeTheme() const {t: l} = useLingui() - const hasCheckedReferrer = useStarterPackEntry() + const hasCheckedLanding = useLandingEntry() // init useEffect(() => { @@ -125,7 +125,7 @@ function InnerApp() { - + - + - + diff --git a/src/Navigation.tsx b/src/Navigation.tsx index 6284aff34b..1348a975ea 100644 --- a/src/Navigation.tsx +++ b/src/Navigation.tsx @@ -44,6 +44,7 @@ import { type State, } from '#/lib/routes/types' import {bskyTitle} from '#/lib/strings/headings' +import {CHAT_INVITE_CODE_REGEX} from '#/lib/strings/url-helpers' import {useUnreadNotifications} from '#/state/queries/notifications/unread' import {useSession} from '#/state/session' import {useLoggedOutViewControls} from '#/state/shell/logged-out' @@ -797,6 +798,19 @@ const LINKING = { return buildStateObject('Flat', 'Home', params) } + // Chat invite URLs (`/c/:code`) are handled by `useIntentHandler`, which + // opens the GroupChatJoinDialog (or the logged-out join flow). Route the + // path to Home so the dialog overlays Home instead of NotFound. On native, + // react-navigation strips the `bluesky://` prefix and passes the path + // without a leading slash, so normalize before matching. + const normalizedPath = path.startsWith('/') ? path : `/${path}` + if (CHAT_INVITE_CODE_REGEX.test(normalizedPath.split('?')[0])) { + if (IS_NATIVE) { + return buildStateObject('HomeTab', 'Home', params) + } + return buildStateObject('Flat', 'Home', params) + } + if (IS_NATIVE) { if (name === 'Search') { return buildStateObject('SearchTab', 'Search', params) diff --git a/src/components/AvatarBubbles.tsx b/src/components/AvatarBubbles.tsx index 880a5284f0..c49dada16f 100644 --- a/src/components/AvatarBubbles.tsx +++ b/src/components/AvatarBubbles.tsx @@ -28,23 +28,29 @@ type Layout = { border?: boolean } -type Props = { - animate?: boolean - profiles: bsky.profile.AnyProfileView[] - size?: number - moderationOpts?: ModerationOpts -} - export function AvatarBubbles({ animate = false, profiles: allProfiles, + self = false, size = 120, moderationOpts, -}: Props) { +}: { + animate?: boolean + profiles: bsky.profile.AnyProfileView[] + /** + * By default, when there are more than 2 profiles, the current user is + * filtered out (so you don't see yourself among your own group's members). + * Set this to `true` for cases where every passed profile should appear, + * e.g. an invite preview where the owner is meaningful regardless of viewer. + */ + self?: boolean + size?: number + moderationOpts?: ModerationOpts +}) { const {currentAccount} = useSession() const profiles = - allProfiles.length > 2 - ? allProfiles.filter(p => p.did !== currentAccount?.did) + !self && allProfiles.length > 2 + ? allProfiles.filter(p => p?.did != null && p.did !== currentAccount?.did) : allProfiles const moderations = useMemo(() => { if (!moderationOpts) return [] diff --git a/src/components/Link.tsx b/src/components/Link.tsx index fcb2e8a87f..8795c8e899 100644 --- a/src/components/Link.tsx +++ b/src/components/Link.tsx @@ -12,6 +12,7 @@ import { } from '@react-navigation/native' import {BSKY_DOWNLOAD_URL} from '#/lib/constants' +import {useGroupChatJoinIntent} from '#/lib/hooks/useIntentHandler' import {useNavigationDeduped} from '#/lib/hooks/useNavigationDeduped' import {useOpenLink} from '#/lib/hooks/useOpenLink' import {type AllNavigatorParams, type RouteParams} from '#/lib/routes/types' @@ -19,6 +20,7 @@ import {shareUrl} from '#/lib/sharing' import { convertBskyAppUrlIfNeeded, createProxiedUrl, + getChatInviteCodeFromUrl, isBskyDownloadUrl, isExternalUrl, linkRequiresWarning, @@ -130,6 +132,7 @@ export function useLink({ const {closeModal} = useModalControls() const {linkWarningDialogControl} = useGlobalDialogsControlContext() const openLink = useOpenLink() + const groupChatJoinIntent = useGroupChatJoinIntent() const onPress = useCallback( (e: GestureResponderEvent) => { @@ -148,6 +151,12 @@ export function useLink({ e.preventDefault() } + const chatInviteCode = getChatInviteCodeFromUrl(href) + if (chatInviteCode) { + groupChatJoinIntent(chatInviteCode, href) + return + } + if (requiresWarning) { linkWarningDialogControl.open({ displayText, @@ -228,6 +237,7 @@ export function useLink({ overridePresentation, shouldProxy, linkWarningDialogControl, + groupChatJoinIntent, ], ) diff --git a/src/components/hooks/useStarterPackEntry.native.ts b/src/components/hooks/useLandingEntry.native.ts similarity index 64% rename from src/components/hooks/useStarterPackEntry.native.ts rename to src/components/hooks/useLandingEntry.native.ts index 31221d599d..c5950a6469 100644 --- a/src/components/hooks/useStarterPackEntry.native.ts +++ b/src/components/hooks/useLandingEntry.native.ts @@ -1,22 +1,45 @@ import {useEffect, useState} from 'react' +import * as Linking from 'expo-linking' +import {parseLinkingUrl} from '#/lib/parseLinkingUrl' import { createStarterPackLinkFromAndroidReferrer, httpStarterPackUriToAtUri, } from '#/lib/strings/starter-pack' +import {CHAT_INVITE_CODE_REGEX} from '#/lib/strings/url-helpers' import {useHasCheckedForStarterPack} from '#/state/preferences/used-starter-packs' -import {useSetActiveStarterPack} from '#/state/shell/starter-pack' +import { + useSetActiveLanding, + useSetActiveStarterPack, +} from '#/state/shell/landing' import {IS_ANDROID} from '#/env' import {Referrer, SharedPrefs} from '../../../modules/expo-bluesky-swiss-army' -export function useStarterPackEntry() { +export function useLandingEntry() { const [ready, setReady] = useState(false) const setActiveStarterPack = useSetActiveStarterPack() + const setActiveLanding = useSetActiveLanding() const hasCheckedForStarterPack = useHasCheckedForStarterPack() useEffect(() => { if (ready) return + // Check for group chat invite link from the initial deep link URL + const linkingUrl = Linking.getLinkingURL() + if (linkingUrl) { + const urlp = parseLinkingUrl(linkingUrl) + const chatInviteMatch = urlp.pathname.match(CHAT_INVITE_CODE_REGEX) + if (chatInviteMatch) { + setActiveLanding({ + type: 'groupchat', + uri: linkingUrl, + code: chatInviteMatch[1], + }) + setReady(true) + return + } + } + // On Android, we cannot clear the referral link. It gets stored for 90 days and all we can do is query for it. So, // let's just ensure we never check again after the first time. if (hasCheckedForStarterPack) { @@ -29,7 +52,8 @@ export function useStarterPackEntry() { setReady(true) }, 500) - ;(async () => { + void (async () => { + // Check for starter pack let uri: string | null | undefined if (IS_ANDROID) { @@ -58,7 +82,7 @@ export function useStarterPackEntry() { return () => { clearTimeout(timeout) } - }, [ready, setActiveStarterPack, hasCheckedForStarterPack]) + }, [ready, setActiveStarterPack, setActiveLanding, hasCheckedForStarterPack]) return ready } diff --git a/src/components/hooks/useStarterPackEntry.ts b/src/components/hooks/useLandingEntry.ts similarity index 76% rename from src/components/hooks/useStarterPackEntry.ts rename to src/components/hooks/useLandingEntry.ts index ccbd991574..e3b728a5a0 100644 --- a/src/components/hooks/useStarterPackEntry.ts +++ b/src/components/hooks/useLandingEntry.ts @@ -1,25 +1,27 @@ import {useEffect, useState} from 'react' import {httpStarterPackUriToAtUri} from '#/lib/strings/starter-pack' -import {useSetActiveStarterPack} from '#/state/shell/starter-pack' +import {useSetActiveStarterPack} from '#/state/shell/landing' -export function useStarterPackEntry() { +export function useLandingEntry() { const [ready, setReady] = useState(false) - const setActiveStarterPack = useSetActiveStarterPack() useEffect(() => { const href = window.location.href - const atUri = httpStarterPackUriToAtUri(href) + const url = new URL(href) + // Check for starter pack + const atUri = httpStarterPackUriToAtUri(href) if (atUri) { - const url = new URL(href) // Determines if an App Clip is loading this landing page const isClip = url.searchParams.get('clip') === 'true' setActiveStarterPack({ uri: atUri, isClip, }) + setReady(true) + return } setReady(true) diff --git a/src/components/intents/GroupChatJoinDialog.tsx b/src/components/intents/GroupChatJoinDialog.tsx new file mode 100644 index 0000000000..f787a89c3a --- /dev/null +++ b/src/components/intents/GroupChatJoinDialog.tsx @@ -0,0 +1,432 @@ +import {View} from 'react-native' +import { + ChatBskyGroupRequestJoin, + ChatBskyGroupWithdrawJoinRequest, + moderateProfile, +} from '@atproto/api' +import {Trans, useLingui} from '@lingui/react/macro' +import {useNavigation} from '@react-navigation/native' + +import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name' +import {makeProfileLink} from '#/lib/routes/links' +import {type NavigationProp} from '#/lib/routes/types' +import {isNetworkError} from '#/lib/strings/errors' +import {sanitizeHandle} from '#/lib/strings/handles' +import {logger} from '#/logger' +import {useModerationOpts} from '#/state/preferences/moderation-opts' +import {useJoinLinkPreviewsQuery} from '#/state/queries/join-links' +import {useRequestJoinGroupChat} from '#/state/queries/messages/request-join-group-chat' +import {useWithdrawJoinGroupChatRequest} from '#/state/queries/messages/withdraw-join-group-chat' +import {useSession} from '#/state/session' +import {atoms as a, useTheme, web} from '#/alf' +import {AvatarBubbles} from '#/components/AvatarBubbles' +import { + Button, + type ButtonColor, + ButtonIcon, + ButtonText, +} from '#/components/Button' +import * as Dialog from '#/components/Dialog' +import {useInteractionState} from '#/components/hooks/useInteractionState' +import {ArrowRight_Stroke2_Corner0_Rounded as ArrowRightIcon} from '#/components/icons/Arrow' +import {ArrowBoxRight_Stroke2_Corner3_Rounded as JoinIcon} from '#/components/icons/ArrowBoxRight' +import {ChainLinkBroken_Stroke2_Corner0_Rounded as ChainLinkBrokenIcon} from '#/components/icons/ChainLink' +import {PersonGroup_Stroke2_Corner2_Rounded as PersonGroupIcon} from '#/components/icons/Person' +import {RaisingHand4Finger_Stroke2_Corner2_Rounded as HandIcon} from '#/components/icons/RaisingHand' +import {TimesLarge_Stroke2_Corner0_Rounded as XIcon} from '#/components/icons/Times' +import {Warning_Stroke2_Corner0_Rounded as WarningIcon} from '#/components/icons/Warning' +import {useIntentDialogs} from '#/components/intents/IntentDialogs' +import {InlineLinkText} from '#/components/Link' +import {Loader} from '#/components/Loader' +import * as Toast from '#/components/Toast' +import {Text} from '#/components/Typography' +import {ProfileBadges} from '../ProfileBadges' + +export function GroupChatJoinDialog() { + const {groupChatJoinDialogControl, groupChatJoinState} = useIntentDialogs() + + return ( + + + + + ) +} + +function GroupChatJoinDialogInner({code}: {code?: string}) { + const {t: l} = useLingui() + + return ( + + + + + + + ) +} + +function GroupChatJoinDialogContent({code}: {code?: string}) { + const t = useTheme() + const {t: l} = useLingui() + const {groupChatJoinDialogControl: control} = useIntentDialogs() + const {hasSession} = useSession() + const moderationOpts = useModerationOpts() + const navigation = useNavigation() + + const {data, error, isLoading} = useJoinLinkPreviewsQuery({ + codes: code ? [code] : undefined, + hasSession, + }) + + const {mutate: joinGroupChat, isPending: isJoinPending} = + useRequestJoinGroupChat({ + onSuccess: data => { + switch (data.status) { + case 'pending': + control.close(() => { + Toast.show( + l`Access requested! The group owner will review your request.`, + ) + }) + break + case 'joined': { + if (data.convo && data.convo.id) { + control.close(() => { + Toast.show(l`Successfully joined the group chat!`) + navigation.navigate('MessagesConversation', { + conversation: data.convo!.id, + }) + }) + } else { + logger.warn('Request to join group chat returned no convo ID', { + status: data.status, + convoId: data.convo?.id, + }) + } + break + } + } + }, + onError: error => { + let errorMessage = l`Failed to join the group chat. Please try again.` + if (isNetworkError(error)) { + errorMessage = l`There was a problem with your internet connection, please try again` + } else if (error instanceof ChatBskyGroupRequestJoin.ConvoLockedError) { + errorMessage = l`This conversation is locked.` + } else if ( + error instanceof ChatBskyGroupRequestJoin.FollowRequiredError + ) { + errorMessage = l`Only followers can join this group chat.` + } else if (error instanceof ChatBskyGroupRequestJoin.InvalidCodeError) { + errorMessage = l`Invalid group chat code.` + } else if ( + error instanceof ChatBskyGroupRequestJoin.LinkDisabledError + ) { + errorMessage = l`This invite link has been disabled.` + } else if ( + error instanceof ChatBskyGroupRequestJoin.MemberLimitReachedError + ) { + errorMessage = l`The member limit has been reached.` + } else if (error instanceof ChatBskyGroupRequestJoin.UserKickedError) { + errorMessage = l`You have been removed from this group.` + } + Toast.show(errorMessage) + }, + }) + + const {mutate: withdrawRequest, isPending: isWithdrawPending} = + useWithdrawJoinGroupChatRequest({ + onSuccess: () => { + control.close(() => { + Toast.show(l`Join request rescinded.`) + }) + }, + onError: error => { + let errorMessage = l`Failed to rescind your request. Please try again.` + if (isNetworkError(error)) { + errorMessage = l`There was a problem with your internet connection, please try again` + } else if ( + error instanceof + ChatBskyGroupWithdrawJoinRequest.InvalidJoinRequestError + ) { + errorMessage = l`Invalid rescind request.` + } + Toast.show(errorMessage) + }, + }) + + const { + state: interacted, + onIn: onInteract, + onOut: onInteractOut, + } = useInteractionState() + + const handleJoin = () => { + if (!code) return + joinGroupChat({code}) + } + + const handleWithdraw = () => { + if (!convoId) return + withdrawRequest({convoId}) + } + + // Fallback if the prefetch exceeds the timeout + if (isLoading || !data || !moderationOpts) { + return ( + + + + ) + } + + if (error) { + return ( + <> + + + This invite link is invalid + + + + ) + } + + const joinLinkPreview = data.joinLinkPreviews[0] + + if (!joinLinkPreview) { + return ( + <> + + + + + Chat invite link no longer available + + + + + + ) + } + + const convoId = joinLinkPreview.convo?.id + const isFollowing = joinLinkPreview.owner.viewer?.following ?? false + const hasRequested = !convoId && joinLinkPreview.viewer?.requestedAt != null + + let canJoin = true + let ButtonIconImage = isJoinPending || isWithdrawPending ? Loader : JoinIcon + let buttonText = joinLinkPreview.requireApproval + ? l`Request to join` + : l`Join` + let buttonColor: ButtonColor = 'primary' + if (joinLinkPreview.enabledStatus !== 'enabled') { + canJoin = false + ButtonIconImage = WarningIcon + buttonText = l`Chat invite link no longer available` + buttonColor = 'secondary' + } else if (joinLinkPreview.memberCount >= joinLinkPreview.memberLimit) { + canJoin = false + ButtonIconImage = HandIcon + buttonText = l`This chat is full` + buttonColor = 'secondary' + } else if (joinLinkPreview.joinRule === 'followedByOwner' && !isFollowing) { + canJoin = false + ButtonIconImage = HandIcon + buttonText = l`Only people the chat owner follows can join` + buttonColor = 'secondary' + } else if (hasRequested) { + ButtonIconImage = XIcon + buttonText = l`Rescind request` + buttonColor = 'secondary' + } + + return ( + <> + + + + + + Group chat + + + {joinLinkPreview.name} + + + + + + {joinLinkPreview.memberCount}/{joinLinkPreview.memberLimit}{' '} + members + + + + + + + {joinLinkPreview.joinRule === 'followedByOwner' + ? l`Followers can join` + : l`Anyone can join`} + + + + + + By{' '} + { + onInteract() + }, + onMouseLeave: () => { + onInteractOut() + }, + })}> + {createSanitizedDisplayName( + joinLinkPreview.owner, + true, + moderateProfile(joinLinkPreview.owner, moderationOpts).ui( + 'displayName', + ), + )} + + + + + + {sanitizeHandle(joinLinkPreview.owner.handle, '@')} + + + + + {convoId ? ( + + ) : ( + + )} + + ) +} diff --git a/src/components/intents/IntentDialogs.tsx b/src/components/intents/IntentDialogs.tsx index ea72f8c099..76809b366a 100644 --- a/src/components/intents/IntentDialogs.tsx +++ b/src/components/intents/IntentDialogs.tsx @@ -1,13 +1,30 @@ -import {createContext, useContext, useMemo, useState} from 'react' +import { + createContext, + useContext, + useEffect, + useMemo, + useRef, + useState, +} from 'react' +import {usePrefetchJoinLinkPreviews} from '#/state/queries/join-links' +import {useSession} from '#/state/session' +import { + useActiveGroupChatJoinRequest, + useSetActiveLanding, +} from '#/state/shell/landing' import * as Dialog from '#/components/Dialog' import {type DialogControlProps} from '#/components/Dialog' +import {GroupChatJoinDialog} from '#/components/intents/GroupChatJoinDialog' import {VerifyEmailIntentDialog} from '#/components/intents/VerifyEmailIntentDialog' interface Context { verifyEmailDialogControl: DialogControlProps verifyEmailState: {code: string} | undefined setVerifyEmailState: (state: {code: string} | undefined) => void + groupChatJoinDialogControl: DialogControlProps + groupChatJoinState: {code: string} | undefined + setGroupChatJoinState: (state: {code: string} | undefined) => void } const Context = createContext({} as Context) @@ -19,20 +36,70 @@ export function Provider({children}: {children: React.ReactNode}) { const [verifyEmailState, setVerifyEmailState] = useState< {code: string} | undefined >() + const groupChatJoinDialogControl = Dialog.useDialogControl() + const [groupChatJoinState, setGroupChatJoinState] = useState< + {code: string} | undefined + >() + + const {hasSession} = useSession() + const groupChatLanding = useActiveGroupChatJoinRequest() + const setActiveLanding = useSetActiveLanding() + const prefetchJoinLinkPreviews = usePrefetchJoinLinkPreviews() + const landingHandledRef = useRef(false) + + useEffect(() => { + if (hasSession && groupChatLanding && !landingHandledRef.current) { + landingHandledRef.current = true + const code = groupChatLanding.code + setActiveLanding(undefined) + const prefetch = prefetchJoinLinkPreviews({ + codes: [code], + hasSession: true, + }) + void Promise.race([ + prefetch, + new Promise(res => setTimeout(res, 200)), + ]).finally(() => { + setGroupChatJoinState({code}) + groupChatJoinDialogControl.open() + }) + } + if (!groupChatLanding) { + landingHandledRef.current = false + } + }, [ + hasSession, + groupChatLanding, + setActiveLanding, + setGroupChatJoinState, + prefetchJoinLinkPreviews, + groupChatJoinDialogControl, + ]) const value = useMemo( () => ({ verifyEmailDialogControl, verifyEmailState, setVerifyEmailState, + groupChatJoinDialogControl, + groupChatJoinState, + setGroupChatJoinState, }), - [verifyEmailDialogControl, verifyEmailState, setVerifyEmailState], + [ + verifyEmailDialogControl, + verifyEmailState, + setVerifyEmailState, + groupChatJoinDialogControl, + groupChatJoinState, + setGroupChatJoinState, + ], ) return ( {children} + ) } diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 95eb57fd54..a22700f880 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -13,6 +13,7 @@ export const PUBLIC_BSKY_SERVICE = 'https://public.api.bsky.app' export const DEFAULT_SERVICE = BSKY_SERVICE const HELP_DESK_LANG = 'en-us' export const HELP_DESK_URL = `https://blueskyweb.zendesk.com/hc/${HELP_DESK_LANG}` +export const CHAT_SERVICE = 'https://api.bsky.chat' export const EMBED_SERVICE = 'https://embed.bsky.app' export const EMBED_SCRIPT = `${EMBED_SERVICE}/static/embed.js` export const BSKY_DOWNLOAD_URL = 'https://bsky.app/download' diff --git a/src/lib/hooks/useIntentHandler.ts b/src/lib/hooks/useIntentHandler.ts index c35ca49b16..5a9d0b39fe 100644 --- a/src/lib/hooks/useIntentHandler.ts +++ b/src/lib/hooks/useIntentHandler.ts @@ -5,7 +5,11 @@ import * as WebBrowser from 'expo-web-browser' import {useOpenComposer} from '#/lib/hooks/useOpenComposer' import {parseLinkingUrl} from '#/lib/parseLinkingUrl' +import {CHAT_INVITE_CODE_REGEX} from '#/lib/strings/url-helpers' +import {usePrefetchJoinLinkPreviews} from '#/state/queries/join-links' import {useSession} from '#/state/session' +import {useSetActiveLanding} from '#/state/shell/landing' +import {useLoggedOutViewControls} from '#/state/shell/logged-out' import {useCloseAllActiveElements} from '#/state/util' import {useIntentDialogs} from '#/components/intents/IntentDialogs' import {useAnalytics} from '#/analytics' @@ -25,6 +29,7 @@ export function useIntentHandler() { const ax = useAnalytics() const composeIntent = useComposeIntent() const verifyEmailIntent = useVerifyEmailIntent() + const groupChatJoinIntent = useGroupChatJoinIntent() const {currentAccount} = useSession() const {tryApplyUpdate} = useApplyPullRequestOTAUpdate() @@ -44,6 +49,11 @@ export function useIntentHandler() { }) } const urlp = parseLinkingUrl(url) + const chatInviteMatch = urlp.pathname.match(CHAT_INVITE_CODE_REGEX) + if (chatInviteMatch) { + groupChatJoinIntent(chatInviteMatch[1], url) + return + } const [, intent, intentType] = urlp.pathname.split('/') // On native, our links look like bluesky://intent/SomeIntent, so we have to check the hostname for the @@ -99,6 +109,7 @@ export function useIntentHandler() { ax, composeIntent, verifyEmailIntent, + groupChatJoinIntent, currentAccount, tryApplyUpdate, ]) @@ -162,6 +173,46 @@ export function useComposeIntent() { ) } +export function useGroupChatJoinIntent() { + const closeAllActiveElements = useCloseAllActiveElements() + const {hasSession} = useSession() + const {groupChatJoinDialogControl: control, setGroupChatJoinState: setState} = + useIntentDialogs() + const {requestSwitchToAccount} = useLoggedOutViewControls() + const setActiveLanding = useSetActiveLanding() + const prefetchJoinLinkPreviews = usePrefetchJoinLinkPreviews() + return useCallback( + (code: string, uri?: string) => { + closeAllActiveElements() + if (hasSession) { + setState({code}) + const prefetch = prefetchJoinLinkPreviews({ + codes: [code], + hasSession: true, + }) + void Promise.race([ + prefetch, + new Promise(res => setTimeout(res, 200)), + ]).finally(() => { + control.open() + }) + } else { + setActiveLanding({type: 'groupchat', uri: uri ?? '', code}) + requestSwitchToAccount({requestedAccount: 'groupchat'}) + } + }, + [ + closeAllActiveElements, + hasSession, + control, + setState, + prefetchJoinLinkPreviews, + requestSwitchToAccount, + setActiveLanding, + ], + ) +} + function useVerifyEmailIntent() { const closeAllActiveElements = useCloseAllActiveElements() const {verifyEmailDialogControl: control, setVerifyEmailState: setState} = diff --git a/src/lib/strings/url-helpers.ts b/src/lib/strings/url-helpers.ts index cd2ae29afe..b5c278dacf 100644 --- a/src/lib/strings/url-helpers.ts +++ b/src/lib/strings/url-helpers.ts @@ -178,6 +178,28 @@ export function isBskyStarterPackUrl(url: string): boolean { return false } +export const CHAT_INVITE_CODE_REGEX = /^\/c\/([a-zA-Z0-9]{7,10})$/ + +export function getChatInviteCodeFromUrl(url: string): string | undefined { + let pathname: string + if (isBskyAppUrl(url)) { + try { + pathname = new URL(url).pathname + } catch { + return undefined + } + } else if (url.startsWith('/')) { + pathname = url.split('?')[0].split('#')[0] + } else { + return undefined + } + return pathname.match(CHAT_INVITE_CODE_REGEX)?.[1] +} + +export function isBskyChatInviteUrl(url: string): boolean { + return getChatInviteCodeFromUrl(url) !== undefined +} + export function isBskyDownloadUrl(url: string): boolean { if (isExternalUrl(url)) { return false diff --git a/src/screens/Messages/JoinRequest.tsx b/src/screens/Messages/JoinRequest.tsx new file mode 100644 index 0000000000..c6da1f91ec --- /dev/null +++ b/src/screens/Messages/JoinRequest.tsx @@ -0,0 +1,305 @@ +import {View} from 'react-native' +import {ImageBackground} from 'expo-image' +import {moderateProfile} from '@atproto/api' +import {Trans, useLingui} from '@lingui/react/macro' + +import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name' +import {sanitizeHandle} from '#/lib/strings/handles' +import {useModerationOpts} from '#/state/preferences/moderation-opts' +import {useJoinLinkPreviewsQuery} from '#/state/queries/join-links' +import {useActiveGroupChatJoinRequest} from '#/state/shell/landing' +import {LoggedOutScreenState} from '#/view/com/auth/LoggedOut' +import {LogomarkWithType} from '#/view/icons/LogomarkWithType' +import {atoms as a, useBreakpoints, useTheme} from '#/alf' +import {AvatarBubbles} from '#/components/AvatarBubbles' +import {Button, ButtonText} from '#/components/Button' +import {ChainLinkBroken_Stroke2_Corner0_Rounded as ChainLinkBrokenIcon} from '#/components/icons/ChainLink' +import {PersonGroup_Stroke2_Corner2_Rounded as PersonGroupIcon} from '#/components/icons/Person' +import {ProfileBadges} from '#/components/ProfileBadges' +import {Text} from '#/components/Typography' + +const desktopDarkBg = require('../../../assets/images/chat-desktop-bg-dark.webp') +const desktopLightBg = require('../../../assets/images/chat-desktop-bg-light.webp') +const mobileDarkBg = require('../../../assets/images/chat-mobile-bg-dark.webp') +const mobileLightBg = require('../../../assets/images/chat-mobile-bg-light.webp') + +type Props = { + setScreenState: (state: LoggedOutScreenState) => void +} + +export function JoinRequest({setScreenState}: Props) { + const t = useTheme() + const {t: l} = useLingui() + + const {gtMobile, gtTablet} = useBreakpoints() + const moderationOpts = useModerationOpts() + + // Get code from context (logged-out only) + const contextJoinRequest = useActiveGroupChatJoinRequest() + const code = contextJoinRequest?.code + + const {data, error} = useJoinLinkPreviewsQuery({ + codes: code ? [code] : undefined, + hasSession: false, + }) + + const isDarkMode = t.name !== 'light' + const background = gtMobile + ? isDarkMode + ? desktopDarkBg + : desktopLightBg + : isDarkMode + ? mobileDarkBg + : mobileLightBg + + const requiresApproval = data?.joinLinkPreviews[0]?.requireApproval + const requiresFollow = + data?.joinLinkPreviews[0]?.joinRule === 'followedByOwner' + + return ( + + + + {error ? ( + + + + {l`This invite link has expired`} + + + + ) : data && moderationOpts ? ( + + + + + + Group chat + + + + + + {data.joinLinkPreviews[0].memberCount}/ + {data.joinLinkPreviews[0].memberLimit} + + + + + + {data.joinLinkPreviews[0].name} + + + + + + + By{' '} + {createSanitizedDisplayName( + data.joinLinkPreviews[0].owner, + true, + moderateProfile( + data.joinLinkPreviews[0].owner, + moderationOpts, + ).ui('displayName'), + )} + + + + + + {sanitizeHandle(data.joinLinkPreviews[0].owner.handle, '@')} + + + + {requiresApproval + ? l`Sign in to request access to this group chat.` + : l`Sign in to accept invite.`}{' '} + {requiresFollow && + l`Only people ${createSanitizedDisplayName( + data.joinLinkPreviews[0].owner, + true, + moderateProfile( + data.joinLinkPreviews[0].owner, + moderationOpts, + ).ui('displayName'), + )} follows can join.`} + + + + ) : null} + + + + ) +} + +function Wrapper({children}: React.PropsWithChildren) { + const t = useTheme() + + const isDarkMode = t.name !== 'light' + + return ( + <> + + + {children} + + + ) +} + +function ActionButtons({ + setScreenState, +}: { + setScreenState: (state: LoggedOutScreenState) => void +}) { + const t = useTheme() + const {t: l} = useLingui() + const isDarkMode = t.name !== 'light' + + return ( + + + + + ) +} diff --git a/src/screens/Messages/components/InviteLinkDialog.tsx b/src/screens/Messages/components/InviteLinkDialog.tsx index 755eec2108..ad6d4a08e5 100644 --- a/src/screens/Messages/components/InviteLinkDialog.tsx +++ b/src/screens/Messages/components/InviteLinkDialog.tsx @@ -297,8 +297,8 @@ export function InviteLinkDialog({ const linkEnabled = joinLink?.enabledStatus === 'enabled' const linkDisabled = joinLink?.enabledStatus === 'disabled' const joinLinkURI = joinLink?.code - ? `https://bsky.app/chat/${joinLink.code}` - : 'https://bsky.app/chat' + ? `https://bsky.app/c/${joinLink.code}` + : 'https://bsky.app/' const createdAt = joinLink ? new Date(joinLink.createdAt) : null const currentOption = whoCanJoinOptions.find( diff --git a/src/screens/Messages/components/MessagesListGroupInfoPanel.tsx b/src/screens/Messages/components/MessagesListGroupInfoPanel.tsx index cb76485af6..72d92a24ea 100644 --- a/src/screens/Messages/components/MessagesListGroupInfoPanel.tsx +++ b/src/screens/Messages/components/MessagesListGroupInfoPanel.tsx @@ -43,14 +43,11 @@ export function MessagesListGroupInfoPanel({ }, }) - // TODO Enable this once the feature is working end-to-end. -dsb - // const joinLink = groupConvo?.details.joinLink - const isJoinLinkEnabled = false - // (isOwner && groupConvo) || - // (!isOwner && groupConvo && joinLink?.enabledStatus === 'enabled') - const isOwner = convo.primaryMember?.did === currentAccount?.did + const isJoinLinkEnabled = + isOwner || convo.details.joinLink?.enabledStatus === 'enabled' + const members = (convo.members ?? []).filter( profile => profile.did !== currentAccount?.did, ) diff --git a/src/screens/Onboarding/StepFinished/index.tsx b/src/screens/Onboarding/StepFinished/index.tsx index e477528f1b..11dfd35ceb 100644 --- a/src/screens/Onboarding/StepFinished/index.tsx +++ b/src/screens/Onboarding/StepFinished/index.tsx @@ -28,11 +28,11 @@ import {preferencesQueryKey} from '#/state/queries/preferences' import {RQKEY as profileRQKey} from '#/state/queries/profile' import {useAgent} from '#/state/session' import {useOnboardingDispatch} from '#/state/shell' -import {useProgressGuideControls} from '#/state/shell/progress-guide' import { useActiveStarterPack, useSetActiveStarterPack, -} from '#/state/shell/starter-pack' +} from '#/state/shell/landing' +import {useProgressGuideControls} from '#/state/shell/progress-guide' import { OnboardingControls, OnboardingHeaderSlot, diff --git a/src/screens/Signup/index.tsx b/src/screens/Signup/index.tsx index fe67773a40..d98b6b4fea 100644 --- a/src/screens/Signup/index.tsx +++ b/src/screens/Signup/index.tsx @@ -9,7 +9,7 @@ import {FEEDBACK_FORM_URL} from '#/lib/constants' import {logger} from '#/logger' import {useServiceQuery} from '#/state/queries/service' import {useStarterPackQuery} from '#/state/queries/starter-packs' -import {useActiveStarterPack} from '#/state/shell/starter-pack' +import {useActiveStarterPack} from '#/state/shell/landing' import {LoggedOutLayout} from '#/view/com/util/layouts/LoggedOutLayout' import { initialState, diff --git a/src/screens/StarterPack/StarterPackLandingScreen.tsx b/src/screens/StarterPack/StarterPackLandingScreen.tsx index 2b08212794..f15d259e1f 100644 --- a/src/screens/StarterPack/StarterPackLandingScreen.tsx +++ b/src/screens/StarterPack/StarterPackLandingScreen.tsx @@ -19,7 +19,7 @@ import {useStarterPackQuery} from '#/state/queries/starter-packs' import { useActiveStarterPack, useSetActiveStarterPack, -} from '#/state/shell/starter-pack' +} from '#/state/shell/landing' import {LoggedOutScreenState} from '#/view/com/auth/LoggedOut' import {formatCount} from '#/view/com/util/numeric/format' import {Logo} from '#/view/icons/Logo' diff --git a/src/screens/StarterPack/StarterPackScreen.tsx b/src/screens/StarterPack/StarterPackScreen.tsx index adb27ef2ec..ddbd5cd840 100644 --- a/src/screens/StarterPack/StarterPackScreen.tsx +++ b/src/screens/StarterPack/StarterPackScreen.tsx @@ -37,12 +37,12 @@ import { useStarterPackQuery, } from '#/state/queries/starter-packs' import {useAgent, useSession} from '#/state/session' +import {useSetActiveStarterPack} from '#/state/shell/landing' import {useLoggedOutViewControls} from '#/state/shell/logged-out' import { ProgressGuideAction, useProgressGuideControls, } from '#/state/shell/progress-guide' -import {useSetActiveStarterPack} from '#/state/shell/starter-pack' import {PagerWithHeader} from '#/view/com/pager/PagerWithHeader' import {ProfileSubpageHeader} from '#/view/com/profile/ProfileSubpageHeader' import {bulkWriteFollows} from '#/screens/Onboarding/util' diff --git a/src/state/preferences/moderation-opts.tsx b/src/state/preferences/moderation-opts.tsx index a6e36b7d2b..b8592d77e0 100644 --- a/src/state/preferences/moderation-opts.tsx +++ b/src/state/preferences/moderation-opts.tsx @@ -1,5 +1,5 @@ import {createContext, useContext, useMemo} from 'react' -import {BskyAgent, type ModerationOpts} from '@atproto/api' +import {AtpAgent, type ModerationOpts} from '@atproto/api' import {useHiddenPosts, useLabelDefinitions} from '#/state/preferences' import {DEFAULT_LOGGED_OUT_LABEL_PREFERENCES} from '#/state/queries/preferences/moderation' @@ -43,7 +43,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { ...moderationPrefs, labelers: moderationPrefs.labelers.length ? moderationPrefs.labelers - : BskyAgent.appLabelers.map(did => ({ + : AtpAgent.appLabelers.map(did => ({ did, labels: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES, })), diff --git a/src/state/queries/join-links.ts b/src/state/queries/join-links.ts new file mode 100644 index 0000000000..6aa10331ef --- /dev/null +++ b/src/state/queries/join-links.ts @@ -0,0 +1,72 @@ +import {AtpAgent} from '@atproto/api' +import {useQuery, useQueryClient} from '@tanstack/react-query' + +import {CHAT_SERVICE, DM_SERVICE_HEADERS} from '#/lib/constants' +import {logger} from '#/logger' +import {STALE} from '#/state/queries/index' +import {createQueryKey} from '#/state/queries/util' +import {useAgent} from '#/state/session' + +const joinLinkPreviewQueryKeyRoot = 'join-link-preview' + +export const createJoinLinkPreviewQueryKey = (args: { + codes: string[] + hasSession: boolean +}) => + createQueryKey(joinLinkPreviewQueryKeyRoot, args, { + persistedVersion: 1, + }) + +export function useJoinLinkPreviewsQuery({ + codes, + hasSession, +}: { + codes?: string[] + hasSession: boolean +}) { + const agent = useAgent() + + return useQuery({ + queryKey: createJoinLinkPreviewQueryKey({codes: codes ?? [], hasSession}), + queryFn: async () => { + if (!codes) throw new Error('No invite code') + try { + const previewAgent = new AtpAgent({service: CHAT_SERVICE}) + const res = hasSession + ? await agent.chat.bsky.group.getJoinLinkPreviews( + {codes}, + {headers: DM_SERVICE_HEADERS}, + ) + : await previewAgent.chat.bsky.group.getJoinLinkPreviews({codes}) + return res.data + } catch (error) { + logger.error('Failed to fetch join link preview', {safeMessage: error}) + throw error + } + }, + enabled: codes != null && codes.length > 0, + staleTime: STALE.SECONDS.FIFTEEN, + }) +} + +export function usePrefetchJoinLinkPreviews() { + const agent = useAgent() + const queryClient = useQueryClient() + + return ({codes, hasSession}: {codes: string[]; hasSession: boolean}) => { + return queryClient.prefetchQuery({ + queryKey: createJoinLinkPreviewQueryKey({codes, hasSession}), + queryFn: async () => { + const previewAgent = new AtpAgent({service: CHAT_SERVICE}) + const res = hasSession + ? await agent.chat.bsky.group.getJoinLinkPreviews( + {codes}, + {headers: DM_SERVICE_HEADERS}, + ) + : await previewAgent.chat.bsky.group.getJoinLinkPreviews({codes}) + return res.data + }, + staleTime: STALE.SECONDS.FIFTEEN, + }) + } +} diff --git a/src/state/queries/messages/request-join-group-chat.ts b/src/state/queries/messages/request-join-group-chat.ts new file mode 100644 index 0000000000..04e63395f7 --- /dev/null +++ b/src/state/queries/messages/request-join-group-chat.ts @@ -0,0 +1,37 @@ +import {type ChatBskyGroupRequestJoin} from '@atproto/api' +import {useMutation} from '@tanstack/react-query' + +import {DM_SERVICE_HEADERS} from '#/lib/constants' +import {logger} from '#/logger' +import {useAgent, useSession} from '#/state/session' + +export function useRequestJoinGroupChat({ + onSuccess, + onError, +}: { + onSuccess?: (data: ChatBskyGroupRequestJoin.OutputSchema) => void + onError?: (error: Error) => void +} = {}) { + const agent = useAgent() + const {hasSession} = useSession() + + return useMutation({ + mutationFn: async ({code}: {code: string}) => { + if (!hasSession) throw new Error('Must be logged in to join') + if (!code) throw new Error('No invite code') + + const res = await agent.chat.bsky.group.requestJoin( + {code}, + {headers: DM_SERVICE_HEADERS}, + ) + return res.data + }, + onSuccess: data => { + onSuccess?.(data) + }, + onError: error => { + logger.error('Failed to join group chat', {safeMessage: error}) + onError?.(error) + }, + }) +} diff --git a/src/state/queries/messages/withdraw-join-group-chat.ts b/src/state/queries/messages/withdraw-join-group-chat.ts new file mode 100644 index 0000000000..92025cc2be --- /dev/null +++ b/src/state/queries/messages/withdraw-join-group-chat.ts @@ -0,0 +1,38 @@ +import {type ChatBskyGroupWithdrawJoinRequest} from '@atproto/api' +import {useMutation} from '@tanstack/react-query' + +import {DM_SERVICE_HEADERS} from '#/lib/constants' +import {logger} from '#/logger' +import {useAgent, useSession} from '#/state/session' + +export function useWithdrawJoinGroupChatRequest({ + onSuccess, + onError, +}: { + onSuccess?: (data: ChatBskyGroupWithdrawJoinRequest.OutputSchema) => void + onError?: (error: Error) => void +} = {}) { + const agent = useAgent() + const {hasSession} = useSession() + + return useMutation({ + mutationFn: async ({convoId}: {convoId: string}) => { + if (!hasSession) + throw new Error('Must be logged in to withdraw a join request') + if (!convoId) throw new Error('No convoId provided') + + const res = await agent.chat.bsky.group.withdrawJoinRequest( + {convoId}, + {headers: DM_SERVICE_HEADERS}, + ) + return res.data + }, + onSuccess: data => { + onSuccess?.(data) + }, + onError: error => { + logger.error('Failed to withdraw join request', {safeMessage: error}) + onError?.(error) + }, + }) +} diff --git a/src/state/shell/landing.tsx b/src/state/shell/landing.tsx new file mode 100644 index 0000000000..f071c79e39 --- /dev/null +++ b/src/state/shell/landing.tsx @@ -0,0 +1,66 @@ +import {createContext, useContext, useState} from 'react' + +import {logger} from '#/logger' + +type StarterPackLanding = { + type: 'starterpack' + uri: string + isClip?: boolean +} + +type GroupChatJoinRequestLanding = { + type: 'groupchat' + uri: string + code: string +} + +type LandingType = StarterPackLanding | GroupChatJoinRequestLanding | undefined + +type SetContext = (v: LandingType) => void + +const stateContext = createContext(undefined) +stateContext.displayName = 'ActiveLandingStateContext' +const setContext = createContext((_: LandingType) => {}) +setContext.displayName = 'ActiveLandingSetContext' + +export function Provider({children}: {children: React.ReactNode}) { + const [state, setState] = useState() + + return ( + + {children} + + ) +} + +// Core hooks +export const useActiveLanding = () => useContext(stateContext) +export const useSetActiveLanding = () => useContext(setContext) + +// Filtered hooks for convenience +export const useActiveStarterPack = () => { + const landing = useActiveLanding() + return landing?.type === 'starterpack' ? landing : undefined +} + +export const useSetActiveStarterPack = () => { + const setLanding = useSetActiveLanding() + const currentLanding = useActiveLanding() + return (pack: {uri: string; isClip?: boolean} | undefined) => { + if (!pack) { + setLanding(undefined) + } else { + if (currentLanding && currentLanding.type !== 'starterpack') { + logger.debug( + `[landing] Replacing ${currentLanding.type} landing with starterpack`, + ) + } + setLanding({type: 'starterpack', ...pack}) + } + } +} + +export const useActiveGroupChatJoinRequest = () => { + const landing = useActiveLanding() + return landing?.type === 'groupchat' ? landing : undefined +} diff --git a/src/state/shell/logged-out.tsx b/src/state/shell/logged-out.tsx index fdc588dcce..fcb76818c4 100644 --- a/src/state/shell/logged-out.tsx +++ b/src/state/shell/logged-out.tsx @@ -1,7 +1,7 @@ import {createContext, useContext, useMemo, useState} from 'react' import {useSession} from '#/state/session' -import {useActiveStarterPack} from '#/state/shell/starter-pack' +import {useActiveLanding} from '#/state/shell/landing' import {IS_WEB} from '#/env' type State = { @@ -26,7 +26,12 @@ type Controls = { /** * The did of the account to populate the login form with. */ - requestedAccount?: (string & {}) | 'none' | 'new' | 'starterpack' + requestedAccount?: + | (string & {}) + | 'none' + | 'new' + | 'starterpack' + | 'groupchat' }) => void /** * Clears the requested account so that next time the logged out view is @@ -48,17 +53,34 @@ const ControlsContext = createContext({ }) ControlsContext.displayName = 'LoggedOutControlsContext' +function getRequestedAccountFromLanding( + landing: ReturnType, + hasSession: boolean, +): string | undefined { + if (hasSession || !landing) return undefined + + switch (landing.type) { + case 'starterpack': + return IS_WEB ? 'starterpack' : 'new' + case 'groupchat': + return 'groupchat' + default: + return undefined + } +} + export function Provider({children}: React.PropsWithChildren<{}>) { - const activeStarterPack = useActiveStarterPack() + const activeLanding = useActiveLanding() const {hasSession} = useSession() - const shouldShowStarterPack = Boolean(activeStarterPack?.uri) && !hasSession + + const requestedAccount = getRequestedAccountFromLanding( + activeLanding, + hasSession, + ) + const [state, setState] = useState({ - showLoggedOut: shouldShowStarterPack, - requestedAccountSwitchTo: shouldShowStarterPack - ? IS_WEB - ? 'starterpack' - : 'new' - : undefined, + showLoggedOut: Boolean(requestedAccount), + requestedAccountSwitchTo: requestedAccount, }) const controls = useMemo( diff --git a/src/view/com/auth/LoggedOut.tsx b/src/view/com/auth/LoggedOut.tsx index 0cfea7cf16..91c0b9afca 100644 --- a/src/view/com/auth/LoggedOut.tsx +++ b/src/view/com/auth/LoggedOut.tsx @@ -9,6 +9,7 @@ import {PressableScale} from '#/lib/custom-animations/PressableScale' import {STALE} from '#/state/queries' import {profilesQueryKey} from '#/state/queries/profile' import {useAgent, useSession} from '#/state/session' +import {useSetActiveLanding} from '#/state/shell/landing' import { useLoggedOutView, useLoggedOutViewControls, @@ -16,6 +17,7 @@ import { import {useEnableMinimalShellMode} from '#/state/shell/minimal-mode' import {ErrorBoundary} from '#/view/com/util/ErrorBoundary' import {Login} from '#/screens/Login' +import {JoinRequest} from '#/screens/Messages/JoinRequest' import {Signup} from '#/screens/Signup' import {LandingScreen} from '#/screens/StarterPack/StarterPackLandingScreen' import {atoms as a, native, tokens, useTheme} from '#/alf' @@ -29,9 +31,26 @@ enum ScreenState { S_Login, S_CreateAccount, S_StarterPack, + S_GroupChatJoinRequest, } export {ScreenState as LoggedOutScreenState} +function getInitialScreenState(requestedAccountSwitchTo?: string): ScreenState { + switch (requestedAccountSwitchTo) { + case 'new': + return ScreenState.S_CreateAccount + case 'starterpack': + return ScreenState.S_StarterPack + case 'groupchat': + return ScreenState.S_GroupChatJoinRequest + case undefined: + return ScreenState.S_LoginOrCreateAccount + default: + // DID or other string = login with that account + return ScreenState.S_Login + } +} + export function LoggedOut({onDismiss}: {onDismiss?: () => void}) { const {_} = useLingui() const ax = useAnalytics() @@ -39,18 +58,11 @@ export function LoggedOut({onDismiss}: {onDismiss?: () => void}) { const insets = useSafeAreaInsets() useEnableMinimalShellMode() const {requestedAccountSwitchTo} = useLoggedOutView() - const [screenState, setScreenState] = useState(() => { - if (requestedAccountSwitchTo === 'new') { - return ScreenState.S_CreateAccount - } else if (requestedAccountSwitchTo === 'starterpack') { - return ScreenState.S_StarterPack - } else if (requestedAccountSwitchTo != null) { - return ScreenState.S_Login - } else { - return ScreenState.S_LoginOrCreateAccount - } - }) + const initialScreenState = getInitialScreenState(requestedAccountSwitchTo) + const [screenState, setScreenState] = + useState(initialScreenState) const {clearRequestedAccount} = useLoggedOutViewControls() + const setActiveLanding = useSetActiveLanding() const queryClient = useQueryClient() const {accounts} = useSession() @@ -73,7 +85,9 @@ export function LoggedOut({onDismiss}: {onDismiss?: () => void}) { onDismiss() } clearRequestedAccount() - }, [clearRequestedAccount, onDismiss]) + // Clear landing context when user dismisses the modal + setActiveLanding(undefined) + }, [clearRequestedAccount, onDismiss, setActiveLanding]) return ( void}) { {screenState === ScreenState.S_StarterPack ? ( + ) : screenState === ScreenState.S_GroupChatJoinRequest ? ( + ) : screenState === ScreenState.S_LoginOrCreateAccount ? ( { @@ -122,17 +138,12 @@ export function LoggedOut({onDismiss}: {onDismiss?: () => void}) { {screenState === ScreenState.S_Login ? ( { - setScreenState(ScreenState.S_LoginOrCreateAccount) - clearRequestedAccount() + setScreenState(initialScreenState) }} /> ) : undefined} {screenState === ScreenState.S_CreateAccount ? ( - - setScreenState(ScreenState.S_LoginOrCreateAccount) - } - /> + setScreenState(initialScreenState)} /> ) : undefined} diff --git a/src/view/com/util/Link.tsx b/src/view/com/util/Link.tsx index 7e58218852..658a3ca3b3 100644 --- a/src/view/com/util/Link.tsx +++ b/src/view/com/util/Link.tsx @@ -13,6 +13,7 @@ import { import {sanitizeUrl} from '@braintree/sanitize-url' import {StackActions} from '@react-navigation/native' +import {useGroupChatJoinIntent} from '#/lib/hooks/useIntentHandler' import { type DebouncedNavigationProp, useNavigationDeduped, @@ -21,6 +22,7 @@ import {useOpenLink} from '#/lib/hooks/useOpenLink' import {getTabState, TabState} from '#/lib/routes/helpers' import { convertBskyAppUrlIfNeeded, + getChatInviteCodeFromUrl, isExternalUrl, linkRequiresWarning, } from '#/lib/strings/url-helpers' @@ -81,6 +83,7 @@ export const Link = memo(function Link({ const navigation = useNavigationDeduped() const anchorHref = asAnchor ? sanitizeUrl(href) : undefined const openLink = useOpenLink() + const groupChatJoinIntent = useGroupChatJoinIntent() const onPress = useCallback( (e?: Event) => { @@ -92,11 +95,20 @@ export const Link = memo(function Link({ sanitizeUrl(href), navigationAction, openLink, + groupChatJoinIntent, e, ) } }, - [closeModal, navigation, navigationAction, href, openLink, onBeforePress], + [ + closeModal, + navigation, + navigationAction, + href, + openLink, + onBeforePress, + groupChatJoinIntent, + ], ) const accessibilityActionsWithActivate = [ @@ -196,6 +208,7 @@ export const TextLink = memo(function TextLink({ const {closeModal} = useModalControls() const {linkWarningDialogControl} = useGlobalDialogsControlContext() const openLink = useOpenLink() + const groupChatJoinIntent = useGroupChatJoinIntent() if (!disableMismatchWarning && typeof text !== 'string') { console.error('Unable to detect mismatching label') @@ -238,6 +251,7 @@ export const TextLink = memo(function TextLink({ sanitizeUrl(href), navigationAction, openLink, + groupChatJoinIntent, e, ) }, @@ -252,6 +266,7 @@ export const TextLink = memo(function TextLink({ navigationAction, openLink, linkWarningDialogControl, + groupChatJoinIntent, ], ) const hrefAttrs = useMemo(() => { @@ -373,6 +388,7 @@ function onPressInner( href: string, navigationAction: 'push' | 'replace' | 'navigate' = 'push', openLink: (href: string) => void, + groupChatJoinIntent: (code: string, uri?: string) => void, e?: Event, ) { let shouldHandle = false @@ -400,6 +416,11 @@ function onPressInner( if (shouldHandle) { href = convertBskyAppUrlIfNeeded(href) + const chatInviteCode = getChatInviteCodeFromUrl(href) + if (chatInviteCode) { + groupChatJoinIntent(chatInviteCode, href) + return + } if ( newTab || href.startsWith('http') || diff --git a/src/view/icons/LogomarkWithType.tsx b/src/view/icons/LogomarkWithType.tsx new file mode 100644 index 0000000000..7437a5db14 --- /dev/null +++ b/src/view/icons/LogomarkWithType.tsx @@ -0,0 +1,55 @@ +import Svg, {Path, type PathProps, type SvgProps} from 'react-native-svg' + +import {useTheme} from '#/alf' + +const ratio = 17 / 64 + +export function LogomarkWithType({ + fill, + ...rest +}: {fill?: PathProps['fill']} & SvgProps) { + const t = useTheme() + const size = parseInt(`${rest.width || 32}`) + + return ( + + + + + + + + + + + ) +} From b87a51b4852a4363f50e8af8fe4b2c7801a89406 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Tue, 2 Jun 2026 15:07:14 -0500 Subject: [PATCH 06/31] Prefer opengraph image, fall back to Standard Site coverImage (#10694) --- src/lib/api/resolve.ts | 4 ++++ src/view/com/composer/ExternalEmbed.tsx | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lib/api/resolve.ts b/src/lib/api/resolve.ts index d0600b2eb8..f75cd74db2 100644 --- a/src/lib/api/resolve.ts +++ b/src/lib/api/resolve.ts @@ -246,6 +246,10 @@ async function resolveExternal( title: result.title ?? '', description: result.description ?? '', thumb: result.image ? await imageToThumb(result.image) : undefined, + /* + * New fields from Standard Site integration. Other fields are derived from + * opengraph/oembed as before. + */ associatedRefs: result.associatedRefs, view: result.view, } diff --git a/src/view/com/composer/ExternalEmbed.tsx b/src/view/com/composer/ExternalEmbed.tsx index cc7b983c31..ecd22d7c39 100644 --- a/src/view/com/composer/ExternalEmbed.tsx +++ b/src/view/com/composer/ExternalEmbed.tsx @@ -98,7 +98,8 @@ export const ExternalEmbedLink = ({ uri, description: data.view?.external?.description || data.description, - thumb: data.view?.external?.thumb || data.thumb?.source.path, + // prefer opengraph data to atproto record-derived image + thumb: data.thumb?.source.path || data.view?.external?.thumb, }} /> ) From 75490c3cdf76118ba3852dcfdc49d0bba6286c12 Mon Sep 17 00:00:00 2001 From: DS Boyce <260543580+ds-boyce@users.noreply.github.com> Date: Tue, 2 Jun 2026 13:27:43 -0700 Subject: [PATCH 07/31] Don't show Suggested heading if there are no suggestions (#10695) --- src/components/dms/AddMembersFlow.tsx | 2 +- src/components/dms/InitiateChatFlow.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/dms/AddMembersFlow.tsx b/src/components/dms/AddMembersFlow.tsx index 1601594dab..749e6976ed 100644 --- a/src/components/dms/AddMembersFlow.tsx +++ b/src/components/dms/AddMembersFlow.tsx @@ -219,7 +219,7 @@ export function AddMembersFlow({ } } - if (searchText === '') { + if (searchText === '' && _items.length > 0) { _items.unshift({ type: 'label', key: 'suggested', diff --git a/src/components/dms/InitiateChatFlow.tsx b/src/components/dms/InitiateChatFlow.tsx index 09760aefdf..32da1e3e5b 100644 --- a/src/components/dms/InitiateChatFlow.tsx +++ b/src/components/dms/InitiateChatFlow.tsx @@ -316,6 +316,7 @@ export function InitiateChatFlow({ if ( searchText === '' && + _items.length > 0 && (chatState === ChatState.NEW_CHAT || chatState === ChatState.NEW_GROUP_CHAT) ) { From 73dae02df3067205185e210950e6243a29a3f183 Mon Sep 17 00:00:00 2001 From: DS Boyce <260543580+ds-boyce@users.noreply.github.com> Date: Tue, 2 Jun 2026 13:28:06 -0700 Subject: [PATCH 08/31] Create screen for managing chat requests (#10635) --- bskyweb/cmd/bskyweb/server.go | 1 + src/Navigation.tsx | 6 + src/lib/routes/types.ts | 1 + src/routes.ts | 1 + .../MembersAndRequests.tsx | 22 +- .../Messages/ConversationSettings/index.tsx | 3 +- src/screens/Messages/JoinRequests.tsx | 491 ++++++++++++++++++ src/state/queries/messages/join-requests.ts | 129 +++++ 8 files changed, 645 insertions(+), 9 deletions(-) create mode 100644 src/screens/Messages/JoinRequests.tsx create mode 100644 src/state/queries/messages/join-requests.ts diff --git a/bskyweb/cmd/bskyweb/server.go b/bskyweb/cmd/bskyweb/server.go index 4a4ba2fde3..cc5119e8d4 100644 --- a/bskyweb/cmd/bskyweb/server.go +++ b/bskyweb/cmd/bskyweb/server.go @@ -339,6 +339,7 @@ func serve(cctx *cli.Context) error { e.GET("/messages/inbox", server.WebGeneric) e.GET("/messages/:conversation", server.WebGeneric) e.GET("/messages/:conversation/settings", server.WebGeneric) + e.GET("/messages/:conversation/requests", server.WebGeneric) // profile endpoints; only first populates info e.GET("/profile/:handleOrDID", server.WebProfile) diff --git a/src/Navigation.tsx b/src/Navigation.tsx index 1348a975ea..efd1125295 100644 --- a/src/Navigation.tsx +++ b/src/Navigation.tsx @@ -82,6 +82,7 @@ import {MessagesScreen} from '#/screens/Messages/ChatList' import {MessagesConversationScreen} from '#/screens/Messages/Conversation' import {MessagesConversationSettingsScreen} from '#/screens/Messages/ConversationSettings' import {MessagesInboxScreen} from '#/screens/Messages/Inbox' +import {MessagesJoinRequestsScreen} from '#/screens/Messages/JoinRequests' import {MessagesSettingsScreen} from '#/screens/Messages/Settings' import {ModerationScreen} from '#/screens/Moderation' import {Screen as ModerationVerificationSettings} from '#/screens/Moderation/VerificationSettings' @@ -488,6 +489,11 @@ function commonScreens(Stack: typeof Flat, unreadCountLabel?: string) { getComponent={() => MessagesConversationSettingsScreen} options={{title: title(msg`Group chat settings`), requireAuth: true}} /> + MessagesJoinRequestsScreen} + options={{title: title(msg`Requests to join`), requireAuth: true}} + /> MessagesSettingsScreen} diff --git a/src/lib/routes/types.ts b/src/lib/routes/types.ts index 3c30b740da..22bb50572a 100644 --- a/src/lib/routes/types.ts +++ b/src/lib/routes/types.ts @@ -64,6 +64,7 @@ export type CommonNavigatorParams = { Topic: {topic: string} MessagesConversation: {conversation: string; embed?: string; accept?: true} MessagesConversationSettings: {conversation: string} + MessagesJoinRequests: {conversation: string} MessagesSettings: undefined MessagesInbox: undefined NotificationsActivityList: {posts: string} diff --git a/src/routes.ts b/src/routes.ts index 7ae73dd6e1..f7e73ff2c2 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -74,6 +74,7 @@ export const router = new Router({ MessagesInbox: '/messages/inbox', MessagesConversation: '/messages/:conversation', MessagesConversationSettings: '/messages/:conversation/settings', + MessagesJoinRequests: '/messages/:conversation/requests', // starter packs Start: '/start/:name/:rkey', StarterPackEdit: '/starter-pack/edit/:rkey', diff --git a/src/screens/Messages/ConversationSettings/MembersAndRequests.tsx b/src/screens/Messages/ConversationSettings/MembersAndRequests.tsx index b9d9ecc2b2..bb3ebafb1c 100644 --- a/src/screens/Messages/ConversationSettings/MembersAndRequests.tsx +++ b/src/screens/Messages/ConversationSettings/MembersAndRequests.tsx @@ -1,26 +1,31 @@ import {View} from 'react-native' import {plural} from '@lingui/core/macro' import {Trans, useLingui} from '@lingui/react/macro' +import {useNavigation} from '@react-navigation/native' +import {type NavigationProp} from '#/lib/routes/types' import {atoms as a, useTheme} from '#/alf' -import {InlineLinkText} from '#/components/Link' +import {type ConvoWithDetails} from '#/components/dms/util' +import {createStaticClick, InlineLinkText} from '#/components/Link' import {Text} from '#/components/Typography' export function MembersAndRequests({ - memberCount, - memberLimit, + convo, requestCount, hasMoreRequests, isOwner, }: { - memberCount: number - memberLimit: number + convo: Extract requestCount: number hasMoreRequests: boolean isOwner: boolean }) { const t = useTheme() const {t: l} = useLingui() + const navigation = useNavigation() + + const memberCount = convo.details.memberCount + const memberLimit = convo.details.memberLimit return ( @@ -42,8 +47,11 @@ export function MembersAndRequests({ + {...createStaticClick(() => { + navigation.navigate('MessagesJoinRequests', { + conversation: convo.view.id, + }) + })}> {hasMoreRequests ? l({ message: `${requestCount}+ requests`, diff --git a/src/screens/Messages/ConversationSettings/index.tsx b/src/screens/Messages/ConversationSettings/index.tsx index 056afa8b5c..5e4ad91424 100644 --- a/src/screens/Messages/ConversationSettings/index.tsx +++ b/src/screens/Messages/ConversationSettings/index.tsx @@ -247,8 +247,7 @@ function GroupSettings({ case 'MEMBERS_AND_REQUESTS': return ( + +export function MessagesJoinRequestsScreen(props: Props) { + const {t: l} = useLingui() + const aaCopy = useAgeAssuranceCopy() + return ( + + + + ) +} + +function MessagesJoinRequestsScreenInner({route}: Props) { + const convoId = route.params.conversation + + return ( + + + + + + ) +} + +function JoinRequestsInner() { + const {t: l} = useLingui() + const convoState = useConvo() + const navigation = useNavigation() + + if (convoState.status === ConvoStatus.Error) { + return ( + <> +

+ convoState.error.retry()} + sideBorders={false} + /> + + ) + } + + if (!convoState.convo) { + return ( + <> +
+ + + + + ) + } + + if (convoState.convo.kind !== 'group') { + return ( + { + if (navigation.canGoBack()) { + navigation.goBack() + } else { + navigation.replace('Messages', {animation: 'pop'}) + } + }} + /> + ) + } + + return +} + +function JoinRequestsList({ + convo, +}: { + convo: Extract +}) { + const t = useTheme() + const {t: l} = useLingui() + const moderationOpts = useModerationOpts() + const bottomBarOffset = useBottomBarOffset() + const {currentAccount} = useSession() + const navigation = useNavigation() + const queryClient = useQueryClient() + const inviteLinkControl = Dialog.useDialogControl() + + const getRemainingRequestCount = () => { + const data = queryClient.getQueryData< + InfiniteData + >(createListJoinRequestsQueryKey({convoId: convo.view.id})) + return data?.pages.reduce((sum, page) => sum + page.requests.length, 0) ?? 0 + } + + const [isPTRing, setIsPTRing] = useState(false) + const [footerHeight, setFooterHeight] = useState(0) + + const owner = convo.primaryMember + const isOwner = !!owner && owner.did === currentAccount?.did + + const { + data: joinRequestsData, + isPending, + isError, + hasNextPage, + fetchNextPage, + isFetchingNextPage, + refetch, + } = useListJoinRequestsQuery({ + convoId: convo.view.id, + }) + + const items = + joinRequestsData?.pages.flatMap(page => + page.requests.map(request => request.requestedBy), + ) ?? [] + const requestCount = + joinRequestsData?.pages.reduce( + (sum, page) => sum + page.requests.length, + 0, + ) ?? 0 + + const {mutate: approveJoinRequest, isPending: isApprovePending} = + useJoinRequestMutation('approve', convo.view.id, { + onSuccess: () => { + Toast.show(l`Request approved.`) + if (getRemainingRequestCount() < 1) { + navigation.replace('MessagesConversationSettings', { + conversation: convo.view.id, + }) + } + }, + onError: error => { + let errorMessage = l`Failed to accept join request` + if (isNetworkError(error)) { + errorMessage = l`A network error occurred. Please check your internet connection.` + } else if ( + error instanceof ChatBskyGroupApproveJoinRequest.InvalidConvoError + ) { + errorMessage = l`Conversation not found.` + } else if ( + error instanceof ChatBskyGroupApproveJoinRequest.InsufficientRoleError + ) { + errorMessage = l`Only admins can accept join requests.` + } else if ( + error instanceof + ChatBskyGroupApproveJoinRequest.MemberLimitReachedError + ) { + errorMessage = l`The member limit has been reached.` + } + Toast.show(errorMessage, {type: 'error'}) + }, + }) + + const {mutate: rejectJoinRequest, isPending: isRejectPending} = + useJoinRequestMutation('reject', convo.view.id, { + onSuccess: () => { + Toast.show(l`Request ignored.`) + if (getRemainingRequestCount() < 1) { + navigation.replace('MessagesConversationSettings', { + conversation: convo.view.id, + }) + } + }, + onError: error => { + let errorMessage = l`Failed to ignore join request` + if (isNetworkError(error)) { + errorMessage = l`A network error occurred. Please check your internet connection.` + } else if ( + error instanceof ChatBskyGroupRejectJoinRequest.InvalidConvoError + ) { + errorMessage = l`Conversation not found.` + } else if ( + error instanceof ChatBskyGroupRejectJoinRequest.InsufficientRoleError + ) { + errorMessage = l`Only admins can ignore join requests.` + } + Toast.show(errorMessage, {type: 'error'}) + }, + }) + + const isMutating = isApprovePending || isRejectPending + + const renderItem = ({item}: {item: bsky.profile.AnyProfileView}) => { + if (!moderationOpts) return null + return ( + + + + + + + + + + + + + approveJoinRequest({member: item.did})} + /> + rejectJoinRequest({member: item.did})} + /> + + + + + ) + } + + const footer = ( + setFooterHeight(evt.nativeEvent.layout.height)} + style={[ + a.absolute, + a.left_0, + a.right_0, + {bottom: 0}, + a.px_xl, + a.border_t, + t.atoms.bg, + t.atoms.border_contrast_low, + { + paddingTop: a.py_lg.paddingTop, + paddingBottom: a.py_lg.paddingBottom + bottomBarOffset, + }, + ]}> + + + ) + + const onEndReached = async () => { + if (isFetchingNextPage || !hasNextPage || isError) return + try { + await fetchNextPage() + } catch (err) { + logger.error('Failed to load more join requests', {message: err}) + } + } + + const onRefresh = async () => { + setIsPTRing(true) + try { + await refetch() + } catch (err) { + logger.error('Failed to refresh group chat requests', {message: err}) + } + setIsPTRing(false) + } + + if (isError) { + return ( + <> +
+ + + + Unable to fetch join requests. + + + + + ) + } + + const showFooter = isOwner + + return ( + <> +
+ item.did} + renderItem={renderItem} + ListEmptyComponent={ + isPending ? ( + + + + ) : null + } + contentContainerStyle={ + showFooter ? {paddingBottom: footerHeight} : undefined + } + scrollIndicatorInsets={showFooter ? {bottom: footerHeight} : undefined} + refreshing={isPTRing} + onEndReached={() => void onEndReached()} + onRefresh={() => void onRefresh()} + keyboardDismissMode="on-drag" + sideBorders={false} + desktopFixedHeight + /> + {showFooter ? footer : null} + {owner && moderationOpts && ( + + )} + + ) +} + +function Header({ + count, + hasMoreRequests, +}: { + count?: number + hasMoreRequests?: boolean +}) { + const {t: l} = useLingui() + return ( + + + + + {count === undefined ? ( + Requests to join + ) : hasMoreRequests ? ( + l({ + message: `${count}+ requests to join`, + comment: + 'Displayed when there are more requests to join a group chat than have been loaded', + }) + ) : ( + + )} + + + + + ) +} + +function AcceptButton({ + disabled, + onPress, +}: { + disabled?: boolean + onPress: () => void +}) { + const {t: l} = useLingui() + + return ( + + ) +} + +function RejectButton({ + disabled, + onPress, +}: { + disabled?: boolean + onPress: () => void +}) { + const {t: l} = useLingui() + + return ( + + ) +} diff --git a/src/state/queries/messages/join-requests.ts b/src/state/queries/messages/join-requests.ts new file mode 100644 index 0000000000..a3eda671e8 --- /dev/null +++ b/src/state/queries/messages/join-requests.ts @@ -0,0 +1,129 @@ +import { + type ChatBskyActorDefs, + type ChatBskyGroupApproveJoinRequest, + type ChatBskyGroupListJoinRequests, + type ChatBskyGroupRejectJoinRequest, +} from '@atproto/api' +import { + type InfiniteData, + useMutation, + useQueryClient, +} from '@tanstack/react-query' + +import {DM_SERVICE_HEADERS} from '#/lib/constants' +import {logger} from '#/logger' +import {useAgent} from '#/state/session' +import {listConvoMembersQueryKey} from './list-convo-members' +import {createListJoinRequestsQueryKey} from './list-join-requests' + +type JoinRequestAction = 'approve' | 'reject' + +type JoinRequestOutput = A extends 'approve' + ? ChatBskyGroupApproveJoinRequest.OutputSchema + : ChatBskyGroupRejectJoinRequest.OutputSchema + +export function useJoinRequestMutation( + action: A, + convoId: string | undefined, + { + onSuccess, + onError, + }: { + onSuccess?: (data: JoinRequestOutput) => void + onError?: (error: Error) => void + }, +) { + const queryClient = useQueryClient() + const agent = useAgent() + + return useMutation({ + mutationFn: async ({member}: {member: string}) => { + if (!convoId) throw new Error('No convoId provided') + const endpoint = + action === 'approve' + ? agent.chat.bsky.group.approveJoinRequest + : agent.chat.bsky.group.rejectJoinRequest + const {data} = await endpoint( + {convoId, member}, + {headers: DM_SERVICE_HEADERS, encoding: 'application/json'}, + ) + return data as JoinRequestOutput + }, + onMutate: ({member}) => { + if (!convoId) return + + const requestsKey = createListJoinRequestsQueryKey({convoId}) + const prevRequests = + queryClient.getQueryData< + InfiniteData + >(requestsKey) + + const requestedByProfile = prevRequests?.pages + .flatMap(page => page.requests) + .find(request => request.requestedBy.did === member)?.requestedBy + + queryClient.setQueryData< + InfiniteData + >(requestsKey, prev => { + if (!prev?.pages) return prev + return { + ...prev, + pages: prev.pages.map(page => ({ + ...page, + requests: page.requests.filter( + request => request.requestedBy.did !== member, + ), + })), + } + }) + + let prevMembers: ChatBskyActorDefs.ProfileViewBasic[] | undefined + if (action === 'approve' && requestedByProfile) { + const membersKey = listConvoMembersQueryKey(convoId) + prevMembers = + queryClient.getQueryData( + membersKey, + ) + queryClient.setQueryData( + membersKey, + prev => { + if (!prev) return prev + if (prev.some(m => m.did === member)) return prev + return [...prev, requestedByProfile] + }, + ) + } + + return {prevRequests, prevMembers} + }, + onSuccess: data => { + if (convoId) { + void queryClient.invalidateQueries({ + queryKey: createListJoinRequestsQueryKey({convoId}), + }) + if (action === 'approve') { + void queryClient.invalidateQueries({ + queryKey: listConvoMembersQueryKey(convoId), + }) + } + } + onSuccess?.(data) + }, + onError: (error, _variables, context) => { + logger.error(error) + if (convoId && context?.prevRequests) { + queryClient.setQueryData( + createListJoinRequestsQueryKey({convoId}), + context.prevRequests, + ) + } + if (convoId && action === 'approve' && context?.prevMembers) { + queryClient.setQueryData( + listConvoMembersQueryKey(convoId), + context.prevMembers, + ) + } + onError?.(error) + }, + }) +} From 0a7c08707895f557e4b339f63125b2bb76f7e99b Mon Sep 17 00:00:00 2001 From: Spence Pope Date: Tue, 2 Jun 2026 17:01:16 -0400 Subject: [PATCH 09/31] fix blur on image alt text background (#10658) --- .claude/.pre-pr-sweep-state | 1 + src/components/Lightbox/Lightbox.web.tsx | 6 +- src/components/Lightbox/chrome/Footer.tsx | 78 +++++++++++++---------- 3 files changed, 52 insertions(+), 33 deletions(-) create mode 100644 .claude/.pre-pr-sweep-state diff --git a/.claude/.pre-pr-sweep-state b/.claude/.pre-pr-sweep-state new file mode 100644 index 0000000000..f6f2d8d645 --- /dev/null +++ b/.claude/.pre-pr-sweep-state @@ -0,0 +1 @@ +alt-blur@3076a2b5a593b0d7b37198b5aebfe3a222afd52d diff --git a/src/components/Lightbox/Lightbox.web.tsx b/src/components/Lightbox/Lightbox.web.tsx index 641b2c3402..8883bfb5e5 100644 --- a/src/components/Lightbox/Lightbox.web.tsx +++ b/src/components/Lightbox/Lightbox.web.tsx @@ -230,7 +230,11 @@ function LightboxGallery({ style={[ a.px_4xl, a.py_2xl, - {backgroundColor: 'rgba(0, 0, 0, 0.45)'}, + { + backgroundColor: 'rgba(0, 0, 0, 0.5)', + // @ts-expect-error web only + backdropFilter: 'blur(16px)', + }, delayedFadeInAnim, ]}> - { - isMomentumScrolling.current = true - }} - onMomentumScrollEnd={() => { - isMomentumScrolling.current = false - }} - contentContainerStyle={[a.px_md, a.py_sm]}> - { - if (isMomentumScrolling.current) return - LayoutAnimation.configureNext({ - duration: 450, - update: {type: 'spring', springDamping: 1}, - }) - onToggleAltExpanded() - }}> - - {altText} - - - + + { + isMomentumScrolling.current = true + }} + onMomentumScrollEnd={() => { + isMomentumScrolling.current = false + }} + contentContainerStyle={[a.px_md, a.py_sm]}> + { + if (isMomentumScrolling.current) return + LayoutAnimation.configureNext({ + duration: 450, + update: {type: 'spring', springDamping: 1}, + }) + onToggleAltExpanded() + }}> + + {altText} + + + + ) @@ -74,7 +89,6 @@ export function Footer({altText, isAltExpanded, onToggleAltExpanded}: Props) { const styles = StyleSheet.create({ altWrap: { - backgroundColor: 'rgba(0, 0, 0, 0.45)', borderRadius: 12, overflow: 'hidden', }, From c88218ab870e74e417f7d708191be78f31fd5414 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Tue, 2 Jun 2026 16:28:48 -0500 Subject: [PATCH 10/31] Revert "[ALG-96] Don't fall back to search for onboarding user suggestions (#10680)" (#10699) --- .../StepSuggestedAccounts/index.tsx | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/screens/Onboarding/StepSuggestedAccounts/index.tsx b/src/screens/Onboarding/StepSuggestedAccounts/index.tsx index a9cc64396a..eaa68d9254 100644 --- a/src/screens/Onboarding/StepSuggestedAccounts/index.tsx +++ b/src/screens/Onboarding/StepSuggestedAccounts/index.tsx @@ -1,16 +1,18 @@ -import {useCallback, useEffect, useRef, useState} from 'react' +import {useCallback, useEffect, useMemo, useRef, useState} from 'react' import {View} from 'react-native' import {type ModerationOpts} from '@atproto/api' import {msg} from '@lingui/core/macro' import {useLingui} from '@lingui/react' import {Trans} from '@lingui/react/macro' import {useMutation, useQueryClient} from '@tanstack/react-query' +import * as bcp47Match from 'bcp-47-match' import {wait} from '#/lib/async/wait' import {popularInterests, useInterestsDisplayNames} from '#/lib/interests' import {isBlockedOrBlocking, isMuted} from '#/lib/moderation/blocked-and-muted' import {logger} from '#/logger' import {updateProfileShadow} from '#/state/cache/profile-shadow' +import {useLanguagePrefs} from '#/state/preferences' import {useModerationOpts} from '#/state/preferences/moderation-opts' import {useAgent, useSession} from '#/state/session' import { @@ -51,6 +53,19 @@ export function StepSuggestedAccounts() { // so we can enable/disable the button without having to dig through the shadow cache const [followedUsers, setFollowedUsers] = useState([]) + /* + * Special language handling copied wholesale from the Explore screen + */ + const {contentLanguages} = useLanguagePrefs() + const useFullExperience = useMemo(() => { + if (contentLanguages.length === 0) return true + return bcp47Match.basicFilter('en', contentLanguages).length > 0 + }, [contentLanguages]) + const interestsDisplayNames = useInterestsDisplayNames() + const interests = Object.keys(interestsDisplayNames) + .sort(boostInterests(popularInterests)) + .sort(boostInterests(state.interestsStepResults.selectedInterests)) + const { data: suggestedUsers, isLoading, @@ -58,8 +73,8 @@ export function StepSuggestedAccounts() { isRefetching, refetch, } = useSuggestedOnboardingUsers({ - category: selectedInterest, - search: false, + category: selectedInterest || (useFullExperience ? null : interests[0]), + search: !useFullExperience, overrideInterests: state.interestsStepResults.selectedInterests, }) @@ -90,6 +105,7 @@ export function StepSuggestedAccounts() { ax.metric('suggestedUser:follow', { logContext: 'Onboarding', location: 'FollowAll', + recSource: !useFullExperience ? 'Search' : undefined, recId: suggestedUsers?.recId, position: i, suggestedDid: did, @@ -140,6 +156,7 @@ export function StepSuggestedAccounts() { seenProfilesRef.current.add(did) ax.metric('suggestedUser:seen', { logContext: 'Onboarding', + recSource: !useFullExperience ? 'Search' : undefined, recId: suggestedUsers?.recId, position, suggestedDid: did, @@ -147,7 +164,7 @@ export function StepSuggestedAccounts() { }) } }, - [ax, selectedInterest, suggestedUsers?.recId], + [ax, selectedInterest, suggestedUsers?.recId, useFullExperience], ) useEffect(() => { @@ -233,6 +250,7 @@ export function StepSuggestedAccounts() { position={index} category={selectedInterest} onSeen={onProfileSeen} + recSource={!useFullExperience ? 'Search' : undefined} recId={suggestedUsers.recId} /> ))} From 711334b34e6a41d7e38d41f7067986cb3c4c8883 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Wed, 3 Jun 2026 05:03:55 +0300 Subject: [PATCH 11/31] Add iOS peek long-press context menu for image embeds (#10300) Co-authored-by: Claude --- eslint-suppressions.json | 4 +- .../modules/bottomsheet/BottomSheetView.kt | 33 ++- package.json | 1 + pnpm-lock.yaml | 16 ++ src/components/MediaPreview.tsx | 70 ++++- src/components/PeekMenu.tsx | 1 + .../Post/Embed/ImageContextMenu.tsx | 79 +++++ src/components/Post/Embed/ImageEmbed.tsx | 64 +++-- src/components/icons/TEMPLATE.tsx | 30 +- src/components/images/AutoSizedImage.tsx | 17 +- src/components/images/Gallery/index.tsx | 272 +++++++++--------- src/components/images/ImageLayoutGridItem.tsx | 94 +++--- .../notifications/NotificationFeedItem.tsx | 1 + 13 files changed, 464 insertions(+), 218 deletions(-) create mode 100644 src/components/PeekMenu.tsx create mode 100644 src/components/Post/Embed/ImageContextMenu.tsx diff --git a/eslint-suppressions.json b/eslint-suppressions.json index 40b918e771..5b7eef4c94 100644 --- a/eslint-suppressions.json +++ b/eslint-suppressions.json @@ -76,7 +76,7 @@ }, "src/components/Post/Embed/ImageEmbed.tsx": { "@typescript-eslint/no-explicit-any": { - "count": 1 + "count": 2 } }, "src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/utils.tsx": { @@ -169,7 +169,7 @@ }, "src/components/images/AutoSizedImage.tsx": { "@typescript-eslint/no-explicit-any": { - "count": 1 + "count": 2 } }, "src/components/images/Gallery/index.tsx": { diff --git a/modules/bottom-sheet/android/src/main/java/expo/modules/bottomsheet/BottomSheetView.kt b/modules/bottom-sheet/android/src/main/java/expo/modules/bottomsheet/BottomSheetView.kt index b7e81a61f6..1b9224c6e7 100644 --- a/modules/bottom-sheet/android/src/main/java/expo/modules/bottomsheet/BottomSheetView.kt +++ b/modules/bottom-sheet/android/src/main/java/expo/modules/bottomsheet/BottomSheetView.kt @@ -41,11 +41,14 @@ class BottomSheetView( private val screenHeight: Float = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.VANILLA_ICE_CREAM) { // API 35+: edge-to-edge is mandatory, heightPixels is the full display - context.resources.displayMetrics.heightPixels.toFloat() + context.resources.displayMetrics.heightPixels + .toFloat() } else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) { // API 30-34: heightPixels may exclude nav bar, use currentWindowMetrics val wm = context.getSystemService(Context.WINDOW_SERVICE) as android.view.WindowManager - wm.currentWindowMetrics.bounds.height().toFloat() + wm.currentWindowMetrics.bounds + .height() + .toFloat() } else { // API < 30: currentWindowMetrics not available, use getRealSize // which includes system bars (heightPixels may exclude them) @@ -166,6 +169,7 @@ class BottomSheetView( when { // Full height sheets contentHeight >= screenHeight -> 0.99f + else -> this.clampRatio(this.getTargetHeight() / screenHeight) } @@ -271,8 +275,9 @@ class BottomSheetView( } // Apply deferred layout update after gesture completes if (newState != BottomSheetBehavior.STATE_DRAGGING && - newState != BottomSheetBehavior.STATE_SETTLING && - pendingLayoutUpdate) { + newState != BottomSheetBehavior.STATE_SETTLING && + pendingLayoutUpdate + ) { pendingLayoutUpdate = false updateLayout() } @@ -292,7 +297,6 @@ class BottomSheetView( if (!fullHeight) { this.startObservingContentHeight() } - } fun updateLayout() { @@ -365,17 +369,18 @@ class BottomSheetView( val innerViewGroup = this.innerView as? ViewGroup ?: return - val listener = OnLayoutChangeListener { _, _, top, _, bottom, _, _, oldTop, oldBottom -> - val newHeight = bottom - top - val oldHeight = oldBottom - oldTop - if (newHeight != oldHeight) { - val contentHeight = getContentHeight() - if (contentHeight != lastObservedContentHeight && contentHeight > 0 && (isOpen || isOpening) && !isClosing) { - lastObservedContentHeight = contentHeight - updateLayout() + val listener = + OnLayoutChangeListener { _, _, top, _, bottom, _, _, oldTop, oldBottom -> + val newHeight = bottom - top + val oldHeight = oldBottom - oldTop + if (newHeight != oldHeight) { + val contentHeight = getContentHeight() + if (contentHeight != lastObservedContentHeight && contentHeight > 0 && (isOpen || isOpening) && !isClosing) { + lastObservedContentHeight = contentHeight + updateLayout() + } } } - } val children = mutableListOf() for (i in 0 until innerViewGroup.childCount) { diff --git a/package.json b/package.json index 0716bd085b..b8bd26e241 100644 --- a/package.json +++ b/package.json @@ -102,6 +102,7 @@ "@bsky.app/expo-image-crop-tool": "^0.5.1", "@bsky.app/expo-scroll-edge-effect": "^0.1.4", "@bsky.app/expo-translate-text": "^0.2.9", + "@bsky.app/peek-menu": "^0.2.4", "@bsky.app/react-native-mmkv": "2.12.5", "@bsky.app/sift": "^0.3.8", "@bsky.app/tapper": "^0.5.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d9210cc2d..b3d0003107 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -268,6 +268,9 @@ importers: '@bsky.app/expo-translate-text': specifier: ^0.2.9 version: 0.2.9(expo@54.0.34(@babel/core@7.29.0)(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@bsky.app/peek-menu': + specifier: ^0.2.4 + version: 0.2.4(expo@54.0.34(@babel/core@7.29.0)(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@bsky.app/react-native-mmkv': specifier: 2.12.5 version: 2.12.5(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) @@ -1649,6 +1652,13 @@ packages: react: '*' react-native: '*' + '@bsky.app/peek-menu@0.2.4': + resolution: {integrity: sha512-3E5FwgCXMU6baye3NWoBKih3SCh6s8AgAtxN523YBHZGC5TxpjGaBsjFi765y31nKmTll3QH7x4wtDgYqVvCQg==} + peerDependencies: + expo: '*' + react: '*' + react-native: '*' + '@bsky.app/react-native-mmkv@2.12.5': resolution: {integrity: sha512-3vUz1nQY1DiKIPAWRkpp5ZGxH5f2G6Ui0UuQuEYjYv81xx1qFcSzS9KQ2sHcOKYdkOM9amWV2Q8TQCxt1lrAHg==} peerDependencies: @@ -10461,6 +10471,12 @@ snapshots: react: 19.1.0 react-native: 0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) + '@bsky.app/peek-menu@0.2.4(expo@54.0.34(@babel/core@7.29.0)(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + dependencies: + expo: 54.0.34(@babel/core@7.29.0)(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-native: 0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) + '@bsky.app/react-native-mmkv@2.12.5(react-native@0.81.5(patch_hash=2656ac6deb71b92a4df4af4593d13ace6a5740936432e5e7e8ef32bc3cd05194)(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: react: 19.1.0 diff --git a/src/components/MediaPreview.tsx b/src/components/MediaPreview.tsx index 530c85ae66..9aad6da864 100644 --- a/src/components/MediaPreview.tsx +++ b/src/components/MediaPreview.tsx @@ -1,11 +1,16 @@ import {type StyleProp, StyleSheet, View, type ViewStyle} from 'react-native' import {Image} from 'expo-image' -import {type AppBskyFeedDefs} from '@atproto/api' -import {Trans} from '@lingui/react/macro' +import {type AppBskyEmbedImages, type AppBskyFeedDefs} from '@atproto/api' +import {Trans, useLingui} from '@lingui/react/macro' +import {shareImageModal} from '#/lib/media/manip' +import {useSaveImageToMediaLibrary} from '#/lib/media/save-image' import {isGifEmbed} from '#/lib/strings/embed-player' -import {atoms as a, useTheme} from '#/alf' +import {atoms as a, tokens, useTheme} from '#/alf' +import {ArrowShareRight_Stroke2_Corner2_Rounded as ShareIcon} from '#/components/icons/ArrowShareRight' +import {Download_Stroke2_Corner0_Rounded as DownloadIcon} from '#/components/icons/Download' import {MediaInsetBorder} from '#/components/MediaInsetBorder' +import * as PeekMenu from '#/components/PeekMenu' import {Text} from '#/components/Typography' import {PlayButtonIcon} from '#/components/video/PlayButtonIcon' import * as bsky from '#/types/bsky' @@ -16,9 +21,11 @@ import * as bsky from '#/types/bsky' export function Embed({ embed, style, + peekable = false, }: { embed: AppBskyFeedDefs.PostView['embed'] style?: StyleProp + peekable?: boolean }) { const e = bsky.post.parseEmbed(embed) @@ -27,13 +34,17 @@ export function Embed({ if (e.type === 'images') { return ( - {e.view.images.map(image => ( - - ))} + {e.view.images.map(image => + peekable ? ( + + ) : ( + + ), + )} ) } else if (e.type === 'link') { @@ -156,6 +167,45 @@ export function VideoItem({ ) } +function PeekableImageItem({image}: {image: AppBskyEmbedImages.ViewImage}) { + const {t: l} = useLingui() + const saveImage = useSaveImageToMediaLibrary() + + const aspect = + image.aspectRatio && image.aspectRatio.height > 0 + ? image.aspectRatio.width / image.aspectRatio.height + : undefined + + return ( + + 0 ? aspect : 1, + }} + borderRadius={tokens.borderRadius.xs}> + + + + void saveImage(image.fullsize)}> + + {l`Save image`} + + void shareImageModal({uri: image.fullsize})}> + + {l`Share`} + + + + ) +} + const styles = StyleSheet.create({ altContainer: { backgroundColor: 'rgba(0, 0, 0, 0.75)', diff --git a/src/components/PeekMenu.tsx b/src/components/PeekMenu.tsx new file mode 100644 index 0000000000..53732ec3e8 --- /dev/null +++ b/src/components/PeekMenu.tsx @@ -0,0 +1 @@ +export * from '@bsky.app/peek-menu' diff --git a/src/components/Post/Embed/ImageContextMenu.tsx b/src/components/Post/Embed/ImageContextMenu.tsx new file mode 100644 index 0000000000..3aadb56901 --- /dev/null +++ b/src/components/Post/Embed/ImageContextMenu.tsx @@ -0,0 +1,79 @@ +import {type ReactNode} from 'react' +import {type StyleProp, type ViewStyle} from 'react-native' +import {useLingui} from '@lingui/react/macro' + +import {shareImageModal} from '#/lib/media/manip' +import {useSaveImageToMediaLibrary} from '#/lib/media/save-image' +import {ArrowShareRight_Stroke2_Corner2_Rounded as ShareIcon} from '#/components/icons/ArrowShareRight' +import {Download_Stroke2_Corner0_Rounded as DownloadIcon} from '#/components/icons/Download' +import * as PeekMenu from '#/components/PeekMenu' +import {IS_IOS} from '#/env' + +/** + * Wraps an image embed with the iOS peek-and-menu interaction. On non-iOS + * platforms this renders children unchanged. + * + * The aspect ratio is consumed by the native side to size the preview + * viewController correctly — which is what makes the lift animation clean + * for portrait/panorama images. + */ +export function ImageContextMenu({ + fullsizeUri, + thumbUri, + aspectRatio, + borderRadius, + onPreviewPress, + style, + children, +}: { + fullsizeUri: string + /** Thumbnail URL. Used as an instant placeholder in the native preview + * while the fullsize loads, so there's no black flash on first peek. */ + thumbUri?: string + /** width / height; defaults to 1 if missing. */ + aspectRatio: number | undefined + borderRadius?: number + onPreviewPress?: () => void + style?: StyleProp + children: ReactNode +}) { + const {t: l} = useLingui() + const saveImage = useSaveImageToMediaLibrary() + + if (!IS_IOS) { + return children + } + + const handleSave = () => { + void saveImage(fullsizeUri) + } + const handleShare = () => { + void shareImageModal({uri: fullsizeUri}) + } + + return ( + + 0 ? aspectRatio : 1, + }} + borderRadius={borderRadius} + onPreviewPress={onPreviewPress}> + {children} + + + + + {l`Save image`} + + + + {l`Share`} + + + + ) +} diff --git a/src/components/Post/Embed/ImageEmbed.tsx b/src/components/Post/Embed/ImageEmbed.tsx index d779d04876..ccd1ceb270 100644 --- a/src/components/Post/Embed/ImageEmbed.tsx +++ b/src/components/Post/Embed/ImageEmbed.tsx @@ -1,3 +1,4 @@ +import {useRef} from 'react' import {InteractionManager, View} from 'react-native' import {type AnimatedRef} from 'react-native-reanimated' import {Image} from 'expo-image' @@ -8,6 +9,7 @@ import {Gallery} from '#/components/images/Gallery' import {ImageLayoutGrid} from '#/components/images/ImageLayoutGrid' import {useLightboxControls} from '#/components/Lightbox/state' import {type Dimensions} from '#/components/Lightbox/types' +import {ImageContextMenu} from '#/components/Post/Embed/ImageContextMenu' import {PostEmbedViewContext} from '#/components/Post/Embed/types' import {useAnalytics} from '#/analytics' import {type EmbedType} from '#/types/bsky/post' @@ -24,6 +26,11 @@ export function ImageEmbed({ const {images} = embed.view const galleryEnabled = ax.features.enabled(ax.features.PostGalleryEmbedEnable) + // Captured from AutoSizedImage so the peek-commit handler can reuse the same + // ref + dims that a tap would — keeps the lightbox's return animation intact. + const singleContainerRef = useRef | null>(null) + const singleDimsRef = useRef(null) + if (images.length > 0) { const items = images.map(img => ({ uri: img.fullsize, @@ -59,24 +66,49 @@ export function ImageEmbed({ if (images.length === 1) { const image = images[0] + const aspect = + image.aspectRatio && image.aspectRatio.height > 0 + ? image.aspectRatio.width / image.aspectRatio.height + : undefined + const openFromSingle = () => { + if (singleContainerRef.current) { + onPress(0, [singleContainerRef.current], [singleDimsRef.current]) + } + } return ( - onPress(0, [containerRef], [dims])} - onPressIn={() => onPressIn(0)} - hideBadge={ - rest.viewContext === PostEmbedViewContext.FeedEmbedRecordWithMedia - } - /> + + { + singleContainerRef.current = ref + }} + onDimsChange={dims => { + singleDimsRef.current = dims + }} + onPress={(containerRef, dims) => + onPress(0, [containerRef], [dims]) + } + onPressIn={() => onPressIn(0)} + hideBadge={ + rest.viewContext === + PostEmbedViewContext.FeedEmbedRecordWithMedia + } + /> + ) } diff --git a/src/components/icons/TEMPLATE.tsx b/src/components/icons/TEMPLATE.tsx index 4feaaef359..a7ef371cd1 100644 --- a/src/components/icons/TEMPLATE.tsx +++ b/src/components/icons/TEMPLATE.tsx @@ -1,8 +1,20 @@ -import {forwardRef} from 'react' +import { + forwardRef, + type ForwardRefExoticComponent, + type RefAttributes, +} from 'react' import Svg, {Path} from 'react-native-svg' import {type Props, useCommonSVGProps} from '#/components/icons/common' +export type IconWithSvgMeta = ForwardRefExoticComponent< + Props & RefAttributes +> & { + svgPaths: string[] + svgViewBox: string + svgStrokeWidth: number +} + export const IconTemplate_Stroke2_Corner0_Rounded = forwardRef( function LogoImpl(props: Props, ref) { const {fill, size, style, ...rest} = useCommonSVGProps(props) @@ -41,7 +53,7 @@ export function createSinglePathSVG({ strokeLinecap?: 'butt' | 'round' | 'square' strokeLinejoin?: 'miter' | 'round' | 'bevel' }) { - return forwardRef(function LogoImpl(props, ref) { + const Icon = forwardRef(function LogoImpl(props, ref) { const {fill, size, style, gradient, ...rest} = useCommonSVGProps(props) const hasStroke = strokeWidth > 0 @@ -68,7 +80,11 @@ export function createSinglePathSVG({ /> ) - }) + }) as IconWithSvgMeta + Icon.svgPaths = [path] + Icon.svgViewBox = viewBox || '0 0 24 24' + Icon.svgStrokeWidth = strokeWidth + return Icon } export function createMultiPathSVG({ @@ -78,7 +94,7 @@ export function createMultiPathSVG({ paths: string[] viewBox?: string }) { - return forwardRef(function LogoImpl(props, ref) { + const Icon = forwardRef(function LogoImpl(props, ref) { const {fill, size, style, gradient, ...rest} = useCommonSVGProps(props) return ( @@ -102,5 +118,9 @@ export function createMultiPathSVG({ ))} ) - }) + }) as IconWithSvgMeta + Icon.svgPaths = paths + Icon.svgViewBox = viewBox || '0 0 24 24' + Icon.svgStrokeWidth = 0 + return Icon } diff --git a/src/components/images/AutoSizedImage.tsx b/src/components/images/AutoSizedImage.tsx index 2df8d056d6..79b41311cb 100644 --- a/src/components/images/AutoSizedImage.tsx +++ b/src/components/images/AutoSizedImage.tsx @@ -1,4 +1,4 @@ -import {useMemo, useRef} from 'react' +import {useEffect, useMemo, useRef} from 'react' import {type DimensionValue, Pressable, View} from 'react-native' import Animated, { type AnimatedRef, @@ -69,6 +69,8 @@ export function AutoSizedImage({ onPress, onLongPress, onPressIn, + onContainerRef, + onDimsChange, }: { image: AppBskyEmbedImages.ViewImage crop?: 'none' | 'square' | 'constrained' @@ -79,6 +81,11 @@ export function AutoSizedImage({ ) => void onLongPress?: () => void onPressIn?: () => void + /** Fires once with the internal container ref so a parent can drive its + * own lightbox-return animation without waiting for an `onPress`. */ + onContainerRef?: (ref: AnimatedRef) => void + /** Fires when the underlying image reports its natural dimensions. */ + onDimsChange?: (dims: Dimensions) => void }) { const t = useTheme() const {_} = useLingui() @@ -86,6 +93,10 @@ export function AutoSizedImage({ const containerRef = useAnimatedRef() const fetchedDimsRef = useRef<{width: number; height: number} | null>(null) + useEffect(() => { + onContainerRef?.(containerRef) + }, [containerRef, onContainerRef]) + let aspectRatio: number | undefined const dims = image.aspectRatio if (dims) { @@ -122,10 +133,12 @@ export function AutoSizedImage({ accessibilityHint="" onLoad={e => { if (!isContain) { - fetchedDimsRef.current = { + const dims = { width: e.source.width, height: e.source.height, } + fetchedDimsRef.current = dims + onDimsChange?.(dims) } }} loading="lazy" diff --git a/src/components/images/Gallery/index.tsx b/src/components/images/Gallery/index.tsx index 1566f09736..f4ffcd7159 100644 --- a/src/components/images/Gallery/index.tsx +++ b/src/components/images/Gallery/index.tsx @@ -24,7 +24,7 @@ import {mergeRefs} from '#/lib/merge-refs' import {useA11y} from '#/state/a11y' import {useLargeAltBadgeEnabled} from '#/state/preferences/large-alt-badge' import {BlockDrawerGesture} from '#/view/shell/BlockDrawerGesture' -import {atoms as a, useBreakpoints, useTheme, web} from '#/alf' +import {atoms as a, tokens, useBreakpoints, useTheme, web} from '#/alf' import {ArrowsDiagonalOut_Stroke2_Corner0_Rounded as Fullscreen} from '#/components/icons/ArrowsDiagonal' import {AutoSizedImage} from '#/components/images/AutoSizedImage' import { @@ -36,6 +36,7 @@ import {useKeyboardHandlers} from '#/components/images/Gallery/useKeyboardHandle import {usePointerHandlers} from '#/components/images/Gallery/usePointerHandlers' import {getAspectRatio} from '#/components/images/Gallery/utils' import {MediaInsetBorder} from '#/components/MediaInsetBorder' +import {ImageContextMenu} from '#/components/Post/Embed/ImageContextMenu' import {PostEmbedViewContext} from '#/components/Post/Embed/types' import {Text} from '#/components/Typography' import {useAnalytics} from '#/analytics' @@ -264,6 +265,21 @@ export function Gallery({ data={images} keyExtractor={(item, index) => item.thumb + index} renderItem={({item, index}) => { + const openLightboxAtIndex = onPress + ? () => { + ax.metric('post:gallery:openLightbox', { + fromImage: index + 1, // convert to 1-based index for easier analysis + totalImages: images.length, + }) + const refs: AnimatedRef[] = [] + const dims: (Dimensions | null)[] = [] + for (let i = 0; i < images.length; i++) { + refs.push(containerRefsRef.current.get(i)!) + dims.push(thumbDimsRef.current.get(i) ?? null) + } + onPress(index, refs, dims) + } + : undefined return ( { thumbDimsRef.current.set(i, dims) }} - onPress={ - onPress - ? () => { - ax.metric('post:gallery:openLightbox', { - fromImage: index + 1, // convert to 1-based index for easier analysis - totalImages: images.length, - }) - const refs: AnimatedRef[] = [] - const dims: (Dimensions | null)[] = [] - for (let i = 0; i < images.length; i++) { - refs.push(containerRefsRef.current.get(i)!) - dims.push(thumbDimsRef.current.get(i) ?? null) - } - onPress(index, refs, dims) - } - : undefined - } + onPress={openLightboxAtIndex} onPressIn={onPressIn ? () => onPressIn(index) : undefined} + onPreviewPress={openLightboxAtIndex} /> ) }} @@ -378,6 +379,7 @@ function GalleryImage({ onThumbDims, onPress, onPressIn, + onPreviewPress, }: { contentHeight: number image: AppBskyEmbedImages.ViewImage @@ -391,6 +393,7 @@ function GalleryImage({ onThumbDims: (index: number, dims: Dimensions) => void onPress?: () => void onPressIn?: () => void + onPreviewPress?: () => void }) { const t = useTheme() const {t: l} = useLingui() @@ -416,124 +419,131 @@ function GalleryImage({ collapsable={false} aria-roledescription={l`slide`} aria-label={image.alt || l`Image ${index + 1} of ${imageCount}`}> - setFocused(true)} - onBlur={() => setFocused(false)} - accessibilityRole="button" - accessibilityLabel={image.alt || l`Image ${index + 1}`} - accessibilityHint={l`Opens full image`} - android_ripple={{ - color: utils.alpha(t.atoms.bg.backgroundColor, 0.2), - foreground: true, - }} - style={({pressed}) => [ - a.rounded_md, - a.overflow_hidden, - t.atoms.bg_contrast_25, - web([ - { - cursor: 'inherit', - outline: 0, - border: 0, - }, - a.transition_transform, - {transitionDuration: '200ms'}, - pressed && {transform: [{scale: 0.99}]}, - ]), - ]}> - { - const ar = getAspectRatio(e.source) - if (ar && ar !== aspectRatio) { - setAspectRatio(ar) - } - onThumbDims(index, { - width: e.source.width, - height: e.source.height, - }) + + setFocused(true)} + onBlur={() => setFocused(false)} + accessibilityRole="button" + accessibilityLabel={image.alt || l`Image ${index + 1}`} + accessibilityHint={l`Opens full image`} + android_ripple={{ + color: utils.alpha(t.atoms.bg.backgroundColor, 0.2), + foreground: true, }} - /> - - {(hasAlt || isCropped) && !hideBadges ? ( - [ + a.rounded_md, + a.overflow_hidden, + t.atoms.bg_contrast_25, + web([ { - bottom: a.p_xs.padding, - right: a.p_xs.padding, - gap: 3, + cursor: 'inherit', + outline: 0, + border: 0, }, - largeAltBadge && { - gap: 4, - }, - ]}> - {isCropped && ( - - - - )} - {hasAlt && ( - - - ALT - - - )} - - ) : null} + a.transition_transform, + {transitionDuration: '200ms'}, + pressed && {transform: [{scale: 0.99}]}, + ]), + ]}> + { + const ar = getAspectRatio(e.source) + if (ar && ar !== aspectRatio) { + setAspectRatio(ar) + } + onThumbDims(index, { + width: e.source.width, + height: e.source.height, + }) + }} + /> - + {isCropped && ( + + + + )} + {hasAlt && ( + + + ALT + + + )} + + ) : null} + + - + /> + + ) } diff --git a/src/components/images/ImageLayoutGridItem.tsx b/src/components/images/ImageLayoutGridItem.tsx index b809a783fa..0c349b6612 100644 --- a/src/components/images/ImageLayoutGridItem.tsx +++ b/src/components/images/ImageLayoutGridItem.tsx @@ -9,8 +9,9 @@ import {Trans} from '@lingui/react/macro' import {type Dimensions} from '#/lib/media/types' import {useLargeAltBadgeEnabled} from '#/state/preferences/large-alt-badge' -import {atoms as a, useTheme} from '#/alf' +import {atoms as a, tokens, useTheme} from '#/alf' import {MediaInsetBorder} from '#/components/MediaInsetBorder' +import {ImageContextMenu} from '#/components/Post/Embed/ImageContextMenu' import {PostEmbedViewContext} from '#/components/Post/Embed/types' import {Text} from '#/components/Typography' @@ -52,46 +53,63 @@ export function GalleryItem({ const hasAlt = !!image.alt const hideBadges = viewContext === PostEmbedViewContext.FeedEmbedRecordWithMedia + + const aspect = + image.aspectRatio && image.aspectRatio.height > 0 + ? image.aspectRatio.width / image.aspectRatio.height + : undefined + + // The tap handler and the peek-commit handler do the same thing: open the + // lightbox with this cell's ref + dims so the lightbox's return animation + // can target the original thumbnail. + const openLightboxAtIndex = onPress + ? () => onPress(index, containerRefs, thumbDimsRef.current.slice()) + : undefined + return ( - onPress(index, containerRefs, thumbDimsRef.current.slice()) - : undefined - } - onPressIn={onPressIn ? () => onPressIn(index) : undefined} - onLongPress={onLongPress ? () => onLongPress(index) : undefined} - android_ripple={{ - color: utils.alpha(t.atoms.bg.backgroundColor, 0.2), - foreground: true, - }} - style={[ - a.flex_1, - a.overflow_hidden, - t.atoms.bg_contrast_25, - imageStyle, - ]} - accessibilityRole="button" - accessibilityLabel={image.alt || _(msg`Image`)} - accessibilityHint=""> - { - thumbDimsRef.current[index] = { - width: e.source.width, - height: e.source.height, - } + + onPressIn(index) : undefined} + onLongPress={onLongPress ? () => onLongPress(index) : undefined} + android_ripple={{ + color: utils.alpha(t.atoms.bg.backgroundColor, 0.2), + foreground: true, }} - loading="lazy" - /> - - + style={[ + a.flex_1, + a.overflow_hidden, + t.atoms.bg_contrast_25, + imageStyle, + ]} + accessibilityRole="button" + accessibilityLabel={image.alt || _(msg`Image`)} + accessibilityHint=""> + { + thumbDimsRef.current[index] = { + width: e.source.width, + height: e.source.height, + } + }} + loading="lazy" + /> + + + {hasAlt && !hideBadges ? ( ) From 3c06ecfa1a18cd57b26960dbe36e5d7aacd89b82 Mon Sep 17 00:00:00 2001 From: DS Boyce <260543580+ds-boyce@users.noreply.github.com> Date: Tue, 2 Jun 2026 19:13:34 -0700 Subject: [PATCH 12/31] Transpile `@atproto/api` package for older browser support (#10700) --- webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack.config.js b/webpack.config.js index 101a762ffb..bccf95adef 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -43,7 +43,7 @@ function patchSourceMapFilter(rules, pathPattern) { module.exports = async function (env, argv) { env.babel = { - dangerouslyAddModulePathsToTranspile: ['@bsky.app/expo'], + dangerouslyAddModulePathsToTranspile: ['@bsky.app/expo', '@atproto/api'], } let config = await createExpoWebpackConfigAsync(env, argv) config = withAlias(config, { From f4f66af31c3c313916ee1ec00e9cf08f3ca151be Mon Sep 17 00:00:00 2001 From: pfrazee <1270099+pfrazee@users.noreply.github.com> Date: Wed, 3 Jun 2026 03:21:33 +0000 Subject: [PATCH 13/31] Nightly source-language update --- src/locale/locales/en/messages.po | 865 +++++++++++++++++++----------- 1 file changed, 566 insertions(+), 299 deletions(-) diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po index 4de882a998..b1fd0337d7 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -86,6 +86,11 @@ msgstr "" msgid "{0, plural, one {# new join request} other {# new join requests}}" msgstr "{0, plural, one {# new join request} other {# new join requests}}" +#. placeholder {0}: convo.details.memberLimit +#: src/screens/Messages/components/InviteLinkDialog.tsx:181 +msgid "{0, plural, one {# person} other {# people}}" +msgstr "{0, plural, one {# person} other {# people}}" + #. placeholder {0}: reactions.length #. placeholder {1}: groupedReactions.map(g => g.value).join(' ') #: src/components/dms/MessageItem.tsx:297 @@ -319,6 +324,20 @@ msgstr "" msgid "{0}’s avatar" msgstr "{0}’s avatar" +#. The number of active group chat members out of the total number allowed. +#. placeholder {0}: data.joinLinkPreviews[0].memberCount +#. placeholder {1}: data.joinLinkPreviews[0].memberLimit +#: src/screens/Messages/JoinRequest.tsx:130 +msgid "{0}/{1}" +msgstr "{0}/{1}" + +#. The number of active group chat members out of the total number allowed. +#. placeholder {0}: joinLinkPreview.memberCount +#. placeholder {1}: joinLinkPreview.memberLimit +#: src/components/intents/GroupChatJoinDialog.tsx:307 +msgid "{0}/{1} members" +msgstr "{0}/{1} members" + #. How many days have passed, displayed in a narrow form #. placeholder {0}: diff.value #: src/lib/hooks/useTimeAgo.ts:171 @@ -355,6 +374,10 @@ msgstr "{count, plural, one {# request} other {# requests}}" msgid "{count, plural, one {# unread item} other {# unread items}}" msgstr "" +#: src/screens/Messages/JoinRequests.tsx:429 +msgid "{count, plural, zero {No requests to join} one {# request to join} other {# requests to join}}" +msgstr "{count, plural, zero {No requests to join} one {# request to join} other {# requests to join}}" + #. Displayed when the number of requests is greater than 20 #: src/screens/Messages/components/InboxRequests.tsx:53 msgid "{count}+" @@ -365,6 +388,11 @@ msgstr "{count}+" msgid "{count}+ requests" msgstr "{count}+ requests" +#. Displayed when there are more requests to join a group chat than have been loaded +#: src/screens/Messages/JoinRequests.tsx:423 +msgid "{count}+ requests to join" +msgstr "{count}+ requests to join" + #: src/components/dms/DateDivider.tsx:60 msgid "{date} at {time}" msgstr "{date} at {time}" @@ -539,7 +567,7 @@ msgid "{following} following" msgstr "" #: src/components/dms/components/GroupChatProfileCard.tsx:56 -#: src/components/dms/InitiateChatFlow.tsx:888 +#: src/components/dms/InitiateChatFlow.tsx:889 msgid "{handle} can’t be added" msgstr "{handle} can’t be added" @@ -547,7 +575,7 @@ msgstr "{handle} can’t be added" msgid "{handle} can't be messaged" msgstr "" -#: src/components/dms/InitiateChatFlow.tsx:849 +#: src/components/dms/InitiateChatFlow.tsx:850 msgid "{handle} can’t be messaged" msgstr "{handle} can’t be messaged" @@ -581,7 +609,7 @@ msgid "{MAX_HIDDEN_REPLIES, plural, other {You can hide a maximum of # replies.} msgstr "" #. The number of group chat members out of the total number of permitted users. -#: src/screens/Messages/ConversationSettings/MembersAndRequests.tsx:34 +#: src/screens/Messages/ConversationSettings/MembersAndRequests.tsx:39 msgid "{memberCount}/{memberLimit}" msgstr "{memberCount}/{memberLimit}" @@ -629,12 +657,12 @@ msgid "{rank}." msgstr "" #. The number of requests to join a group chat. -#: src/screens/Messages/ConversationSettings/MembersAndRequests.tsx:53 +#: src/screens/Messages/ConversationSettings/MembersAndRequests.tsx:61 msgid "{requestCount, plural, one {# request} other {# requests}}" msgstr "{requestCount, plural, one {# request} other {# requests}}" #. Displayed when there are more than 20 requests to join a group chat -#: src/screens/Messages/ConversationSettings/MembersAndRequests.tsx:48 +#: src/screens/Messages/ConversationSettings/MembersAndRequests.tsx:56 msgid "{requestCount}+ requests" msgstr "{requestCount}+ requests" @@ -802,6 +830,8 @@ msgstr "" #: src/components/contacts/screens/VerifyNumber.tsx:155 #: src/components/dms/dialogs/NewChatDialog.tsx:52 #: src/components/dms/dialogs/NewChatDialog.tsx:90 +#: src/screens/Messages/JoinRequests.tsx:188 +#: src/screens/Messages/JoinRequests.tsx:220 msgid "A network error occurred. Please check your internet connection." msgstr "" @@ -836,7 +866,7 @@ msgstr "" msgid "A selected recipient is not followed by the sender." msgstr "A selected recipient is not followed by the sender." -#: src/Navigation.tsx:457 +#: src/Navigation.tsx:459 #: src/screens/Settings/AboutSettings.tsx:78 #: src/screens/Settings/Settings.tsx:255 #: src/screens/Settings/Settings.tsx:258 @@ -852,10 +882,20 @@ msgstr "" msgid "Accept" msgstr "" +#. Accept a request to join a chat +#: src/screens/Messages/JoinRequests.tsx:460 +msgctxt "button" +msgid "Accept" +msgstr "Accept" + #: src/screens/Messages/components/RequestButtons.tsx:280 msgid "Accept chat request" msgstr "" +#: src/screens/Messages/JoinRequests.tsx:454 +msgid "Accept join request" +msgstr "Accept join request" + #. Accept a chat request #: src/screens/Messages/components/RequestListItem.tsx:48 msgid "Accept Request" @@ -870,17 +910,21 @@ msgstr "" msgid "Accepted conversations" msgstr "Accepted conversations" +#: src/components/intents/GroupChatJoinDialog.tsx:93 +msgid "Access requested! The group owner will review your request." +msgstr "Access requested! The group owner will review your request." + #: src/screens/Settings/AccessibilitySettings.tsx:45 #: src/screens/Settings/Settings.tsx:233 #: src/screens/Settings/Settings.tsx:236 msgid "Accessibility" msgstr "" -#: src/Navigation.tsx:380 +#: src/Navigation.tsx:382 msgid "Accessibility Settings" msgstr "" -#: src/Navigation.tsx:396 +#: src/Navigation.tsx:398 #: src/screens/Login/LoginForm.tsx:192 #: src/screens/Settings/AccountSettings.tsx:56 #: src/screens/Settings/Settings.tsx:173 @@ -1023,11 +1067,11 @@ msgstr "" msgid "Add another account" msgstr "" -#: src/view/com/composer/Composer.tsx:1401 +#: src/view/com/composer/Composer.tsx:1383 msgid "Add another post" msgstr "" -#: src/view/com/composer/Composer.tsx:2067 +#: src/view/com/composer/Composer.tsx:2049 msgid "Add another post to thread" msgstr "" @@ -1058,7 +1102,7 @@ msgid "Add image" msgstr "" #. Accessibility label for button in composer to add images, a video, or a GIF to a post -#: src/view/com/composer/SelectMediaButton.tsx:499 +#: src/view/com/composer/SelectMediaButton.tsx:503 msgid "Add media to post" msgstr "" @@ -1086,8 +1130,8 @@ msgstr "" msgid "Add muted words and tags" msgstr "" -#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:135 -#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:174 +#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:132 +#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:171 #: src/screens/ProfileList/AboutSection.tsx:72 #: src/screens/ProfileList/AboutSection.tsx:90 msgid "Add people" @@ -1344,9 +1388,9 @@ msgstr "" msgid "Already signed in as @{0}" msgstr "" -#: src/components/images/AutoSizedImage.tsx:190 -#: src/components/images/Gallery/index.tsx:522 -#: src/components/images/ImageLayoutGridItem.tsx:120 +#: src/components/images/AutoSizedImage.tsx:203 +#: src/components/images/Gallery/index.tsx:531 +#: src/components/images/ImageLayoutGridItem.tsx:138 #: src/components/Post/Embed/VideoEmbed/GifPresentationControls.tsx:94 #: src/view/com/composer/GifAltText.tsx:100 #: src/view/com/composer/photos/Gallery.tsx:209 @@ -1393,7 +1437,7 @@ msgstr "" msgid "An error occurred" msgstr "" -#: src/view/com/composer/state/video.ts:411 +#: src/view/com/composer/state/video.ts:401 msgid "An error occurred while compressing the video." msgstr "" @@ -1438,11 +1482,11 @@ msgstr "" msgid "An error occurred while trying to follow all" msgstr "" -#: src/view/com/composer/state/video.ts:468 +#: src/view/com/composer/state/video.ts:453 msgid "An error occurred while uploading the video. {message}" msgstr "" -#: src/view/com/composer/state/video.ts:460 +#: src/view/com/composer/state/video.ts:445 msgid "An error occurred while uploading the video. Please check your internet connection and try again." msgstr "" @@ -1468,8 +1512,8 @@ msgid "An illustration showing that Bluesky selects trusted verifiers, and trust msgstr "" #: src/screens/Messages/components/InviteLinkDialog.tsx:172 -msgid "An invite link lets people join this group chat without being added directly. You control who can use the link and whether they need your approval. You can disable the link at any time." -msgstr "An invite link lets people join this group chat without being added directly. You control who can use the link and whether they need your approval. You can disable the link at any time." +msgid "An invite link lets people join this group chat without being added directly. You control who can join the chat. You can disable the link at any time." +msgstr "An invite link lets people join this group chat without being added directly. You control who can join the chat. You can disable the link at any time." #: src/components/moderation/ReportDialog/utils/useReportOptions.ts:239 msgid "An issue not included in these options" @@ -1545,6 +1589,10 @@ msgstr "" msgid "Anyone can interact" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:322 +msgid "Anyone can join" +msgstr "Anyone can join" + #: src/screens/Messages/components/InviteLinkDialog.tsx:143 #: src/screens/Messages/components/InviteLinkDialog.tsx:144 msgid "Anyone can join instantly" @@ -1561,11 +1609,11 @@ msgstr "Anyone can request to join" msgid "Anyone who follows me" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:436 +#: src/screens/Messages/components/InviteLinkDialog.tsx:446 msgid "Anyone who has it will no longer be able to join or request to join. You can always create a new one." msgstr "Anyone who has it will no longer be able to join or request to join. You can always create a new one." -#: src/Navigation.tsx:465 +#: src/Navigation.tsx:467 #: src/screens/Settings/AppIconSettings/index.tsx:65 #: src/screens/Settings/AppIconSettings/SettingsListItem.tsx:19 #: src/screens/Settings/AppIconSettings/SettingsListItem.tsx:24 @@ -1603,7 +1651,7 @@ msgstr "" msgid "App passwords" msgstr "" -#: src/Navigation.tsx:348 +#: src/Navigation.tsx:350 #: src/screens/Settings/AppPasswords.tsx:51 msgid "App Passwords" msgstr "" @@ -1645,7 +1693,7 @@ msgstr "" msgid "Appeal this decision" msgstr "" -#: src/Navigation.tsx:388 +#: src/Navigation.tsx:390 #: src/screens/Settings/AppearanceSettings.tsx:73 #: src/screens/Settings/Settings.tsx:225 #: src/screens/Settings/Settings.tsx:228 @@ -1710,7 +1758,7 @@ msgstr "" msgid "Are you sure you want to remove this from your feeds?" msgstr "" -#: src/view/com/composer/Composer.tsx:1541 +#: src/view/com/composer/Composer.tsx:1523 msgid "Are you sure you'd like to discard this post?" msgstr "" @@ -1758,7 +1806,7 @@ msgstr "Automated account" msgid "Automation label" msgstr "Automation label" -#: src/Navigation.tsx:404 +#: src/Navigation.tsx:406 #: src/screens/Settings/AutomationLabelSettings.tsx:103 msgid "Automation Label" msgstr "Automation Label" @@ -1776,9 +1824,9 @@ msgstr "" #: src/components/dms/AddMembersFlow.tsx:342 #: src/components/dms/AddMembersFlow.tsx:509 #: src/components/dms/AddMembersFlow.tsx:515 -#: src/components/dms/InitiateChatFlow.tsx:508 -#: src/components/dms/InitiateChatFlow.tsx:701 -#: src/components/dms/InitiateChatFlow.tsx:708 +#: src/components/dms/InitiateChatFlow.tsx:509 +#: src/components/dms/InitiateChatFlow.tsx:702 +#: src/components/dms/InitiateChatFlow.tsx:709 #: src/components/moderation/LabelsOnMeDialog.tsx:334 #: src/components/moderation/LabelsOnMeDialog.tsx:335 #: src/screens/Login/ChooseAccountForm.tsx:98 @@ -1791,6 +1839,8 @@ msgstr "" #: src/screens/Login/SetNewPasswordForm.tsx:178 #: src/screens/Messages/components/ChatDisabled.tsx:164 #: src/screens/Messages/components/ChatDisabled.tsx:166 +#: src/screens/Messages/components/InviteLinkDialog.tsx:256 +#: src/screens/Messages/components/InviteLinkDialog.tsx:284 #: src/screens/Messages/Inbox.tsx:242 #: src/screens/Profile/Header/Shell.tsx:174 #: src/screens/Settings/components/ChangePasswordDialog.tsx:273 @@ -1970,7 +2020,7 @@ msgstr "" msgid "Blocked accounts" msgstr "" -#: src/Navigation.tsx:189 +#: src/Navigation.tsx:191 #: src/view/screens/ModerationBlockedAccounts.tsx:95 msgid "Blocked Accounts" msgstr "" @@ -2143,11 +2193,13 @@ msgstr "" msgid "Button to go back to the home timeline" msgstr "" +#. The owner (creator) of a group chat. +#. placeholder {0}: createSanitizedDisplayName( data.joinLinkPreviews[0].owner, true, moderateProfile( data.joinLinkPreviews[0].owner, moderationOpts, ).ui('displayName'), ) #. placeholder {0}: sanitizeHandle(handle, '@') #. placeholder {0}: sanitizeHandle(item.feed.creator.handle, '@') -#. placeholder {0}: sanitizeHandle(labeler.creator.handle, '@') #: src/components/LabelingServiceCard/index.tsx:62 #: src/components/moderation/ReportDialog/index.tsx:845 +#: src/screens/Messages/JoinRequest.tsx:166 #: src/screens/Search/components/StarterPackCard.tsx:107 #: src/screens/Search/Explore.tsx:971 msgid "By {0}" @@ -2218,8 +2270,8 @@ msgstr "" #: src/features/liveNow/components/GoLiveDialog.tsx:254 #: src/lib/media/picker.tsx:38 #: src/screens/Deactivated.tsx:150 -#: src/screens/Messages/components/InviteLinkDialog.tsx:458 -#: src/screens/Messages/components/InviteLinkDialog.tsx:462 +#: src/screens/Messages/components/InviteLinkDialog.tsx:468 +#: src/screens/Messages/components/InviteLinkDialog.tsx:472 #: src/screens/Messages/ConversationSettings/prompts.tsx:70 #: src/screens/Messages/ConversationSettings/prompts.tsx:94 #: src/screens/Profile/Header/EditProfileDialog.tsx:215 @@ -2234,8 +2286,8 @@ msgstr "" #: src/screens/Settings/Settings.tsx:300 #: src/screens/Takendown.tsx:102 #: src/screens/Takendown.tsx:105 -#: src/view/com/composer/Composer.tsx:1619 -#: src/view/com/composer/Composer.tsx:1629 +#: src/view/com/composer/Composer.tsx:1601 +#: src/view/com/composer/Composer.tsx:1611 #: src/view/com/composer/photos/EditImageDialog.web.tsx:44 #: src/view/com/composer/photos/EditImageDialog.web.tsx:53 #: src/view/shell/desktop/LeftNav.tsx:227 @@ -2270,7 +2322,7 @@ msgstr "" msgid "Captions & alt text" msgstr "" -#: src/components/images/Gallery/index.tsx:255 +#: src/components/images/Gallery/index.tsx:256 msgid "carousel" msgstr "carousel" @@ -2350,7 +2402,7 @@ msgid "Changes to the starter pack will not be reflected in the list after creat msgstr "" #: src/lib/hooks/useNotificationHandler.ts:133 -#: src/Navigation.tsx:483 +#: src/Navigation.tsx:485 #: src/view/shell/bottom-bar/BottomBar.tsx:229 #: src/view/shell/desktop/LeftNav.tsx:697 #: src/view/shell/Drawer.tsx:469 @@ -2367,6 +2419,11 @@ msgstr "" msgid "Chat ended" msgstr "Chat ended" +#: src/components/intents/GroupChatJoinDialog.tsx:227 +#: src/components/intents/GroupChatJoinDialog.tsx:258 +msgid "Chat invite link no longer available" +msgstr "Chat invite link no longer available" + #: src/components/dms/getSystemMessageInfo.ts:104 msgid "Chat locked" msgstr "Chat locked" @@ -2388,7 +2445,7 @@ msgstr "" msgid "Chat recipient is not followed by the sender." msgstr "Chat recipient is not followed by the sender." -#: src/Navigation.tsx:498 +#: src/Navigation.tsx:505 msgid "Chat request inbox" msgstr "" @@ -2398,7 +2455,7 @@ msgid "Chat requests" msgstr "" #: src/components/dms/ConvoMenu.tsx:84 -#: src/Navigation.tsx:493 +#: src/Navigation.tsx:500 #: src/screens/Messages/ChatList.tsx:83 #: src/screens/Messages/ChatList.tsx:87 #: src/screens/Messages/ChatList.tsx:500 @@ -2485,7 +2542,7 @@ msgstr "" msgid "Choose this color as your avatar" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:211 +#: src/screens/Messages/components/InviteLinkDialog.tsx:222 msgid "Choose who can join this group chat and how." msgstr "Choose who can join this group chat and how." @@ -2539,7 +2596,7 @@ msgstr "" msgid "click here" msgstr "" -#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:131 +#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:128 msgid "Click here to add people to this group chat" msgstr "Click here to add people to this group chat" @@ -2547,7 +2604,7 @@ msgstr "Click here to add people to this group chat" msgid "Click here to contact our support team" msgstr "" -#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:145 +#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:142 msgid "Click here to create or manage an invite link for this group chat" msgstr "Click here to create or manage an invite link for this group chat" @@ -2577,7 +2634,7 @@ msgstr "" msgid "Click here to update your email" msgstr "" -#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:146 +#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:143 msgid "Click here to view the invite link for this group chat" msgstr "Click here to view the invite link for this group chat" @@ -2621,7 +2678,9 @@ msgstr "" #: src/components/dms/AfterReportDialog.tsx:207 #: src/components/dms/AfterReportDialog.tsx:212 #: src/components/dms/EmojiPopup.android.tsx:59 -#: src/components/dms/InitiateChatFlow.tsx:533 +#: src/components/dms/InitiateChatFlow.tsx:534 +#: src/components/intents/GroupChatJoinDialog.tsx:204 +#: src/components/intents/GroupChatJoinDialog.tsx:239 #: src/components/NewskieDialog.tsx:169 #: src/components/NewskieDialog.tsx:175 #: src/components/Post/Embed/VideoEmbed/GifPresentationControls.tsx:107 @@ -2635,8 +2694,8 @@ msgstr "" #: src/features/gifPicker/components/GifPickerErrorBoundary.tsx:45 #: src/features/liveNow/components/EditLiveDialog.tsx:217 #: src/features/liveNow/components/EditLiveDialog.tsx:223 -#: src/screens/Messages/components/InviteLinkDialog.tsx:481 -#: src/screens/Messages/components/InviteLinkDialog.tsx:486 +#: src/screens/Messages/components/InviteLinkDialog.tsx:492 +#: src/screens/Messages/components/InviteLinkDialog.tsx:497 #: src/screens/Settings/components/ChangePasswordDialog.tsx:288 #: src/screens/Settings/components/ChangePasswordDialog.tsx:293 #: src/view/com/feeds/MissingFeed.tsx:211 @@ -2679,7 +2738,7 @@ msgid "Close image" msgstr "" #: src/components/Lightbox/Lightbox.web.tsx:73 -#: src/components/Lightbox/Lightbox.web.tsx:326 +#: src/components/Lightbox/Lightbox.web.tsx:330 msgid "Close image viewer" msgstr "" @@ -2690,6 +2749,10 @@ msgstr "" msgid "Close menu" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:197 +#: src/components/intents/GroupChatJoinDialog.tsx:198 +#: src/components/intents/GroupChatJoinDialog.tsx:234 +#: src/components/intents/GroupChatJoinDialog.tsx:235 #: src/components/Menu/index.tsx:361 msgid "Close this dialog" msgstr "" @@ -2702,7 +2765,7 @@ msgstr "" msgid "Closes password update alert" msgstr "" -#: src/view/com/composer/Composer.tsx:1627 +#: src/view/com/composer/Composer.tsx:1609 msgid "Closes post composer and discards post draft" msgstr "" @@ -2732,7 +2795,7 @@ msgid "Comics" msgstr "" #: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:46 -#: src/Navigation.tsx:338 +#: src/Navigation.tsx:340 #: src/view/screens/CommunityGuidelines.tsx:28 msgid "Community Guidelines" msgstr "" @@ -2752,7 +2815,7 @@ msgid "Compose new post" msgstr "" #. placeholder {0}: MAX_GRAPHEME_LENGTH || 0 -#: src/view/com/composer/Composer.tsx:1503 +#: src/view/com/composer/Composer.tsx:1485 msgid "Compose posts up to {0, plural, other {# characters}} in length" msgstr "" @@ -2760,11 +2823,11 @@ msgstr "" msgid "Compose reply" msgstr "" -#: src/view/com/composer/Composer.tsx:2464 +#: src/view/com/composer/Composer.tsx:2446 msgid "Compressing GIF..." msgstr "" -#: src/view/com/composer/Composer.tsx:2466 +#: src/view/com/composer/Composer.tsx:2448 msgid "Compressing video..." msgstr "" @@ -2849,7 +2912,7 @@ msgstr "" msgid "Content and media" msgstr "" -#: src/Navigation.tsx:441 +#: src/Navigation.tsx:443 msgid "Content and Media" msgstr "" @@ -2916,7 +2979,7 @@ msgid "Continue thread..." msgstr "" #: src/components/dms/AddMembersFlow.tsx:307 -#: src/components/dms/InitiateChatFlow.tsx:460 +#: src/components/dms/InitiateChatFlow.tsx:461 msgid "Continue to group name" msgstr "Continue to group name" @@ -2948,6 +3011,11 @@ msgctxt "toast" msgid "Conversation left" msgstr "Conversation left" +#: src/screens/Messages/JoinRequests.tsx:192 +#: src/screens/Messages/JoinRequests.tsx:224 +msgid "Conversation not found." +msgstr "Conversation not found." + #: src/screens/Settings/AboutSettings.tsx:162 msgid "Copied build version to clipboard" msgstr "" @@ -3059,7 +3127,7 @@ msgstr "" #: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:41 #: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:108 -#: src/Navigation.tsx:343 +#: src/Navigation.tsx:345 #: src/view/screens/CopyrightPolicy.tsx:25 msgid "Copyright Policy" msgstr "" @@ -3146,7 +3214,7 @@ msgstr "" #. Text on button to create a new starter pack #: src/components/dialogs/StarterPackDialog.tsx:113 #: src/components/dialogs/StarterPackDialog.tsx:210 -#: src/components/dms/InitiateChatFlow.tsx:469 +#: src/components/dms/InitiateChatFlow.tsx:470 #: src/components/StarterPack/ProfileStarterPacks.tsx:329 msgid "Create" msgstr "" @@ -3166,7 +3234,7 @@ msgstr "" #: src/components/StarterPack/ProfileStarterPacks.tsx:207 #: src/components/StarterPack/ProfileStarterPacks.tsx:316 -#: src/Navigation.tsx:529 +#: src/Navigation.tsx:536 msgid "Create a starter pack" msgstr "" @@ -3181,6 +3249,7 @@ msgstr "" #: src/components/WelcomeModal.tsx:158 #: src/components/WelcomeModal.tsx:166 +#: src/screens/Messages/JoinRequest.tsx:300 #: src/screens/Signup/index.tsx:135 #: src/view/com/auth/SplashScreen.tsx:107 #: src/view/com/auth/SplashScreen.web.tsx:116 @@ -3213,7 +3282,7 @@ msgstr "" msgid "Create another" msgstr "" -#: src/components/dms/InitiateChatFlow.tsx:468 +#: src/components/dms/InitiateChatFlow.tsx:469 msgid "Create group chat" msgstr "Create group chat" @@ -3235,12 +3304,13 @@ msgstr "" msgid "Create moderation list" msgstr "" +#: src/screens/Messages/JoinRequest.tsx:294 #: src/view/com/auth/SplashScreen.tsx:100 #: src/view/com/auth/SplashScreen.web.tsx:108 msgid "Create new account" msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:488 +#: src/screens/Messages/ConversationSettings/index.tsx:487 msgid "Create or modify an invite link for this group chat" msgstr "Create or modify an invite link for this group chat" @@ -3263,8 +3333,8 @@ msgstr "" #. placeholder {0}: i18n.date(appPassword.createdAt, { year: 'numeric', month: 'numeric', day: 'numeric', hour: '2-digit', minute: '2-digit', }) #. placeholder {0}: i18n.date(createdAt, { dateStyle: 'long', timeStyle: 'short', }) #. placeholder {0}: i18n.date(createdAt, { month: 'long', day: 'numeric', year: 'numeric', }) -#: src/screens/Messages/components/InviteLinkDialog.tsx:312 -#: src/screens/Messages/ConversationSettings/index.tsx:441 +#: src/screens/Messages/components/InviteLinkDialog.tsx:329 +#: src/screens/Messages/ConversationSettings/index.tsx:440 #: src/screens/Settings/AppPasswords.tsx:174 msgid "Created {0}" msgstr "" @@ -3420,7 +3490,7 @@ msgstr "" #: src/components/PostControls/PostMenu/PostMenuItems.tsx:787 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:789 -#: src/view/com/composer/Composer.tsx:1515 +#: src/view/com/composer/Composer.tsx:1497 msgid "Delete post" msgstr "" @@ -3514,8 +3584,8 @@ msgstr "" msgid "Dim" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:344 -#: src/screens/Messages/components/InviteLinkDialog.tsx:349 +#: src/screens/Messages/components/InviteLinkDialog.tsx:361 +#: src/screens/Messages/components/InviteLinkDialog.tsx:366 msgid "Disable" msgstr "Disable" @@ -3541,8 +3611,8 @@ msgstr "" msgid "Disable haptic feedback" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:446 -#: src/screens/Messages/components/InviteLinkDialog.tsx:452 +#: src/screens/Messages/components/InviteLinkDialog.tsx:456 +#: src/screens/Messages/components/InviteLinkDialog.tsx:462 msgid "Disable link" msgstr "Disable link" @@ -3554,7 +3624,7 @@ msgstr "" msgid "Disable replies entirely" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:426 +#: src/screens/Messages/components/InviteLinkDialog.tsx:443 msgid "Disable this invite link?" msgstr "Disable this invite link?" @@ -3567,9 +3637,9 @@ msgstr "" #: src/components/dialogs/lists/CreateOrEditListDialog.tsx:101 #: src/screens/Profile/Header/EditProfileDialog.tsx:79 -#: src/view/com/composer/Composer.tsx:1294 -#: src/view/com/composer/Composer.tsx:1338 -#: src/view/com/composer/Composer.tsx:1548 +#: src/view/com/composer/Composer.tsx:1276 +#: src/view/com/composer/Composer.tsx:1320 +#: src/view/com/composer/Composer.tsx:1530 #: src/view/com/composer/drafts/DraftItem.tsx:242 #: src/view/com/composer/drafts/DraftsButton.tsx:131 msgid "Discard" @@ -3580,14 +3650,14 @@ msgstr "" msgid "Discard changes?" msgstr "" -#: src/view/com/composer/Composer.tsx:1292 +#: src/view/com/composer/Composer.tsx:1274 #: src/view/com/composer/drafts/DraftItem.tsx:239 #: src/view/com/composer/drafts/DraftsButton.tsx:98 msgid "Discard draft?" msgstr "" -#: src/view/com/composer/Composer.tsx:1309 -#: src/view/com/composer/Composer.tsx:1540 +#: src/view/com/composer/Composer.tsx:1291 +#: src/view/com/composer/Composer.tsx:1522 msgid "Discard post?" msgstr "" @@ -3624,7 +3694,7 @@ msgstr "" msgid "Dismiss banner" msgstr "" -#: src/view/com/composer/Composer.tsx:2385 +#: src/view/com/composer/Composer.tsx:2367 msgid "Dismiss error" msgstr "" @@ -3760,8 +3830,8 @@ msgctxt "button" msgid "Download chat data" msgstr "Download chat data" -#: src/components/Lightbox/Lightbox.web.tsx:304 -#: src/components/Lightbox/Lightbox.web.tsx:316 +#: src/components/Lightbox/Lightbox.web.tsx:308 +#: src/components/Lightbox/Lightbox.web.tsx:320 msgid "Download image" msgstr "Download image" @@ -3833,7 +3903,7 @@ msgstr "" msgid "Eating disorders" msgstr "" -#: src/screens/Messages/components/EditTextButton.tsx:51 +#: src/screens/Messages/components/EditTextButton.tsx:52 #: src/screens/Settings/AccountSettings.tsx:150 #: src/screens/StarterPack/StarterPackScreen.tsx:604 #: src/screens/StarterPack/Wizard/index.tsx:331 @@ -3877,7 +3947,16 @@ msgstr "" msgid "Edit interests" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:326 +#: src/screens/Messages/JoinRequests.tsx:294 +msgid "Edit invite link" +msgstr "Edit invite link" + +#: src/screens/Messages/JoinRequests.tsx:300 +msgctxt "button" +msgid "Edit invite link" +msgstr "Edit invite link" + +#: src/screens/Messages/components/InviteLinkDialog.tsx:343 msgid "Edit link settings" msgstr "Edit link settings" @@ -3895,12 +3974,12 @@ msgstr "" msgid "Edit moderation list" msgstr "" -#: src/Navigation.tsx:353 +#: src/Navigation.tsx:355 #: src/view/screens/Feeds.tsx:511 msgid "Edit My Feeds" msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:475 +#: src/screens/Messages/ConversationSettings/index.tsx:474 msgid "Edit name" msgstr "Edit name" @@ -3929,7 +4008,7 @@ msgstr "" msgid "Edit starter pack" msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:474 +#: src/screens/Messages/ConversationSettings/index.tsx:473 msgid "Edit this group chat’s name" msgstr "Edit this group chat’s name" @@ -3941,7 +4020,7 @@ msgstr "" msgid "Edit who can reply" msgstr "" -#: src/Navigation.tsx:534 +#: src/Navigation.tsx:541 msgid "Edit your starter pack" msgstr "" @@ -4146,7 +4225,7 @@ msgstr "" msgid "Entertainment" msgstr "" -#: src/view/com/composer/Composer.tsx:2484 +#: src/view/com/composer/Composer.tsx:2466 #: src/view/com/util/error/ErrorScreen.tsx:40 msgid "Error" msgstr "" @@ -4220,8 +4299,8 @@ msgstr "" msgid "Exit fullscreen" msgstr "" -#: src/components/Lightbox/chrome/Footer.tsx:51 -#: src/components/Lightbox/Lightbox.web.tsx:237 +#: src/components/Lightbox/chrome/Footer.tsx:65 +#: src/components/Lightbox/Lightbox.web.tsx:241 msgid "Expand alt text" msgstr "" @@ -4241,7 +4320,7 @@ msgstr "" msgid "Expands or collapses post text" msgstr "" -#: src/lib/api/index.ts:460 +#: src/lib/api/index.ts:441 msgid "Expected uri to resolve to a record" msgstr "" @@ -4280,7 +4359,7 @@ msgstr "" msgid "Explicit sexual images." msgstr "" -#: src/Navigation.tsx:738 +#: src/Navigation.tsx:745 #: src/screens/Search/Shell.tsx:362 #: src/view/shell/desktop/LeftNav.tsx:676 #: src/view/shell/Drawer.tsx:417 @@ -4322,7 +4401,7 @@ msgstr "" msgid "External media may allow websites to collect information about you and your device. No information is sent or requested until you press the \"play\" button." msgstr "" -#: src/Navigation.tsx:372 +#: src/Navigation.tsx:374 #: src/screens/Settings/ExternalMediaPreferences.tsx:35 msgid "External Media Preferences" msgstr "" @@ -4336,6 +4415,10 @@ msgctxt "toast" msgid "Failed to accept chat" msgstr "" +#: src/screens/Messages/JoinRequests.tsx:186 +msgid "Failed to accept join request" +msgstr "Failed to accept join request" + #: src/components/dms/ActionsWrapper.web.tsx:77 #: src/components/dms/MessageContextMenu.tsx:119 msgid "Failed to add emoji reaction" @@ -4354,7 +4437,7 @@ msgstr "" msgid "Failed to change handle. Please try again." msgstr "" -#: src/components/Lightbox/Lightbox.web.tsx:294 +#: src/components/Lightbox/Lightbox.web.tsx:298 msgid "Failed to copy link" msgstr "Failed to copy link" @@ -4403,7 +4486,7 @@ msgstr "Failed to disable invite link" msgid "Failed to disconnect Germ DM. Error: {0}" msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:345 +#: src/screens/Messages/ConversationSettings/index.tsx:344 msgid "Failed to edit group chat name" msgstr "Failed to edit group chat name" @@ -4427,13 +4510,21 @@ msgstr "" msgid "Failed to hide suggestion, please check your internet connection" msgstr "" +#: src/screens/Messages/JoinRequests.tsx:218 +msgid "Failed to ignore join request" +msgstr "Failed to ignore join request" + +#: src/components/intents/GroupChatJoinDialog.tsx:116 +msgid "Failed to join the group chat. Please try again." +msgstr "Failed to join the group chat. Please try again." + #: src/components/contacts/screens/ViewMatches.tsx:582 msgid "Failed to launch SMS app" msgstr "" #: src/screens/Messages/components/ChatEnded.tsx:42 #: src/screens/Messages/components/ChatLocked.tsx:53 -#: src/screens/Messages/ConversationSettings/index.tsx:372 +#: src/screens/Messages/ConversationSettings/index.tsx:371 msgctxt "toast" msgid "Failed to leave group chat" msgstr "Failed to leave group chat" @@ -4484,7 +4575,7 @@ msgstr "" msgid "Failed to load suggested follows" msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:393 +#: src/screens/Messages/ConversationSettings/index.tsx:392 msgid "Failed to lock group chat" msgstr "Failed to lock group chat" @@ -4493,7 +4584,7 @@ msgstr "Failed to lock group chat" msgid "Failed to mark all requests as read" msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:359 +#: src/screens/Messages/ConversationSettings/index.tsx:358 msgid "Failed to mute group chat" msgstr "Failed to mute group chat" @@ -4533,15 +4624,19 @@ msgstr "Failed to remove group chat member" msgid "Failed to remove verification" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:150 +msgid "Failed to rescind your request. Please try again." +msgstr "Failed to rescind your request. Please try again." + #: src/components/dialogs/DeviceLocationRequestDialog.tsx:81 msgid "Failed to resolve location. Please try again." msgstr "" -#: src/view/com/composer/Composer.tsx:584 +#: src/view/com/composer/Composer.tsx:578 msgid "Failed to save draft" msgstr "" -#: src/components/Lightbox/Lightbox.web.tsx:311 +#: src/components/Lightbox/Lightbox.web.tsx:315 msgid "Failed to save image" msgstr "Failed to save image" @@ -4580,7 +4675,7 @@ msgid "Failed to toggle thread mute, please try again" msgstr "" #: src/screens/Messages/components/ChatLocked.tsx:42 -#: src/screens/Messages/ConversationSettings/index.tsx:396 +#: src/screens/Messages/ConversationSettings/index.tsx:395 msgid "Failed to unlock group chat" msgstr "Failed to unlock group chat" @@ -4632,7 +4727,7 @@ msgstr "" msgid "False information about elections" msgstr "" -#: src/Navigation.tsx:288 +#: src/Navigation.tsx:290 msgid "Feed" msgstr "" @@ -4677,7 +4772,7 @@ msgctxt "toast" msgid "Feedback sent to feed operator" msgstr "" -#: src/Navigation.tsx:514 +#: src/Navigation.tsx:521 #: src/screens/SavedFeeds.tsx:112 #: src/screens/SavedFeeds.tsx:303 #: src/screens/Search/SearchResults.tsx:80 @@ -4759,8 +4854,8 @@ msgstr "" msgid "Find accounts to follow" msgstr "" -#: src/Navigation.tsx:428 -#: src/Navigation.tsx:556 +#: src/Navigation.tsx:430 +#: src/Navigation.tsx:563 msgid "Find Contacts" msgstr "" @@ -4935,8 +5030,12 @@ msgstr "" msgid "Followed by <0>{0}, <1>{1}, and {2, plural, one {# other} other {# others}}" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:321 +msgid "Followers can join" +msgstr "Followers can join" + #. placeholder {0}: route.params.name -#: src/Navigation.tsx:242 +#: src/Navigation.tsx:244 msgid "Followers of @{0} that you know" msgstr "" @@ -4986,7 +5085,7 @@ msgstr "" msgid "Following feed preferences" msgstr "" -#: src/Navigation.tsx:359 +#: src/Navigation.tsx:361 #: src/screens/Settings/FollowingFeedPreferences.tsx:57 msgid "Following Feed Preferences" msgstr "" @@ -5077,17 +5176,17 @@ msgstr "" msgid "Generate a starter pack" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:206 -#: src/screens/Messages/components/InviteLinkDialog.tsx:244 -#: src/screens/Messages/components/InviteLinkDialog.tsx:268 +#: src/screens/Messages/components/InviteLinkDialog.tsx:217 +#: src/screens/Messages/components/InviteLinkDialog.tsx:257 +#: src/screens/Messages/components/InviteLinkDialog.tsx:285 msgid "Generate invite link" msgstr "Generate invite link" -#: src/screens/Messages/components/InviteLinkDialog.tsx:397 +#: src/screens/Messages/components/InviteLinkDialog.tsx:414 msgid "Generate new invite link" msgstr "Generate new invite link" -#: src/screens/Messages/components/InviteLinkDialog.tsx:402 +#: src/screens/Messages/components/InviteLinkDialog.tsx:419 msgid "Generate new link" msgstr "Generate new link" @@ -5175,17 +5274,17 @@ msgstr "" #: src/components/dialogs/EmailDialog/screens/VerificationReminder.tsx:71 #: src/components/dialogs/EmailDialog/screens/VerificationReminder.tsx:81 -#: src/screens/Messages/components/InviteLinkDialog.tsx:187 -#: src/screens/Messages/components/InviteLinkDialog.tsx:194 +#: src/screens/Messages/components/InviteLinkDialog.tsx:197 +#: src/screens/Messages/components/InviteLinkDialog.tsx:204 msgid "Get started" msgstr "" -#: src/components/MediaPreview.tsx:136 +#: src/components/MediaPreview.tsx:147 #: src/components/Post/Embed/VideoEmbed/GifPresentationControls.tsx:69 msgid "GIF" msgstr "" -#: src/view/com/composer/Composer.tsx:2489 +#: src/view/com/composer/Composer.tsx:2471 msgid "GIF uploaded" msgstr "" @@ -5208,7 +5307,7 @@ msgstr "" #: src/screens/VideoFeed/components/Header.tsx:163 #: src/screens/VideoFeed/index.tsx:1168 #: src/screens/VideoFeed/index.tsx:1172 -#: src/view/com/auth/LoggedOut.tsx:89 +#: src/view/com/auth/LoggedOut.tsx:103 #: src/view/com/profile/ProfileFollowers.tsx:178 #: src/view/com/profile/ProfileFollowers.tsx:179 #: src/view/screens/NotFound.tsx:51 @@ -5334,37 +5433,42 @@ msgstr "" msgid "Grooming or predatory behavior" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:513 +#: src/components/intents/GroupChatJoinDialog.tsx:297 +#: src/screens/Messages/JoinRequest.tsx:116 +msgid "Group chat" +msgstr "Group chat" + +#: src/screens/Messages/components/InviteLinkDialog.tsx:522 msgid "Group chat invite link dialog" msgstr "Group chat invite link dialog" -#: src/screens/Messages/ConversationSettings/index.tsx:385 +#: src/screens/Messages/ConversationSettings/index.tsx:384 msgctxt "toast" msgid "Group chat locked" msgstr "Group chat locked" -#: src/screens/Messages/ConversationSettings/index.tsx:352 +#: src/screens/Messages/ConversationSettings/index.tsx:351 msgctxt "toast" msgid "Group chat muted" msgstr "Group chat muted" -#: src/screens/Messages/ConversationSettings/index.tsx:340 +#: src/screens/Messages/ConversationSettings/index.tsx:339 msgctxt "toast" msgid "Group chat name updated" msgstr "Group chat name updated" -#: src/Navigation.tsx:488 +#: src/Navigation.tsx:490 #: src/screens/Messages/ConversationSettings/index.tsx:91 msgid "Group chat settings" msgstr "Group chat settings" #: src/screens/Messages/components/ChatLocked.tsx:38 -#: src/screens/Messages/ConversationSettings/index.tsx:387 +#: src/screens/Messages/ConversationSettings/index.tsx:386 msgctxt "toast" msgid "Group chat unlocked" msgstr "Group chat unlocked" -#: src/screens/Messages/ConversationSettings/index.tsx:354 +#: src/screens/Messages/ConversationSettings/index.tsx:353 msgctxt "toast" msgid "Group chat unmuted" msgstr "Group chat unmuted" @@ -5377,12 +5481,17 @@ msgstr "Group chats are not yet available" msgid "Group chats are now available" msgstr "Group chats are now available" +#. placeholder {0}: import {useState} from 'react' import {View} from 'react-native' import { type ChatBskyGroupDefs, moderateProfile, type ModerationOpts, } from '@atproto/api' import {plural} from '@lingui/core/macro' import {Trans, useLingui} from '@lingui/react/macro' import {useOpenComposer} from '#/lib/hooks/useOpenComposer' import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name' import {shareUrl} from '#/lib/sharing' import {useCreateJoinLink} from '#/state/queries/messages/create-join-link' import {useDisableJoinLink} from '#/state/queries/messages/disable-join-link' import {useEditJoinLink} from '#/state/queries/messages/edit-join-link' import {useEnableJoinLink} from '#/state/queries/messages/enable-join-link' import {atoms as a, useTheme, web} from '#/alf' import { Button, ButtonIcon, ButtonText, StackedButton, } from '#/components/Button' import * as Dialog from '#/components/Dialog' import { type ConvoWithDetails, type GroupConvoMember, } from '#/components/dms/util' import * as Toggle from '#/components/forms/Toggle' import {ArrowRight_Stroke2_Corner0_Rounded as ArrowRightIcon} from '#/components/icons/Arrow' import {ArrowShareRight_Stroke2_Corner2_Rounded as ArrowShareRightIcon} from '#/components/icons/ArrowShareRight' import {ChainLinkBroken_Stroke2_Corner0_Rounded as ChainLinkBrokenIcon} from '#/components/icons/ChainLink' import {EditBig_Stroke2_Corner2_Rounded as EditIcon} from '#/components/icons/EditBig' import {Loader} from '#/components/Loader' import * as Toast from '#/components/Toast' import {Text} from '#/components/Typography' import {IS_WEB} from '#/env' import {CopyTextButton} from './CopyTextButton' import {EditTextButton} from './EditTextButton' enum Step { INFO, GENERATE, MANAGE, CONFIRM_DISABLE, } export function InviteLinkDialog({ convo, control, owner, isOwner, moderationOpts, }: { convo: Extract control: Dialog.DialogOuterProps['control'] owner: GroupConvoMember isOwner: boolean moderationOpts: ModerationOpts }) { const t = useTheme() const {t: l, i18n} = useLingui() const ownerName = createSanitizedDisplayName( owner, false, moderateProfile(owner, moderationOpts).ui('displayName'), ) const {joinLink} = convo.details const defaultStep = joinLink ? Step.MANAGE : Step.INFO const defaultWhoCanJoin = joinLink ? joinLinkToKey(joinLink) : 'anyone' const [step, setStep] = useState(defaultStep) const [whoCanJoin, setWhoCanJoin] = useState(defaultWhoCanJoin) // Resync local state when the server-side join link rules change (mutation // success, refetch, or change from another client). Keyed on the rule string // so identity-only refetches don't bump a user mid-edit. const joinLinkRuleKey = joinLink ? joinLinkToKey(joinLink) : null const [prevKey, setPrevKey] = useState(joinLinkRuleKey) if (joinLinkRuleKey !== prevKey) { setStep(joinLinkRuleKey ? Step.MANAGE : Step.INFO) setWhoCanJoin(joinLinkRuleKey ?? 'anyone') setPrevKey(joinLinkRuleKey) } const {openComposer} = useOpenComposer() const {mutate: createJoinLink, isPending: isCreating} = useCreateJoinLink( convo.view.id, { onSuccess: () => { setStep(Step.MANAGE) }, onError: () => { Toast.show(l`Failed to create invite link`, { type: 'error', }) }, }, ) const {mutate: editJoinLink, isPending: isEditing} = useEditJoinLink( convo.view.id, { onSuccess: () => { setStep(Step.MANAGE) }, onError: () => { Toast.show(l`Failed to edit invite link`, { type: 'error', }) }, }, ) const {mutate: disableJoinLink, isPending: isDisabling} = useDisableJoinLink( convo.view.id, { onError: () => { Toast.show(l`Failed to disable invite link`, { type: 'error', }) }, }, ) const {mutate: enableJoinLink, isPending: isEnabling} = useEnableJoinLink( convo.view.id, { onError: () => { Toast.show(l`Failed to enable invite link`, { type: 'error', }) }, }, ) const isSaving = isCreating || isEditing const whoCanJoinOptions = [ { name: 'anyone', owner: l`Anyone can join instantly`, member: l`Anyone can join instantly`, }, { name: 'anyone:requireApproval', owner: l`Anyone can request to join`, member: l`Anyone can request to join`, }, { name: 'followedByOwner', owner: l`People I follow can join instantly`, member: l`People ${ownerName} follows can join instantly`, }, { name: 'followedByOwner:requireApproval', owner: l`People I follow can request to join`, member: l`People ${ownerName} follows can request to join`, }, ] let content: React.ReactNode = null let header: string | null = null switch (step) { case Step.INFO: { header = l`Invite link` content = ( <> An invite link lets people join this group chat without being added directly. You control who can join the chat. You can disable the link at any time. Group chats can only have a maximum of{' '} {plural(convo.details.memberLimit, { one: '# person', other: '# people', })} . Your name, avatar, the name of the group chat, and the number of members will be visible to everyone. ) break } case Step.GENERATE: { const linkEnabled = joinLink?.enabledStatus === 'enabled' const linkHasChanged = linkEnabled && joinLinkRuleKey !== whoCanJoin header = linkEnabled ? l`Update invite link` : l`Generate invite link` content = ( <> Choose who can join this group chat and how. setWhoCanJoin(value)}> {whoCanJoinOptions.map(option => ( {({selected}) => ( )} ))} ) break } case Step.MANAGE: { const linkEnabled = joinLink?.enabledStatus === 'enabled' const linkDisabled = joinLink?.enabledStatus === 'disabled' const joinLinkURI = joinLink?.code ? `https://bsky.app/c/${joinLink.code}` : 'https://bsky.app/' const createdAt = joinLink ? new Date(joinLink.createdAt) : null const currentOption = whoCanJoinOptions.find( o => o.name === (joinLink ? joinLinkToKey(joinLink) : null), ) ?? whoCanJoinOptions[0] const ownerValue = currentOption?.owner ?? whoCanJoinOptions[0].owner const memberValue = currentOption?.member ?? whoCanJoinOptions[0].member header = linkEnabled ? l`Invite link` : l`Invite link disabled` content = ( <> {joinLinkURI} {createdAt ? ( Created{' '} {i18n.date(createdAt, { dateStyle: 'long', timeStyle: 'short', })} ) : null} {linkEnabled ? ( {isOwner ? ( setStep(Step.GENERATE)}> {ownerValue} ) : ( {memberValue} )} ) : null} {linkEnabled ? ( {isOwner ? ( setStep(Step.CONFIRM_DISABLE)}> Disable ) : null} { control.close(() => { openComposer({ text: joinLinkURI, logContext: 'Other', }) }) }}> Post link { void shareUrl(joinLinkURI) }}> Share ) : ( )} ) break } case Step.CONFIRM_DISABLE: { content = ( <> Disable this invite link? Anyone who has it will no longer be able to join or request to join. You can always create a new one. ) break } } if (!isOwner && (!joinLink || joinLink.enabledStatus === 'disabled')) { header = l`Invite link` content = ( <> There is no invite link for this group chat. ) } return ( { setStep(defaultStep) setWhoCanJoin(defaultWhoCanJoin) }}> {header} } label={l`Group chat invite link dialog`} style={web({maxWidth: 400})}> {content} ) } function joinLinkToKey(joinLink: ChatBskyGroupDefs.JoinLinkView): string { return `${joinLink.joinRule}${joinLink.requireApproval ? ':requireApproval' : ''}` } function keyToJoinLink( key: string, ): Pick { const [joinRule, requireApproval] = key.split(':') return { joinRule, requireApproval: requireApproval === 'requireApproval', } } +#: src/screens/Messages/components/InviteLinkDialog.tsx:179 +msgid "Group chats can only have a maximum of {0}." +msgstr "Group chats can only have a maximum of {0}." + #: src/components/dialogs/SearchablePeopleList.tsx:569 msgid "Group is locked" msgstr "Group is locked" #: src/components/dms/InitiateChatFlow.tsx:237 -#: src/components/dms/InitiateChatFlow.tsx:568 +#: src/components/dms/InitiateChatFlow.tsx:569 #: src/screens/Messages/ConversationSettings/prompts.tsx:33 msgid "Group name" msgstr "Group name" @@ -5440,7 +5549,7 @@ msgstr "" msgid "Harming or endangering minors" msgstr "" -#: src/Navigation.tsx:472 +#: src/Navigation.tsx:474 msgid "Hashtag" msgstr "" @@ -5646,7 +5755,7 @@ msgstr "" msgid "Hmmmm, we couldn't load that moderation service." msgstr "" -#: src/view/com/composer/state/video.ts:430 +#: src/view/com/composer/state/video.ts:415 msgid "Hold up! We’re gradually giving access to video, and you’re still waiting in line. Check back soon!" msgstr "" @@ -5654,8 +5763,8 @@ msgstr "" msgid "Hold your horses! This feature isn't available to you yet. Please check back later." msgstr "Hold your horses! This feature isn't available to you yet. Please check back later." -#: src/Navigation.tsx:733 -#: src/Navigation.tsx:754 +#: src/Navigation.tsx:740 +#: src/Navigation.tsx:761 #: src/view/shell/bottom-bar/BottomBar.tsx:184 #: src/view/shell/desktop/LeftNav.tsx:666 #: src/view/shell/Drawer.tsx:443 @@ -5715,7 +5824,7 @@ msgstr "" msgid "I'm on Bluesky as {0} - come find me! https://bsky.app/download" msgstr "" -#: src/components/Lightbox/Lightbox.web.tsx:238 +#: src/components/Lightbox/Lightbox.web.tsx:242 msgid "If alt text is long, toggles alt text expanded state" msgstr "" @@ -5779,23 +5888,33 @@ msgstr "" msgid "If you're trying to change your handle or email, do so before you deactivate." msgstr "" -#: src/components/images/ImageLayoutGridItem.tsx:76 +#. Ignore a request to join a chat +#: src/screens/Messages/JoinRequests.tsx:485 +msgctxt "button" +msgid "Ignore" +msgstr "Ignore" + +#: src/screens/Messages/JoinRequests.tsx:479 +msgid "Ignore join request" +msgstr "Ignore join request" + +#: src/components/images/ImageLayoutGridItem.tsx:93 msgid "Image" msgstr "" #. placeholder {0}: index + 1 -#: src/components/images/Gallery/index.tsx:427 +#: src/components/images/Gallery/index.tsx:436 msgid "Image {0}" msgstr "Image {0}" #. placeholder {0}: index + 1 #. placeholder {1}: imgs.length -#: src/components/Lightbox/Lightbox.web.tsx:253 +#: src/components/Lightbox/Lightbox.web.tsx:257 msgid "Image {0} of {1}" msgstr "" #. placeholder {0}: index + 1 -#: src/components/images/Gallery/index.tsx:418 +#: src/components/images/Gallery/index.tsx:421 msgid "Image {0} of {imageCount}" msgstr "Image {0} of {imageCount}" @@ -5810,7 +5929,7 @@ msgid "Image cache cleared, freed {0}" msgstr "" #. placeholder {0}: images.length -#: src/components/images/Gallery/index.tsx:256 +#: src/components/images/Gallery/index.tsx:257 msgid "Image gallery, {0} images" msgstr "Image gallery, {0} images" @@ -5825,12 +5944,12 @@ msgid "Image is unavailable." msgstr "Image is unavailable." #: src/components/Lightbox/chrome/ImageMenu.tsx:73 -#: src/components/Lightbox/Lightbox.web.tsx:257 -#: src/components/Lightbox/Lightbox.web.tsx:265 +#: src/components/Lightbox/Lightbox.web.tsx:261 +#: src/components/Lightbox/Lightbox.web.tsx:269 msgid "Image options" msgstr "Image options" -#: src/components/Lightbox/Lightbox.web.tsx:308 +#: src/components/Lightbox/Lightbox.web.tsx:312 #: src/lib/media/save-image.ios.ts:25 #: src/lib/media/save-image.ts:29 msgid "Image saved" @@ -5956,6 +6075,10 @@ msgstr "" msgid "Invalid 2FA confirmation code." msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:126 +msgid "Invalid group chat code." +msgstr "Invalid group chat code." + #: src/screens/Settings/components/ChangeHandleDialog.tsx:615 msgid "Invalid handle. Please try a different one." msgstr "" @@ -5974,6 +6097,10 @@ msgstr "" msgid "Invalid report subject" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:157 +msgid "Invalid rescind request." +msgstr "Invalid rescind request." + #: src/components/intents/VerifyEmailIntentDialog.tsx:86 msgid "Invalid Verification Code" msgstr "" @@ -6004,11 +6131,11 @@ msgid "Invite friends <0/>" msgstr "" #: src/screens/Messages/components/InviteLinkDialog.tsx:167 -#: src/screens/Messages/components/InviteLinkDialog.tsx:290 -#: src/screens/Messages/components/InviteLinkDialog.tsx:296 -#: src/screens/Messages/components/InviteLinkDialog.tsx:471 -#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:151 -#: src/screens/Messages/ConversationSettings/index.tsx:491 +#: src/screens/Messages/components/InviteLinkDialog.tsx:309 +#: src/screens/Messages/components/InviteLinkDialog.tsx:315 +#: src/screens/Messages/components/InviteLinkDialog.tsx:482 +#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:148 +#: src/screens/Messages/ConversationSettings/index.tsx:490 msgid "Invite link" msgstr "Invite link" @@ -6017,7 +6144,7 @@ msgid "Invite link created" msgstr "Invite link created" #: src/components/dms/getSystemMessageInfo.ts:138 -#: src/screens/Messages/components/InviteLinkDialog.tsx:290 +#: src/screens/Messages/components/InviteLinkDialog.tsx:309 msgid "Invite link disabled" msgstr "Invite link disabled" @@ -6067,7 +6194,7 @@ msgid "It's just you right now! Add more people to your starter pack by searchin msgstr "" #. placeholder {0}: videoState.jobId -#: src/view/com/composer/Composer.tsx:2404 +#: src/view/com/composer/Composer.tsx:2386 msgid "Job ID: {0}" msgstr "" @@ -6076,6 +6203,10 @@ msgstr "" msgid "Jobs" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:253 +msgid "Join" +msgstr "Join" + #: src/screens/StarterPack/StarterPackLandingScreen.tsx:210 #: src/screens/StarterPack/StarterPackLandingScreen.tsx:215 #: src/screens/StarterPack/StarterPackScreen.tsx:478 @@ -6083,17 +6214,30 @@ msgstr "" msgid "Join Bluesky" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:63 +#: src/components/intents/GroupChatJoinDialog.tsx:415 +msgid "Join group chat" +msgstr "Join group chat" + +#: src/components/intents/GroupChatJoinDialog.tsx:146 +msgid "Join request rescinded." +msgstr "Join request rescinded." + #: src/components/StarterPack/QrCode.tsx:72 #: src/view/shell/NavSignupCard.tsx:41 msgid "Join the conversation" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:420 +msgid "Join this group chat" +msgstr "Join this group chat" + #: src/lib/interests.ts:63 msgid "Journalism" msgstr "" -#: src/view/com/composer/Composer.tsx:1342 -#: src/view/com/composer/Composer.tsx:1352 +#: src/view/com/composer/Composer.tsx:1324 +#: src/view/com/composer/Composer.tsx:1334 #: src/view/com/composer/drafts/DraftsButton.tsx:135 msgid "Keep editing" msgstr "" @@ -6136,7 +6280,7 @@ msgstr "" msgid "Labels on your content" msgstr "" -#: src/Navigation.tsx:215 +#: src/Navigation.tsx:217 msgid "Language Settings" msgstr "" @@ -6246,7 +6390,7 @@ msgid "Learn more." msgstr "" #: src/components/dms/LeaveConvoPrompt.tsx:49 -#: src/screens/Messages/ConversationSettings/index.tsx:527 +#: src/screens/Messages/ConversationSettings/index.tsx:526 msgid "Leave" msgstr "" @@ -6283,7 +6427,7 @@ msgstr "Leave conversation" msgid "Leave group chat" msgstr "Leave group chat" -#: src/screens/Messages/ConversationSettings/index.tsx:526 +#: src/screens/Messages/ConversationSettings/index.tsx:525 msgid "Leave this group chat" msgstr "Leave this group chat" @@ -6347,8 +6491,8 @@ msgstr "" msgid "Like this labeler" msgstr "" -#: src/Navigation.tsx:293 -#: src/Navigation.tsx:298 +#: src/Navigation.tsx:295 +#: src/Navigation.tsx:300 msgid "Liked by" msgstr "" @@ -6394,11 +6538,11 @@ msgstr "" msgid "Linear" msgstr "" -#: src/components/Lightbox/Lightbox.web.tsx:292 +#: src/components/Lightbox/Lightbox.web.tsx:296 msgid "Link copied to clipboard" msgstr "Link copied to clipboard" -#: src/Navigation.tsx:248 +#: src/Navigation.tsx:250 msgid "List" msgstr "" @@ -6484,7 +6628,7 @@ msgctxt "toast" msgid "List unmuted" msgstr "" -#: src/Navigation.tsx:169 +#: src/Navigation.tsx:171 #: src/view/screens/Lists.tsx:60 #: src/view/screens/Profile.tsx:233 #: src/view/screens/Profile.tsx:241 @@ -6580,7 +6724,7 @@ msgstr "" msgid "Loading..." msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:505 +#: src/screens/Messages/ConversationSettings/index.tsx:504 msgid "Lock" msgstr "Lock" @@ -6592,15 +6736,15 @@ msgstr "Lock group chat" msgid "Lock group chat?" msgstr "Lock group chat?" -#: src/screens/Messages/ConversationSettings/index.tsx:503 +#: src/screens/Messages/ConversationSettings/index.tsx:502 msgid "Lock this group chat" msgstr "Lock this group chat" -#: src/screens/Messages/ConversationSettings/index.tsx:505 +#: src/screens/Messages/ConversationSettings/index.tsx:504 msgid "Locked" msgstr "Locked" -#: src/Navigation.tsx:318 +#: src/Navigation.tsx:320 msgid "Log" msgstr "" @@ -6712,7 +6856,7 @@ msgid "Media that may be disturbing or inappropriate for some audiences." msgstr "" #. The heading above the list of chat members. -#: src/screens/Messages/ConversationSettings/MembersAndRequests.tsx:29 +#: src/screens/Messages/ConversationSettings/MembersAndRequests.tsx:34 msgid "Members" msgstr "Members" @@ -6798,7 +6942,7 @@ msgstr "Message is too long ({graphemeCount}/{MAX_DM_GRAPHEME_LENGTH})" msgid "Message options" msgstr "" -#: src/Navigation.tsx:748 +#: src/Navigation.tsx:755 msgid "Messages" msgstr "" @@ -6827,7 +6971,7 @@ msgstr "" msgid "Missing media" msgstr "" -#: src/Navigation.tsx:174 +#: src/Navigation.tsx:176 #: src/screens/Moderation/index.tsx:100 msgid "Moderation" msgstr "" @@ -6871,7 +7015,7 @@ msgstr "" msgid "Moderation lists" msgstr "" -#: src/Navigation.tsx:179 +#: src/Navigation.tsx:181 #: src/view/screens/ModerationModlists.tsx:60 msgid "Moderation Lists" msgstr "" @@ -6880,7 +7024,7 @@ msgstr "" msgid "moderation settings" msgstr "" -#: src/Navigation.tsx:308 +#: src/Navigation.tsx:310 msgid "Moderation states" msgstr "" @@ -6926,7 +7070,7 @@ msgstr "" msgid "Music" msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:467 +#: src/screens/Messages/ConversationSettings/index.tsx:466 msgid "Mute" msgstr "Mute" @@ -6971,7 +7115,7 @@ msgstr "" msgid "Mute these accounts?" msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:465 +#: src/screens/Messages/ConversationSettings/index.tsx:464 msgid "Mute this group chat" msgstr "Mute this group chat" @@ -7009,7 +7153,7 @@ msgstr "" msgid "Mute words & tags" msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:467 +#: src/screens/Messages/ConversationSettings/index.tsx:466 msgid "Muted" msgstr "Muted" @@ -7017,7 +7161,7 @@ msgstr "Muted" msgid "Muted accounts" msgstr "" -#: src/Navigation.tsx:184 +#: src/Navigation.tsx:186 #: src/view/screens/ModerationMutedAccounts.tsx:107 msgid "Muted Accounts" msgstr "" @@ -7124,19 +7268,19 @@ msgid "New chat" msgstr "" #. placeholder {0}: createSanitizedDisplayName(members[0]) -#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:61 +#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:58 msgid "New chat with {0}" msgstr "New chat with {0}" #. placeholder {0}: createSanitizedDisplayName(members[0]) #. placeholder {1}: createSanitizedDisplayName(members[1]) -#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:65 +#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:62 msgid "New chat with {0} and {1}" msgstr "New chat with {0} and {1}" #. placeholder {0}: createSanitizedDisplayName(members[0]) #. placeholder {1}: createSanitizedDisplayName(members[1]) -#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:73 +#: src/screens/Messages/components/MessagesListGroupInfoPanel.tsx:70 msgid "New chat with {0}, {1}, and {memberCount, plural, one {{memberCount} more} other {{memberCount} more}}." msgstr "New chat with {0}, {1}, and {memberCount, plural, one {{memberCount} more} other {{memberCount} more}}." @@ -7163,8 +7307,8 @@ msgstr "New group chat" #. Button used to create a new group chat. #. Button used to create a new group chat. -#: src/components/dms/InitiateChatFlow.tsx:743 -#: src/components/dms/InitiateChatFlow.tsx:777 +#: src/components/dms/InitiateChatFlow.tsx:744 +#: src/components/dms/InitiateChatFlow.tsx:778 msgctxt "action" msgid "New group chat" msgstr "New group chat" @@ -7236,7 +7380,7 @@ msgstr "" #: src/components/contacts/screens/ViewMatches.tsx:395 #: src/components/contacts/screens/ViewMatches.tsx:410 #: src/components/dms/AddMembersFlow.tsx:308 -#: src/components/dms/InitiateChatFlow.tsx:461 +#: src/components/dms/InitiateChatFlow.tsx:462 #: src/screens/Login/ForgotPasswordForm.tsx:149 #: src/screens/Login/ForgotPasswordForm.tsx:156 #: src/screens/Login/SetNewPasswordForm.tsx:186 @@ -7409,7 +7553,7 @@ msgstr "" #: src/components/dialogs/SearchablePeopleList.tsx:250 #: src/components/dms/AddMembersFlow.tsx:240 -#: src/components/dms/InitiateChatFlow.tsx:346 +#: src/components/dms/InitiateChatFlow.tsx:347 #: src/components/ProgressGuide/FollowDialog.tsx:221 msgid "No results" msgstr "" @@ -7491,7 +7635,7 @@ msgstr "" msgid "Not followed by anyone you’re following" msgstr "Not followed by anyone you’re following" -#: src/Navigation.tsx:164 +#: src/Navigation.tsx:166 #: src/view/screens/Profile.tsx:132 msgid "Not Found" msgstr "" @@ -7518,8 +7662,8 @@ msgid "Nothing saved yet" msgstr "" #: src/components/dialogs/NotificationSettingsDialog.tsx:64 -#: src/Navigation.tsx:435 -#: src/Navigation.tsx:509 +#: src/Navigation.tsx:437 +#: src/Navigation.tsx:516 #: src/view/screens/Notifications.tsx:134 msgid "Notification settings" msgstr "" @@ -7529,8 +7673,8 @@ msgstr "" msgid "Notification sounds" msgstr "" -#: src/Navigation.tsx:504 -#: src/Navigation.tsx:743 +#: src/Navigation.tsx:511 +#: src/Navigation.tsx:750 #: src/screens/Notifications/ActivityList.tsx:31 #: src/screens/Settings/NotificationSettings/index.tsx:104 #: src/screens/Settings/Settings.tsx:197 @@ -7579,7 +7723,7 @@ msgstr "" #: src/components/BotAccountAlert.tsx:52 #: src/components/BotAccountAlert.tsx:57 -#: src/components/dms/InitiateChatFlow.tsx:676 +#: src/components/dms/InitiateChatFlow.tsx:677 #: src/components/dms/MessageItem.tsx:659 #: src/screens/Login/PasswordUpdatedForm.tsx:37 #: src/screens/PostThread/components/ThreadItemAnchor.tsx:661 @@ -7613,27 +7757,27 @@ msgstr "One of the selected recipients does not allow group chats." msgid "One of the selected recipients has blocked you and cannot be messaged." msgstr "One of the selected recipients has blocked you and cannot be messaged." -#: src/view/com/composer/Composer.tsx:793 +#: src/view/com/composer/Composer.tsx:787 msgid "One or more GIFs is missing alt text." msgstr "" -#: src/view/com/composer/Composer.tsx:790 +#: src/view/com/composer/Composer.tsx:784 msgid "One or more images is missing alt text." msgstr "" -#: src/view/com/composer/SelectMediaButton.tsx:411 +#: src/view/com/composer/SelectMediaButton.tsx:415 msgid "One or more of your selected files are not supported." msgstr "" -#: src/view/com/composer/SelectMediaButton.tsx:434 -msgid "One or more of your selected files are too large. Maximum size is 100 MB." -msgstr "" +#: src/view/com/composer/SelectMediaButton.tsx:438 +msgid "One or more of your selected files are too large. Maximum size is {VIDEO_MAX_SIZE_MB} MB." +msgstr "One or more of your selected files are too large. Maximum size is {VIDEO_MAX_SIZE_MB} MB." -#: src/view/com/composer/Composer.tsx:595 +#: src/view/com/composer/Composer.tsx:589 msgid "One or more posts are too long to save as a draft. {MAX_DRAFT_GRAPHEME_LENGTH, plural, one {The maximum number of characters is # character.} other {The maximum number of characters is # characters.}}" msgstr "" -#: src/view/com/composer/Composer.tsx:800 +#: src/view/com/composer/Composer.tsx:794 msgid "One or more videos is missing alt text." msgstr "" @@ -7642,6 +7786,18 @@ msgstr "" msgid "Only {0} can reply." msgstr "" +#: src/screens/Messages/JoinRequests.tsx:196 +msgid "Only admins can accept join requests." +msgstr "Only admins can accept join requests." + +#: src/screens/Messages/JoinRequests.tsx:228 +msgid "Only admins can ignore join requests." +msgstr "Only admins can ignore join requests." + +#: src/components/intents/GroupChatJoinDialog.tsx:124 +msgid "Only followers can join this group chat." +msgstr "Only followers can join this group chat." + #: src/screens/Settings/ActivityPrivacySettings.tsx:121 #: src/screens/Settings/ActivityPrivacySettings.tsx:126 #: src/screens/Settings/PrivacyAndSecuritySettings.tsx:158 @@ -7652,6 +7808,15 @@ msgstr "" msgid "Only image files are supported" msgstr "" +#. placeholder {0}: createSanitizedDisplayName( data.joinLinkPreviews[0].owner, true, moderateProfile( data.joinLinkPreviews[0].owner, moderationOpts, ).ui('displayName'), ) +#: src/screens/Messages/JoinRequest.tsx:207 +msgid "Only people {0} follows can join." +msgstr "Only people {0} follows can join." + +#: src/components/intents/GroupChatJoinDialog.tsx:268 +msgid "Only people the chat owner follows can join" +msgstr "Only people the chat owner follows can join" + #: src/view/com/composer/videos/SubtitleFilePicker.tsx:41 msgid "Only WebVTT (.vtt) files are supported" msgstr "" @@ -7696,7 +7861,7 @@ msgstr "" #: src/screens/Messages/components/MessageComposer.tsx:176 #: src/screens/Messages/components/MessageInput.web.tsx:148 -#: src/view/com/composer/Composer.tsx:2044 +#: src/view/com/composer/Composer.tsx:2026 msgid "Open emoji picker" msgstr "" @@ -7717,6 +7882,10 @@ msgstr "" msgid "Open Germ DM" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:399 +msgid "Open group chat" +msgstr "Open group chat" + #: src/components/dms/MessagesListHeader.tsx:181 #: src/components/dms/MessagesListHeader.tsx:220 msgid "Open group chat settings" @@ -7774,6 +7943,10 @@ msgstr "" msgid "Open system log" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:400 +msgid "Open this group chat" +msgstr "Open this group chat" + #. placeholder {0}: feedInfo.displayName #: src/view/shell/desktop/Feeds.tsx:185 msgid "Opens {0} feed" @@ -7816,21 +7989,23 @@ msgid "Opens device camera" msgstr "" #. Accessibility hint for button in composer to add images, a video, or a GIF to a post. Maximum number of images that can be selected is currently 4 but may change. -#: src/view/com/composer/SelectMediaButton.tsx:505 +#: src/view/com/composer/SelectMediaButton.tsx:509 msgid "Opens device gallery to select up to {MAX_IMAGES, plural, other {# images}}, or a single video or GIF." msgstr "" +#: src/screens/Messages/JoinRequest.tsx:295 #: src/view/com/auth/SplashScreen.tsx:102 #: src/view/com/auth/SplashScreen.web.tsx:110 msgid "Opens flow to create a new Bluesky account" msgstr "" +#: src/screens/Messages/JoinRequest.tsx:281 #: src/view/com/auth/SplashScreen.tsx:120 #: src/view/com/auth/SplashScreen.web.tsx:124 msgid "Opens flow to sign in to your existing Bluesky account" msgstr "" -#: src/components/images/Gallery/index.tsx:428 +#: src/components/images/Gallery/index.tsx:437 msgid "Opens full image" msgstr "Opens full image" @@ -8031,12 +8206,12 @@ msgid "People {ownerName} follows can request to join" msgstr "People {ownerName} follows can request to join" #. placeholder {0}: route.params.name -#: src/Navigation.tsx:235 +#: src/Navigation.tsx:237 msgid "People followed by @{0}" msgstr "" #. placeholder {0}: route.params.name -#: src/Navigation.tsx:228 +#: src/Navigation.tsx:230 msgid "People following @{0}" msgstr "" @@ -8198,7 +8373,7 @@ msgstr "" msgid "Please complete the verification captcha." msgstr "" -#: src/view/com/composer/state/video.ts:454 +#: src/view/com/composer/state/video.ts:439 msgid "Please confirm your email address to upload videos." msgstr "" @@ -8337,7 +8512,7 @@ msgstr "" msgid "Porn" msgstr "" -#: src/view/com/composer/Composer.tsx:1693 +#: src/view/com/composer/Composer.tsx:1675 msgctxt "action" msgid "Post" msgstr "" @@ -8357,12 +8532,12 @@ msgstr "" msgid "Post a video" msgstr "" -#: src/view/com/composer/Composer.tsx:1691 +#: src/view/com/composer/Composer.tsx:1673 msgctxt "action" msgid "Post All" msgstr "" -#: src/view/com/composer/Composer.tsx:1351 +#: src/view/com/composer/Composer.tsx:1333 msgid "Post anyway" msgstr "Post anyway" @@ -8371,10 +8546,10 @@ msgid "Post blocked" msgstr "" #. placeholder {0}: route.params.name -#: src/Navigation.tsx:261 -#: src/Navigation.tsx:268 -#: src/Navigation.tsx:275 -#: src/Navigation.tsx:282 +#: src/Navigation.tsx:263 +#: src/Navigation.tsx:270 +#: src/Navigation.tsx:277 +#: src/Navigation.tsx:284 msgid "Post by @{0}" msgstr "" @@ -8383,7 +8558,7 @@ msgctxt "toast" msgid "Post deleted" msgstr "" -#: src/lib/api/index.ts:193 +#: src/lib/api/index.ts:186 msgid "Post failed to upload. Please check your Internet connection and try again." msgstr "" @@ -8408,7 +8583,7 @@ msgstr "" msgid "Post interaction settings" msgstr "" -#: src/Navigation.tsx:195 +#: src/Navigation.tsx:197 #: src/screens/ModerationInteractionSettings/index.tsx:35 msgid "Post Interaction Settings" msgstr "" @@ -8418,8 +8593,8 @@ msgstr "" msgid "Post language selection" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:354 -#: src/screens/Messages/components/InviteLinkDialog.tsx:366 +#: src/screens/Messages/components/InviteLinkDialog.tsx:371 +#: src/screens/Messages/components/InviteLinkDialog.tsx:383 msgid "Post link" msgstr "Post link" @@ -8477,6 +8652,7 @@ msgstr "" #: src/components/Error.tsx:61 #: src/components/Lists.tsx:104 #: src/screens/Messages/components/MessageListError.tsx:23 +#: src/screens/Messages/JoinRequests.tsx:350 #: src/screens/Signup/BackNextButtons.tsx:48 msgid "Press to retry" msgstr "" @@ -8508,8 +8684,8 @@ msgstr "" msgid "Privacy and security" msgstr "" -#: src/Navigation.tsx:412 -#: src/Navigation.tsx:420 +#: src/Navigation.tsx:414 +#: src/Navigation.tsx:422 #: src/screens/Settings/ActivityPrivacySettings.tsx:41 #: src/screens/Settings/PrivacyAndSecuritySettings.tsx:45 msgid "Privacy and Security" @@ -8521,7 +8697,7 @@ msgstr "" #: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:36 #: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:103 -#: src/Navigation.tsx:328 +#: src/Navigation.tsx:330 #: src/screens/Settings/AboutSettings.tsx:95 #: src/screens/Settings/AboutSettings.tsx:98 #: src/view/screens/PrivacyPolicy.tsx:25 @@ -8534,15 +8710,15 @@ msgstr "" msgid "Privacy violation of a minor" msgstr "" -#: src/view/com/composer/Composer.tsx:2478 +#: src/view/com/composer/Composer.tsx:2460 msgid "Processing GIF..." msgstr "" -#: src/view/com/composer/Composer.tsx:2480 +#: src/view/com/composer/Composer.tsx:2462 msgid "Processing video..." msgstr "" -#: src/lib/api/index.ts:66 +#: src/lib/api/index.ts:60 msgid "Processing..." msgstr "" @@ -8583,22 +8759,22 @@ msgid "Public, sharable lists of users to mute or block in bulk." msgstr "" #. Accessibility label for button to publish a single post -#: src/view/com/composer/Composer.tsx:1677 +#: src/view/com/composer/Composer.tsx:1659 msgid "Publish post" msgstr "" #. Accessibility label for button to publish multiple posts in a thread -#: src/view/com/composer/Composer.tsx:1672 +#: src/view/com/composer/Composer.tsx:1654 msgid "Publish posts" msgstr "" #. Accessibility label for button to publish multiple replies in a thread -#: src/view/com/composer/Composer.tsx:1661 +#: src/view/com/composer/Composer.tsx:1643 msgid "Publish replies" msgstr "" #. Accessibility label for button to publish a single reply -#: src/view/com/composer/Composer.tsx:1666 +#: src/view/com/composer/Composer.tsx:1648 msgid "Publish reply" msgstr "" @@ -8677,11 +8853,11 @@ msgstr "" msgid "Re-attach quote" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:384 +#: src/screens/Messages/components/InviteLinkDialog.tsx:401 msgid "Re-enable invite link" msgstr "Re-enable invite link" -#: src/screens/Messages/components/InviteLinkDialog.tsx:391 +#: src/screens/Messages/components/InviteLinkDialog.tsx:408 msgid "Re-enable link" msgstr "Re-enable link" @@ -9047,7 +9223,7 @@ msgstr "" msgid "Replies to this post are disabled." msgstr "" -#: src/view/com/composer/Composer.tsx:1689 +#: src/view/com/composer/Composer.tsx:1671 msgctxt "action" msgid "Reply" msgstr "" @@ -9087,7 +9263,7 @@ msgstr "" #: src/components/dms/MessageContextMenu.tsx:193 #: src/features/liveNow/components/LiveStatusDialog.tsx:266 -#: src/screens/Messages/ConversationSettings/index.tsx:518 +#: src/screens/Messages/ConversationSettings/index.tsx:517 msgid "Report" msgstr "" @@ -9152,7 +9328,7 @@ msgstr "" msgid "Report this feed" msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:517 +#: src/screens/Messages/ConversationSettings/index.tsx:516 msgid "Report this group chat" msgstr "Report this group chat" @@ -9232,16 +9408,42 @@ msgstr "" msgid "Reposts of your reposts" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:414 +msgid "Request access to group chat" +msgstr "Request access to group chat" + +#: src/components/intents/GroupChatJoinDialog.tsx:419 +msgid "Request access to join this group chat" +msgstr "Request access to join this group chat" + +#: src/screens/Messages/JoinRequests.tsx:178 +msgid "Request approved." +msgstr "Request approved." + #: src/screens/Settings/components/ChangePasswordDialog.tsx:226 #: src/screens/Settings/components/ChangePasswordDialog.tsx:232 msgid "Request code" msgstr "" +#: src/screens/Messages/JoinRequests.tsx:210 +msgid "Request ignored." +msgstr "Request ignored." + +#: src/components/intents/GroupChatJoinDialog.tsx:252 +msgid "Request to join" +msgstr "Request to join" + #. Incoming message requests #: src/screens/Messages/components/InboxRequests.tsx:24 msgid "Requests" msgstr "Requests" +#: src/Navigation.tsx:495 +#: src/screens/Messages/JoinRequests.tsx:58 +#: src/screens/Messages/JoinRequests.tsx:421 +msgid "Requests to join" +msgstr "Requests to join" + #: src/screens/Settings/AccessibilitySettings.tsx:59 #: src/screens/Settings/AccessibilitySettings.tsx:64 msgid "Require alt text before posting" @@ -9259,6 +9461,10 @@ msgstr "" msgid "Required in your region" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:272 +msgid "Rescind request" +msgstr "Rescind request" + #: src/components/dialogs/EmailDialog/components/ResendEmailText.tsx:39 msgid "Resend" msgstr "" @@ -9333,6 +9539,7 @@ msgstr "" #: src/screens/Messages/ChatList.tsx:354 #: src/screens/Messages/components/MessageListError.tsx:24 #: src/screens/Messages/Inbox.tsx:220 +#: src/screens/Messages/JoinRequests.tsx:356 #: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:268 #: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:271 #: src/screens/Onboarding/StepSuggestedStarterpacks/index.tsx:92 @@ -9410,27 +9617,29 @@ msgstr "" #: src/screens/SavedFeeds.tsx:124 #: src/screens/SavedFeeds.tsx:311 #: src/screens/SavedFeeds.tsx:315 -#: src/view/com/composer/Composer.tsx:1332 +#: src/view/com/composer/Composer.tsx:1314 #: src/view/com/composer/drafts/DraftsButton.tsx:125 msgid "Save changes" msgstr "" -#: src/view/com/composer/Composer.tsx:1304 +#: src/view/com/composer/Composer.tsx:1286 #: src/view/com/composer/drafts/DraftsButton.tsx:93 msgid "Save changes?" msgstr "" -#: src/view/com/composer/Composer.tsx:1332 +#: src/view/com/composer/Composer.tsx:1314 #: src/view/com/composer/drafts/DraftsButton.tsx:125 msgid "Save draft" msgstr "" -#: src/view/com/composer/Composer.tsx:1306 +#: src/view/com/composer/Composer.tsx:1288 #: src/view/com/composer/drafts/DraftsButton.tsx:95 msgid "Save draft?" msgstr "" #: src/components/Lightbox/chrome/ImageMenu.tsx:99 +#: src/components/MediaPreview.tsx:196 +#: src/components/Post/Embed/ImageContextMenu.tsx:70 #: src/components/StarterPack/ShareDialog.tsx:144 #: src/components/StarterPack/ShareDialog.tsx:150 msgid "Save image" @@ -9466,7 +9675,7 @@ msgid "Saved Feeds" msgstr "" #: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:144 -#: src/Navigation.tsx:548 +#: src/Navigation.tsx:555 #: src/screens/Bookmarks/index.tsx:59 msgid "Saved Posts" msgstr "" @@ -9518,7 +9727,7 @@ msgstr "" #. placeholder {0}: profile.handle #. placeholder {0}: route.params.name -#: src/Navigation.tsx:254 +#: src/Navigation.tsx:256 #: src/screens/Profile/ProfileSearch.tsx:37 msgid "Search @{0}'s posts" msgstr "" @@ -9759,7 +9968,7 @@ msgstr "" msgid "Select GIF \"{0}\"" msgstr "" -#: src/components/dms/InitiateChatFlow.tsx:668 +#: src/components/dms/InitiateChatFlow.tsx:669 msgid "Select group chat members" msgstr "Select group chat members" @@ -9839,7 +10048,7 @@ msgstr "" msgid "Select your preferred notification channels" msgstr "" -#: src/view/com/composer/SelectMediaButton.tsx:414 +#: src/view/com/composer/SelectMediaButton.tsx:418 msgid "Selecting multiple media types is not supported." msgstr "" @@ -9946,7 +10155,7 @@ msgstr "" msgid "Sets email for password reset" msgstr "" -#: src/Navigation.tsx:210 +#: src/Navigation.tsx:212 #: src/screens/Settings/Settings.tsx:98 #: src/view/shell/desktop/LeftNav.tsx:754 #: src/view/shell/Drawer.tsx:612 @@ -10010,10 +10219,12 @@ msgstr "" msgid "Sexually Suggestive" msgstr "" +#: src/components/MediaPreview.tsx:202 +#: src/components/Post/Embed/ImageContextMenu.tsx:74 #: src/components/StarterPack/QrCodeDialog.tsx:195 #: src/screens/Hashtag.tsx:130 -#: src/screens/Messages/components/InviteLinkDialog.tsx:370 -#: src/screens/Messages/components/InviteLinkDialog.tsx:377 +#: src/screens/Messages/components/InviteLinkDialog.tsx:387 +#: src/screens/Messages/components/InviteLinkDialog.tsx:394 #: src/screens/StarterPack/StarterPackScreen.tsx:447 #: src/screens/Topic.tsx:90 msgid "Share" @@ -10029,8 +10240,8 @@ msgid "Share author DID" msgstr "" #: src/components/Lightbox/chrome/ImageMenu.tsx:94 -#: src/components/Lightbox/Lightbox.web.tsx:273 -#: src/components/Lightbox/Lightbox.web.tsx:299 +#: src/components/Lightbox/Lightbox.web.tsx:277 +#: src/components/Lightbox/Lightbox.web.tsx:303 msgid "Share image" msgstr "Share image" @@ -10082,7 +10293,7 @@ msgstr "" msgid "Share your contacts to find friends" msgstr "" -#: src/Navigation.tsx:313 +#: src/Navigation.tsx:315 msgid "Shared Preferences Tester" msgstr "" @@ -10228,6 +10439,8 @@ msgstr "" #: src/screens/Login/LoginForm.tsx:179 #: src/screens/Login/LoginForm.tsx:350 #: src/screens/Login/LoginForm.tsx:356 +#: src/screens/Messages/JoinRequest.tsx:280 +#: src/screens/Messages/JoinRequest.tsx:286 #: src/screens/Search/SearchResults.tsx:316 #: src/view/com/auth/SplashScreen.tsx:118 #: src/view/com/auth/SplashScreen.tsx:124 @@ -10260,6 +10473,10 @@ msgstr "" msgid "Sign in or create your account to join the conversation!" msgstr "" +#: src/screens/Messages/JoinRequest.tsx:205 +msgid "Sign in to accept invite." +msgstr "Sign in to accept invite." + #: src/components/AccountList.tsx:70 msgid "Sign in to account that is not listed" msgstr "" @@ -10268,6 +10485,10 @@ msgstr "" msgid "Sign in to Bluesky or create a new account" msgstr "" +#: src/screens/Messages/JoinRequest.tsx:204 +msgid "Sign in to request access to this group chat." +msgstr "Sign in to request access to this group chat." + #: src/components/PostControls/PostMenu/PostMenuItems.tsx:571 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:573 msgid "Sign in to view post" @@ -10322,7 +10543,7 @@ msgstr "" msgid "Skip contact sharing and continue to the app" msgstr "" -#: src/view/com/composer/Composer.tsx:1349 +#: src/view/com/composer/Composer.tsx:1331 msgid "Skip empty posts?" msgstr "Skip empty posts?" @@ -10336,7 +10557,7 @@ msgstr "" msgid "Skip to next step" msgstr "" -#: src/components/images/Gallery/index.tsx:417 +#: src/components/images/Gallery/index.tsx:420 msgid "slide" msgstr "slide" @@ -10424,6 +10645,7 @@ msgstr "" #: src/screens/Messages/Conversation.tsx:135 #: src/screens/Messages/ConversationSettings/index.tsx:112 +#: src/screens/Messages/JoinRequests.tsx:87 msgid "Something went wrong" msgstr "" @@ -10513,17 +10735,17 @@ msgstr "" msgid "Start adding people!" msgstr "" -#: src/components/dms/InitiateChatFlow.tsx:669 +#: src/components/dms/InitiateChatFlow.tsx:670 msgid "Start chat" msgstr "Start chat" #: src/components/dialogs/SearchablePeopleList.tsx:428 -#: src/components/dms/InitiateChatFlow.tsx:817 +#: src/components/dms/InitiateChatFlow.tsx:818 msgid "Start chat with {displayName}" msgstr "" -#: src/Navigation.tsx:519 -#: src/Navigation.tsx:524 +#: src/Navigation.tsx:526 +#: src/Navigation.tsx:531 #: src/screens/StarterPack/Wizard/index.tsx:197 msgid "Starter Pack" msgstr "" @@ -10585,7 +10807,7 @@ msgstr "" msgid "Stored as part of a secure code for matching with others" msgstr "" -#: src/Navigation.tsx:303 +#: src/Navigation.tsx:305 #: src/screens/Settings/Settings.tsx:456 msgid "Storybook" msgstr "" @@ -10667,12 +10889,16 @@ msgstr "" msgid "Success!" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:100 +msgid "Successfully joined the group chat!" +msgstr "Successfully joined the group chat!" + #: src/components/verification/VerificationCreatePrompt.tsx:37 msgid "Successfully verified" msgstr "" #: src/components/dms/AddMembersFlow.tsx:226 -#: src/components/dms/InitiateChatFlow.tsx:325 +#: src/components/dms/InitiateChatFlow.tsx:326 msgid "Suggested" msgstr "Suggested" @@ -10701,7 +10927,7 @@ msgctxt "Name of app icon variant" msgid "Sunset" msgstr "" -#: src/Navigation.tsx:323 +#: src/Navigation.tsx:325 #: src/view/screens/Support.tsx:25 #: src/view/screens/Support.tsx:28 msgid "Support" @@ -10855,7 +11081,7 @@ msgstr "" #: src/components/dialogs/BirthDateSettings.tsx:181 #: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:31 #: src/components/PolicyUpdateOverlay/updates/202508/index.tsx:98 -#: src/Navigation.tsx:333 +#: src/Navigation.tsx:335 #: src/screens/Settings/AboutSettings.tsx:87 #: src/screens/Settings/AboutSettings.tsx:90 #: src/view/screens/TermsOfService.tsx:25 @@ -10980,6 +11206,11 @@ msgstr "" msgid "The laws in your region require you to verify you're an adult to access certain features. Tap to learn more." msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:134 +#: src/screens/Messages/JoinRequests.tsx:201 +msgid "The member limit has been reached." +msgstr "The member limit has been reached." + #: src/view/com/composer/select-language/SuggestedLanguage.tsx:400 msgid "The post you’re replying to was marked as being written in {suggestedLanguageName} by its author. Would you like to reply in <0>{suggestedLanguageName}?" msgstr "The post you’re replying to was marked as being written in {suggestedLanguageName} by its author. Would you like to reply in <0>{suggestedLanguageName}?" @@ -10988,10 +11219,10 @@ msgstr "The post you’re replying to was marked as being written in {suggestedL msgid "The Privacy Policy has been moved to <0/>" msgstr "" -#: src/view/com/composer/state/video.ts:407 -#: src/view/com/composer/state/video.ts:451 -msgid "The selected video is larger than {videoSize} MB. Please try again with a smaller file." -msgstr "The selected video is larger than {videoSize} MB. Please try again with a smaller file." +#: src/view/com/composer/state/video.ts:397 +#: src/view/com/composer/state/video.ts:436 +msgid "The selected video is larger than {VIDEO_MAX_SIZE_MB} MB. Please try again with a smaller file." +msgstr "The selected video is larger than {VIDEO_MAX_SIZE_MB} MB. Please try again with a smaller file." #: src/lib/hooks/useCleanError.ts:41 #: src/lib/strings/errors.ts:19 @@ -11032,7 +11263,7 @@ msgstr "" msgid "There is a limit to how often you can change your birthdate. You may need to wait a day or two before updating it again." msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:476 +#: src/screens/Messages/components/InviteLinkDialog.tsx:487 msgid "There is no invite link for this group chat." msgstr "There is no invite link for this group chat." @@ -11046,6 +11277,8 @@ msgid "There was a problem loading GIFs. Check your connection and try again." msgstr "There was a problem loading GIFs. Check your connection and try again." #: src/components/contacts/screens/GetContacts.tsx:147 +#: src/components/intents/GroupChatJoinDialog.tsx:118 +#: src/components/intents/GroupChatJoinDialog.tsx:152 msgid "There was a problem with your internet connection, please try again" msgstr "" @@ -11202,6 +11435,10 @@ msgstr "" msgid "This chat has ended" msgstr "This chat has ended" +#: src/components/intents/GroupChatJoinDialog.tsx:263 +msgid "This chat is full" +msgstr "This chat is full" + #: src/screens/Messages/components/ChatListItem.tsx:375 #: src/screens/Messages/components/ChatLocked.tsx:61 msgid "This chat is locked" @@ -11241,6 +11478,10 @@ msgstr "" msgid "This content is not viewable without a Bluesky account." msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:120 +msgid "This conversation is locked." +msgstr "This conversation is locked." + #: src/screens/Messages/components/ChatListItem.tsx:155 msgid "This conversation is with a deleted or a deactivated account. Press for options" msgstr "" @@ -11299,6 +11540,18 @@ msgstr "This image could not be used. Try a different format like .jpg or .png." msgid "This information is private and not shared with other users." msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:130 +msgid "This invite link has been disabled." +msgstr "This invite link has been disabled." + +#: src/screens/Messages/JoinRequest.tsx:83 +msgid "This invite link has expired" +msgstr "This invite link has expired" + +#: src/components/intents/GroupChatJoinDialog.tsx:194 +msgid "This invite link is invalid" +msgstr "This invite link is invalid" + #: src/view/screens/Debug.tsx:327 msgid "This is an empty state" msgstr "" @@ -11385,7 +11638,7 @@ msgstr "" msgid "This post will be hidden from feeds and threads. This cannot be undone." msgstr "" -#: src/view/com/composer/Composer.tsx:963 +#: src/view/com/composer/Composer.tsx:945 msgid "This post's author has disabled quote posts." msgstr "" @@ -11398,6 +11651,7 @@ msgid "This reply will be sorted into a hidden section at the bottom of your thr msgstr "" #: src/screens/Messages/ConversationSettings/index.tsx:132 +#: src/screens/Messages/JoinRequests.tsx:111 msgid "This screen is only available for group conversations." msgstr "This screen is only available for group conversations." @@ -11505,7 +11759,7 @@ msgstr "" msgid "Threaded" msgstr "" -#: src/Navigation.tsx:366 +#: src/Navigation.tsx:368 msgid "Threads Preferences" msgstr "" @@ -11577,7 +11831,7 @@ msgstr "" msgid "Top replies first" msgstr "" -#: src/Navigation.tsx:477 +#: src/Navigation.tsx:479 msgid "Topic" msgstr "" @@ -11694,6 +11948,10 @@ msgstr "" msgid "Unable to delete" msgstr "" +#: src/screens/Messages/JoinRequests.tsx:346 +msgid "Unable to fetch join requests." +msgstr "Unable to fetch join requests." + #: src/components/dms/dialogs/NewChatDialog.tsx:109 msgid "Unable to find a selected recipient." msgstr "Unable to find a selected recipient." @@ -11849,7 +12107,7 @@ msgstr "" msgid "Unlock chat" msgstr "Unlock chat" -#: src/screens/Messages/ConversationSettings/index.tsx:502 +#: src/screens/Messages/ConversationSettings/index.tsx:501 msgid "Unlock this group chat" msgstr "Unlock this group chat" @@ -11886,7 +12144,7 @@ msgstr "" msgid "Unmute list" msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:464 +#: src/screens/Messages/ConversationSettings/index.tsx:463 msgid "Unmute this group chat" msgstr "Unmute this group chat" @@ -11965,7 +12223,7 @@ msgstr "" msgid "Unsupported clipboard content" msgstr "Unsupported clipboard content" -#: src/view/com/composer/Composer.tsx:1442 +#: src/view/com/composer/Composer.tsx:1424 msgid "Unsupported video type: {mimeType}" msgstr "" @@ -11985,9 +12243,9 @@ msgstr "" msgid "Update email" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:205 -#: src/screens/Messages/components/InviteLinkDialog.tsx:243 -#: src/screens/Messages/components/InviteLinkDialog.tsx:267 +#: src/screens/Messages/components/InviteLinkDialog.tsx:217 +#: src/screens/Messages/components/InviteLinkDialog.tsx:255 +#: src/screens/Messages/components/InviteLinkDialog.tsx:283 msgid "Update invite link" msgstr "Update invite link" @@ -12048,20 +12306,20 @@ msgstr "" msgid "Upload from Library" msgstr "" -#: src/view/com/composer/Composer.tsx:2471 +#: src/view/com/composer/Composer.tsx:2453 msgid "Uploading GIF..." msgstr "" -#: src/lib/api/index.ts:338 +#: src/lib/api/index.ts:322 msgid "Uploading images..." msgstr "" -#: src/lib/api/index.ts:409 -#: src/lib/api/index.ts:433 +#: src/lib/api/index.ts:390 +#: src/lib/api/index.ts:414 msgid "Uploading link thumbnail..." msgstr "" -#: src/view/com/composer/Composer.tsx:2473 +#: src/view/com/composer/Composer.tsx:2455 msgid "Uploading video..." msgstr "" @@ -12208,7 +12466,7 @@ msgstr "" msgid "Verification settings" msgstr "" -#: src/Navigation.tsx:203 +#: src/Navigation.tsx:205 #: src/screens/Moderation/VerificationSettings.tsx:34 msgid "Verification Settings" msgstr "" @@ -12311,11 +12569,11 @@ msgstr "" msgid "Video" msgstr "" -#: src/view/com/composer/state/video.ts:364 +#: src/view/com/composer/state/video.ts:359 msgid "Video failed to process" msgstr "" -#: src/Navigation.tsx:540 +#: src/Navigation.tsx:547 msgid "Video Feed" msgstr "" @@ -12350,7 +12608,7 @@ msgstr "" msgid "Video settings" msgstr "" -#: src/view/com/composer/Composer.tsx:2491 +#: src/view/com/composer/Composer.tsx:2473 msgid "Video uploaded" msgstr "" @@ -12363,11 +12621,11 @@ msgstr "" msgid "Videos" msgstr "" -#: src/view/com/composer/SelectMediaButton.tsx:428 +#: src/view/com/composer/SelectMediaButton.tsx:432 msgid "Videos must be less than 3 minutes long." msgstr "" -#: src/view/com/composer/Composer.tsx:1055 +#: src/view/com/composer/Composer.tsx:1037 msgctxt "Action to view the post the user just created" msgid "View" msgstr "" @@ -12434,7 +12692,7 @@ msgstr "" msgid "View full thread" msgstr "" -#: src/screens/Messages/ConversationSettings/MembersAndRequests.tsx:43 +#: src/screens/Messages/ConversationSettings/MembersAndRequests.tsx:48 msgid "View incoming group chat requests" msgstr "View incoming group chat requests" @@ -12453,7 +12711,7 @@ msgstr "" msgid "View more trending videos" msgstr "" -#: src/view/com/composer/Composer.tsx:1050 +#: src/view/com/composer/Composer.tsx:1032 msgid "View post" msgstr "" @@ -12481,7 +12739,7 @@ msgstr "View publication" msgid "View the avatar" msgstr "" -#: src/screens/Messages/ConversationSettings/index.tsx:489 +#: src/screens/Messages/ConversationSettings/index.tsx:488 msgid "View the invite link for this group chat" msgstr "View the invite link for this group chat" @@ -12527,8 +12785,8 @@ msgstr "" msgid "View your verifications" msgstr "" -#: src/components/images/AutoSizedImage.tsx:207 -#: src/components/images/AutoSizedImage.tsx:239 +#: src/components/images/AutoSizedImage.tsx:220 +#: src/components/images/AutoSizedImage.tsx:252 msgid "Views full image" msgstr "" @@ -12600,6 +12858,10 @@ msgstr "" msgid "We couldn't load this conversation" msgstr "" +#: src/screens/Messages/JoinRequests.tsx:88 +msgid "We couldn’t load this conversation’s join requests" +msgstr "We couldn’t load this conversation’s join requests" + #: src/screens/Messages/ConversationSettings/index.tsx:113 msgid "We couldn’t load this conversation’s settings" msgstr "We couldn’t load this conversation’s settings" @@ -12650,7 +12912,7 @@ msgstr "" msgid "We sent an email to <0>{0} containing a link. Please click on it to complete the email verification process." msgstr "" -#: src/view/com/composer/state/video.ts:434 +#: src/view/com/composer/state/video.ts:419 msgid "We were unable to determine if you are allowed to upload videos. Please try again." msgstr "" @@ -12745,7 +13007,7 @@ msgstr "We’re sorry, but your search could not be completed. Please try again msgid "We're sorry, you cannot access this screen at this time." msgstr "" -#: src/view/com/composer/Composer.tsx:961 +#: src/view/com/composer/Composer.tsx:943 msgid "We're sorry! The post you are replying to has been deleted." msgstr "" @@ -12796,7 +13058,7 @@ msgid "What do you want to call your starter pack?" msgstr "" #: src/view/com/auth/SplashScreen.web.tsx:98 -#: src/view/com/composer/Composer.tsx:1402 +#: src/view/com/composer/Composer.tsx:1384 #: src/view/com/feeds/ComposerPrompt.tsx:193 msgid "What's up?" msgstr "" @@ -12809,7 +13071,7 @@ msgstr "" msgid "Who can interact with this post?" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:216 +#: src/screens/Messages/components/InviteLinkDialog.tsx:227 msgid "Who can join this group chat and how" msgstr "Who can join this group chat and how" @@ -12882,7 +13144,7 @@ msgstr "Would you like to block this user and/or leave this conversation?" msgid "Would you like to save this as a draft before viewing your drafts?" msgstr "" -#: src/view/com/composer/Composer.tsx:1320 +#: src/view/com/composer/Composer.tsx:1302 msgid "Would you like to save this as a draft to edit later?" msgstr "" @@ -12891,12 +13153,12 @@ msgstr "" msgid "Write a post" msgstr "" -#: src/view/com/composer/Composer.tsx:1502 +#: src/view/com/composer/Composer.tsx:1484 msgid "Write post" msgstr "" #: src/screens/PostThread/components/ThreadComposePrompt.tsx:91 -#: src/view/com/composer/Composer.tsx:1400 +#: src/view/com/composer/Composer.tsx:1382 msgid "Write your reply" msgstr "" @@ -12910,6 +13172,7 @@ msgid "Wrong DID returned from server. Received: {0}" msgstr "" #: src/screens/Messages/ConversationSettings/index.tsx:131 +#: src/screens/Messages/JoinRequests.tsx:110 msgid "Wrong kind of conversation" msgstr "Wrong kind of conversation" @@ -12999,7 +13262,7 @@ msgstr "" msgid "You are no longer live" msgstr "" -#: src/view/com/composer/state/video.ts:427 +#: src/view/com/composer/state/video.ts:412 msgid "You are not allowed to upload videos." msgstr "" @@ -13062,7 +13325,7 @@ msgstr "" msgid "You can now sign in with your new password." msgstr "" -#: src/view/com/composer/Composer.tsx:1325 +#: src/view/com/composer/Composer.tsx:1307 msgid "You can only save drafts up to 1000 characters." msgstr "" @@ -13070,11 +13333,11 @@ msgstr "" msgid "You can only save drafts up to 1000 characters. Would you like to discard this post before viewing your drafts?" msgstr "" -#: src/view/com/composer/SelectMediaButton.tsx:431 +#: src/view/com/composer/SelectMediaButton.tsx:435 msgid "You can only select one GIF at a time." msgstr "" -#: src/view/com/composer/SelectMediaButton.tsx:425 +#: src/view/com/composer/SelectMediaButton.tsx:429 msgid "You can only select one video at a time." msgstr "" @@ -13087,7 +13350,7 @@ msgid "You can read chat history but can’t send new messages." msgstr "You can read chat history but can’t send new messages." #. Error message for maximum number of images that can be selected to add to a post, currently 4 but may change. -#: src/view/com/composer/SelectMediaButton.tsx:417 +#: src/view/com/composer/SelectMediaButton.tsx:421 msgid "You can select up to {MAX_IMAGES, plural, other {# images}} in total." msgstr "" @@ -13128,6 +13391,10 @@ msgstr "" msgid "You got here first" msgstr "" +#: src/components/intents/GroupChatJoinDialog.tsx:136 +msgid "You have been removed from this group." +msgstr "You have been removed from this group." + #: src/components/moderation/ModerationDetailsDialog.tsx:77 #: src/lib/moderation/useModerationCauseDescription.ts:58 #: src/lib/moderation/useModerationCauseDescription.ts:66 @@ -13197,7 +13464,7 @@ msgstr "" msgid "You have temporarily reached the limit for video uploads. Please try again later." msgstr "" -#: src/view/com/composer/Composer.tsx:1315 +#: src/view/com/composer/Composer.tsx:1297 msgid "You have unsaved changes to this draft, would you like to save them?" msgstr "" @@ -13267,7 +13534,7 @@ msgstr "" msgid "You must grant access to your photo library to save a QR code" msgstr "" -#: src/view/com/composer/SelectMediaButton.tsx:460 +#: src/view/com/composer/SelectMediaButton.tsx:464 msgid "You need to allow access to your media library." msgstr "" @@ -13394,7 +13661,7 @@ msgstr "" msgid "You've reached the end of your feed! Find some more accounts to follow." msgstr "" -#: src/view/com/composer/Composer.tsx:582 +#: src/view/com/composer/Composer.tsx:576 msgid "You've reached the maximum number of drafts" msgstr "" @@ -13406,11 +13673,11 @@ msgstr "" msgid "You've reached the start of the active content." msgstr "" -#: src/view/com/composer/state/video.ts:438 +#: src/view/com/composer/state/video.ts:423 msgid "You've reached your daily limit for video uploads (too many bytes)" msgstr "" -#: src/view/com/composer/state/video.ts:442 +#: src/view/com/composer/state/video.ts:427 msgid "You've reached your daily limit for video uploads (too many videos)" msgstr "" @@ -13430,15 +13697,15 @@ msgstr "" msgid "Your account has been suspended" msgstr "" -#: src/view/com/composer/state/video.ts:446 +#: src/view/com/composer/state/video.ts:431 msgid "Your account is not yet old enough to upload videos. Please try again later." msgstr "" -#: src/components/dms/InitiateChatFlow.tsx:674 +#: src/components/dms/InitiateChatFlow.tsx:675 msgid "Your account is too new" msgstr "Your account is too new" -#: src/components/dms/InitiateChatFlow.tsx:675 +#: src/components/dms/InitiateChatFlow.tsx:676 msgid "Your account must be at least 7 days old to create a new group chat." msgstr "Your account must be at least 7 days old to create a new group chat." @@ -13521,7 +13788,7 @@ msgstr "" msgid "Your full handle will be <0>@{0}" msgstr "" -#: src/Navigation.tsx:449 +#: src/Navigation.tsx:451 #: src/screens/Search/modules/ExploreInterestsCard.tsx:68 #: src/screens/Settings/ContentAndMediaSettings.tsx:94 #: src/screens/Settings/ContentAndMediaSettings.tsx:97 @@ -13550,9 +13817,9 @@ msgstr "" msgid "Your muted words" msgstr "" -#: src/screens/Messages/components/InviteLinkDialog.tsx:179 -msgid "Your name, avatar, and the name of the group chat will be visible to everyone." -msgstr "Your name, avatar, and the name of the group chat will be visible to everyone." +#: src/screens/Messages/components/InviteLinkDialog.tsx:189 +msgid "Your name, avatar, the name of the group chat, and the number of members will be visible to everyone." +msgstr "Your name, avatar, the name of the group chat, and the number of members will be visible to everyone." #: src/screens/Settings/components/ChangePasswordDialog.tsx:72 msgid "Your password has been changed successfully! Please use your new password when you sign in to Bluesky from now on." @@ -13562,11 +13829,11 @@ msgstr "" msgid "Your password must be at least 8 characters long." msgstr "" -#: src/view/com/composer/Composer.tsx:1046 +#: src/view/com/composer/Composer.tsx:1028 msgid "Your post was sent" msgstr "" -#: src/view/com/composer/Composer.tsx:1043 +#: src/view/com/composer/Composer.tsx:1025 msgid "Your posts were sent" msgstr "" @@ -13587,7 +13854,7 @@ msgstr "" msgid "Your profile, posts, feeds, and lists will no longer be visible to other Bluesky users. You can reactivate your account at any time by logging in." msgstr "" -#: src/view/com/composer/Composer.tsx:1045 +#: src/view/com/composer/Composer.tsx:1027 msgid "Your reply was sent" msgstr "" @@ -13600,7 +13867,7 @@ msgstr "" msgid "Your selected interests help us serve you content you care about." msgstr "" -#: src/view/com/composer/Composer.tsx:1350 +#: src/view/com/composer/Composer.tsx:1332 msgid "Your thread has empty posts that will be skipped. The remaining posts will be published as a thread." msgstr "Your thread has empty posts that will be skipped. The remaining posts will be published as a thread." From 00497964c1ab048cc676ce3924dc407ed8ef15cf Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Wed, 3 Jun 2026 09:05:46 +0300 Subject: [PATCH 14/31] [ALF] Set text to `leading_snug` by default (#10627) --- src/components/Button.tsx | 6 +++--- src/components/RichText.tsx | 2 +- src/components/Typography.tsx | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/Button.tsx b/src/components/Button.tsx index aa705b1897..5f74595029 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -757,11 +757,11 @@ export function useSharedButtonTextStyles() { } if (size === 'large') { - baseStyles.push(a.text_md, a.leading_snug, a.font_medium) + baseStyles.push(a.text_md, a.font_medium) } else if (size === 'small') { - baseStyles.push(a.text_sm, a.leading_snug, a.font_medium) + baseStyles.push(a.text_sm, a.font_medium) } else if (size === 'tiny') { - baseStyles.push(a.text_xs, a.leading_snug, a.font_semi_bold) + baseStyles.push(a.text_xs, a.font_semi_bold) } return flatten(baseStyles) diff --git a/src/components/RichText.tsx b/src/components/RichText.tsx index 322fb9ebd9..25af851723 100644 --- a/src/components/RichText.tsx +++ b/src/components/RichText.tsx @@ -66,7 +66,7 @@ export function RichText({ } }, [value]) - const plainStyles = [a.leading_snug, style] + const plainStyles = style const interactiveStyles = [plainStyles, interactiveStyle] const {text, facets} = richText diff --git a/src/components/Typography.tsx b/src/components/Typography.tsx index 04b5e5499d..a65889f67e 100644 --- a/src/components/Typography.tsx +++ b/src/components/Typography.tsx @@ -31,6 +31,7 @@ export function Text({ [ a.text_sm, t.atoms.text, + a.leading_snug, web(numberOfLines === 1 && numberOfLinesClippingFix), style, ], From a046d8d96a94adf499682d9cb293f8dbf35d6465 Mon Sep 17 00:00:00 2001 From: RetroSunstar <57507616+RetroSunstar@users.noreply.github.com> Date: Wed, 3 Jun 2026 11:47:35 +0100 Subject: [PATCH 15/31] Use square icons for labellers in Automation Label preview card (#10701) --- src/screens/Settings/AutomationLabelSettings.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/screens/Settings/AutomationLabelSettings.tsx b/src/screens/Settings/AutomationLabelSettings.tsx index f4c6823d63..423bc0073a 100644 --- a/src/screens/Settings/AutomationLabelSettings.tsx +++ b/src/screens/Settings/AutomationLabelSettings.tsx @@ -123,7 +123,11 @@ export function AutomationLabelSettingsScreen({}: Props) { paddingRight: 20, // helps visually center }, ]}> - + From 21679b66ddeeb0df62173091994d9b0708435cda Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Wed, 3 Jun 2026 17:39:31 +0300 Subject: [PATCH 16/31] Mention default `` style in CLAUDE.md (#10705) --- CLAUDE.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index c747973c77..37e6a1c2c5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -206,7 +206,7 @@ function MyComponent() { return ( - Hello + Hello ) } @@ -414,12 +414,16 @@ import {Text, H1, H2, P} from '#/components/Typography'

Heading

Paragraph text with default styling.

-Custom text +Custom text -// For text with emoji, add the emoji prop +// For text with emoji, add the emoji prop. User-generated text (e.g. display names) +// will almost certainly contain emoji, so only omit it when the text is static and +// does not contain an emoji Hello! 👋 ``` +The `Text` component's default style is `[a.text_sm, a.leading_snug, t.atoms.text]`. + ### TextField ```tsx From b6650d8d5c0a9dc2adbe53ce727e8a3901f0edd7 Mon Sep 17 00:00:00 2001 From: Spence Pope Date: Wed, 3 Jun 2026 10:58:43 -0400 Subject: [PATCH 17/31] Fix alt text selection in lightbox on Android (and iOS) (#10698) Co-authored-by: Eric Bailey --- src/components/Lightbox/chrome/Footer.tsx | 47 ++++++++++++++--------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/src/components/Lightbox/chrome/Footer.tsx b/src/components/Lightbox/chrome/Footer.tsx index fb190f42ff..a20c80df3d 100644 --- a/src/components/Lightbox/chrome/Footer.tsx +++ b/src/components/Lightbox/chrome/Footer.tsx @@ -1,11 +1,5 @@ import {useRef} from 'react' -import { - LayoutAnimation, - Pressable, - ScrollView, - StyleSheet, - View, -} from 'react-native' +import {LayoutAnimation, ScrollView, StyleSheet, View} from 'react-native' import {useSafeAreaInsets} from 'react-native-safe-area-context' import {BlurView} from 'expo-blur' import {useLingui} from '@lingui/react/macro' @@ -60,26 +54,41 @@ export function Footer({altText, isAltExpanded, onToggleAltExpanded}: Props) { isMomentumScrolling.current = false }} contentContainerStyle={[a.px_md, a.py_sm]}> - { - if (isMomentumScrolling.current) return - LayoutAnimation.configureNext({ - duration: 450, - update: {type: 'spring', springDamping: 1}, - }) - onToggleAltExpanded() - }}> + accessibilityHint=""> + {/* + * The press handlers must live on the Text itself, not on a + * wrapping Pressable. Text selection is driven by the platform's + * native text view long-press (RN Text on Android, UITextView on + * iOS). A parent touchable consumes that long-press before the + * selectable Text can begin a selection - on Android this prevents + * selection entirely. Keeping onPress/onLongPress on the Text lets + * the same native node own both the tap-to-expand and the + * long-press-to-select. The empty onLongPress is intentional: it + * reserves the long-press for the OS selection gesture instead of + * firing the expand toggle. RN exposes no API to arbitrate tap vs + * native selection on a single node, so this is the supported + * workaround, and it behaves consistently on both platforms. + */} + numberOfLines={isAltExpanded ? undefined : 3} + onPress={() => { + if (isMomentumScrolling.current) return + LayoutAnimation.configureNext({ + duration: 450, + update: {type: 'spring', springDamping: 1}, + }) + onToggleAltExpanded() + }} + onLongPress={() => {}}> {altText} - +
From 1b4c72f5166aec88df7ec8513a02c6e934d86327 Mon Sep 17 00:00:00 2001 From: DS Boyce <260543580+ds-boyce@users.noreply.github.com> Date: Wed, 3 Jun 2026 09:28:11 -0700 Subject: [PATCH 18/31] Mount message dialogs once at the list level (#10435) Co-authored-by: Samuel Newman --- src/components/Prompt.tsx | 4 +- src/components/dms/AfterReportDialog.tsx | 7 +- src/components/dms/MessageContextMenu.tsx | 176 +++++-------- src/components/dms/MessageItem.tsx | 47 +--- src/components/dms/MessageOverlays.tsx | 175 +++++++++++++ src/components/dms/ReactionsDialog.tsx | 38 ++- .../moderation/ReportDialog/index.tsx | 4 +- .../moderation/ReportDialog/types.ts | 4 + .../Messages/components/MessagesList.tsx | 243 +++++++++--------- 9 files changed, 420 insertions(+), 278 deletions(-) create mode 100644 src/components/dms/MessageOverlays.tsx diff --git a/src/components/Prompt.tsx b/src/components/Prompt.tsx index 916a7ec2d9..5fdf18e2a1 100644 --- a/src/components/Prompt.tsx +++ b/src/components/Prompt.tsx @@ -224,6 +224,7 @@ export function Basic({ cancelButtonCta, confirmButtonCta, onConfirm, + onClose, confirmButtonColor, showCancel = true, }: React.PropsWithChildren<{ @@ -240,11 +241,12 @@ export function Basic({ * should NOT close the dialog as a side effect of this method. */ onConfirm: (e: GestureResponderEvent) => void + onClose?: () => void confirmButtonColor?: ButtonColor showCancel?: boolean }>) { return ( - + {title} {description && {description}} diff --git a/src/components/dms/AfterReportDialog.tsx b/src/components/dms/AfterReportDialog.tsx index 3df194fc8b..060ea1fcfb 100644 --- a/src/components/dms/AfterReportDialog.tsx +++ b/src/components/dms/AfterReportDialog.tsx @@ -33,14 +33,19 @@ export const AfterReportDialog = memo(function BlockOrDeleteDialogInner({ control, params, currentScreen, + onClose, }: { control: Dialog.DialogControlProps params: ReportDialogParams currentScreen: 'list' | 'conversation' + onClose?: () => void }): React.ReactNode { const {t: l} = useLingui() return ( - + { - LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut) - convo - .deleteMessage(message.id) - .then(() => Toast.show(l({message: 'Message deleted', context: 'toast'}))) - .catch(() => Toast.show(l`Failed to delete message`)) - }, [l, convo, message.id]) - const onEmojiSelect = useCallback( (emoji: string) => { if ( @@ -128,104 +112,72 @@ export let MessageContextMenu = ({ const sender = senderProfile return ( - <> - - {IS_NATIVE && reactionsAvailable && ( - - - - )} - - - {children} - - - + {IS_NATIVE && reactionsAvailable && ( + - {message.text.length > 0 && ( - <> - - - {l`Translate`} - - - - - {l`Copy message text`} - - - - )} + + + )} + + + {children} + + + + {message.text.length > 0 && ( + <> + + + {l`Translate`} + + + + + {l`Copy message text`} + + + + )} + openDeleteMessage(message)}> + + {l`Delete for me`} + + {!isFromSelf && ( deleteControl.open()}> - - {l`Delete for me`} + testID="messageDropdownReportBtn" + label={l`Report message`} + onPress={() => openReportMessage(message, senderProfile)}> + + {l`Report`} - {!isFromSelf && ( - reportControl.open()}> - - {l`Report`} - - )} - - - { - if (sender) { - unstableCacheProfileView(queryClient, sender) - } - blockOrDeleteControl.open() - }} - /> - - - + )} + + ) } MessageContextMenu = memo(MessageContextMenu) diff --git a/src/components/dms/MessageItem.tsx b/src/components/dms/MessageItem.tsx index 6f1819ada2..ac6acb5891 100644 --- a/src/components/dms/MessageItem.tsx +++ b/src/components/dms/MessageItem.tsx @@ -40,8 +40,8 @@ import {useSession} from '#/state/session' import {atoms as a, native, platform, useTheme} from '#/alf' import {isOnlyEmoji} from '#/alf/typography' import {Button} from '#/components/Button' -import {useDialogControl} from '#/components/Dialog' import {ActionsWrapper} from '#/components/dms/ActionsWrapper' +import {useMessageDialogs} from '#/components/dms/MessageOverlays' import {InlineLinkText, Link} from '#/components/Link' import * as ProfileCard from '#/components/ProfileCard' import * as Prompt from '#/components/Prompt' @@ -49,7 +49,7 @@ import {RichText} from '#/components/RichText' import {Text} from '#/components/Typography' import {DateDivider} from './DateDivider' import {MessageItemEmbed} from './MessageItemEmbed' -import {ReactionsDialog} from './ReactionsDialog' +import {groupReactions} from './ReactionsDialog' import {CLUSTERED_MESSAGE_THRESHOLD_MS, MESSAGE_GAP_THRESHOLD_MS} from './util' const AVATAR_SIZE = 28 @@ -118,7 +118,7 @@ let MessageItem = ({ const {message} = item const profile = useMaybeProfileShadow(relatedProfiles.get(message.sender.did)) - const reactionsControl = useDialogControl() + const {openReactions} = useMessageDialogs() const isPending = item.type === 'pending-message' @@ -243,34 +243,10 @@ let MessageItem = ({ ) - const groupedReactions = useMemo(() => { - const reactions = message.reactions ?? [] - const grouped = new Map< - string, - { - key: string - value: string - senders: ChatBskyConvoDefs.ReactionViewSender[] - count: number - } - >() - for (const reaction of reactions) { - if (!reaction) continue - const existing = grouped.get(reaction.value) - if (existing) { - existing.senders.push(reaction.sender) - existing.count++ - } else { - grouped.set(reaction.value, { - key: reaction.value, - value: reaction.value, - senders: [reaction.sender], - count: 1, - }) - } - } - return Array.from(grouped.values()) - }, [message.reactions]) + const groupedReactions = useMemo( + () => groupReactions(message.reactions), + [message.reactions], + ) const reactions = useMemo(() => message.reactions ?? [], [message.reactions]) @@ -336,7 +312,7 @@ let MessageItem = ({ transform: [{translateY: -8}], }, ]} - onPress={isGroupChat ? reactionsControl.open : undefined}> + onPress={isGroupChat ? () => openReactions(message) : undefined}> {groupedReactions.map(group => (
) : null} - ) diff --git a/src/components/dms/MessageOverlays.tsx b/src/components/dms/MessageOverlays.tsx new file mode 100644 index 0000000000..41228f2899 --- /dev/null +++ b/src/components/dms/MessageOverlays.tsx @@ -0,0 +1,175 @@ +import { + createContext, + useCallback, + useContext, + useEffect, + useMemo, + useState, +} from 'react' +import {LayoutAnimation} from 'react-native' +import {type ChatBskyConvoDefs} from '@atproto/api' +import {useLingui} from '@lingui/react/macro' +import {useQueryClient} from '@tanstack/react-query' + +import {useConvoActive} from '#/state/messages/convo' +import {unstableCacheProfileView} from '#/state/queries/unstable-profile-cache' +import {useDialogControl} from '#/components/Dialog' +import {AfterReportDialog} from '#/components/dms/AfterReportDialog' +import {ReactionsDialog} from '#/components/dms/ReactionsDialog' +import {ReportDialog} from '#/components/moderation/ReportDialog' +import * as Prompt from '#/components/Prompt' +import {usePromptControl} from '#/components/Prompt' +import * as Toast from '#/components/Toast' +import type * as bsky from '#/types/bsky' + +type MessageDialogsContextType = { + openDeleteMessage: (message: ChatBskyConvoDefs.MessageView) => void + openReportMessage: ( + message: ChatBskyConvoDefs.MessageView, + senderProfile: bsky.profile.AnyProfileView | undefined, + ) => void + openReactions: (message: ChatBskyConvoDefs.MessageView) => void +} + +const Context = createContext(null) + +export function useMessageDialogs() { + const ctx = useContext(Context) + if (!ctx) { + throw new Error('useMessageDialogs must be used within a MessageOverlays') + } + return ctx +} + +export function MessageOverlays({children}: {children: React.ReactNode}) { + const {t: l} = useLingui() + const queryClient = useQueryClient() + const convo = useConvoActive() + + const deleteControl = usePromptControl() + const reportControl = usePromptControl() + const afterReportControl = usePromptControl() + const reactionsControl = useDialogControl() + + const [deleteTarget, setDeleteTarget] = + useState(null) + const [reportTarget, setReportTarget] = useState<{ + message: ChatBskyConvoDefs.MessageView + senderProfile: bsky.profile.AnyProfileView | undefined + } | null>(null) + const [afterReportTarget, setAfterReportTarget] = + useState(null) + const [reactionsTarget, setReactionsTarget] = + useState(null) + + const openDeleteMessage = useCallback( + (message: ChatBskyConvoDefs.MessageView) => { + setDeleteTarget(message) + deleteControl.open() + }, + [deleteControl], + ) + + const openReportMessage = useCallback( + ( + message: ChatBskyConvoDefs.MessageView, + senderProfile: bsky.profile.AnyProfileView | undefined, + ) => { + setReportTarget({message, senderProfile}) + reportControl.open() + }, + [reportControl], + ) + + const openReactions = useCallback( + (message: ChatBskyConvoDefs.MessageView) => { + setReactionsTarget(message) + }, + [], + ) + + // These dialogs are conditionally mounted, so we can't open them in the same + // tick that we set their targets - the control refs aren't attached yet. Open + // in an effect after the dialog has mounted. + useEffect(() => { + if (reactionsTarget) { + reactionsControl.open() + } + }, [reactionsTarget, reactionsControl]) + + useEffect(() => { + if (afterReportTarget) { + afterReportControl.open() + } + }, [afterReportTarget, afterReportControl]) + + const onConfirmDelete = useCallback(() => { + if (!deleteTarget) return + LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut) + convo + .deleteMessage(deleteTarget.id) + .then(() => Toast.show(l({message: 'Message deleted', context: 'toast'}))) + .catch(() => Toast.show(l`Failed to delete message`)) + }, [l, convo, deleteTarget]) + + const onAfterReportSubmit = useCallback(() => { + if (!reportTarget) return + if (reportTarget.senderProfile) { + unstableCacheProfileView(queryClient, reportTarget.senderProfile) + } + setAfterReportTarget(reportTarget.message) + }, [queryClient, reportTarget]) + + const ctx = useMemo( + () => ({openDeleteMessage, openReportMessage, openReactions}), + [openDeleteMessage, openReportMessage, openReactions], + ) + + const reportSubject = reportTarget + ? ({ + view: 'message', + convoId: convo.convo.view.id, + message: reportTarget.message, + } as const) + : undefined + + return ( + + {children} + setReportTarget(null)} + /> + {afterReportTarget && ( + setAfterReportTarget(null)} + /> + )} + {reactionsTarget && ( + setReactionsTarget(null)} + /> + )} + setDeleteTarget(null)} + /> + + ) +} diff --git a/src/components/dms/ReactionsDialog.tsx b/src/components/dms/ReactionsDialog.tsx index 576ef4cead..8119cc1b7c 100644 --- a/src/components/dms/ReactionsDialog.tsx +++ b/src/components/dms/ReactionsDialog.tsx @@ -1,4 +1,4 @@ -import {useRef, useState} from 'react' +import {useMemo, useRef, useState} from 'react' import { LayoutAnimation, Pressable, @@ -37,14 +37,12 @@ export function ReactionsDialog({ control, relatedProfiles, message, - reactions, - groupedReactions, + onClose, }: { control: Dialog.DialogControlProps relatedProfiles: Map message: ChatBskyConvoDefs.MessageView - reactions?: ChatBskyConvoDefs.ReactionView[] - groupedReactions?: Reaction[] + onClose?: () => void }) { const {t: l} = useLingui() @@ -54,6 +52,9 @@ export function ReactionsDialog({ const [selected, setSelected] = useState('all') + const reactions = message.reactions + const groupedReactions = useMemo(() => groupReactions(reactions), [reactions]) + const filteredReactions = reactions?.filter( r => selected === 'all' || r.value === selected, ) @@ -78,7 +79,10 @@ export function ReactionsDialog({ return ( setSelected('all')} + onClose={() => { + setSelected('all') + onClose?.() + }} nativeOptions={{ preventExpansion: true, minHeight: screenHeight / 2, @@ -388,3 +392,25 @@ function ReactionTab({ ) } + +export function groupReactions( + reactions: ChatBskyConvoDefs.ReactionView[] | undefined, +): Reaction[] { + const grouped = new Map() + for (const reaction of reactions ?? []) { + if (!reaction) continue + const existing = grouped.get(reaction.value) + if (existing) { + existing.senders.push(reaction.sender) + existing.count++ + } else { + grouped.set(reaction.value, { + key: reaction.value, + value: reaction.value, + senders: [reaction.sender], + count: 1, + }) + } + } + return Array.from(grouped.values()) +} diff --git a/src/components/moderation/ReportDialog/index.tsx b/src/components/moderation/ReportDialog/index.tsx index c24c6feae0..d1d3aa5584 100644 --- a/src/components/moderation/ReportDialog/index.tsx +++ b/src/components/moderation/ReportDialog/index.tsx @@ -75,9 +75,11 @@ export function ReportDialog( () => (props.subject ? parseReportSubject(props.subject) : undefined), [props.subject], ) + const propsOnClose = props.onClose const onClose = useCallback(() => { ax.metric('reportDialog:close', {}) - }, [ax]) + propsOnClose?.() + }, [ax, propsOnClose]) return ( diff --git a/src/components/moderation/ReportDialog/types.ts b/src/components/moderation/ReportDialog/types.ts index 89089d138b..57ed3cd279 100644 --- a/src/components/moderation/ReportDialog/types.ts +++ b/src/components/moderation/ReportDialog/types.ts @@ -88,4 +88,8 @@ export type ReportDialogProps = { * Called if the report was successfully submitted. */ onAfterSubmit?: () => void + /** + * Called after the dialog finishes closing. + */ + onClose?: () => void } diff --git a/src/screens/Messages/components/MessagesList.tsx b/src/screens/Messages/components/MessagesList.tsx index 99b725267e..fbebdc0745 100644 --- a/src/screens/Messages/components/MessagesList.tsx +++ b/src/screens/Messages/components/MessagesList.tsx @@ -56,6 +56,7 @@ import {MessageListError} from '#/screens/Messages/components/MessageListError' import {atoms as a, platform, tokens, useTheme, web} from '#/alf' import {DateDivider} from '#/components/dms/DateDivider' import {MessageItem} from '#/components/dms/MessageItem' +import {MessageOverlays} from '#/components/dms/MessageOverlays' import {NewMessagesPill} from '#/components/dms/NewMessagesPill' import {SystemMessageGroup} from '#/components/dms/SystemMessageGroup' import {SystemMessageItem} from '#/components/dms/SystemMessageItem' @@ -498,127 +499,133 @@ export function MessagesList({ return ( - - {/* Custom scroll provider so that we can use the `onScroll` event in our custom List implementation */} - - - - - {convoState.hasAllHistory ? ( - convoState.convo?.kind === 'group' ? ( - - ) : ( - - ) - ) : null} - - } - // native only (prop is not supported on web) - renderScrollComponent={renderScrollComponent} - contentContainerStyle={{ - paddingBottom: platform({ - // ios is slightly larger as the input has no top padding - ios: tokens.space.lg, - android: tokens.space.md, - web: 0, // web uses ListFooterComponent instead for scroll reasons - }), - }} - ListFooterComponent={ - - } - style={[ - web({ - scrollbarWidth: 'thin', - scrollbarColor: `${t.palette.contrast_100} transparent`, - scrollbarGutter: 'stable', - }), - ]} - pointerEvents={!hasScrolled ? 'none' : 'auto'} - contentInset={{top: transparentHeaderHeight}} - scrollIndicatorInsets={{top: transparentHeaderHeight}} - /> - - - - {footer ?? ( - - {({loading}) => - ax.features.enabled(ax.features.DmsNewMessageComposerEnable) ? ( - - void onSendMessage(message) - } - hasEmbed={!!embedUri} - setEmbed={setEmbed} - loading={loading}> - + + {/* Custom scroll provider so that we can use the `onScroll` event in our custom List implementation */} + + + + + {convoState.hasAllHistory ? ( + convoState.convo?.kind === 'group' ? ( + + ) : ( + + ) + ) : null} + + } + // native only (prop is not supported on web) + renderScrollComponent={renderScrollComponent} + contentContainerStyle={{ + paddingBottom: platform({ + // ios is slightly larger as the input has no top padding + ios: tokens.space.lg, + android: tokens.space.md, + web: 0, // web uses ListFooterComponent instead for scroll reasons + }), + }} + ListFooterComponent={ + + } + style={[ + web({ + scrollbarWidth: 'thin', + scrollbarColor: `${t.palette.contrast_100} transparent`, + scrollbarGutter: 'stable', + }), + ]} + pointerEvents={!hasScrolled ? 'none' : 'auto'} + contentInset={{top: transparentHeaderHeight}} + scrollIndicatorInsets={{top: transparentHeaderHeight}} + /> + + + + {footer ?? ( + + {({loading}) => + ax.features.enabled( + ax.features.DmsNewMessageComposerEnable, + ) ? ( + + void onSendMessage(message) + } + hasEmbed={!!embedUri} setEmbed={setEmbed} - /> - - ) : ( - - + + + ) : ( + - - ) - } - - )} - - + loading={loading}> + + + ) + } + + )} + + - {newMessagesPill.show && } + {newMessagesPill.show && ( + + )} + ) } From cdad723ea100f4cee9cae186da2454a9bc1b5c2f Mon Sep 17 00:00:00 2001 From: DS Boyce <260543580+ds-boyce@users.noreply.github.com> Date: Wed, 3 Jun 2026 10:23:13 -0700 Subject: [PATCH 19/31] Hide accept button for locked chats (#10696) --- src/screens/Messages/components/RequestListItem.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/screens/Messages/components/RequestListItem.tsx b/src/screens/Messages/components/RequestListItem.tsx index 64dbebb164..79eab480ae 100644 --- a/src/screens/Messages/components/RequestListItem.tsx +++ b/src/screens/Messages/components/RequestListItem.tsx @@ -28,6 +28,9 @@ export function RequestListItem({ const isDeletedAccount = !convo.primaryMember || convo.primaryMember.handle === 'missing.invalid' + const canAcceptRequest = + convo.kind === 'direct' || convo.details.lockStatus === 'unlocked' + return ( @@ -65,7 +68,9 @@ export function RequestListItem({ ]}> {convo.primaryMember && !isDeletedAccount ? ( <> - + {canAcceptRequest ? ( + + ) : null} Date: Wed, 3 Jun 2026 11:27:44 -0700 Subject: [PATCH 20/31] Enable ESLint errors and suppress existing violations (#10490) --- .github/workflows/lint.yml | 26 +- eslint-suppressions.json | 1834 ++++++++++++++++- eslint.config.mjs | 38 +- src/components/Toast/Toast.tsx | 6 +- src/lib/hooks/useTimeAgo.ts | 12 +- src/lib/routes/links.ts | 4 +- .../Settings/AppIconSettings/index.tsx | 4 +- src/screens/VideoFeed/components/Scrubber.tsx | 3 +- src/state/queries/notifications/feed.ts | 2 +- src/state/queries/nuxs/util.ts | 2 +- src/state/queries/suggested-follows.ts | 2 +- src/state/queries/usePostThread/traversal.ts | 2 +- src/view/com/composer/drafts/state/api.ts | 6 +- src/view/com/testing/TestCtrls.e2e.tsx | 2 +- src/view/com/util/PressableWithHover.tsx | 2 +- .../createNativeStackNavigatorWithAuth.tsx | 2 +- 16 files changed, 1879 insertions(+), 68 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 93729874b6..aa6c92765d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,7 +21,7 @@ jobs: strategy: fail-fast: false matrix: - job: [lint, prettier] + job: [lint, prettier, typecheck] steps: - name: Check out Git repository uses: actions/checkout@v5 @@ -62,6 +62,8 @@ jobs: command: pnpm install --frozen-lockfile attempt_limit: 3 attempt_delay: 2000 + - name: Check & compile i18n + run: pnpm intl:build - name: Lint checks run: pnpm ${{ matrix.job }} # Aggregates the matrix results into a single stable check name so branch @@ -80,28 +82,6 @@ jobs: run: | echo "linting result: $RESULT" test "$RESULT" = "success" - typechecking: - name: Run typecheck - runs-on: ubuntu-latest - steps: - - name: Check out Git repository - uses: actions/checkout@v5 - - uses: pnpm/action-setup@v6 - - name: Install node - uses: actions/setup-node@v6 - with: - node-version-file: package.json - cache: pnpm - - name: pnpm install - uses: Wandalen/wretry.action@master - with: - command: pnpm install --frozen-lockfile - attempt_limit: 3 - attempt_delay: 2000 - - name: Check & compile i18n - run: pnpm intl:build - - name: Type check - run: pnpm typecheck testing: name: Run tests runs-on: ubuntu-latest diff --git a/eslint-suppressions.json b/eslint-suppressions.json index 5b7eef4c94..f2e677dc79 100644 --- a/eslint-suppressions.json +++ b/eslint-suppressions.json @@ -1,12 +1,72 @@ { + "src/Navigation.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/Splash.android.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/Splash.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/ageAssurance/components/RedirectOverlay.tsx": { + "@typescript-eslint/require-await": { + "count": 1 + } + }, + "src/ageAssurance/util.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, "src/alf/util/flatten.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 9 + } + }, + "src/alf/util/systemUI.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + } + }, + "src/alf/util/useGutters.ts": { + "react-hooks/immutability": { + "count": 5 } }, "src/analytics/PassiveAnalytics.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "react-hooks/purity": { + "count": 1 + } + }, + "src/analytics/features/index.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/require-await": { + "count": 1 + } + }, + "src/analytics/identifiers/session.test.ts": { + "@typescript-eslint/no-unsafe-call": { + "count": 9 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 9 } }, "src/analytics/metadata.ts": { @@ -17,16 +77,84 @@ "src/analytics/metrics/client.test.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 8 + }, + "@typescript-eslint/require-await": { + "count": 5 } }, "src/analytics/metrics/client.ts": { "@typescript-eslint/no-explicit-any": { "count": 5 + }, + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/analytics/utils.ts": { + "react-hooks/immutability": { + "count": 1 + } + }, + "src/components/AppLanguageDropdown.tsx": { + "@typescript-eslint/no-unsafe-enum-comparison": { + "count": 1 + } + }, + "src/components/Autocomplete/Autocomplete.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/components/Autocomplete/useAutocomplete/index.ts": { + "react-hooks/immutability": { + "count": 1 + } + }, + "src/components/BotAccountAlert.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/components/Button.tsx": { + "react-hooks/immutability": { + "count": 1 } }, "src/components/Composer/index.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-redundant-type-constituents": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 7 + }, + "react-hooks/immutability": { + "count": 1 + }, + "react-hooks/refs": { + "count": 1 + } + }, + "src/components/DebugFieldDisplay.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 } }, "src/components/Dialog/index.tsx": { @@ -37,6 +165,18 @@ "src/components/Dialog/index.web.tsx": { "@typescript-eslint/no-explicit-any": { "count": 4 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 3 + }, + "@typescript-eslint/require-await": { + "count": 1 } }, "src/components/DraggableList/index.web.tsx": { @@ -44,6 +184,11 @@ "count": 2 } }, + "src/components/EmojiPicker/preload.web.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + } + }, "src/components/FeedCard.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 @@ -52,16 +197,53 @@ "src/components/FocusScope/index.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + }, + "react-hooks/refs": { + "count": 1 } }, "src/components/InternationalPhoneCodeSelect.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/components/KnownFollowers.tsx": { + "react-hooks/refs": { + "count": 6 + } + }, + "src/components/Lightbox/Lightbox.web.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/components/Lightbox/pager/ImageItem/ImageItem.android.tsx": { + "react-hooks/immutability": { + "count": 1 + } + }, + "src/components/Lightbox/pager/ImageItem/ImageItem.ios.tsx": { + "react-hooks/refs": { + "count": 1 + } + }, + "src/components/LikedByList.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 2 } }, "src/components/Lists.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 } }, "src/components/Menu/types.ts": { @@ -74,34 +256,129 @@ "count": 1 } }, + "src/components/Post/Embed/ExternalEmbed/ExternalGif.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 3 + } + }, + "src/components/Post/Embed/ExternalEmbed/index.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, "src/components/Post/Embed/ImageEmbed.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/components/Post/Embed/StandardSiteEmbed/index.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 3 + } + }, + "src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoEmbedInnerWeb.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-enum-comparison": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + }, + "react-hooks/immutability": { + "count": 1 } }, "src/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/utils.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 3 } }, "src/components/PostControls/BookmarkButton.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 + } + }, + "src/components/PostControls/DiscoverDebug.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/components/PostControls/ShareMenu/ShareMenuItems.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 3 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 3 + } + }, + "src/components/PostControls/ShareMenu/index.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 } }, "src/components/ProfileHoverCard/index.web.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-floating-promises": { + "count": 3 + }, + "@typescript-eslint/require-await": { + "count": 1 + }, + "react-hooks/immutability": { + "count": 1 + }, + "react-hooks/refs": { + "count": 2 + } + }, + "src/components/ProgressGuide/FollowDialog.tsx": { + "react-hooks/refs": { + "count": 2 + } + }, + "src/components/RichTextTag.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 } }, "src/components/Select/index.tsx": { "@typescript-eslint/no-explicit-any": { "count": 4 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 } }, "src/components/Select/index.web.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 } }, "src/components/Select/types.ts": { @@ -109,9 +386,44 @@ "count": 3 } }, + "src/components/SendErrorReportDialog.tsx": { + "@typescript-eslint/require-await": { + "count": 1 + } + }, + "src/components/StarterPack/Main/ProfilesList.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, "src/components/StarterPack/ProfileStarterPacks.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 + } + }, + "src/components/StarterPack/QrCodeDialog.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 5 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 + }, + "@typescript-eslint/require-await": { + "count": 4 + } + }, + "src/components/StarterPack/ShareDialog.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 + }, + "@typescript-eslint/require-await": { + "count": 1 } }, "src/components/StarterPack/Wizard/WizardEditListDialog.tsx": { @@ -119,9 +431,109 @@ "count": 1 } }, + "src/components/Tooltip/index.tsx": { + "@typescript-eslint/no-base-to-string": { + "count": 1 + } + }, + "src/components/Tooltip/index.web.tsx": { + "@typescript-eslint/no-base-to-string": { + "count": 1 + } + }, + "src/components/WhoCanReply.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "react-hooks/refs": { + "count": 1 + } + }, + "src/components/ageAssurance/AgeAssuranceErrors.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/components/ageAssurance/AgeAssuranceInitDialog.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 2 + }, + "react-hooks/purity": { + "count": 1 + } + }, + "src/components/ageAssurance/AgeAssuranceRedirectDialog.tsx": { + "@typescript-eslint/require-await": { + "count": 1 + } + }, + "src/components/contacts/components/OTPInput.tsx": { + "react-hooks/refs": { + "count": 1 + } + }, + "src/components/contacts/screens/GetContacts.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/components/contacts/screens/VerifyNumber.tsx": { + "@typescript-eslint/require-await": { + "count": 1 + }, + "react-hooks/purity": { + "count": 1 + } + }, + "src/components/contacts/screens/ViewMatches.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, "src/components/dialogs/DeviceLocationRequestDialog.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + } + }, + "src/components/dialogs/EmailDialog/components/ResendEmailText.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/components/dialogs/EmailDialog/data/useAccountEmailState.ts": { + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/components/dialogs/EmailDialog/screens/Manage2FA/Disable.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 3 + } + }, + "src/components/dialogs/EmailDialog/screens/Manage2FA/Enable.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/components/dialogs/EmailDialog/screens/Update.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 3 + } + }, + "src/components/dialogs/EmailDialog/screens/Verify.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 3 + } + }, + "src/components/dialogs/InAppBrowserConsent.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 } }, "src/components/dialogs/LanguageSelectDialog.tsx": { @@ -129,27 +541,105 @@ "count": 1 } }, + "src/components/dialogs/LinkWarning.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + } + }, "src/components/dialogs/MutedWords.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + }, + "@typescript-eslint/require-await": { + "count": 1 } }, "src/components/dialogs/PostInteractionSettingsDialog.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + }, "react-hooks/preserve-manual-memoization": { "count": 1 } }, + "src/components/dialogs/ServerInput.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/components/dialogs/StarterPackDialog.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/components/dialogs/SwitchAccount.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/components/dialogs/lists/CreateListFromStarterPackDialog.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + } + }, "src/components/dialogs/lists/CreateOrEditListDialog.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/components/dialogs/nuxs/FindContactsAnnouncement.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/components/dialogs/nuxs/index.tsx": { + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + }, + "react-hooks/immutability": { + "count": 1 + }, + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/components/dms/MessageItem.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 } }, "src/components/forms/DateField/index.web.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + } + }, + "src/components/forms/SearchInput.tsx": { + "react-hooks/refs": { + "count": 1 } }, "src/components/forms/SegmentedControl.tsx": { @@ -157,6 +647,14 @@ "count": 1 } }, + "src/components/forms/TextField.tsx": { + "@typescript-eslint/no-unsafe-member-access": { + "count": 3 + }, + "react-hooks/refs": { + "count": 1 + } + }, "src/components/forms/ToggleButton.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 @@ -165,6 +663,37 @@ "src/components/hooks/useFollowMethods.ts": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + } + }, + "src/components/hooks/useFullscreen.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/components/hooks/useLandingEntry.native.ts": { + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/components/hooks/useLandingEntry.ts": { + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/components/hooks/useRefreshOnFocus.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/components/hooks/useRichText.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 1 } }, "src/components/images/AutoSizedImage.tsx": { @@ -175,6 +704,15 @@ "src/components/images/Gallery/index.tsx": { "@typescript-eslint/no-explicit-any": { "count": 5 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 4 + }, + "react-hooks/refs": { + "count": 1 } }, "src/components/images/Gallery/useKeyboardHandlers.ts": { @@ -197,6 +735,51 @@ "count": 2 } }, + "src/components/intents/VerifyEmailIntentDialog.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/components/interstitials/TrendingVideos.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/components/moderation/ContentHider.tsx": { + "react-hooks/immutability": { + "count": 1 + } + }, + "src/components/moderation/LabelsOnMeDialog.tsx": { + "react-hooks/purity": { + "count": 1 + } + }, + "src/components/moderation/ModerationDetailsDialog.tsx": { + "react-hooks/purity": { + "count": 1 + } + }, + "src/components/verification/VerificationCreatePrompt.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/components/verification/VerificationRemovePrompt.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/features/liveEvents/preferences.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/features/liveNow/components/LiveStatusDialog.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, "src/features/liveNow/index.tsx": { "@typescript-eslint/no-explicit-any": { "count": 3 @@ -205,6 +788,12 @@ "src/geolocation/service.ts": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 } }, "src/lib/ScrollContext.tsx": { @@ -212,9 +801,22 @@ "count": 3 } }, + "src/lib/api/feed/demo.ts": { + "@typescript-eslint/require-await": { + "count": 2 + } + }, + "src/lib/api/feed/posts.ts": { + "@typescript-eslint/require-await": { + "count": 1 + } + }, "src/lib/api/index.ts": { "@typescript-eslint/no-explicit-any": { "count": 5 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 3 } }, "src/lib/async/retry.ts": { @@ -232,9 +834,20 @@ "count": 1 } }, + "src/lib/custom-animations/CountWheel.web.tsx": { + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, "src/lib/functions.ts": { "@typescript-eslint/no-explicit-any": { "count": 6 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 25 } }, "src/lib/getUserDisplayName.ts": { @@ -242,19 +855,80 @@ "count": 1 } }, + "src/lib/haptics.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, "src/lib/hooks/useAccountSwitcher.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/lib/hooks/useAnimatedValue.ts": { + "react-hooks/refs": { + "count": 1 + } + }, + "src/lib/hooks/useDraggableScrollView.ts": { + "react-hooks/refs": { + "count": 1 + } + }, + "src/lib/hooks/useIntentHandler.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 2 } }, "src/lib/hooks/useNonReactiveCallback.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 1 + } + }, + "src/lib/hooks/useNotificationHandler.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 16 + }, + "@typescript-eslint/require-await": { + "count": 1 } }, "src/lib/hooks/useOTAUpdates.ts": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 4 + } + }, + "src/lib/hooks/useOpenLink.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "@typescript-eslint/require-await": { + "count": 1 + } + }, + "src/lib/hooks/usePermissions.ts": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-enum-comparison": { + "count": 5 + } + }, + "src/lib/hooks/usePermissions.web.ts": { + "@typescript-eslint/require-await": { + "count": 3 } }, "src/lib/hooks/useRequireEmailVerification.tsx": { @@ -262,14 +936,33 @@ "count": 2 } }, + "src/lib/hooks/useTLDs.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/lib/hooks/useTabFocusEffect.ts": { + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, "src/lib/hooks/useToggleMutationQueue.ts": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 2 } }, "src/lib/hooks/useWebScrollRestoration.ts": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "react-hooks/immutability": { + "count": 1 } }, "src/lib/international-telephone-codes.ts": { @@ -277,9 +970,30 @@ "count": 1 } }, + "src/lib/link-meta/link-meta.ts": { + "@typescript-eslint/no-unsafe-member-access": { + "count": 9 + } + }, "src/lib/media/manip.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-floating-promises": { + "count": 5 + } + }, + "src/lib/media/manip.web.ts": { + "@typescript-eslint/prefer-promise-reject-errors": { + "count": 1 + }, + "@typescript-eslint/require-await": { + "count": 3 + } + }, + "src/lib/media/picker.web.tsx": { + "@typescript-eslint/require-await": { + "count": 2 } }, "src/lib/media/save-image.ios.ts": { @@ -297,9 +1011,34 @@ "count": 1 } }, + "src/lib/notifications/notifications.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 5 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-enum-comparison": { + "count": 2 + }, + "@typescript-eslint/require-await": { + "count": 1 + } + }, "src/lib/react-query.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + }, + "react-hooks/refs": { + "count": 1 + } + }, + "src/lib/routes/links.ts": { + "@typescript-eslint/no-redundant-type-constituents": { + "count": 1 } }, "src/lib/routes/router.ts": { @@ -312,82 +1051,298 @@ "count": 1 } }, + "src/lib/sharing.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, "src/lib/strings/errors.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 14 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 14 + } + }, + "src/lib/translation/index.tsx": { + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/lib/useGetEmojis/getEmojis.ts": { + "@typescript-eslint/require-await": { + "count": 1 + } + }, + "src/logger/transports/sentry.ts": { + "@typescript-eslint/no-unsafe-enum-comparison": { + "count": 3 + } + }, + "src/logger/types.ts": { + "@typescript-eslint/no-redundant-type-constituents": { + "count": 1 } }, "src/screens/Bookmarks/index.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 } }, "src/screens/Deactivated.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/screens/E2E/SharedPreferencesTesterScreen.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 6 + }, + "@typescript-eslint/require-await": { + "count": 6 + } + }, + "src/screens/Feeds/NoFollowingFeed.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/screens/Feeds/NoSavedFeedsOfAnyType.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/screens/Hashtag.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/screens/Home/NoFeedsPinned.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/screens/List/ListHiddenScreen.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 3 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/screens/Log.tsx": { + "@typescript-eslint/no-unsafe-enum-comparison": { + "count": 2 } }, "src/screens/Login/ChooseAccountForm.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 } }, "src/screens/Login/ForgotPasswordForm.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 } }, "src/screens/Login/LoginForm.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 4 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 4 + }, + "react-hooks/refs": { + "count": 1 } }, "src/screens/Login/SetNewPasswordForm.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/screens/Login/index.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "react-hooks/purity": { + "count": 1 + }, + "react-hooks/refs": { + "count": 1 + }, + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/screens/Messages/ChatList.tsx": { + "react-hooks/immutability": { + "count": 1 } }, "src/screens/Moderation/index.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 } }, "src/screens/ModerationInteractionSettings/index.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/screens/Onboarding/StepFinished/ValuePropositionPager.tsx": { + "react-hooks/refs": { + "count": 4 } }, "src/screens/Onboarding/StepFinished/index.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 } }, "src/screens/Onboarding/StepInterests/index.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/require-await": { + "count": 1 + } + }, + "src/screens/Onboarding/StepProfile/index.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/screens/Onboarding/StepSuggestedStarterpacks/StarterPackCard.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/screens/Onboarding/StepSuggestedStarterpacks/index.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 } }, "src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 4 } }, "src/screens/PostThread/index.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 3 + }, "react-hooks/preserve-manual-memoization": { "count": 1 + }, + "react-hooks/refs": { + "count": 4 } }, "src/screens/Profile/Header/EditProfileDialog.tsx": { "@typescript-eslint/no-explicit-any": { "count": 3 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 } }, "src/screens/Profile/Header/ProfileHeaderLabeler.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 3 } }, "src/screens/Profile/Header/Shell.tsx": { @@ -395,29 +1350,164 @@ "count": 1 } }, + "src/screens/Profile/KnownFollowers.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 2 + } + }, "src/screens/Profile/Sections/Feed.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 } }, "src/screens/Profile/components/GermButton.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/screens/Profile/components/ProfileFeedHeader.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 5 + } + }, + "src/screens/ProfileList/FeedSection.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/screens/ProfileList/components/Header.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 3 + } + }, + "src/screens/ProfileList/components/MoreOptionsMenu.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 5 + } + }, + "src/screens/ProfileList/components/SubscribeMenu.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 2 + } + }, + "src/screens/ProfileList/index.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/screens/SavedFeeds.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 2 + } + }, + "src/screens/Search/Shell.tsx": { + "react-hooks/refs": { + "count": 4 + } + }, + "src/screens/Search/modules/ExploreSuggestedAccounts.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/screens/Search/modules/ExploreTrendingTopics.tsx": { + "react-hooks/purity": { + "count": 2 + } + }, + "src/screens/Search/modules/ExploreTrendingVideos.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/screens/Settings/AboutSettings.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/screens/Settings/AppPasswords.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/screens/Settings/AutomationLabelSettings.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 } }, "src/screens/Settings/FindContactsSettings.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-floating-promises": { + "count": 3 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/require-await": { + "count": 1 + } + }, + "src/screens/Settings/InterestsSettings.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/require-await": { + "count": 1 + } + }, + "src/screens/Settings/components/ChangeHandleDialog.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 4 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 } }, "src/screens/Settings/components/ChangePasswordDialog.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + } + }, + "src/screens/Settings/components/CopyButton.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 } }, "src/screens/Settings/components/DeactivateAccountDialog.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 } }, "src/screens/Settings/components/DeleteAccountDialog.tsx": { @@ -425,14 +1515,114 @@ "count": 2 } }, + "src/screens/Settings/components/DisableEmail2FADialog.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 4 + } + }, + "src/screens/Settings/components/OTAInfo.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/screens/Signup/StepCaptcha/CaptchaWebView.tsx": { + "react-hooks/purity": { + "count": 1 + } + }, + "src/screens/Signup/StepHandle/index.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, "src/screens/Signup/StepInfo/Policies.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 } }, + "src/screens/Signup/StepInfo/index.tsx": { + "react-hooks/refs": { + "count": 3 + } + }, "src/screens/SignupQueued.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + }, + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/screens/StarterPack/StarterPackLandingScreen.tsx": { + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/screens/StarterPack/StarterPackScreen.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 + }, + "@typescript-eslint/require-await": { + "count": 1 + } + }, + "src/screens/StarterPack/Wizard/StepFeeds.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/screens/StarterPack/Wizard/StepProfiles.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/screens/StarterPack/Wizard/index.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "@typescript-eslint/require-await": { + "count": 1 + } + }, + "src/screens/Topic.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/state/a11y.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/cache/profile-shadow.ts": { + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/state/cache/thread-mutes.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 } }, "src/state/cache/types.ts": { @@ -443,31 +1633,213 @@ "src/state/feed-feedback.tsx": { "@typescript-eslint/no-explicit-any": { "count": 3 + }, + "react-hooks/refs": { + "count": 2 + } + }, + "src/state/gallery.ts": { + "@typescript-eslint/prefer-promise-reject-errors": { + "count": 1 } }, "src/state/messages/events/agent.ts": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-floating-promises": { + "count": 4 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + } + }, + "src/state/messages/message-drafts.tsx": { + "react-hooks/refs": { + "count": 1 } }, "src/state/persisted/index.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 } }, "src/state/persisted/index.web.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 4 } }, "src/state/persisted/util.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/state/preferences/alt-text-required.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/preferences/autoplay.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/preferences/disable-haptics.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/preferences/external-embeds-prefs.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/preferences/hidden-posts.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/preferences/in-app-browser.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/preferences/kawaii.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/state/preferences/languages.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/preferences/large-alt-badge.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/preferences/subtitles.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/preferences/trending.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/preferences/used-starter-packs.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/queries/activity-subscriptions.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/queries/actor-autocomplete.ts": { + "react-hooks/immutability": { + "count": 2 + } + }, + "src/state/queries/app-passwords.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + } + }, + "src/state/queries/bookmarks/useBookmarkMutation.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + } + }, + "src/state/queries/bookmarks/useBookmarksQuery.ts": { + "@typescript-eslint/require-await": { + "count": 2 + } + }, + "src/state/queries/explore-feed-previews.tsx": { + "react-hooks/refs": { + "count": 4 + } + }, + "src/state/queries/feed.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/queries/handle.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/queries/list-memberships.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + } + }, + "src/state/queries/list.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 7 + } + }, + "src/state/queries/messages/accept-conversation.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + } + }, + "src/state/queries/messages/update-all-read.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 3 + } + }, + "src/state/queries/my-lists.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 2 } }, "src/state/queries/notifications/feed.ts": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + } + }, + "src/state/queries/notifications/unread.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 4 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 4 + }, + "react-hooks/refs": { + "count": 1 } }, "src/state/queries/nuxs/definitions.ts": { @@ -478,109 +1850,386 @@ "src/state/queries/pinned-post.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-floating-promises": { + "count": 2 } }, "src/state/queries/post-feed.ts": { "@typescript-eslint/no-explicit-any": { "count": 3 + }, + "@typescript-eslint/no-floating-promises": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 3 } }, "src/state/queries/postgate/index.ts": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 3 + }, + "@typescript-eslint/require-await": { + "count": 2 + } + }, + "src/state/queries/preferences/index.ts": { + "react-hooks/immutability": { + "count": 1 + } + }, + "src/state/queries/preferences/useThreadPreferences.ts": { + "react-hooks/refs": { + "count": 2 } }, "src/state/queries/search-posts.ts": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + } + }, + "src/state/queries/starter-packs.ts": { + "@typescript-eslint/require-await": { + "count": 1 + }, + "react-hooks/immutability": { + "count": 1 + } + }, + "src/state/queries/suggested-follows.ts": { + "@typescript-eslint/no-unused-vars": { + "count": 1 } }, "src/state/queries/threadgate/index.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-floating-promises": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + }, + "@typescript-eslint/require-await": { + "count": 3 } }, "src/state/queries/util.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 } }, "src/state/session/agent.ts": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/require-await": { + "count": 1 + } + }, + "src/state/shell/color-mode.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 + } + }, + "src/state/shell/composer/index.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/shell/onboarding.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 5 } }, "src/state/shell/progress-guide.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-floating-promises": { + "count": 4 + } + }, + "src/state/shell/reminders.ts": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/state/shell/tick-every-minute.tsx": { + "react-hooks/purity": { + "count": 1 + } + }, + "src/storage/archive/index.ts": { + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 } }, "src/storage/index.ts": { "@typescript-eslint/no-explicit-any": { "count": 8 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/view/com/auth/SplashScreen.web.tsx": { + "react-hooks/set-state-in-effect": { + "count": 1 } }, "src/view/com/composer/Composer.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 4 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + }, + "react-hooks/immutability": { + "count": 2 + }, "react-hooks/preserve-manual-memoization": { "count": 3 + }, + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/view/com/composer/SelectMediaButton.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/view/com/composer/drafts/DraftsButton.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 } }, "src/view/com/composer/drafts/state/queries.ts": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + } + }, + "src/view/com/composer/drafts/state/storage.ts": { + "@typescript-eslint/require-await": { + "count": 3 + } + }, + "src/view/com/composer/photos/EditImageDialog.web.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/view/com/composer/photos/Gallery.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 } }, "src/view/com/composer/photos/OpenCameraBtn.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/view/com/composer/select-language/SuggestedLanguage.tsx": { + "react-hooks/refs": { + "count": 1 + }, + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/view/com/composer/text-input/TextInput.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/view/com/composer/text-input/TextInput.web.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "react-hooks/refs": { + "count": 1 + } + }, + "src/view/com/composer/text-input/web/Autocomplete.tsx": { + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + }, + "react-hooks/set-state-in-effect": { + "count": 1 + } + }, + "src/view/com/composer/videos/pickVideo.web.ts": { + "@typescript-eslint/no-misused-promises": { + "count": 1 } }, "src/view/com/feeds/ComposerPrompt.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-floating-promises": { + "count": 2 + } + }, + "src/view/com/feeds/FeedPage.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 } }, "src/view/com/feeds/ProfileFeedgens.tsx": { "@typescript-eslint/no-explicit-any": { "count": 3 + }, + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 } }, "src/view/com/lists/ListMembers.tsx": { "@typescript-eslint/no-explicit-any": { "count": 3 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 } }, "src/view/com/lists/MyLists.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 6 } }, "src/view/com/lists/ProfileLists.tsx": { "@typescript-eslint/no-explicit-any": { "count": 3 + }, + "@typescript-eslint/no-floating-promises": { + "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + } + }, + "src/view/com/modals/Modal.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/require-await": { + "count": 1 + }, + "react-hooks/refs": { + "count": 1 } }, "src/view/com/notifications/NotificationFeed.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-floating-promises": { + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 6 + }, + "react-hooks/set-state-in-effect": { + "count": 1 } }, "src/view/com/notifications/NotificationFeedItem.tsx": { "@typescript-eslint/no-explicit-any": { "count": 3 + }, + "@typescript-eslint/no-misused-promises": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 } }, "src/view/com/pager/Pager.tsx": { "@typescript-eslint/no-explicit-any": { "count": 4 + }, + "react-hooks/refs": { + "count": 1 } }, "src/view/com/pager/Pager.web.tsx": { + "react-hooks/immutability": { + "count": 1 + }, "react-hooks/preserve-manual-memoization": { "count": 1 + }, + "react-hooks/refs": { + "count": 1 } }, "src/view/com/pager/PagerWithHeader.tsx": { @@ -593,14 +2242,46 @@ "count": 2 } }, + "src/view/com/pager/TabBar.tsx": { + "react-hooks/immutability": { + "count": 1 + } + }, "src/view/com/pager/TabBar.web.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 4 + } + }, + "src/view/com/post-thread/PostLikedBy.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 2 + } + }, + "src/view/com/post-thread/PostQuotes.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 2 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/view/com/post-thread/PostRepostedBy.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 2 } }, "src/view/com/posts/FeedShutdownMsg.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 } }, "src/view/com/posts/PostFeed.tsx": { @@ -611,16 +2292,47 @@ "src/view/com/posts/PostFeedErrorMessage.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 8 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 9 + } + }, + "src/view/com/profile/ProfileFollowers.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 2 + } + }, + "src/view/com/profile/ProfileFollows.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 2 } }, "src/view/com/profile/ProfileMenu.tsx": { "@typescript-eslint/no-explicit-any": { "count": 6 + }, + "@typescript-eslint/no-floating-promises": { + "count": 4 + }, + "@typescript-eslint/no-misused-promises": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 6 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 12 } }, "src/view/com/testing/TestCtrls.e2e.tsx": { "@typescript-eslint/no-explicit-any": { - "count": 2 + "count": 1 + }, + "@typescript-eslint/no-misused-promises": { + "count": 9 } }, "src/view/com/util/EmptyState.tsx": { @@ -631,16 +2343,36 @@ "src/view/com/util/ErrorBoundary.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 } }, "src/view/com/util/EventStopper.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 } }, "src/view/com/util/Link.tsx": { "@typescript-eslint/no-explicit-any": { "count": 2 + }, + "@typescript-eslint/no-misused-promises": { + "count": 2 + } + }, + "src/view/com/util/LoadingPlaceholder.tsx": { + "react-hooks/purity": { + "count": 1 } }, "src/view/com/util/MainScrollProvider.tsx": { @@ -648,9 +2380,22 @@ "count": 2 } }, + "src/view/com/util/UserAvatar.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 3 + } + }, + "src/view/com/util/UserBanner.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 3 + } + }, "src/view/com/util/ViewSelector.tsx": { "@typescript-eslint/no-explicit-any": { "count": 6 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 } }, "src/view/com/util/Views.tsx": { @@ -658,14 +2403,101 @@ "count": 1 } }, + "src/view/com/util/Views.web.tsx": { + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/view/com/util/forms/Button.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, "src/view/screens/Debug.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 4 + } + }, + "src/view/screens/Feeds.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 3 + }, + "@typescript-eslint/no-misused-promises": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/view/screens/Home.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 1 + } + }, + "src/view/screens/ModerationBlockedAccounts.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 3 + } + }, + "src/view/screens/ModerationMutedAccounts.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 1 + } + }, + "src/view/screens/Notifications.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 3 + } + }, + "src/view/screens/Storybook/ListContained.tsx": { + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 2 + } + }, + "src/view/screens/Storybook/Storybook.tsx": { + "@typescript-eslint/no-misused-promises": { + "count": 1 + } + }, + "src/view/shell/Drawer.tsx": { + "@typescript-eslint/no-floating-promises": { + "count": 2 } }, "src/view/shell/createNativeStackNavigatorWithAuth.tsx": { "@typescript-eslint/no-explicit-any": { "count": 1 + }, + "@typescript-eslint/no-unsafe-call": { + "count": 1 + }, + "react-hooks/refs": { + "count": 13 + } + }, + "src/view/shell/desktop/Search.tsx": { + "@typescript-eslint/no-unsafe-call": { + "count": 3 + }, + "@typescript-eslint/no-unsafe-member-access": { + "count": 3 + }, + "react-hooks/refs": { + "count": 3 + } + }, + "src/view/shell/index.web.tsx": { + "react-hooks/set-state-in-effect": { + "count": 1 } } } \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs index 50ab8e5da4..c8addf66ae 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -134,11 +134,10 @@ export default defineConfig( 'react-native/no-inline-styles': 'off', ...reactNativeA11y.configs.all.rules, 'react-compiler/react-compiler': 'warn', - // TODO: Fix these and set to error - 'react-hooks/set-state-in-effect': 'warn', - 'react-hooks/purity': 'warn', - 'react-hooks/refs': 'warn', - 'react-hooks/immutability': 'warn', + 'react-hooks/set-state-in-effect': 'error', + 'react-hooks/purity': 'error', + 'react-hooks/refs': 'error', + 'react-hooks/immutability': 'error', /** * Import sorting @@ -235,9 +234,8 @@ export default defineConfig( }, ], /** - * Maintain previous behavior - these are stricter in typescript-eslint - * v8 `warn` ones are probably worth fixing. `off` ones are a bit too - * nit-picky + * Maintain previous behavior via eslint-suppressions.json - these are + * stricter in typescript-eslint v8. `off` ones are a bit too nit-picky. */ '@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/ban-ts-comment': 'off', @@ -247,18 +245,18 @@ export default defineConfig( '@typescript-eslint/unbound-method': 'off', '@typescript-eslint/no-unsafe-argument': 'off', '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/no-unsafe-member-access': 'warn', - '@typescript-eslint/no-unsafe-call': 'warn', - '@typescript-eslint/no-floating-promises': 'warn', - '@typescript-eslint/no-misused-promises': 'warn', - '@typescript-eslint/require-await': 'warn', - '@typescript-eslint/no-unsafe-enum-comparison': 'warn', - '@typescript-eslint/no-unnecessary-type-assertion': 'warn', - '@typescript-eslint/no-redundant-type-constituents': 'warn', - '@typescript-eslint/no-duplicate-type-constituents': 'warn', - '@typescript-eslint/no-base-to-string': 'warn', - '@typescript-eslint/prefer-promise-reject-errors': 'warn', - '@typescript-eslint/await-thenable': 'warn', + '@typescript-eslint/no-unsafe-member-access': 'error', + '@typescript-eslint/no-unsafe-call': 'error', + '@typescript-eslint/no-floating-promises': 'error', + '@typescript-eslint/no-misused-promises': 'error', + '@typescript-eslint/require-await': 'error', + '@typescript-eslint/no-unsafe-enum-comparison': 'error', + '@typescript-eslint/no-unnecessary-type-assertion': 'error', + '@typescript-eslint/no-redundant-type-constituents': 'error', + '@typescript-eslint/no-duplicate-type-constituents': 'error', + '@typescript-eslint/no-base-to-string': 'error', + '@typescript-eslint/prefer-promise-reject-errors': 'error', + '@typescript-eslint/await-thenable': 'error', 'no-restricted-imports': [ 'error', diff --git a/src/components/Toast/Toast.tsx b/src/components/Toast/Toast.tsx index ac5bc4889a..3e11cf051e 100644 --- a/src/components/Toast/Toast.tsx +++ b/src/components/Toast/Toast.tsx @@ -8,8 +8,10 @@ import { type UninheritableButtonProps, } from '#/components/Button' import {CircleCheck_Stroke2_Corner0_Rounded as CircleCheck} from '#/components/icons/CircleCheck' -import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo' -import {CircleInfo_Stroke2_Corner0_Rounded as ErrorIcon} from '#/components/icons/CircleInfo' +import { + CircleInfo_Stroke2_Corner0_Rounded as CircleInfo, + CircleInfo_Stroke2_Corner0_Rounded as ErrorIcon, +} from '#/components/icons/CircleInfo' import {type Props as SVGIconProps} from '#/components/icons/common' import {Warning_Stroke2_Corner0_Rounded as WarningIcon} from '#/components/icons/Warning' import {dismiss} from '#/components/Toast/sonner' diff --git a/src/lib/hooks/useTimeAgo.ts b/src/lib/hooks/useTimeAgo.ts index 67398ec547..ffc808a91f 100644 --- a/src/lib/hooks/useTimeAgo.ts +++ b/src/lib/hooks/useTimeAgo.ts @@ -58,12 +58,12 @@ export function dateDiff( if (diffSeconds < NOW) { diff = { value: 0, - unit: 'now' as DateDiff['unit'], + unit: 'now', } } else if (diffSeconds < MINUTE) { diff = { value: diffSeconds, - unit: 'second' as DateDiff['unit'], + unit: 'second', } } else if (diffSeconds < HOUR) { const value = @@ -72,7 +72,7 @@ export function dateDiff( : Math.floor(diffSeconds / MINUTE) diff = { value, - unit: 'minute' as DateDiff['unit'], + unit: 'minute', } } else if (diffSeconds < DAY) { const value = @@ -81,7 +81,7 @@ export function dateDiff( : Math.floor(diffSeconds / HOUR) diff = { value, - unit: 'hour' as DateDiff['unit'], + unit: 'hour', } } else if (diffSeconds < MONTH_30) { const value = @@ -90,7 +90,7 @@ export function dateDiff( : Math.floor(diffSeconds / DAY) diff = { value, - unit: 'day' as DateDiff['unit'], + unit: 'day', } } else { const value = @@ -99,7 +99,7 @@ export function dateDiff( : Math.floor(diffSeconds / MONTH_30) diff = { value, - unit: 'month' as DateDiff['unit'], + unit: 'month', } } diff --git a/src/lib/routes/links.ts b/src/lib/routes/links.ts index 908db7cba7..c87ccb5a39 100644 --- a/src/lib/routes/links.ts +++ b/src/lib/routes/links.ts @@ -19,8 +19,8 @@ export function makeProfileLink( export function makeCustomFeedLink( did: string, rkey: string, - segment?: string | undefined, - feedCacheKey?: 'discover' | 'explore' | undefined, + segment?: string, + feedCacheKey?: 'discover' | 'explore', ) { return ( [`/profile`, did, 'feed', rkey, ...(segment ? [segment] : [])].join('/') + diff --git a/src/screens/Settings/AppIconSettings/index.tsx b/src/screens/Settings/AppIconSettings/index.tsx index 183e161a8d..2e716a219f 100644 --- a/src/screens/Settings/AppIconSettings/index.tsx +++ b/src/screens/Settings/AppIconSettings/index.tsx @@ -129,7 +129,7 @@ function getAppIconName(icon: string | false): DynamicAppIcon.IconName { if (!icon || icon === 'DEFAULT') { return 'default_light' } else { - return icon as DynamicAppIcon.IconName + return icon } } @@ -151,7 +151,7 @@ function Group({ values={[value]} maxSelections={1} onChange={vals => { - if (vals[0]) onChange(vals[0] as DynamicAppIcon.IconName) + if (vals[0]) onChange(vals[0]) }}> {children} diff --git a/src/screens/VideoFeed/components/Scrubber.tsx b/src/screens/VideoFeed/components/Scrubber.tsx index 85bd4fddfd..acaf02453c 100644 --- a/src/screens/VideoFeed/components/Scrubber.tsx +++ b/src/screens/VideoFeed/components/Scrubber.tsx @@ -23,8 +23,7 @@ import { import {useEventListener} from 'expo' import {type VideoPlayer} from 'expo-video' -import {tokens} from '#/alf' -import {atoms as a} from '#/alf' +import {atoms as a, tokens} from '#/alf' import {formatTime} from '#/components/Post/Embed/VideoEmbed/VideoEmbedInner/web-controls/utils' import {Text} from '#/components/Typography' diff --git a/src/state/queries/notifications/feed.ts b/src/state/queries/notifications/feed.ts index 57d83cb5bb..ca885107d8 100644 --- a/src/state/queries/notifications/feed.ts +++ b/src/state/queries/notifications/feed.ts @@ -298,7 +298,7 @@ export function* findAllPostsInQueryData( if (AppBskyFeedDefs.isPostView(item.subject)) { const quotedPost = getEmbeddedPost(item.subject?.embed) if (quotedPost && didOrHandleUriMatches(atUri, quotedPost)) { - yield embedViewRecordToPostView(quotedPost!) + yield embedViewRecordToPostView(quotedPost) } } } diff --git a/src/state/queries/nuxs/util.ts b/src/state/queries/nuxs/util.ts index ef323b422e..dea35a9166 100644 --- a/src/state/queries/nuxs/util.ts +++ b/src/state/queries/nuxs/util.ts @@ -34,7 +34,7 @@ export function parseAppNux(nux: AppBskyActorDefs.Nux): AppNux | undefined { export function serializeAppNux(nux: AppNux): AppBskyActorDefs.Nux { const {data, ...rest} = nux - const schema = NuxSchemas[nux.id as Nux] + const schema = NuxSchemas[nux.id] const result: AppBskyActorDefs.Nux = { ...rest, diff --git a/src/state/queries/suggested-follows.ts b/src/state/queries/suggested-follows.ts index c1ec4a12a7..7197eb2980 100644 --- a/src/state/queries/suggested-follows.ts +++ b/src/state/queries/suggested-follows.ts @@ -85,7 +85,7 @@ export function useSuggestedFollowsByActorWithDismiss({ const profiles = useMemo(() => { return (data?.suggestions ?? []).map(profile => ({ - actor: profile as bsky.profile.AnyProfileView, + actor: profile, recId: data?.recId, })) }, [data?.suggestions, data?.recId]) diff --git a/src/state/queries/usePostThread/traversal.ts b/src/state/queries/usePostThread/traversal.ts index 889c208c35..81abd958fb 100644 --- a/src/state/queries/usePostThread/traversal.ts +++ b/src/state/queries/usePostThread/traversal.ts @@ -196,7 +196,7 @@ export function sortAndAnnotateThreadItems( * `repliesSeenCounter` later on, since `repliesSeenCounter` * is 1-indexed and `replyIndex` is 0-indexed. */ - childMetadata!.replyIndex = + childMetadata.replyIndex = childParentMetadata.repliesSeenCounter } diff --git a/src/view/com/composer/drafts/state/api.ts b/src/view/com/composer/drafts/state/api.ts index 1099c1a0fd..8f178d5282 100644 --- a/src/view/com/composer/drafts/state/api.ts +++ b/src/view/com/composer/drafts/state/api.ts @@ -470,11 +470,11 @@ export async function draftToComposerPosts( height, mime: 'image/jpeg', }, - } as ComposerImage + } satisfies ComposerImage }) const images = (await Promise.all(imagePromises)).filter( - (img): img is ComposerImage => img !== null, + (img): img is NonNullable => img !== null, ) if (images.length > 0) { embed.media = {type: 'images', images} @@ -511,7 +511,7 @@ export async function draftToComposerPosts( tinygif: mediaObject, preview: mediaObject, }, - } as Gif, + }, alt: gifData.alt, } break diff --git a/src/view/com/testing/TestCtrls.e2e.tsx b/src/view/com/testing/TestCtrls.e2e.tsx index b01651d7b1..2110c9540e 100644 --- a/src/view/com/testing/TestCtrls.e2e.tsx +++ b/src/view/com/testing/TestCtrls.e2e.tsx @@ -55,7 +55,7 @@ export function TestCtrls() { accessibilityLabel="Text input field" accessibilityHint="Enter proxy header" testID="e2eProxyHeaderInput" - onChangeText={val => setProxyHeader(val as any)} + onChangeText={val => setProxyHeader(val)} autoComplete="off" autoCorrect={false} autoCapitalize="none" diff --git a/src/view/com/util/PressableWithHover.tsx b/src/view/com/util/PressableWithHover.tsx index f4006a5268..a4a2d194fd 100644 --- a/src/view/com/util/PressableWithHover.tsx +++ b/src/view/com/util/PressableWithHover.tsx @@ -3,9 +3,9 @@ import { Pressable, type PressableProps, type StyleProp, + type View, type ViewStyle, } from 'react-native' -import {type View} from 'react-native' import {addStyle} from '#/lib/styles' import {useInteractionState} from '#/components/hooks/useInteractionState' diff --git a/src/view/shell/createNativeStackNavigatorWithAuth.tsx b/src/view/shell/createNativeStackNavigatorWithAuth.tsx index 4191f94176..a23ed693ec 100644 --- a/src/view/shell/createNativeStackNavigatorWithAuth.tsx +++ b/src/view/shell/createNativeStackNavigatorWithAuth.tsx @@ -171,7 +171,7 @@ function NativeStackNavigator({ } // Evicted screens get a lightweight placeholder instead of their full tree - finalDescriptors = {} as typeof descriptors + finalDescriptors = {} for (const key in descriptors) { if (mountSet.has(key)) { finalDescriptors[key] = descriptors[key] From 4367b9d047c8a1175aa889b7295a4591ee89c8b2 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Wed, 3 Jun 2026 23:01:54 +0300 Subject: [PATCH 21/31] [Android] Fix horizontal swipes being cancelled when leaving bounds (#10712) --- src/view/shell/BlockDrawerGesture.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/view/shell/BlockDrawerGesture.tsx b/src/view/shell/BlockDrawerGesture.tsx index bae9a8db82..93ef18cfae 100644 --- a/src/view/shell/BlockDrawerGesture.tsx +++ b/src/view/shell/BlockDrawerGesture.tsx @@ -4,6 +4,8 @@ import {Gesture, GestureDetector} from 'react-native-gesture-handler' export function BlockDrawerGesture({children}: {children: React.ReactNode}) { const drawerGesture = useContext(DrawerGestureContext) ?? Gesture.Native() // noop for web - const scrollGesture = Gesture.Native().blocksExternalGesture(drawerGesture) + let scrollGesture = Gesture.Native() + .shouldCancelWhenOutside(false) // for some reason defaults to true on Android + .blocksExternalGesture(drawerGesture) return {children} } From f99837040e0eddecb22c54c855d30297d8e0e6c4 Mon Sep 17 00:00:00 2001 From: DS Boyce <260543580+ds-boyce@users.noreply.github.com> Date: Wed, 3 Jun 2026 13:21:13 -0700 Subject: [PATCH 22/31] Compile i18n before running lint (#10711) --- .github/workflows/bundle-deploy-eas-update.yml | 12 ++++++------ .github/workflows/pull-request-comment.yml | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/bundle-deploy-eas-update.yml b/.github/workflows/bundle-deploy-eas-update.yml index 983494dd18..5f1f0a4e28 100644 --- a/.github/workflows/bundle-deploy-eas-update.yml +++ b/.github/workflows/bundle-deploy-eas-update.yml @@ -71,18 +71,18 @@ jobs: profile: ${{ inputs.channel || 'testflight' }} previous-commit-tag: ${{ inputs.runtimeVersion }} - - name: Lint check - run: pnpm lint - - - name: Prettier check - run: pnpm prettier --check . - - name: 🔤 Compile translations run: pnpm intl:build 2>&1 | tee i18n.log - name: Check for i18n compilation errors run: if grep -q "invalid syntax" "i18n.log"; then echo "\n\nFound compilation errors!\n\n" && exit 1; else echo "\n\nNo compilation errors!\n\n"; fi + - name: Lint check + run: pnpm lint + + - name: Prettier check + run: pnpm prettier --check . + - name: Type check run: pnpm typecheck diff --git a/.github/workflows/pull-request-comment.yml b/.github/workflows/pull-request-comment.yml index a497a5625d..8ede462392 100644 --- a/.github/workflows/pull-request-comment.yml +++ b/.github/workflows/pull-request-comment.yml @@ -128,15 +128,15 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - - name: Lint check - run: pnpm lint - - name: 🔤 Compile translations run: pnpm intl:build 2>&1 | tee i18n.log - name: Check for i18n compilation errors run: if grep -q "invalid syntax" "i18n.log"; then echo "\n\nFound compilation errors!\n\n" && exit 1; else echo "\n\nNo compilation errors!\n\n"; fi + - name: Lint check + run: pnpm lint + - name: Type check run: pnpm typecheck From 0a5a9941705ddf1255ffaa93c5c1409c4873902e Mon Sep 17 00:00:00 2001 From: Spence Pope Date: Wed, 3 Jun 2026 16:38:36 -0400 Subject: [PATCH 23/31] Fix image peek in carousels for quote posts (#10688) Co-authored-by: Eric Bailey --- src/components/Post/Embed/ImageEmbed.tsx | 9 +++------ src/components/images/Gallery/index.tsx | 21 ++++++++++++++------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/components/Post/Embed/ImageEmbed.tsx b/src/components/Post/Embed/ImageEmbed.tsx index ccd1ceb270..2c6bb6c5de 100644 --- a/src/components/Post/Embed/ImageEmbed.tsx +++ b/src/components/Post/Embed/ImageEmbed.tsx @@ -87,8 +87,7 @@ export function ImageEmbed({ crop={ rest.viewContext === PostEmbedViewContext.ThreadHighlighted ? 'none' - : rest.viewContext === - PostEmbedViewContext.FeedEmbedRecordWithMedia + : rest.isWithinQuote ? 'square' : 'constrained' } @@ -103,10 +102,7 @@ export function ImageEmbed({ onPress(0, [containerRef], [dims]) } onPressIn={() => onPressIn(0)} - hideBadge={ - rest.viewContext === - PostEmbedViewContext.FeedEmbedRecordWithMedia - } + hideBadge={rest.isWithinQuote} /> @@ -121,6 +117,7 @@ export function ImageEmbed({ onPress={onPress} onPressIn={onPressIn} viewContext={rest.viewContext} + isWithinQuote={rest.isWithinQuote} /> ) diff --git a/src/components/images/Gallery/index.tsx b/src/components/images/Gallery/index.tsx index f4ffcd7159..fe2b63e606 100644 --- a/src/components/images/Gallery/index.tsx +++ b/src/components/images/Gallery/index.tsx @@ -54,6 +54,7 @@ interface GalleryProps { ) => void onPressIn?: (index: number) => void viewContext?: PostEmbedViewContext + isWithinQuote?: boolean } const Context = createContext<{ @@ -97,6 +98,7 @@ export function Gallery({ onPress, onPressIn, viewContext, + isWithinQuote, }: GalleryProps) { const {t: l} = useLingui() const ax = useAnalytics() @@ -104,14 +106,21 @@ export function Gallery({ const largeAltBadge = useLargeAltBadgeEnabled() const bps = useBreakpoints() const window = useWindowDimensions() - const isWithinQuote = - viewContext === PostEmbedViewContext.FeedEmbedRecordWithMedia const isWithinChat = viewContext === PostEmbedViewContext.ChatMessage const hideBadges = isWithinQuote const contentHeight = useMemo(() => { if (isWithinChat) { return 120 } + if (isWithinQuote) { + if (bps.gtMobile) { + return 220 + } else if (bps.gtPhone) { + return 190 + } else { + return 150 + } + } if (bps.gtMobile) { return 300 } else if (bps.gtPhone) { @@ -119,7 +128,7 @@ export function Gallery({ } else { return 200 } - }, [bps, isWithinChat]) + }, [bps, isWithinChat, isWithinQuote]) /* * Container overflow styles @@ -220,7 +229,7 @@ export function Gallery({ crop={ viewContext === PostEmbedViewContext.ThreadHighlighted ? 'none' - : viewContext === PostEmbedViewContext.FeedEmbedRecordWithMedia + : isWithinQuote ? 'square' : 'constrained' } @@ -229,9 +238,7 @@ export function Gallery({ onPress?.(index, [containerRef], [dims]) } onPressIn={() => onPressIn?.(index)} - hideBadge={ - viewContext === PostEmbedViewContext.FeedEmbedRecordWithMedia - } + hideBadge={isWithinQuote} /> ))}
From 57ae26fcaabfb3e9bcbb75c74ca3726975cb82fd Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Wed, 3 Jun 2026 23:57:45 +0300 Subject: [PATCH 24/31] Make extra sure the drawer gesture doesn't accidentally trigger on Android (#10713) --- src/view/shell/index.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/view/shell/index.tsx b/src/view/shell/index.tsx index 827ab092c4..9b215d9f13 100644 --- a/src/view/shell/index.tsx +++ b/src/view/shell/index.tsx @@ -174,8 +174,15 @@ function DrawerLayout({children}: {children: React.ReactNode}) { // so fail the drawer gesture immediately. .failOffsetX(-1) // Don't rush declaring that a movement to the right - // is a drawer swipe. It could be a vertical scroll. - .activeOffsetX(5) + // is a drawer swipe. It could be a vertical scroll, or a + // slow horizontal carousel swipe. On Android a child + // `blocksExternalGesture` only holds the drawer off once the + // native scroll has activated, which on a slow swipe doesn't + // happen until movement crosses the native touch slop + // (~8-16px). Activating the drawer below that lets a slow + // carousel swipe pop the drawer open (APP-2119), so require + // more travel before claiming on Android. + .activeOffsetX(IS_ANDROID ? 20 : 5) ) } } else { From 153772b760ef1f67220efe40ca6b4c66d33af71b Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Thu, 4 Jun 2026 01:03:11 +0300 Subject: [PATCH 25/31] `expo-image` tweaks (#10710) --- src/components/ContextMenu/index.tsx | 1 + .../pager/ImageItem/ImageItem.ios.tsx | 1 + src/components/Lightbox/pager/ImagePager.tsx | 4 ++++ src/components/MediaPreview.tsx | 1 + .../Post/Embed/ExternalEmbed/index.tsx | 1 + .../Post/Embed/StandardSiteEmbed/index.tsx | 1 + .../contacts/FindContactsBannerNUX.tsx | 1 + .../contacts/components/HeroImage.tsx | 1 + .../dialogs/nuxs/ActivitySubscriptions.tsx | 1 + .../dialogs/nuxs/BookmarksAnnouncement.tsx | 1 + .../dialogs/nuxs/DraftsAnnouncement.tsx | 1 + .../dialogs/nuxs/FindContactsAnnouncement.tsx | 1 + .../nuxs/InitialVerificationAnnouncement.tsx | 2 ++ .../dialogs/nuxs/LiveNowBetaDialog.tsx | 1 + src/components/images/AutoSizedImage.tsx | 1 + src/components/images/Gallery/index.tsx | 1 + src/components/images/ImageLayoutGridItem.tsx | 1 + .../verification/VerifierDialog.tsx | 1 + .../components/LiveEventFeedCardCompact.tsx | 1 + .../components/LiveEventFeedCardWide.tsx | 1 + .../liveNow/components/LinkPreview.tsx | 1 + .../liveNow/components/LiveStatusDialog.tsx | 1 + .../StepFinished/ValuePropositionPager.tsx | 2 ++ src/screens/Profile/components/GermButton.tsx | 1 + src/view/com/composer/ComposerReplyTo.tsx | 20 +++++++++---------- src/view/com/composer/photos/Gallery.tsx | 1 + src/view/com/util/UserAvatar.tsx | 1 + src/view/com/util/UserBanner.tsx | 2 ++ 28 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/components/ContextMenu/index.tsx b/src/components/ContextMenu/index.tsx index 8d3d39a749..51bf83309f 100644 --- a/src/components/ContextMenu/index.tsx +++ b/src/components/ContextMenu/index.tsx @@ -499,6 +499,7 @@ function TriggerClone({ accessibilityLabel={label} accessibilityHint={_(msg`The subject of the context menu`)} accessibilityIgnoresInvertColors={false} + cachePolicy="none" /> ) diff --git a/src/components/Lightbox/pager/ImageItem/ImageItem.ios.tsx b/src/components/Lightbox/pager/ImageItem/ImageItem.ios.tsx index c0bb99c89e..19373cbe1a 100644 --- a/src/components/Lightbox/pager/ImageItem/ImageItem.ios.tsx +++ b/src/components/Lightbox/pager/ImageItem/ImageItem.ios.tsx @@ -246,6 +246,7 @@ const ImageItem = ({ } } cachePolicy="memory" + useAppleWebpCodec /> diff --git a/src/components/Lightbox/pager/ImagePager.tsx b/src/components/Lightbox/pager/ImagePager.tsx index 1c8836a0fd..7b8815f276 100644 --- a/src/components/Lightbox/pager/ImagePager.tsx +++ b/src/components/Lightbox/pager/ImagePager.tsx @@ -32,6 +32,7 @@ import Animated, { withSpring, type WithSpringConfig, } from 'react-native-reanimated' +import {Image} from 'expo-image' import * as ScreenOrientation from 'expo-screen-orientation' import {type Dimensions} from '#/lib/media/types' @@ -136,6 +137,9 @@ export default function ImageViewRoot({ 'worklet' thumbRects.set({}) })() + requestIdleCallback(() => { + void Image.clearMemoryCache() + }) }, [thumbRects]) useAnimatedReaction( diff --git a/src/components/MediaPreview.tsx b/src/components/MediaPreview.tsx index 9aad6da864..b36705d840 100644 --- a/src/components/MediaPreview.tsx +++ b/src/components/MediaPreview.tsx @@ -129,6 +129,7 @@ export function ImageItem({ contentFit="cover" accessible={true} accessibilityIgnoresInvertColors + useAppleWebpCodec /> {children} diff --git a/src/components/Post/Embed/ExternalEmbed/index.tsx b/src/components/Post/Embed/ExternalEmbed/index.tsx index 43bfbb4747..fe0be2bd25 100644 --- a/src/components/Post/Embed/ExternalEmbed/index.tsx +++ b/src/components/Post/Embed/ExternalEmbed/index.tsx @@ -108,6 +108,7 @@ export const ExternalEmbed = ({ source={{uri: imageUri}} accessibilityIgnoresInvertColors loading="lazy" + useAppleWebpCodec /> ) : undefined} diff --git a/src/components/Post/Embed/StandardSiteEmbed/index.tsx b/src/components/Post/Embed/StandardSiteEmbed/index.tsx index 70fce8ad77..5f7fc1f5e7 100644 --- a/src/components/Post/Embed/StandardSiteEmbed/index.tsx +++ b/src/components/Post/Embed/StandardSiteEmbed/index.tsx @@ -166,6 +166,7 @@ export const StandardSiteEmbed = ({ source={{uri: imageUri}} accessibilityIgnoresInvertColors loading="lazy" + useAppleWebpCodec /> ) : undefined} diff --git a/src/components/contacts/FindContactsBannerNUX.tsx b/src/components/contacts/FindContactsBannerNUX.tsx index 2997e00d4e..417379fa2b 100644 --- a/src/components/contacts/FindContactsBannerNUX.tsx +++ b/src/components/contacts/FindContactsBannerNUX.tsx @@ -60,6 +60,7 @@ export function FindContactsBannerNUX() { a.self_end, a.mt_sm, ]} + useAppleWebpCodec /> ) diff --git a/src/components/dialogs/nuxs/ActivitySubscriptions.tsx b/src/components/dialogs/nuxs/ActivitySubscriptions.tsx index ed4306459c..318b130414 100644 --- a/src/components/dialogs/nuxs/ActivitySubscriptions.tsx +++ b/src/components/dialogs/nuxs/ActivitySubscriptions.tsx @@ -113,6 +113,7 @@ export function ActivitySubscriptionsNUX() { alt={_( msg`A screenshot of a profile page with a bell icon next to the follow button, indicating the new activity notifications feature.`, )} + useAppleWebpCodec /> diff --git a/src/components/dialogs/nuxs/BookmarksAnnouncement.tsx b/src/components/dialogs/nuxs/BookmarksAnnouncement.tsx index f7e4bf04c6..153130f8ec 100644 --- a/src/components/dialogs/nuxs/BookmarksAnnouncement.tsx +++ b/src/components/dialogs/nuxs/BookmarksAnnouncement.tsx @@ -124,6 +124,7 @@ export function BookmarksAnnouncement() { 'Contains a post that originally appeared in English. Consider translating the post text if it makes sense in your language, and noting that the post was translated from English.', }), )} + useAppleWebpCodec /> diff --git a/src/components/dialogs/nuxs/DraftsAnnouncement.tsx b/src/components/dialogs/nuxs/DraftsAnnouncement.tsx index 79488fe4d9..37b93bda70 100644 --- a/src/components/dialogs/nuxs/DraftsAnnouncement.tsx +++ b/src/components/dialogs/nuxs/DraftsAnnouncement.tsx @@ -101,6 +101,7 @@ export function DraftsAnnouncement() { 'Contains a post that originally appeared in English. Consider translating the post text if it makes sense in your language, and noting that the post was translated from English.', }), )} + useAppleWebpCodec /> diff --git a/src/components/dialogs/nuxs/FindContactsAnnouncement.tsx b/src/components/dialogs/nuxs/FindContactsAnnouncement.tsx index 8fd7d2d2c5..70f29ef157 100644 --- a/src/components/dialogs/nuxs/FindContactsAnnouncement.tsx +++ b/src/components/dialogs/nuxs/FindContactsAnnouncement.tsx @@ -78,6 +78,7 @@ export function FindContactsAnnouncement() { alt={_( msg`An illustration depicting user avatars flowing from a contact book into the Bluesky app`, )} + useAppleWebpCodec /> diff --git a/src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx b/src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx index 85bc29a48f..cbe2555aac 100644 --- a/src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx +++ b/src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx @@ -85,6 +85,7 @@ export function InitialVerificationAnnouncement() { alt={_( msg`An illustration showing that Bluesky selects trusted verifiers, and trusted verifiers in turn verify individual user accounts.`, )} + useAppleWebpCodec /> @@ -119,6 +120,7 @@ export function InitialVerificationAnnouncement() { alt={_( msg`An mockup of a iPhone showing the Bluesky app open to the profile of a verified user with a blue checkmark next to their display name.`, )} + useAppleWebpCodec /> diff --git a/src/components/dialogs/nuxs/LiveNowBetaDialog.tsx b/src/components/dialogs/nuxs/LiveNowBetaDialog.tsx index 49c43a1e41..e389e11175 100644 --- a/src/components/dialogs/nuxs/LiveNowBetaDialog.tsx +++ b/src/components/dialogs/nuxs/LiveNowBetaDialog.tsx @@ -150,6 +150,7 @@ export function LiveNowBetaDialog() { 'Contains a post that originally appeared in English. Consider translating the post text if it makes sense in your language, and noting that the post was translated from English.', }), )} + useAppleWebpCodec /> diff --git a/src/components/images/AutoSizedImage.tsx b/src/components/images/AutoSizedImage.tsx index 79b41311cb..182bfe661b 100644 --- a/src/components/images/AutoSizedImage.tsx +++ b/src/components/images/AutoSizedImage.tsx @@ -142,6 +142,7 @@ export function AutoSizedImage({ } }} loading="lazy" + useAppleWebpCodec /> diff --git a/src/components/images/Gallery/index.tsx b/src/components/images/Gallery/index.tsx index fe2b63e606..9ae677c2d2 100644 --- a/src/components/images/Gallery/index.tsx +++ b/src/components/images/Gallery/index.tsx @@ -480,6 +480,7 @@ function GalleryImage({ height: e.source.height, }) }} + useAppleWebpCodec /> {(hasAlt || isCropped) && !hideBadges ? ( diff --git a/src/components/images/ImageLayoutGridItem.tsx b/src/components/images/ImageLayoutGridItem.tsx index 0c349b6612..d6cbc0aded 100644 --- a/src/components/images/ImageLayoutGridItem.tsx +++ b/src/components/images/ImageLayoutGridItem.tsx @@ -106,6 +106,7 @@ export function GalleryItem({ } }} loading="lazy" + useAppleWebpCodec /> diff --git a/src/components/verification/VerifierDialog.tsx b/src/components/verification/VerifierDialog.tsx index 570441ecd0..e8944024ca 100644 --- a/src/components/verification/VerifierDialog.tsx +++ b/src/components/verification/VerifierDialog.tsx @@ -87,6 +87,7 @@ function Inner({ alt={_( msg`An illustration showing that Bluesky selects trusted verifiers, and trusted verifiers in turn verify individual user accounts.`, )} + useAppleWebpCodec /> diff --git a/src/features/liveEvents/components/LiveEventFeedCardCompact.tsx b/src/features/liveEvents/components/LiveEventFeedCardCompact.tsx index df2bb17f83..9d2f948eb6 100644 --- a/src/features/liveEvents/components/LiveEventFeedCardCompact.tsx +++ b/src/features/liveEvents/components/LiveEventFeedCardCompact.tsx @@ -69,6 +69,7 @@ export function LiveEventFeedCardCompact({ style={[a.absolute, a.inset_0, a.w_full, a.h_full]} contentFit="cover" placeholderContentFit="cover" + useAppleWebpCodec /> setImageLoadError(false)} onError={() => setImageLoadError(true)} + useAppleWebpCodec /> )} {linkMeta && (!linkMeta.image || imageLoadError) && ( diff --git a/src/features/liveNow/components/LiveStatusDialog.tsx b/src/features/liveNow/components/LiveStatusDialog.tsx index 545e8ab943..9e916678f2 100644 --- a/src/features/liveNow/components/LiveStatusDialog.tsx +++ b/src/features/liveNow/components/LiveStatusDialog.tsx @@ -147,6 +147,7 @@ export function LiveStatus({ contentFit="cover" style={[a.absolute, a.inset_0]} accessibilityIgnoresInvertColors + useAppleWebpCodec /> {page === 1 && ( {_(msg`Your )} diff --git a/src/screens/Profile/components/GermButton.tsx b/src/screens/Profile/components/GermButton.tsx index 0bef3a22c3..e37e57edbf 100644 --- a/src/screens/Profile/components/GermButton.tsx +++ b/src/screens/Profile/components/GermButton.tsx @@ -105,6 +105,7 @@ function GermLogo({size}: {size: 'small' | 'large'}) { source={require('../../../../assets/images/germ_logo.webp')} accessibilityIgnoresInvertColors={false} contentFit="cover" + useAppleWebpCodec style={[ a.rounded_full, size === 'large' ? {width: 32, height: 32} : {width: 16, height: 16}, diff --git a/src/view/com/composer/ComposerReplyTo.tsx b/src/view/com/composer/ComposerReplyTo.tsx index a6ef1a344c..bac3e74d31 100644 --- a/src/view/com/composer/ComposerReplyTo.tsx +++ b/src/view/com/composer/ComposerReplyTo.tsx @@ -151,8 +151,8 @@ function ComposerReplyToImages({ )) || (images.length === 2 && ( @@ -160,14 +160,14 @@ function ComposerReplyToImages({ )) || @@ -176,21 +176,21 @@ function ComposerReplyToImages({ @@ -201,28 +201,28 @@ function ComposerReplyToImages({ diff --git a/src/view/com/composer/photos/Gallery.tsx b/src/view/com/composer/photos/Gallery.tsx index 7624b585f6..2cc000019f 100644 --- a/src/view/com/composer/photos/Gallery.tsx +++ b/src/view/com/composer/photos/Gallery.tsx @@ -245,6 +245,7 @@ const GalleryItem = ({ }} accessible={true} accessibilityIgnoresInvertColors + enforceEarlyResizing cachePolicy="none" autoplay={false} contentFit="cover" diff --git a/src/view/com/util/UserAvatar.tsx b/src/view/com/util/UserAvatar.tsx index 420fd0270f..9db4914b21 100644 --- a/src/view/com/util/UserAvatar.tsx +++ b/src/view/com/util/UserAvatar.tsx @@ -330,6 +330,7 @@ let UserAvatar = ({ }} blurRadius={moderation?.blur ? BLUR_AMOUNT : 0} onLoad={onLoad} + useAppleWebpCodec /> )} {!noBorder && } diff --git a/src/view/com/util/UserBanner.tsx b/src/view/com/util/UserBanner.tsx index 8146b7ad9d..033e8c14fe 100644 --- a/src/view/com/util/UserBanner.tsx +++ b/src/view/com/util/UserBanner.tsx @@ -129,6 +129,7 @@ export function UserBanner({ source={{uri: banner}} accessible={true} accessibilityIgnoresInvertColors + useAppleWebpCodec /> ) : ( ) : ( Date: Thu, 4 Jun 2026 03:21:17 +0000 Subject: [PATCH 26/31] Nightly source-language update --- src/locale/locales/en/messages.po | 424 +++++++++++++++--------------- 1 file changed, 212 insertions(+), 212 deletions(-) diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po index b1fd0337d7..5830797c52 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -93,7 +93,7 @@ msgstr "{0, plural, one {# person} other {# people}}" #. placeholder {0}: reactions.length #. placeholder {1}: groupedReactions.map(g => g.value).join(' ') -#: src/components/dms/MessageItem.tsx:297 +#: src/components/dms/MessageItem.tsx:273 msgid "{0, plural, one {# person} other {# people}} reacted – {1}" msgstr "{0, plural, one {# person} other {# people}} reacted – {1}" @@ -122,7 +122,7 @@ msgstr "" #. How long it takes to read an article, in minutes. Displayed in a short form, e.g. "5m" for 5 minutes. #. placeholder {0}: view.readingTime -#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:232 +#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:233 msgid "{0, plural, one {#m} other {#m}}" msgstr "{0, plural, one {#m} other {#m}}" @@ -211,7 +211,7 @@ msgid "{0} following" msgstr "" #. placeholder {0}: sanitizeHandle(profile.handle, '@') -#: src/components/dms/MessageItem.tsx:640 +#: src/components/dms/MessageItem.tsx:609 msgid "{0} is blocking you" msgstr "{0} is blocking you" @@ -269,7 +269,7 @@ msgstr "" #. placeholder {0}: createSanitizedDisplayName(memberSender) #. placeholder {1}: reaction.value -#: src/components/dms/MessageItem.tsx:292 +#: src/components/dms/MessageItem.tsx:268 msgid "{0} reacted {1}" msgstr "" @@ -314,8 +314,8 @@ msgstr "" #. placeholder {0}: sanitizeDisplayName( profile.displayName || sanitizeHandle(profile.handle), ) #. placeholder {0}: sanitizeDisplayName( profile.displayName || sanitizeHandle(profile.handle), ) -#: src/view/com/util/UserAvatar.tsx:595 -#: src/view/com/util/UserAvatar.tsx:613 +#: src/view/com/util/UserAvatar.tsx:596 +#: src/view/com/util/UserAvatar.tsx:614 msgid "{0}'s avatar" msgstr "" @@ -839,7 +839,7 @@ msgstr "" msgid "A new code has been sent" msgstr "" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:93 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:94 msgid "A new form of verification" msgstr "" @@ -897,7 +897,7 @@ msgid "Accept join request" msgstr "Accept join request" #. Accept a chat request -#: src/screens/Messages/components/RequestListItem.tsx:48 +#: src/screens/Messages/components/RequestListItem.tsx:51 msgid "Accept Request" msgstr "" @@ -999,7 +999,7 @@ msgctxt "toast" msgid "Account unmuted" msgstr "" -#: src/components/verification/VerifierDialog.tsx:99 +#: src/components/verification/VerifierDialog.tsx:100 msgid "Accounts with a scalloped blue check mark <0><1/> can verify others. These trusted verifiers are selected by Bluesky." msgstr "" @@ -1085,7 +1085,7 @@ msgstr "" msgid "Add App Password" msgstr "" -#: src/screens/Settings/AutomationLabelSettings.tsx:166 +#: src/screens/Settings/AutomationLabelSettings.tsx:170 msgid "Add automation label to account" msgstr "Add automation label to account" @@ -1112,8 +1112,8 @@ msgstr "" msgid "Add members" msgstr "Add members" -#: src/components/moderation/ReportDialog/index.tsx:526 -#: src/components/moderation/ReportDialog/index.tsx:530 +#: src/components/moderation/ReportDialog/index.tsx:528 +#: src/components/moderation/ReportDialog/index.tsx:532 msgid "Add more details (optional)" msgstr "" @@ -1215,7 +1215,7 @@ msgstr "" msgid "Additional details (limit 1000 characters)" msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:544 +#: src/components/moderation/ReportDialog/index.tsx:546 msgid "Additional details (limit 300 characters)" msgstr "" @@ -1283,7 +1283,7 @@ msgid "alice@example.com" msgstr "" #. the default tab in the interests tab bar -#: src/components/dms/ReactionsDialog.tsx:284 +#: src/components/dms/ReactionsDialog.tsx:288 #: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:201 #: src/view/screens/Notifications.tsx:86 msgid "All" @@ -1291,7 +1291,7 @@ msgstr "" #. Tab label showing the total count of reactions on a chat message. #. placeholder {0}: tab.count -#: src/components/dms/ReactionsDialog.tsx:381 +#: src/components/dms/ReactionsDialog.tsx:385 msgid "All {0}" msgstr "All {0}" @@ -1388,9 +1388,9 @@ msgstr "" msgid "Already signed in as @{0}" msgstr "" -#: src/components/images/AutoSizedImage.tsx:203 -#: src/components/images/Gallery/index.tsx:531 -#: src/components/images/ImageLayoutGridItem.tsx:138 +#: src/components/images/AutoSizedImage.tsx:204 +#: src/components/images/Gallery/index.tsx:539 +#: src/components/images/ImageLayoutGridItem.tsx:139 #: src/components/Post/Embed/VideoEmbed/GifPresentationControls.tsx:94 #: src/view/com/composer/GifAltText.tsx:100 #: src/view/com/composer/photos/Gallery.tsx:209 @@ -1540,7 +1540,7 @@ msgstr "" msgid "An issue occurred, please try again." msgstr "" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:120 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:121 msgid "An mockup of a iPhone showing the Bluesky app open to the profile of a verified user with a blue checkmark next to their display name." msgstr "" @@ -1729,7 +1729,7 @@ msgstr "" msgid "Are you sure you want to delete the app password \"{0}\"?" msgstr "" -#: src/components/dms/MessageContextMenu.tsx:223 +#: src/components/dms/MessageOverlays.tsx:167 msgid "Are you sure you want to delete this message? The message will be deleted for you, but not for the other participants." msgstr "Are you sure you want to delete this message? The message will be deleted for you, but not for the other participants." @@ -1968,7 +1968,7 @@ msgstr "" msgid "Block accounts" msgstr "" -#: src/components/dms/AfterReportDialog.tsx:143 +#: src/components/dms/AfterReportDialog.tsx:148 msgid "Block and delete" msgstr "Block and delete" @@ -1992,9 +1992,9 @@ msgstr "" #: src/components/dms/AfterReportConversationDialog.tsx:221 #: src/components/dms/AfterReportConversationDialog.tsx:224 -#: src/components/dms/AfterReportDialog.tsx:149 -#: src/components/dms/AfterReportDialog.tsx:184 -#: src/components/dms/AfterReportDialog.tsx:187 +#: src/components/dms/AfterReportDialog.tsx:154 +#: src/components/dms/AfterReportDialog.tsx:189 +#: src/components/dms/AfterReportDialog.tsx:192 msgid "Block user" msgstr "" @@ -2004,7 +2004,7 @@ msgctxt "button" msgid "Block user" msgstr "Block user" -#: src/components/dms/AfterReportDialog.tsx:180 +#: src/components/dms/AfterReportDialog.tsx:185 msgid "Block user and/or delete this conversation" msgstr "" @@ -2085,7 +2085,7 @@ msgstr "" msgid "Bluesky is more fun with friends" msgstr "" -#: src/components/dialogs/nuxs/FindContactsAnnouncement.tsx:107 +#: src/components/dialogs/nuxs/FindContactsAnnouncement.tsx:108 msgid "Bluesky is more fun with friends! Import your contacts to see who’s already here." msgstr "" @@ -2109,7 +2109,7 @@ msgstr "" msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private." msgstr "" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:134 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:136 msgid "Bluesky will proactively verify notable and authentic accounts." msgstr "" @@ -2198,7 +2198,7 @@ msgstr "" #. placeholder {0}: sanitizeHandle(handle, '@') #. placeholder {0}: sanitizeHandle(item.feed.creator.handle, '@') #: src/components/LabelingServiceCard/index.tsx:62 -#: src/components/moderation/ReportDialog/index.tsx:845 +#: src/components/moderation/ReportDialog/index.tsx:847 #: src/screens/Messages/JoinRequest.tsx:166 #: src/screens/Search/components/StarterPackCard.tsx:107 #: src/screens/Search/Explore.tsx:971 @@ -2322,7 +2322,7 @@ msgstr "" msgid "Captions & alt text" msgstr "" -#: src/components/images/Gallery/index.tsx:256 +#: src/components/images/Gallery/index.tsx:263 msgid "carousel" msgstr "carousel" @@ -2355,7 +2355,7 @@ msgstr "" msgid "Change Handle" msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:443 +#: src/components/moderation/ReportDialog/index.tsx:445 msgid "Change moderation service" msgstr "" @@ -2368,11 +2368,11 @@ msgstr "" msgid "Change password dialog" msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:310 +#: src/components/moderation/ReportDialog/index.tsx:312 msgid "Change report category" msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:388 +#: src/components/moderation/ReportDialog/index.tsx:390 msgid "Change report reason" msgstr "" @@ -2643,7 +2643,7 @@ msgstr "Click here to view the invite link for this group chat" msgid "Click to open tag menu for {0}" msgstr "" -#: src/components/dms/MessageItem.tsx:559 +#: src/components/dms/MessageItem.tsx:528 msgid "Click to retry failed message" msgstr "" @@ -2657,15 +2657,15 @@ msgstr "" #: src/components/ageAssurance/AgeAssuranceRedirectDialog.tsx:233 #: src/components/ageAssurance/AgeAssuranceRedirectDialog.tsx:239 #: src/components/dialogs/LanguageSelectDialog.tsx:359 -#: src/components/dialogs/nuxs/ActivitySubscriptions.tsx:159 -#: src/components/dialogs/nuxs/ActivitySubscriptions.tsx:168 -#: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:164 -#: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:172 -#: src/components/dialogs/nuxs/DraftsAnnouncement.tsx:139 -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:176 -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:185 -#: src/components/dialogs/nuxs/LiveNowBetaDialog.tsx:191 -#: src/components/dialogs/nuxs/LiveNowBetaDialog.tsx:199 +#: src/components/dialogs/nuxs/ActivitySubscriptions.tsx:160 +#: src/components/dialogs/nuxs/ActivitySubscriptions.tsx:169 +#: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:165 +#: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:173 +#: src/components/dialogs/nuxs/DraftsAnnouncement.tsx:140 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:178 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:187 +#: src/components/dialogs/nuxs/LiveNowBetaDialog.tsx:192 +#: src/components/dialogs/nuxs/LiveNowBetaDialog.tsx:200 #: src/components/dialogs/SearchablePeopleList.tsx:340 #: src/components/dialogs/StarterPackDialog.tsx:187 #: src/components/dms/AddMembersFlow.tsx:367 @@ -2673,10 +2673,10 @@ msgstr "" #: src/components/dms/AfterReportConversationDialog.tsx:96 #: src/components/dms/AfterReportConversationDialog.tsx:247 #: src/components/dms/AfterReportConversationDialog.tsx:252 -#: src/components/dms/AfterReportDialog.tsx:89 #: src/components/dms/AfterReportDialog.tsx:94 -#: src/components/dms/AfterReportDialog.tsx:207 +#: src/components/dms/AfterReportDialog.tsx:99 #: src/components/dms/AfterReportDialog.tsx:212 +#: src/components/dms/AfterReportDialog.tsx:217 #: src/components/dms/EmojiPopup.android.tsx:59 #: src/components/dms/InitiateChatFlow.tsx:534 #: src/components/intents/GroupChatJoinDialog.tsx:204 @@ -2688,7 +2688,7 @@ msgstr "" #: src/components/StarterPack/Wizard/WizardEditListDialog.tsx:122 #: src/components/StarterPack/Wizard/WizardEditListDialog.tsx:128 #: src/components/verification/VerificationsDialog.tsx:146 -#: src/components/verification/VerifierDialog.tsx:146 +#: src/components/verification/VerifierDialog.tsx:147 #: src/components/WhoCanReply.tsx:236 #: src/components/WhoCanReply.tsx:243 #: src/features/gifPicker/components/GifPickerErrorBoundary.tsx:45 @@ -2724,7 +2724,7 @@ msgstr "" #: src/components/dialogs/LanguageSelectDialog.tsx:354 #: src/components/dialogs/NotificationSettingsDialog.tsx:94 #: src/components/verification/VerificationsDialog.tsx:138 -#: src/components/verification/VerifierDialog.tsx:139 +#: src/components/verification/VerifierDialog.tsx:140 #: src/features/gifPicker/components/GifPickerErrorBoundary.tsx:36 msgid "Close dialog" msgstr "" @@ -2999,8 +2999,8 @@ msgstr "" msgid "Conversation deleted" msgstr "" -#: src/components/dms/AfterReportDialog.tsx:144 -#: src/components/dms/AfterReportDialog.tsx:147 +#: src/components/dms/AfterReportDialog.tsx:149 +#: src/components/dms/AfterReportDialog.tsx:152 msgctxt "toast" msgid "Conversation deleted" msgstr "" @@ -3020,7 +3020,7 @@ msgstr "Conversation not found." msgid "Copied build version to clipboard" msgstr "" -#: src/components/dms/MessageContextMenu.tsx:79 +#: src/components/dms/MessageContextMenu.tsx:71 #: src/components/PostControls/DiscoverDebug.tsx:36 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:272 #: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:77 @@ -3102,8 +3102,8 @@ msgstr "" msgid "Copy link to starter pack" msgstr "" -#: src/components/dms/MessageContextMenu.tsx:169 -#: src/components/dms/MessageContextMenu.tsx:173 +#: src/components/dms/MessageContextMenu.tsx:152 +#: src/components/dms/MessageContextMenu.tsx:156 msgid "Copy message text" msgstr "" @@ -3160,7 +3160,7 @@ msgid "Could not follow all matches. {0}" msgstr "" #: src/components/dms/AfterReportConversationDialog.tsx:158 -#: src/components/dms/AfterReportDialog.tsx:134 +#: src/components/dms/AfterReportDialog.tsx:139 #: src/components/dms/LeaveConvoPrompt.tsx:34 msgid "Could not leave chat" msgstr "" @@ -3316,8 +3316,8 @@ msgstr "Create or modify an invite link for this group chat" #. Accessibility label for button to create a moderation report for the selected option #. placeholder {0}: option.title -#: src/components/moderation/ReportDialog/index.tsx:707 -#: src/components/moderation/ReportDialog/index.tsx:752 +#: src/components/moderation/ReportDialog/index.tsx:709 +#: src/components/moderation/ReportDialog/index.tsx:754 msgid "Create report for {0}" msgstr "" @@ -3418,7 +3418,7 @@ msgstr "" msgid "Default icons" msgstr "" -#: src/components/dms/MessageContextMenu.tsx:224 +#: src/components/dms/MessageOverlays.tsx:168 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:803 #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:275 #: src/screens/Settings/AppPasswords.tsx:213 @@ -3459,15 +3459,15 @@ msgstr "" msgid "Delete contacts" msgstr "" -#: src/components/dms/AfterReportDialog.tsx:146 -#: src/components/dms/AfterReportDialog.tsx:190 -#: src/components/dms/AfterReportDialog.tsx:193 +#: src/components/dms/AfterReportDialog.tsx:151 +#: src/components/dms/AfterReportDialog.tsx:195 +#: src/components/dms/AfterReportDialog.tsx:198 #: src/screens/Messages/components/RequestButtons.tsx:142 #: src/screens/Messages/components/RequestButtons.tsx:144 msgid "Delete conversation" msgstr "" -#: src/components/dms/MessageContextMenu.tsx:184 +#: src/components/dms/MessageContextMenu.tsx:167 msgid "Delete for me" msgstr "" @@ -3476,11 +3476,11 @@ msgstr "" msgid "Delete list" msgstr "" -#: src/components/dms/MessageContextMenu.tsx:222 +#: src/components/dms/MessageOverlays.tsx:166 msgid "Delete message" msgstr "" -#: src/components/dms/MessageContextMenu.tsx:181 +#: src/components/dms/MessageContextMenu.tsx:164 msgid "Delete message for me" msgstr "" @@ -3661,8 +3661,8 @@ msgstr "" msgid "Discard post?" msgstr "" -#: src/screens/Profile/components/GermButton.tsx:261 -#: src/screens/Profile/components/GermButton.tsx:268 +#: src/screens/Profile/components/GermButton.tsx:262 +#: src/screens/Profile/components/GermButton.tsx:269 msgid "Disconnect Germ DM" msgstr "" @@ -3690,7 +3690,7 @@ msgstr "" msgid "Dismiss" msgstr "" -#: src/components/contacts/FindContactsBannerNUX.tsx:77 +#: src/components/contacts/FindContactsBannerNUX.tsx:78 msgid "Dismiss banner" msgstr "" @@ -3784,7 +3784,7 @@ msgstr "" #: src/components/dialogs/ServerInput.tsx:237 #: src/components/dialogs/ServerInput.tsx:239 #: src/components/dms/AfterReportConversationDialog.tsx:164 -#: src/components/dms/AfterReportDialog.tsx:140 +#: src/components/dms/AfterReportDialog.tsx:145 #: src/components/forms/DateField/index.tsx:104 #: src/components/forms/DateField/index.tsx:110 #: src/lib/media/picker.tsx:37 @@ -3805,7 +3805,7 @@ msgctxt "action" msgid "Done" msgstr "" -#: src/components/dms/MessageItem.tsx:463 +#: src/components/dms/MessageItem.tsx:432 msgid "Double tap or long press the message to add a reaction" msgstr "" @@ -3848,7 +3848,7 @@ msgstr "Download profile data" msgid "Doxxing" msgstr "" -#: src/components/dialogs/nuxs/DraftsAnnouncement.tsx:119 +#: src/components/dialogs/nuxs/DraftsAnnouncement.tsx:120 #: src/view/com/composer/drafts/DraftsButton.tsx:70 #: src/view/com/composer/drafts/DraftsButton.tsx:79 #: src/view/com/composer/drafts/DraftsListDialog.tsx:119 @@ -3917,7 +3917,7 @@ msgctxt "action" msgid "Edit" msgstr "" -#: src/view/com/util/UserAvatar.tsx:460 +#: src/view/com/util/UserAvatar.tsx:461 #: src/view/com/util/UserBanner.tsx:122 msgid "Edit avatar" msgstr "" @@ -4299,7 +4299,7 @@ msgstr "" msgid "Exit fullscreen" msgstr "" -#: src/components/Lightbox/chrome/Footer.tsx:65 +#: src/components/Lightbox/chrome/Footer.tsx:59 #: src/components/Lightbox/Lightbox.web.tsx:241 msgid "Expand alt text" msgstr "" @@ -4420,7 +4420,7 @@ msgid "Failed to accept join request" msgstr "Failed to accept join request" #: src/components/dms/ActionsWrapper.web.tsx:77 -#: src/components/dms/MessageContextMenu.tsx:119 +#: src/components/dms/MessageContextMenu.tsx:103 msgid "Failed to add emoji reaction" msgstr "" @@ -4465,7 +4465,7 @@ msgctxt "toast" msgid "Failed to delete chat" msgstr "" -#: src/components/dms/MessageContextMenu.tsx:101 +#: src/components/dms/MessageOverlays.tsx:112 msgid "Failed to delete message" msgstr "" @@ -4482,7 +4482,7 @@ msgid "Failed to disable invite link" msgstr "Failed to disable invite link" #. placeholder {0}: error?.message -#: src/screens/Profile/components/GermButton.tsx:195 +#: src/screens/Profile/components/GermButton.tsx:196 msgid "Failed to disconnect Germ DM. Error: {0}" msgstr "" @@ -4593,7 +4593,7 @@ msgid "Failed to pin post" msgstr "" #. placeholder {0}: e?.message -#: src/screens/Profile/components/GermButton.tsx:163 +#: src/screens/Profile/components/GermButton.tsx:164 msgid "Failed to reconnect Germ DM. Error: {0}" msgstr "" @@ -4607,8 +4607,8 @@ msgid "Failed to remove data. {0}" msgstr "" #: src/components/dms/ActionsWrapper.web.tsx:73 -#: src/components/dms/MessageContextMenu.tsx:115 -#: src/components/dms/ReactionsDialog.tsx:171 +#: src/components/dms/MessageContextMenu.tsx:99 +#: src/components/dms/ReactionsDialog.tsx:175 msgid "Failed to remove emoji reaction" msgstr "" @@ -4833,11 +4833,11 @@ msgstr "" msgid "Finalizing" msgstr "" -#: src/components/dialogs/nuxs/DraftsAnnouncement.tsx:145 +#: src/components/dialogs/nuxs/DraftsAnnouncement.tsx:146 msgid "Finally!" msgstr "" -#: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:155 +#: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:156 msgid "Finally! Keep track of posts that matter to you. Save them to revisit anytime." msgstr "" @@ -4885,7 +4885,7 @@ msgstr "" msgid "Find posts, users, and feeds on Bluesky" msgstr "" -#: src/components/dialogs/nuxs/FindContactsAnnouncement.tsx:97 +#: src/components/dialogs/nuxs/FindContactsAnnouncement.tsx:98 msgid "Find your friends" msgstr "" @@ -5191,20 +5191,20 @@ msgid "Generate new link" msgstr "Generate new link" #: src/screens/Profile/components/GermButton.tsx:86 -#: src/screens/Profile/components/GermButton.tsx:224 +#: src/screens/Profile/components/GermButton.tsx:225 msgid "Germ DM" msgstr "" -#: src/screens/Profile/components/GermButton.tsx:182 +#: src/screens/Profile/components/GermButton.tsx:183 msgid "Germ DM disconnected" msgstr "" -#: src/screens/Profile/components/GermButton.tsx:233 -#: src/screens/Profile/components/GermButton.tsx:238 +#: src/screens/Profile/components/GermButton.tsx:234 +#: src/screens/Profile/components/GermButton.tsx:239 msgid "Germ DM Link" msgstr "" -#: src/screens/Profile/components/GermButton.tsx:159 +#: src/screens/Profile/components/GermButton.tsx:160 msgid "Germ DM reconnected" msgstr "" @@ -5268,7 +5268,7 @@ msgstr "" msgid "Get notified when {name} posts" msgstr "" -#: src/components/dialogs/nuxs/ActivitySubscriptions.tsx:138 +#: src/components/dialogs/nuxs/ActivitySubscriptions.tsx:139 msgid "Get notified when someone posts" msgstr "" @@ -5279,7 +5279,7 @@ msgstr "" msgid "Get started" msgstr "" -#: src/components/MediaPreview.tsx:147 +#: src/components/MediaPreview.tsx:148 #: src/components/Post/Embed/VideoEmbed/GifPresentationControls.tsx:69 msgid "GIF" msgstr "" @@ -5413,8 +5413,8 @@ msgstr "Go to user’s profile" msgid "Going live is currently disabled for your account" msgstr "" -#: src/screens/Profile/components/GermButton.tsx:252 -#: src/screens/Profile/components/GermButton.tsx:257 +#: src/screens/Profile/components/GermButton.tsx:253 +#: src/screens/Profile/components/GermButton.tsx:258 msgid "Got it" msgstr "" @@ -5524,7 +5524,7 @@ msgid "Handle too long. Please try a shorter one." msgstr "" #: src/components/FeedCard.tsx:156 -#: src/features/liveEvents/components/LiveEventFeedCardWide.tsx:122 +#: src/features/liveEvents/components/LiveEventFeedCardWide.tsx:123 msgid "Happening now" msgstr "" @@ -5903,7 +5903,7 @@ msgid "Image" msgstr "" #. placeholder {0}: index + 1 -#: src/components/images/Gallery/index.tsx:436 +#: src/components/images/Gallery/index.tsx:443 msgid "Image {0}" msgstr "Image {0}" @@ -5914,7 +5914,7 @@ msgid "Image {0} of {1}" msgstr "" #. placeholder {0}: index + 1 -#: src/components/images/Gallery/index.tsx:421 +#: src/components/images/Gallery/index.tsx:428 msgid "Image {0} of {imageCount}" msgstr "Image {0} of {imageCount}" @@ -5929,17 +5929,17 @@ msgid "Image cache cleared, freed {0}" msgstr "" #. placeholder {0}: images.length -#: src/components/images/Gallery/index.tsx:257 +#: src/components/images/Gallery/index.tsx:264 msgid "Image gallery, {0} images" msgstr "Image gallery, {0} images" #. Image has been moderated and user has the option of showing it temporarily -#: src/features/liveNow/components/LiveStatusDialog.tsx:299 +#: src/features/liveNow/components/LiveStatusDialog.tsx:300 msgid "Image is hidden due to your moderation settings." msgstr "Image is hidden due to your moderation settings." #. Image has been moderated and is not visible to the user -#: src/features/liveNow/components/LiveStatusDialog.tsx:309 +#: src/features/liveNow/components/LiveStatusDialog.tsx:310 msgid "Image is unavailable." msgstr "Image is unavailable." @@ -5974,13 +5974,13 @@ msgstr "" msgid "Import contacts" msgstr "" -#: src/components/dialogs/nuxs/FindContactsAnnouncement.tsx:115 -#: src/components/dialogs/nuxs/FindContactsAnnouncement.tsx:126 +#: src/components/dialogs/nuxs/FindContactsAnnouncement.tsx:116 +#: src/components/dialogs/nuxs/FindContactsAnnouncement.tsx:127 msgid "Import Contacts" msgstr "" #: src/components/contacts/FindContactsBannerNUX.tsx:33 -#: src/components/contacts/FindContactsBannerNUX.tsx:71 +#: src/components/contacts/FindContactsBannerNUX.tsx:72 msgid "Import contacts to find your friends" msgstr "" @@ -6093,7 +6093,7 @@ msgstr "" msgid "Invalid phone number" msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:98 +#: src/components/moderation/ReportDialog/index.tsx:100 msgid "Invalid report subject" msgstr "" @@ -6311,7 +6311,7 @@ msgid "Latest" msgstr "" #: src/components/verification/VerificationsDialog.tsx:168 -#: src/components/verification/VerifierDialog.tsx:135 +#: src/components/verification/VerifierDialog.tsx:136 #: src/screens/Moderation/VerificationSettings.tsx:50 #: src/screens/Profile/Header/EditProfileDialog.tsx:346 #: src/screens/Settings/components/ChangeHandleDialog.tsx:215 @@ -6366,7 +6366,7 @@ msgid "Learn more about this warning" msgstr "" #: src/components/verification/VerificationsDialog.tsx:153 -#: src/components/verification/VerifierDialog.tsx:121 +#: src/components/verification/VerifierDialog.tsx:122 msgctxt "english-only-resource" msgid "Learn more about verification on Bluesky" msgstr "" @@ -6376,7 +6376,7 @@ msgstr "" msgid "Learn more about what is public on Bluesky." msgstr "" -#: src/screens/Profile/components/GermButton.tsx:211 +#: src/screens/Profile/components/GermButton.tsx:212 msgid "Learn more about your Germ DM link" msgstr "" @@ -6674,7 +6674,7 @@ msgstr "" msgid "Live events appear occasionally when something exciting is happening. If you'd like, you can hide this particular event, or all events for this placement in your app interface." msgstr "" -#: src/features/liveNow/components/LiveStatusDialog.tsx:244 +#: src/features/liveNow/components/LiveStatusDialog.tsx:245 msgid "Live feature is in beta" msgstr "" @@ -6904,18 +6904,18 @@ msgstr "Message {displayName}" msgid "Message deleted" msgstr "" -#: src/components/dms/MessageContextMenu.tsx:100 +#: src/components/dms/MessageOverlays.tsx:111 msgctxt "toast" msgid "Message deleted" msgstr "" -#: src/components/dms/MessageItem.tsx:553 +#: src/components/dms/MessageItem.tsx:522 msgid "Message failed to send." msgstr "Message failed to send." #. placeholder {0}: sender?.handle ?? 'unknown' #. placeholder {1}: message.text -#: src/components/dms/MessageContextMenu.tsx:146 +#: src/components/dms/MessageContextMenu.tsx:129 msgid "Message from @{0}: {1}" msgstr "" @@ -6938,7 +6938,7 @@ msgstr "" msgid "Message is too long ({graphemeCount}/{MAX_DM_GRAPHEME_LENGTH})" msgstr "Message is too long ({graphemeCount}/{MAX_DM_GRAPHEME_LENGTH})" -#: src/components/dms/MessageContextMenu.tsx:145 +#: src/components/dms/MessageContextMenu.tsx:128 msgid "Message options" msgstr "" @@ -6946,11 +6946,11 @@ msgstr "" msgid "Messages" msgstr "" -#: src/components/dms/MessageItem.tsx:652 +#: src/components/dms/MessageItem.tsx:621 msgid "Messages from this person are hidden while they are blocking you." msgstr "Messages from this person are hidden while they are blocking you." -#: src/components/dms/MessageItem.tsx:647 +#: src/components/dms/MessageItem.tsx:616 msgid "Messages from this person are hidden while you are blocking them." msgstr "Messages from this person are hidden while you are blocking them." @@ -7229,8 +7229,8 @@ msgstr "" msgid "Navigates to your profile" msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:340 -#: src/components/moderation/ReportDialog/index.tsx:356 +#: src/components/moderation/ReportDialog/index.tsx:342 +#: src/components/moderation/ReportDialog/index.tsx:358 msgid "Need to report a copyright violation, legal request, or regulatory compliance issue?" msgstr "" @@ -7452,7 +7452,7 @@ msgstr "No GIFs found for \"{query}\"." msgid "No GIFs to show right now. Try again in a moment." msgstr "No GIFs to show right now. Try again in a moment." -#: src/features/liveNow/components/LinkPreview.tsx:63 +#: src/features/liveNow/components/LinkPreview.tsx:64 msgid "No image" msgstr "" @@ -7640,7 +7640,7 @@ msgstr "Not followed by anyone you’re following" msgid "Not Found" msgstr "" -#: src/components/dialogs/nuxs/DraftsAnnouncement.tsx:130 +#: src/components/dialogs/nuxs/DraftsAnnouncement.tsx:131 msgid "Not ready to hit post? Keep your best ideas in Drafts until the timing is just right." msgstr "" @@ -7724,7 +7724,7 @@ msgstr "" #: src/components/BotAccountAlert.tsx:52 #: src/components/BotAccountAlert.tsx:57 #: src/components/dms/InitiateChatFlow.tsx:677 -#: src/components/dms/MessageItem.tsx:659 +#: src/components/dms/MessageItem.tsx:628 #: src/screens/Login/PasswordUpdatedForm.tsx:37 #: src/screens/PostThread/components/ThreadItemAnchor.tsx:661 msgid "Okay" @@ -7916,8 +7916,8 @@ msgstr "" msgid "Open post options menu" msgstr "" -#: src/features/liveNow/components/LiveStatusDialog.tsx:218 -#: src/features/liveNow/components/LiveStatusDialog.tsx:228 +#: src/features/liveNow/components/LiveStatusDialog.tsx:219 +#: src/features/liveNow/components/LiveStatusDialog.tsx:229 msgid "Open profile" msgstr "" @@ -8005,7 +8005,7 @@ msgstr "" msgid "Opens flow to sign in to your existing Bluesky account" msgstr "" -#: src/components/images/Gallery/index.tsx:437 +#: src/components/images/Gallery/index.tsx:444 msgid "Opens full image" msgstr "Opens full image" @@ -8022,7 +8022,7 @@ msgstr "" msgid "Opens link {0}" msgstr "" -#: src/view/com/util/UserAvatar.tsx:599 +#: src/view/com/util/UserAvatar.tsx:600 msgid "Opens live status dialog" msgstr "" @@ -8053,7 +8053,7 @@ msgstr "" #: src/components/dms/MessageItem.tsx:229 #: src/view/com/notifications/NotificationFeedItem.tsx:1019 -#: src/view/com/util/UserAvatar.tsx:617 +#: src/view/com/util/UserAvatar.tsx:618 msgid "Opens this profile" msgstr "" @@ -8129,8 +8129,8 @@ msgstr "" #: src/components/dms/AfterReportConversationDialog.tsx:86 #: src/components/dms/AfterReportConversationDialog.tsx:213 -#: src/components/dms/AfterReportDialog.tsx:84 -#: src/components/dms/AfterReportDialog.tsx:176 +#: src/components/dms/AfterReportDialog.tsx:89 +#: src/components/dms/AfterReportDialog.tsx:181 msgid "Our moderation team has received your report." msgstr "" @@ -8661,7 +8661,7 @@ msgstr "" msgid "Press to view followers of this account that you also follow" msgstr "" -#: src/features/liveEvents/components/LiveEventFeedCardWide.tsx:120 +#: src/features/liveEvents/components/LiveEventFeedCardWide.tsx:121 msgid "Preview" msgstr "" @@ -8865,8 +8865,8 @@ msgstr "Re-enable link" msgid "React with {emoji}" msgstr "" -#: src/components/dms/ReactionsDialog.tsx:65 -#: src/components/dms/ReactionsDialog.tsx:90 +#: src/components/dms/ReactionsDialog.tsx:66 +#: src/components/dms/ReactionsDialog.tsx:94 msgid "Reactions" msgstr "Reactions" @@ -8884,8 +8884,8 @@ msgctxt "english-only-resource" msgid "read about how to use search filters" msgstr "" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:160 -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:171 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:162 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:173 msgid "Read blog post" msgstr "" @@ -9020,13 +9020,13 @@ msgstr "" msgid "Remove attachment" msgstr "" -#: src/view/com/util/UserAvatar.tsx:519 -#: src/view/com/util/UserAvatar.tsx:522 +#: src/view/com/util/UserAvatar.tsx:520 +#: src/view/com/util/UserAvatar.tsx:523 msgid "Remove Avatar" msgstr "" -#: src/view/com/util/UserBanner.tsx:189 -#: src/view/com/util/UserBanner.tsx:192 +#: src/view/com/util/UserBanner.tsx:190 +#: src/view/com/util/UserBanner.tsx:193 msgid "Remove Banner" msgstr "" @@ -9261,8 +9261,8 @@ msgstr "" msgid "Reply was successfully hidden" msgstr "" -#: src/components/dms/MessageContextMenu.tsx:193 -#: src/features/liveNow/components/LiveStatusDialog.tsx:266 +#: src/components/dms/MessageContextMenu.tsx:176 +#: src/features/liveNow/components/LiveStatusDialog.tsx:267 #: src/screens/Messages/ConversationSettings/index.tsx:517 msgid "Report" msgstr "" @@ -9279,8 +9279,8 @@ msgstr "" msgid "Report conversation" msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:96 -#: src/components/moderation/ReportDialog/index.tsx:261 +#: src/components/moderation/ReportDialog/index.tsx:98 +#: src/components/moderation/ReportDialog/index.tsx:263 msgid "Report dialog" msgstr "" @@ -9294,7 +9294,7 @@ msgstr "" msgid "Report list" msgstr "" -#: src/components/dms/MessageContextMenu.tsx:190 +#: src/components/dms/MessageContextMenu.tsx:173 msgid "Report message" msgstr "" @@ -9314,8 +9314,8 @@ msgstr "" #: src/components/dms/AfterReportConversationDialog.tsx:83 #: src/components/dms/AfterReportConversationDialog.tsx:210 -#: src/components/dms/AfterReportDialog.tsx:81 -#: src/components/dms/AfterReportDialog.tsx:173 +#: src/components/dms/AfterReportDialog.tsx:86 +#: src/components/dms/AfterReportDialog.tsx:178 msgid "Report submitted" msgstr "" @@ -9337,7 +9337,7 @@ msgid "Report this list" msgstr "" #: src/components/moderation/ReportDialog/copy.ts:19 -#: src/features/liveNow/components/LiveStatusDialog.tsx:249 +#: src/features/liveNow/components/LiveStatusDialog.tsx:250 msgid "Report this livestream" msgstr "" @@ -9530,7 +9530,7 @@ msgstr "" #: src/components/contacts/screens/VerifyNumber.tsx:355 #: src/components/Error.tsx:65 #: src/components/Lists.tsx:115 -#: src/components/moderation/ReportDialog/index.tsx:295 +#: src/components/moderation/ReportDialog/index.tsx:297 #: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoFallback.tsx:56 #: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoFallback.tsx:59 #: src/components/StarterPack/ProfileStarterPacks.tsx:377 @@ -9553,7 +9553,7 @@ msgstr "" msgid "Retry" msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:292 +#: src/components/moderation/ReportDialog/index.tsx:294 #: src/view/screens/Storybook/Admonitions.tsx:61 msgid "Retry loading report options" msgstr "" @@ -9638,7 +9638,7 @@ msgid "Save draft?" msgstr "" #: src/components/Lightbox/chrome/ImageMenu.tsx:99 -#: src/components/MediaPreview.tsx:196 +#: src/components/MediaPreview.tsx:197 #: src/components/Post/Embed/ImageContextMenu.tsx:70 #: src/components/StarterPack/ShareDialog.tsx:144 #: src/components/StarterPack/ShareDialog.tsx:150 @@ -9674,7 +9674,7 @@ msgstr "" msgid "Saved Feeds" msgstr "" -#: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:144 +#: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:145 #: src/Navigation.tsx:555 #: src/screens/Bookmarks/index.tsx:59 msgid "Saved Posts" @@ -9899,7 +9899,7 @@ msgstr "" msgid "Select a color" msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:378 +#: src/components/moderation/ReportDialog/index.tsx:380 msgid "Select a reason" msgstr "" @@ -9990,7 +9990,7 @@ msgstr "" msgid "Select languages" msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:428 +#: src/components/moderation/ReportDialog/index.tsx:430 msgid "Select moderation service" msgstr "" @@ -10092,7 +10092,7 @@ msgstr "" msgid "Send post to..." msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:816 +#: src/components/moderation/ReportDialog/index.tsx:818 msgid "Send report to {title}" msgstr "" @@ -10114,7 +10114,7 @@ msgid "Send via direct message" msgstr "" #. placeholder {0}: i18n.date(new Date(message.sentAt), { timeStyle: 'short', }) -#: src/components/dms/MessageContextMenu.tsx:154 +#: src/components/dms/MessageContextMenu.tsx:137 msgid "Sent at {0}" msgstr "Sent at {0}" @@ -10219,7 +10219,7 @@ msgstr "" msgid "Sexually Suggestive" msgstr "" -#: src/components/MediaPreview.tsx:202 +#: src/components/MediaPreview.tsx:203 #: src/components/Post/Embed/ImageContextMenu.tsx:74 #: src/components/StarterPack/QrCodeDialog.tsx:195 #: src/screens/Hashtag.tsx:130 @@ -10309,16 +10309,16 @@ msgstr "" #: src/components/moderation/ScreenHider.tsx:179 #: src/components/moderation/ScreenHider.tsx:182 -#: src/features/liveNow/components/LiveStatusDialog.tsx:317 -#: src/features/liveNow/components/LiveStatusDialog.tsx:321 +#: src/features/liveNow/components/LiveStatusDialog.tsx:318 +#: src/features/liveNow/components/LiveStatusDialog.tsx:322 #: src/screens/List/ListHiddenScreen.tsx:194 #: src/screens/VideoFeed/index.tsx:646 #: src/screens/VideoFeed/index.tsx:652 msgid "Show anyway" msgstr "" -#: src/screens/Settings/AutomationLabelSettings.tsx:181 -#: src/screens/Settings/AutomationLabelSettings.tsx:194 +#: src/screens/Settings/AutomationLabelSettings.tsx:185 +#: src/screens/Settings/AutomationLabelSettings.tsx:198 msgid "Show automation label" msgstr "Show automation label" @@ -10412,7 +10412,7 @@ msgid "Show warning and filter from feeds" msgstr "" #: src/components/dialogs/nuxs/LiveNowBetaDialog.tsx:60 -#: src/components/dialogs/nuxs/LiveNowBetaDialog.tsx:170 +#: src/components/dialogs/nuxs/LiveNowBetaDialog.tsx:171 msgid "Show when you’re live" msgstr "" @@ -10557,7 +10557,7 @@ msgstr "" msgid "Skip to next step" msgstr "" -#: src/components/images/Gallery/index.tsx:420 +#: src/components/images/Gallery/index.tsx:427 msgid "slide" msgstr "slide" @@ -10614,7 +10614,7 @@ msgid "Someone left the group" msgstr "Someone left the group" #. placeholder {0}: reaction.value -#: src/components/dms/MessageItem.tsx:294 +#: src/components/dms/MessageItem.tsx:270 msgid "Someone reacted {0}" msgstr "" @@ -10639,7 +10639,7 @@ msgstr "Someone was removed" msgid "Someone was removed from the group" msgstr "Someone was removed from the group" -#: src/components/moderation/ReportDialog/index.tsx:101 +#: src/components/moderation/ReportDialog/index.tsx:103 msgid "Something wasn't quite right with the data you're trying to report. Please contact support." msgstr "" @@ -10650,7 +10650,7 @@ msgid "Something went wrong" msgstr "" #: src/components/ageAssurance/AgeAssuranceInitDialog.tsx:139 -#: src/components/moderation/ReportDialog/index.tsx:287 +#: src/components/moderation/ReportDialog/index.tsx:289 #: src/screens/Deactivated.tsx:86 #: src/screens/Settings/components/DeactivateAccountDialog.tsx:59 #: src/view/screens/Storybook/Admonitions.tsx:56 @@ -10670,7 +10670,7 @@ msgstr "" msgid "Something went wrong. Please try again in a moment." msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:245 +#: src/components/moderation/ReportDialog/index.tsx:247 msgid "Something went wrong. Please try again." msgstr "" @@ -10812,7 +10812,7 @@ msgstr "" msgid "Storybook" msgstr "" -#: src/components/dialogs/nuxs/LiveNowBetaDialog.tsx:181 +#: src/components/dialogs/nuxs/LiveNowBetaDialog.tsx:182 msgid "Streaming on Twitch? Set your live status on Bluesky to add a badge to your avatar. Tapping it takes people straight to your stream." msgstr "" @@ -10837,9 +10837,9 @@ msgstr "" msgid "Submit Appeal" msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:506 -#: src/components/moderation/ReportDialog/index.tsx:567 -#: src/components/moderation/ReportDialog/index.tsx:574 +#: src/components/moderation/ReportDialog/index.tsx:508 +#: src/components/moderation/ReportDialog/index.tsx:569 +#: src/components/moderation/ReportDialog/index.tsx:576 msgid "Submit report" msgstr "" @@ -10848,13 +10848,13 @@ msgid "Subscribe" msgstr "" #. placeholder {0}: highlightedPublisher.name -#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:425 -#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:434 +#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:426 +#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:435 msgid "Subscribe on {0}" msgstr "Subscribe on {0}" #. placeholder {0}: highlightedPublisher.name -#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:433 +#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:434 msgid "Subscribe to {publicationTitle} on {0}" msgstr "Subscribe to {publicationTitle} on {0}" @@ -10985,7 +10985,7 @@ msgstr "" msgid "Tap below to allow Bluesky to access your GPS location. We will then use that data to more accurately determine the content and features available in your region." msgstr "" -#: src/components/dms/MessageItem.tsx:598 +#: src/components/dms/MessageItem.tsx:567 msgid "Tap for details" msgstr "Tap for details" @@ -11015,29 +11015,29 @@ msgstr "" msgid "Tap to dismiss" msgstr "" -#: src/components/dms/ReactionsDialog.tsx:192 +#: src/components/dms/ReactionsDialog.tsx:196 msgid "Tap to remove" msgstr "Tap to remove" #. placeholder {0}: reaction.value -#: src/components/dms/ReactionsDialog.tsx:208 +#: src/components/dms/ReactionsDialog.tsx:212 msgid "Tap to remove your {0} reaction" msgstr "Tap to remove your {0} reaction" -#: src/components/dms/MessageItem.tsx:563 +#: src/components/dms/MessageItem.tsx:532 msgid "Tap to retry" msgstr "Tap to retry" #. placeholder {0}: tab.value -#: src/components/dms/ReactionsDialog.tsx:354 +#: src/components/dms/ReactionsDialog.tsx:358 msgid "Tap to show {0} reactions" msgstr "Tap to show {0} reactions" -#: src/components/dms/ReactionsDialog.tsx:353 +#: src/components/dms/ReactionsDialog.tsx:357 msgid "Tap to show all reactions" msgstr "Tap to show all reactions" -#: src/components/dms/MessageItem.tsx:317 +#: src/components/dms/MessageItem.tsx:293 msgid "Tap to view reactions" msgstr "Tap to view reactions" @@ -11427,7 +11427,7 @@ msgstr "" msgid "This author has chosen to make their posts visible only to people who are signed in." msgstr "" -#: src/screens/Profile/components/GermButton.tsx:243 +#: src/screens/Profile/components/GermButton.tsx:244 msgid "This button lets others open the Germ DM app to send you a message. You can manage its visibility from the Germ DM app, or you can disconnect your Bluesky account from Germ DM altogether by clicking the button below." msgstr "" @@ -11561,7 +11561,7 @@ msgstr "" msgid "This is not a valid link" msgstr "" -#: src/screens/Settings/AutomationLabelSettings.tsx:169 +#: src/screens/Settings/AutomationLabelSettings.tsx:173 msgid "This label lets the world know that this account is automated. If turned on, this label appears next to the account's name on their profile and posts. It can be turned on or off at any time." msgstr "This label lets the world know that this account is automated. If turned on, this label appears next to the account's name on their profile and posts. It can be turned on or off at any time." @@ -11594,13 +11594,13 @@ msgstr "" msgid "This list is empty." msgstr "" -#: src/components/dms/MessageItem.tsx:596 -#: src/components/dms/MessageItem.tsx:625 +#: src/components/dms/MessageItem.tsx:565 +#: src/components/dms/MessageItem.tsx:594 msgid "This message is hidden because this user is blocking you." msgstr "This message is hidden because this user is blocking you." -#: src/components/dms/MessageItem.tsx:595 -#: src/components/dms/MessageItem.tsx:621 +#: src/components/dms/MessageItem.tsx:564 +#: src/components/dms/MessageItem.tsx:590 msgid "This message is hidden because you are blocking this user." msgstr "This message is hidden because you are blocking this user." @@ -11835,8 +11835,8 @@ msgstr "" msgid "Topic" msgstr "" -#: src/components/dms/MessageContextMenu.tsx:162 -#: src/components/dms/MessageContextMenu.tsx:165 +#: src/components/dms/MessageContextMenu.tsx:145 +#: src/components/dms/MessageContextMenu.tsx:148 #: src/components/Post/Translated/index.tsx:150 #: src/components/Post/Translated/index.tsx:157 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:553 @@ -11887,7 +11887,7 @@ msgstr "" msgid "Trolling" msgstr "" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:140 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:142 msgid "Trust emerges from relationships, communities, and shared context, so we’re also enabling <0>trusted verifiers: organizations that can directly issue verification." msgstr "" @@ -11980,7 +11980,7 @@ msgstr "" msgid "Unavailable feed information" msgstr "" -#: src/components/dms/MessageItem.tsx:663 +#: src/components/dms/MessageItem.tsx:632 #: src/components/dms/MessagesListBlockedFooter.tsx:97 #: src/components/dms/MessagesListBlockedFooter.tsx:104 #: src/screens/Messages/ConversationSettings/MemberMenu.tsx:222 @@ -12026,8 +12026,8 @@ msgstr "" #: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:79 #: src/features/liveEvents/components/SidebarLiveEventFeedsBanner.tsx:40 #: src/features/liveEvents/components/SidebarLiveEventFeedsBanner.tsx:46 -#: src/screens/Profile/components/GermButton.tsx:185 #: src/screens/Profile/components/GermButton.tsx:186 +#: src/screens/Profile/components/GermButton.tsx:187 msgid "Undo" msgstr "" @@ -12061,7 +12061,7 @@ msgstr "" msgid "Unfollows the user" msgstr "" -#: src/components/moderation/ReportDialog/index.tsx:490 +#: src/components/moderation/ReportDialog/index.tsx:492 msgid "Unfortunately, none of your subscribed labelers supports this report type." msgstr "" @@ -12287,22 +12287,22 @@ msgstr "" msgid "Upload a text file to:" msgstr "" -#: src/view/com/util/UserAvatar.tsx:490 -#: src/view/com/util/UserAvatar.tsx:493 -#: src/view/com/util/UserBanner.tsx:160 -#: src/view/com/util/UserBanner.tsx:163 +#: src/view/com/util/UserAvatar.tsx:491 +#: src/view/com/util/UserAvatar.tsx:494 +#: src/view/com/util/UserBanner.tsx:161 +#: src/view/com/util/UserBanner.tsx:164 msgid "Upload from Camera" msgstr "" -#: src/view/com/util/UserAvatar.tsx:507 -#: src/view/com/util/UserBanner.tsx:177 +#: src/view/com/util/UserAvatar.tsx:508 +#: src/view/com/util/UserBanner.tsx:178 msgid "Upload from Files" msgstr "" -#: src/view/com/util/UserAvatar.tsx:501 -#: src/view/com/util/UserAvatar.tsx:505 -#: src/view/com/util/UserBanner.tsx:171 -#: src/view/com/util/UserBanner.tsx:175 +#: src/view/com/util/UserAvatar.tsx:502 +#: src/view/com/util/UserAvatar.tsx:506 +#: src/view/com/util/UserBanner.tsx:172 +#: src/view/com/util/UserBanner.tsx:176 msgid "Upload from Library" msgstr "" @@ -12363,7 +12363,7 @@ msgid "user" msgstr "user" #: src/components/dms/AfterReportConversationDialog.tsx:187 -#: src/components/dms/AfterReportDialog.tsx:150 +#: src/components/dms/AfterReportDialog.tsx:155 msgctxt "toast" msgid "User blocked" msgstr "" @@ -12631,8 +12631,8 @@ msgid "View" msgstr "" #. placeholder {0}: view.source.title -#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:319 -#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:588 +#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:320 +#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:589 msgid "View {0}" msgstr "View {0}" @@ -12661,7 +12661,7 @@ msgstr "View {0}’s profile" msgid "View {displayName}’s profile" msgstr "View {displayName}’s profile" -#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:436 +#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:437 msgid "View {publicationTitle}" msgstr "View {publicationTitle}" @@ -12728,10 +12728,10 @@ msgstr "" msgid "View profile banner" msgstr "View profile banner" -#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:319 -#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:426 -#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:437 -#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:588 +#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:320 +#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:427 +#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:438 +#: src/components/Post/Embed/StandardSiteEmbed/index.tsx:589 msgid "View publication" msgstr "View publication" @@ -12785,8 +12785,8 @@ msgstr "" msgid "View your verifications" msgstr "" -#: src/components/images/AutoSizedImage.tsx:220 -#: src/components/images/AutoSizedImage.tsx:252 +#: src/components/images/AutoSizedImage.tsx:221 +#: src/components/images/AutoSizedImage.tsx:253 msgid "Views full image" msgstr "" @@ -12829,8 +12829,8 @@ msgstr "" msgid "Warn content and filter from feeds" msgstr "" -#: src/features/liveNow/components/LiveStatusDialog.tsx:189 -#: src/features/liveNow/components/LiveStatusDialog.tsx:198 +#: src/features/liveNow/components/LiveStatusDialog.tsx:190 +#: src/features/liveNow/components/LiveStatusDialog.tsx:199 msgid "Watch now" msgstr "" @@ -12977,7 +12977,7 @@ msgstr "" msgid "We’re having network issues, try again" msgstr "We’re having network issues, try again" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:96 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:97 msgid "We’re introducing a new layer of verification on Bluesky — an easy-to-see checkmark." msgstr "" @@ -13063,7 +13063,7 @@ msgstr "" msgid "What's up?" msgstr "" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:148 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:150 msgid "When you tap on a check, you’ll see which organizations have granted verification." msgstr "" @@ -13080,7 +13080,7 @@ msgstr "Who can join this group chat and how" msgid "Who can reply" msgstr "" -#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:129 +#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:131 msgid "Who can verify?" msgstr "" @@ -13132,7 +13132,7 @@ msgstr "" msgid "Why should this user be reviewed?" msgstr "" -#: src/components/dms/AfterReportDialog.tsx:46 +#: src/components/dms/AfterReportDialog.tsx:51 msgid "Would you like to block this user and/or delete this conversation?" msgstr "" @@ -13224,7 +13224,7 @@ msgid "You are accessing Bluesky from a region that legally requires us to verif msgstr "" #. placeholder {0}: sanitizeHandle(profile.handle, '@') -#: src/components/dms/MessageItem.tsx:636 +#: src/components/dms/MessageItem.tsx:605 msgid "You are blocking {0}" msgstr "You are blocking {0}" @@ -13316,7 +13316,7 @@ msgstr "" msgid "You can continue ongoing conversations regardless of which setting you choose." msgstr "" -#: src/components/dialogs/nuxs/ActivitySubscriptions.tsx:149 +#: src/components/dialogs/nuxs/ActivitySubscriptions.tsx:150 msgid "You can now choose to be notified when specific people post. If there’s someone you want timely updates from, go to their profile and find the new bell icon near the follow button." msgstr "" @@ -13552,7 +13552,7 @@ msgid "You probably want to restart the app now." msgstr "" #. placeholder {0}: reaction.value -#: src/components/dms/MessageItem.tsx:287 +#: src/components/dms/MessageItem.tsx:263 msgid "You reacted {0}" msgstr "" @@ -13841,7 +13841,7 @@ msgstr "" msgid "Your preferred language" msgstr "" -#: src/screens/Onboarding/StepFinished/ValuePropositionPager.tsx:100 +#: src/screens/Onboarding/StepFinished/ValuePropositionPager.tsx:102 #: src/screens/Onboarding/StepFinished/ValuePropositionPager.web.tsx:53 msgid "Your profile picture" msgstr "" @@ -13859,7 +13859,7 @@ msgid "Your reply was sent" msgstr "" #. placeholder {0}: state.selectedLabeler?.creator.displayName -#: src/components/moderation/ReportDialog/index.tsx:517 +#: src/components/moderation/ReportDialog/index.tsx:519 msgid "Your report will be sent to <0>{0}." msgstr "" From a19d652a39b4e483a30a409c37a7d74b6552f7c6 Mon Sep 17 00:00:00 2001 From: surfdude29 <149612116+surfdude29@users.noreply.github.com> Date: Thu, 4 Jun 2026 07:50:56 +0100 Subject: [PATCH 27/31] Fix invalid `zero` plural category and add plural formatting (#10722) --- src/screens/Messages/JoinRequests.tsx | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/screens/Messages/JoinRequests.tsx b/src/screens/Messages/JoinRequests.tsx index 80d31299dc..98952aee34 100644 --- a/src/screens/Messages/JoinRequests.tsx +++ b/src/screens/Messages/JoinRequests.tsx @@ -411,7 +411,6 @@ function Header({ count?: number hasMoreRequests?: boolean }) { - const {t: l} = useLingui() return ( @@ -420,15 +419,15 @@ function Header({ {count === undefined ? ( Requests to join ) : hasMoreRequests ? ( - l({ - message: `${count}+ requests to join`, - comment: - 'Displayed when there are more requests to join a group chat than have been loaded', - }) + ) : ( From 9f200aab05e8f71f8e4fb74f59a9b400e89f8964 Mon Sep 17 00:00:00 2001 From: surfdude29 <149612116+surfdude29@users.noreply.github.com> Date: Thu, 4 Jun 2026 08:51:51 +0100 Subject: [PATCH 28/31] Use correct `Plural` macro in InviteLinkDialog (#10723) --- src/screens/Messages/components/InviteLinkDialog.tsx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/screens/Messages/components/InviteLinkDialog.tsx b/src/screens/Messages/components/InviteLinkDialog.tsx index ad6d4a08e5..6e898a0a9c 100644 --- a/src/screens/Messages/components/InviteLinkDialog.tsx +++ b/src/screens/Messages/components/InviteLinkDialog.tsx @@ -5,8 +5,7 @@ import { moderateProfile, type ModerationOpts, } from '@atproto/api' -import {plural} from '@lingui/core/macro' -import {Trans, useLingui} from '@lingui/react/macro' +import {Plural, Trans, useLingui} from '@lingui/react/macro' import {useOpenComposer} from '#/lib/hooks/useOpenComposer' import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name' @@ -178,11 +177,7 @@ export function InviteLinkDialog({ Group chats can only have a maximum of{' '} - {plural(convo.details.memberLimit, { - one: '# person', - other: '# people', - })} - . + . From 49f8e5031f42762805b1ab392c68e7bf75812e9d Mon Sep 17 00:00:00 2001 From: heikadog <41552394+heikadog@users.noreply.github.com> Date: Thu, 4 Jun 2026 06:28:40 -0400 Subject: [PATCH 29/31] Fix labeller highlight when selected on bottom bar (#10716) --- src/view/shell/bottom-bar/BottomBar.tsx | 5 +++-- src/view/shell/bottom-bar/BottomBarStyles.tsx | 9 +++++++++ src/view/shell/bottom-bar/BottomBarWeb.tsx | 9 +++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/view/shell/bottom-bar/BottomBar.tsx b/src/view/shell/bottom-bar/BottomBar.tsx index e6a1eeaad5..605542749e 100644 --- a/src/view/shell/bottom-bar/BottomBar.tsx +++ b/src/view/shell/bottom-bar/BottomBar.tsx @@ -144,6 +144,7 @@ export function BottomBar({navigation}: BottomTabBarProps) { const [demoMode] = useDemoMode() const {isActive: live} = useActorStatus(profile) + const isLabeler = profile?.associated?.labeler return ( <> @@ -276,9 +277,9 @@ export function BottomBar({navigation}: BottomTabBarProps) { { closeAllActiveElements() @@ -186,9 +187,13 @@ export function BottomBarWeb() { From c79b5bfa08d6ddeb909dab0c0b392e5123d9c5bb Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Thu, 4 Jun 2026 09:29:36 -0500 Subject: [PATCH 30/31] Disable overscroll on Android to fix settle discrepancy (#10717) --- src/components/images/Gallery/index.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/images/Gallery/index.tsx b/src/components/images/Gallery/index.tsx index 9ae677c2d2..fd18cb8a0b 100644 --- a/src/components/images/Gallery/index.tsx +++ b/src/components/images/Gallery/index.tsx @@ -40,7 +40,7 @@ import {ImageContextMenu} from '#/components/Post/Embed/ImageContextMenu' import {PostEmbedViewContext} from '#/components/Post/Embed/types' import {Text} from '#/components/Typography' import {useAnalytics} from '#/analytics' -import {IS_WEB} from '#/env' +import {IS_ANDROID, IS_WEB} from '#/env' export * from './const' export * from './maybeApplyGalleryOffsetStyles' @@ -264,6 +264,9 @@ export function Gallery({ aria-label={l`Image gallery, ${images.length} images`} horizontal pagingEnabled={false} + // Disable Android's stretch overscroll, which can leave the carousel + // settled just off the left edge instead of aligned to x = 0 + overScrollMode={IS_ANDROID ? 'never' : 'auto'} showsHorizontalScrollIndicator={false} directionalLockEnabled nestedScrollEnabled From 08cd4e58b023e1ffe2b3681f4f8c690a24af84a0 Mon Sep 17 00:00:00 2001 From: DS Boyce <260543580+ds-boyce@users.noreply.github.com> Date: Thu, 4 Jun 2026 08:11:50 -0700 Subject: [PATCH 31/31] Add group chat join links to supported embed types (#10454) --- __tests__/lib/strings/url-helpers.test.ts | 45 +++ eslint-suppressions.json | 8 - src/components/Post/Embed/ChatInviteEmbed.tsx | 41 +++ .../Post/Embed/JoinRequestEmbed.tsx | 271 ++++++++++++++++++ src/components/Post/Embed/index.tsx | 17 ++ .../intents/GroupChatJoinDialog.tsx | 10 +- src/lib/api/index.ts | 18 +- src/lib/api/resolve.ts | 25 +- src/lib/strings/url-helpers.ts | 5 +- src/state/queries/join-links.ts | 6 +- src/view/com/composer/ExternalEmbed.tsx | 3 + .../com/composer/ExternalEmbedRemoveBtn.tsx | 7 +- 12 files changed, 434 insertions(+), 22 deletions(-) create mode 100644 src/components/Post/Embed/ChatInviteEmbed.tsx create mode 100644 src/components/Post/Embed/JoinRequestEmbed.tsx diff --git a/__tests__/lib/strings/url-helpers.test.ts b/__tests__/lib/strings/url-helpers.test.ts index 0b1b750281..23ffaa2875 100644 --- a/__tests__/lib/strings/url-helpers.test.ts +++ b/__tests__/lib/strings/url-helpers.test.ts @@ -1,6 +1,7 @@ import {describe, expect, it} from '@jest/globals' import { + getChatInviteCodeFromUrl, isPossiblyAUrl, isTrustedUrl, linkRequiresWarning, @@ -178,3 +179,47 @@ describe('isTrustedUrl', () => { expect(output).toEqual(expected) }) }) + +describe('getChatInviteCodeFromUrl', () => { + type Case = [string, string | undefined] + + const cases: Case[] = [ + ['https://bsky.app/c/abcdefg', 'abcdefg'], + ['https://bsky.app/c/abcdefghij', 'abcdefghij'], + // http is not recognized as a bsky.app url + ['http://bsky.app/c/abcdefg', undefined], + ['https://bsky.app/c/abcdefg?utm=foo', 'abcdefg'], + ['https://bsky.app/c/abcdefg#section', 'abcdefg'], + ['/c/abcdefg', 'abcdefg'], + ['/c/abcdefg?utm=foo', 'abcdefg'], + ['/c/abcdefg#section', 'abcdefg'], + + // too short + ['https://bsky.app/c/abcdef', undefined], + ['/c/abcdef', undefined], + // too long + ['https://bsky.app/c/abcdefghijk', undefined], + ['/c/abcdefghijk', undefined], + // invalid characters + ['https://bsky.app/c/abc-def', undefined], + ['/c/abc def', undefined], + // trailing path + ['https://bsky.app/c/abcdefg/extra', undefined], + ['/c/abcdefg/extra', undefined], + // wrong path + ['https://bsky.app/profile/abcdefg', undefined], + ['https://bsky.app/c', undefined], + // wrong host + ['https://example.com/c/abcdefg', undefined], + // not a url, not a path + ['c/abcdefg', undefined], + ['abcdefg', undefined], + ['', undefined], + // malformed url + ['https://[invalid/c/abcdefg', undefined], + ] + + it.each(cases)('given input %p, returns %p', (input, expected) => { + expect(getChatInviteCodeFromUrl(input)).toEqual(expected) + }) +}) diff --git a/eslint-suppressions.json b/eslint-suppressions.json index f2e677dc79..d8555ace5b 100644 --- a/eslint-suppressions.json +++ b/eslint-suppressions.json @@ -811,14 +811,6 @@ "count": 1 } }, - "src/lib/api/index.ts": { - "@typescript-eslint/no-explicit-any": { - "count": 5 - }, - "@typescript-eslint/no-unsafe-member-access": { - "count": 3 - } - }, "src/lib/async/retry.ts": { "@typescript-eslint/no-explicit-any": { "count": 2 diff --git a/src/components/Post/Embed/ChatInviteEmbed.tsx b/src/components/Post/Embed/ChatInviteEmbed.tsx new file mode 100644 index 0000000000..744fcfb7fa --- /dev/null +++ b/src/components/Post/Embed/ChatInviteEmbed.tsx @@ -0,0 +1,41 @@ +import {type StyleProp, type ViewStyle} from 'react-native' +import {type AppBskyEmbedExternal} from '@atproto/api' + +import {useJoinLinkPreviewsQuery} from '#/state/queries/join-links' +import {useSession} from '#/state/session' +import {atoms as a} from '#/alf' +import {ExternalEmbed} from '#/components/Post/Embed/ExternalEmbed' +import {JoinRequestEmbed} from '#/components/Post/Embed/JoinRequestEmbed' + +export function ChatInviteEmbed({ + code, + link, + onOpen, + style, +}: { + code: string + link: AppBskyEmbedExternal.ViewExternal + onOpen?: () => void + style?: StyleProp +}) { + const {hasSession} = useSession() + const {data, error, isPending} = useJoinLinkPreviewsQuery({ + codes: [code], + hasSession, + }) + + const preview = data?.joinLinkPreviews[0] + + if (error) { + return + } + + return ( + + ) +} diff --git a/src/components/Post/Embed/JoinRequestEmbed.tsx b/src/components/Post/Embed/JoinRequestEmbed.tsx new file mode 100644 index 0000000000..77a0223bec --- /dev/null +++ b/src/components/Post/Embed/JoinRequestEmbed.tsx @@ -0,0 +1,271 @@ +import {type StyleProp, View, type ViewStyle} from 'react-native' +import {type ChatBskyGroupDefs} from '@atproto/api' +import {Plural, Trans, useLingui} from '@lingui/react/macro' +import {useNavigation} from '@react-navigation/native' + +import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name' +import {type NavigationProp} from '#/lib/routes/types' +import {sanitizeHandle} from '#/lib/strings/handles' +import {atoms as a, useTheme} from '#/alf' +import {AvatarBubbles} from '#/components/AvatarBubbles' +import { + Button, + type ButtonColor, + ButtonIcon, + ButtonText, +} from '#/components/Button' +import {ArrowRight_Stroke2_Corner0_Rounded as ArrowRightIcon} from '#/components/icons/Arrow' +import {ArrowBoxRight_Stroke2_Corner3_Rounded as JoinIcon} from '#/components/icons/ArrowBoxRight' +import {CheckThick_Stroke2_Corner0_Rounded as CheckIcon} from '#/components/icons/Check' +import {RaisingHand4Finger_Stroke2_Corner2_Rounded as HandIcon} from '#/components/icons/RaisingHand' +import {Warning_Stroke2_Corner0_Rounded as WarningIcon} from '#/components/icons/Warning' +import {useIntentDialogs} from '#/components/intents/IntentDialogs' +import {Loader} from '#/components/Loader' +import {ProfileBadges} from '#/components/ProfileBadges' +import {Text} from '#/components/Typography' + +const JOIN_REQUEST_EMBED_HEIGHT = 152 + +export function JoinRequestEmbed({ + loading = false, + preview, + style, + onOpen, +}: { + loading?: boolean + preview?: ChatBskyGroupDefs.JoinLinkPreviewView + style?: StyleProp + onOpen?: () => void +}) { + const t = useTheme() + + if (loading) { + return ( + + + + ) + } + + if (!preview) { + return ( + + + + Chat invite link no longer available + + + ) + } + + return ( + + ) +} + +function JoinRequestEmbedInner({ + preview, + style, + onOpen, +}: { + preview: ChatBskyGroupDefs.JoinLinkPreviewView + style?: StyleProp + onOpen?: () => void +}) { + const t = useTheme() + const {t: l} = useLingui() + const navigation = useNavigation() + + const {groupChatJoinDialogControl, setGroupChatJoinState} = useIntentDialogs() + + const ownerDisplayName = createSanitizedDisplayName(preview.owner) + const ownerHandle = sanitizeHandle(preview.owner.handle, '@') + + const avatarProfiles = preview.convo?.members ?? [preview.owner] + + const convoId = preview.convo?.id + const isFollowing = preview.owner.viewer?.following ?? false + const hasRequested = !convoId && preview.viewer?.requestedAt != null + + let canJoin = true + let ButtonIconImage = JoinIcon + let buttonText = preview.requireApproval ? l`Request to join` : l`Join` + let buttonColor: ButtonColor = 'primary' + if (preview.enabledStatus !== 'enabled') { + canJoin = false + ButtonIconImage = WarningIcon + buttonText = l`Chat invite link no longer available` + buttonColor = 'secondary' + } else if (preview.memberCount >= preview.memberLimit) { + canJoin = false + ButtonIconImage = HandIcon + buttonText = l`This chat is full` + buttonColor = 'secondary' + } else if (preview.joinRule === 'followedByOwner' && !isFollowing) { + canJoin = false + ButtonIconImage = HandIcon + buttonText = l`Only people the chat owner follows can join` + buttonColor = 'secondary' + } else if (hasRequested) { + ButtonIconImage = CheckIcon + buttonText = l`Requested` + buttonColor = 'secondary' + } + + return ( + + + + + + {preview.name} + + + + Group chat + + + + {preview.memberCount}/{preview.memberLimit}{' '} + + + + + + + + By{' '} + + {ownerDisplayName} + + + + + + {ownerHandle} + + + + + {convoId ? ( + + ) : ( + + )} + + ) +} diff --git a/src/components/Post/Embed/index.tsx b/src/components/Post/Embed/index.tsx index 054558ad83..ab6f5dc439 100644 --- a/src/components/Post/Embed/index.tsx +++ b/src/components/Post/Embed/index.tsx @@ -12,6 +12,7 @@ import {Trans} from '@lingui/react/macro' import {useQueryClient} from '@tanstack/react-query' import {makeProfileLink} from '#/lib/routes/links' +import {getChatInviteCodeFromUrl} from '#/lib/strings/url-helpers' import {useModerationOpts} from '#/state/preferences/moderation-opts' import {unstableCacheProfileView} from '#/state/queries/profile' import {useSession} from '#/state/session' @@ -33,6 +34,7 @@ import { type EmbedType, parseEmbed, } from '#/types/bsky/post' +import {ChatInviteEmbed} from './ChatInviteEmbed' import {ExternalEmbed} from './ExternalEmbed' import {ModeratedFeedEmbed} from './FeedEmbed' import {ImageEmbed} from './ImageEmbed' @@ -110,6 +112,21 @@ function MediaEmbed({ ) } + const chatInviteCode = getChatInviteCodeFromUrl(embed.view.external.uri) + if (chatInviteCode) { + return ( + + + + ) + } return ( - Open chat + + Open chat + ) : ( @@ -416,8 +420,8 @@ function GroupChatJoinDialogContent({code}: {code?: string}) { } accessibilityHint={ joinLinkPreview.requireApproval - ? l`Request access to join this group chat` - : l`Join this group chat` + ? l`Tap to request access to join this group chat` + : l`Tap to join this group chat immediately` } size="large" color={buttonColor} diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index d9a026ca83..c5f6cc6eb5 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -177,7 +177,8 @@ export async function post( writes: writes, validate: true, }) - } catch (e: any) { + } catch (err) { + const e = err as Error logger.error(`Failed to create post`, { safeMessage: e.message, }) @@ -427,6 +428,16 @@ async function resolveMedia( }, } } + if (resolvedLink.type === 'chat-invite' && resolvedLink.view) { + return { + $type: 'app.bsky.embed.external', + external: { + uri: resolvedLink.uri, + title: resolvedLink.view.name, + description: `${resolvedLink.view.memberCount}/${resolvedLink.view.memberLimit}`, + }, + } + } } return undefined } @@ -470,6 +481,7 @@ async function computeCid(record: AppBskyFeedPost.Record): Promise { } // Returns a transformed version of the object for use in DAG-CBOR. +// eslint-disable-next-line @typescript-eslint/no-explicit-any function prepareForHashing(v: any): any { // IMPORTANT: BlobRef#ipld() returns the correct object we need for hashing, // the API client will convert this for you but we're hashing in the client, @@ -492,9 +504,10 @@ function prepareForHashing(v: any): any { // Walk through plain objects if (isPlainObject(v)) { - const obj: any = {} + const obj: Record = {} let pure = true for (const key in v) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access let value = v[key] // `value` is undefined if (value === undefined) { @@ -513,6 +526,7 @@ function prepareForHashing(v: any): any { return v } +// eslint-disable-next-line @typescript-eslint/no-explicit-any function isPlainObject(v: any): boolean { if (typeof v !== 'object' || v === null) { return false diff --git a/src/lib/api/resolve.ts b/src/lib/api/resolve.ts index f75cd74db2..d411bd8204 100644 --- a/src/lib/api/resolve.ts +++ b/src/lib/api/resolve.ts @@ -2,11 +2,12 @@ import { type AppBskyFeedDefs, type AppBskyGraphDefs, type BskyAgent, + type ChatBskyGroupDefs, type ComAtprotoRepoStrongRef, } from '@atproto/api' import {AtUri} from '@atproto/api' -import {POST_IMG_MAX} from '#/lib/constants' +import {DM_SERVICE_HEADERS, POST_IMG_MAX} from '#/lib/constants' import {getLinkMeta, type LinkMeta} from '#/lib/link-meta/link-meta' import {resolveShortLink} from '#/lib/link-meta/resolve-short-link' import {downloadAndResize} from '#/lib/media/manip' @@ -16,6 +17,7 @@ import { } from '#/lib/strings/starter-pack' import { convertBskyAppUrlIfNeeded, + getChatInviteCodeFromUrl, isBskyCustomFeedUrl, isBskyListUrl, isBskyPostUrl, @@ -71,12 +73,20 @@ type ResolvedStarterPackRecord = { view: AppBskyGraphDefs.StarterPackView } +type ResolvedChatInvite = { + type: 'chat-invite' + uri: string + code: string + view?: ChatBskyGroupDefs.JoinLinkPreviewView +} + export type ResolvedLink = | ResolvedExternalLink | ResolvedPostRecord | ResolvedFeedRecord | ResolvedListRecord | ResolvedStarterPackRecord + | ResolvedChatInvite export class EmbeddingDisabledError extends Error { constructor() { @@ -141,6 +151,19 @@ export async function resolveLink( view: res.data.list, } } + const chatInviteCode = getChatInviteCodeFromUrl(uri) + if (chatInviteCode) { + const res = await agent.chat.bsky.group.getJoinLinkPreviews( + {codes: [chatInviteCode]}, + {headers: DM_SERVICE_HEADERS}, + ) + return { + type: 'chat-invite', + uri, + code: chatInviteCode, + view: res.data.joinLinkPreviews[0], + } + } if (isBskyStartUrl(uri) || isBskyStarterPackUrl(uri)) { const parsed = parseStarterPackUri(uri) if (!parsed) { diff --git a/src/lib/strings/url-helpers.ts b/src/lib/strings/url-helpers.ts index b5c278dacf..fd1a5ef7d9 100644 --- a/src/lib/strings/url-helpers.ts +++ b/src/lib/strings/url-helpers.ts @@ -1,5 +1,5 @@ import {AtUri} from '@atproto/api' -import psl from 'psl' +import {parse} from 'psl' import TLDs from 'tlds' import {BSKY_SERVICE} from '#/lib/constants' @@ -178,6 +178,7 @@ export function isBskyStarterPackUrl(url: string): boolean { return false } +// Invite codes are 7 alphanumeric characters long, supporting up to 10 here to future-proof. export const CHAT_INVITE_CODE_REGEX = /^\/c\/([a-zA-Z0-9]{7,10})$/ export function getChatInviteCodeFromUrl(url: string): string | undefined { @@ -328,7 +329,7 @@ export function isPossiblyAUrl(str: string): boolean { } export function splitApexDomain(hostname: string): [string, string] { - const hostnamep = psl.parse(hostname) + const hostnamep = parse(hostname) if (hostnamep.error || !hostnamep.listed || !hostnamep.domain) { return ['', hostname] } diff --git a/src/state/queries/join-links.ts b/src/state/queries/join-links.ts index 6aa10331ef..99a37b6b06 100644 --- a/src/state/queries/join-links.ts +++ b/src/state/queries/join-links.ts @@ -20,9 +20,11 @@ export const createJoinLinkPreviewQueryKey = (args: { export function useJoinLinkPreviewsQuery({ codes, hasSession, + staleTime = STALE.MINUTES.ONE, }: { codes?: string[] hasSession: boolean + staleTime?: number }) { const agent = useAgent() @@ -45,7 +47,7 @@ export function useJoinLinkPreviewsQuery({ } }, enabled: codes != null && codes.length > 0, - staleTime: STALE.SECONDS.FIFTEEN, + staleTime, }) } @@ -66,7 +68,7 @@ export function usePrefetchJoinLinkPreviews() { : await previewAgent.chat.bsky.group.getJoinLinkPreviews({codes}) return res.data }, - staleTime: STALE.SECONDS.FIFTEEN, + staleTime: STALE.MINUTES.ONE, }) } } diff --git a/src/view/com/composer/ExternalEmbed.tsx b/src/view/com/composer/ExternalEmbed.tsx index ecd22d7c39..5cc87c63f5 100644 --- a/src/view/com/composer/ExternalEmbed.tsx +++ b/src/view/com/composer/ExternalEmbed.tsx @@ -11,6 +11,7 @@ import {atoms as a, useTheme} from '#/alf' import {Loader} from '#/components/Loader' import {ExternalEmbed} from '#/components/Post/Embed/ExternalEmbed' import {ModeratedFeedEmbed} from '#/components/Post/Embed/FeedEmbed' +import {JoinRequestEmbed} from '#/components/Post/Embed/JoinRequestEmbed' import {ModeratedListEmbed} from '#/components/Post/Embed/ListEmbed' import {StandardSiteEmbed} from '#/components/Post/Embed/StandardSiteEmbed' import {isStandardSiteEmbed} from '#/components/Post/Embed/StandardSiteEmbed/utils' @@ -115,6 +116,8 @@ export const ExternalEmbedLink = ({ hideAlt /> ) + } else if (data.type === 'chat-invite') { + return } else if (data.kind === 'feed') { return ( void} & ViewStyleProp) { const t = useTheme() - const {_} = useLingui() + const {t: l} = useLingui() return (