diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 9404af75f..000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,44 +0,0 @@ -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] diff --git a/.tangled/workflows/deploy-web.yml b/.tangled/workflows/deploy-web.yml index 41e452929..acdb1e88c 100644 --- a/.tangled/workflows/deploy-web.yml +++ b/.tangled/workflows/deploy-web.yml @@ -1,23 +1,22 @@ when: - - event: ["manual"] + - event: ["push"] branch: ["main"] engine: "nixery" dependencies: nixpkgs: - - nodejs-slim_20 - - yarn + - nodejs + - pnpm - justbuild - - wrangler steps: - name: Install dependencies - command: "yarn install --frozen-lockfile" + command: "pnpm install --frozen-lockfile && pnpm add -g wrangler" - name: Build command: "just dist-build-web" - name: Publish to Cloudflare Pages command: | - wrangler pages deploy ./web-build --project-name=witchsky \ No newline at end of file + wrangler pages deploy --branch canary diff --git a/README.md b/README.md index 4df7ce340..1ec533c11 100644 --- a/README.md +++ b/README.md @@ -56,18 +56,11 @@ These are all available as options in the Runes sub-page of the app's settings. - Hide PDS badge for Bluesky-hosted accounts - Change favicon service - Impressions - - Posts - - Remove likes counts - - Remove reposts counts - - Remove quotes counts - - Remove saves counts - - Remove reply counts - - Profiles - - Remove followers counts - - Remove following counts - - Remove post counts - - Remove "followed by" avatars - - Show "Follows you" badge + - Set visibility (Hidden, Lite, Visible, or Exact) of + - Post like, repost, quote, save, and reply counts + - Profile follower, following, and post counts + - "Followed by" avatars on profiles + - Extra "Follows you" label - Usability - Feeds - Do not fall back to discover feed diff --git a/src/components/Button.tsx b/src/components/Button.tsx index 6284505a8..e0ff9f7be 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -231,6 +231,8 @@ export const Button = forwardRef( const onPointerDown = useCallback( (e: PointerEvent) => { if (onLongPressOuter && IS_WEB && !IS_WEB_TOUCH_DEVICE) { + const button = (e as unknown as globalThis.MouseEvent).button + if (button != null && button !== 0) return clearLongPressTimer() longPressTriggeredRef.current = false longPressTimerRef.current = setTimeout(() => { diff --git a/src/components/Link.tsx b/src/components/Link.tsx index e2124e7af..19bc91434 100644 --- a/src/components/Link.tsx +++ b/src/components/Link.tsx @@ -139,6 +139,10 @@ export function useLink({ const onPress = useCallback( (e: GestureResponderEvent) => { + if (IS_WEB && isModifiedClickEvent(e)) { + return + } + const exitEarlyIfFalse = outerOnPress?.(e) if (exitEarlyIfFalse === false) return @@ -279,16 +283,21 @@ export function useLink({ (e: GestureResponderEvent) => { const exitEarlyIfFalse = outerOnLongPress?.(e) if (exitEarlyIfFalse === false) return - return IS_NATIVE && shareOnLongPress ? handleLongPress() : undefined + if (shareOnLongPress) { + return handleLongPress() + } }, [outerOnLongPress, handleLongPress, shareOnLongPress], ) + const hasLongPress = + shareOnLongPress || (IS_NATIVE ? !!outerOnLongPress : false) + return { isExternal, href, onPress, - onLongPress, + onLongPress: hasLongPress ? onLongPress : undefined, } } diff --git a/src/components/dms/MessagesListBlockedFooter.tsx b/src/components/dms/MessagesListBlockedFooter.tsx index 1fbee421b..081fb2995 100644 --- a/src/components/dms/MessagesListBlockedFooter.tsx +++ b/src/components/dms/MessagesListBlockedFooter.tsx @@ -3,6 +3,7 @@ import {View} from 'react-native' import {type ModerationDecision} from '@atproto/api' import {Trans, useLingui} from '@lingui/react/macro' +import {useEnableSquareButtons} from '#/state/preferences/enable-square-buttons' import {useProfileShadow} from '#/state/cache/profile-shadow' import {useProfileBlockMutationQueue} from '#/state/queries/profile' import {atoms as a, useTheme} from '#/alf' @@ -31,6 +32,7 @@ export function MessagesListBlockedFooter({ }) { const t = useTheme() const {t: l} = useLingui() + const enableSquareButtons = useEnableSquareButtons() const recipient = useProfileShadow(initialRecipient) const [_queueBlock, queueUnblock] = useProfileBlockMutationQueue(recipient) @@ -66,7 +68,7 @@ export function MessagesListBlockedFooter({ a.justify_center, a.p_lg, t.atoms.bg_contrast_50, - {borderRadius: 40}, + {borderRadius: enableSquareButtons ? 20 : 40}, ]}> { ) } -const onMouseDown = (e: React.MouseEvent) => { +const onMouseDown = (e: React.MouseEvent & {target: HTMLElement}) => { // Prevents the middle click scroll from enabling - if (e.button !== 1) return + if (e.button !== 1 || e.target.closest('a') || e.target.tagName === 'A') { + return + } e.preventDefault() }