Commit Graph

1672 Commits

Author SHA1 Message Date
Mary Kate 4ebe893cde Merge branch 'fix/addressable-event-comment-preview' into 'main'
Add context preview for comments on addressable events (vines, music, etc.)

Closes #75

See merge request soapbox-pub/ditto!53
2026-03-07 18:56:11 +00:00
Mary Kate c2378e4dff Merge branch 'fix/copy-theme-background-not-applied' into 'main'
Fix copied theme background not applying until page refresh

Closes #71

See merge request soapbox-pub/ditto!52
2026-03-07 18:52:34 +00:00
Mary Kate Fain 73a048aeae Use sidebar icons for addressable event preview cards
Look up the content type's icon from CONTENT_KIND_ICONS (same icons
used in the sidebar) and display it in both the label row and as the
fallback thumbnail placeholder.
2026-03-07 12:50:45 -06:00
Mary Kate Fain b401a21cbc Add context preview for comments on addressable events (vines, music, etc.)
When viewing a kind 1111 comment that replies to an addressable event
like a vine (34236), music, or article, the detail page now shows a
rich preview banner with thumbnail, kind label, title, and author —
matching the existing pattern for URL, profile, and community previews.

Works generically for all addressable event kinds by looking up the
kind label from EXTRA_KINDS and extracting thumbnails from image/imeta
tags.

Closes #75
2026-03-07 12:46:11 -06:00
Mary Kate 585dc502cb Merge branch 'fix/profile-tab-form-labels' into 'main'
Improve profile custom tab builder form labels and field order

Closes #68

See merge request soapbox-pub/ditto!51
2026-03-07 18:33:55 +00:00
Mary Kate Fain d6224b26b3 Fix copied theme background not applying until page refresh
The profile page effect cleanup was restoring the background using a
stale previousBgCss value captured when the effect first ran, before
'Copy Theme' was clicked. Now the cleanup always rebuilds background
CSS from ownThemeRef.current (like colors already do), so it reflects
any theme changes made while on the profile page.

Closes #71
2026-03-07 12:32:00 -06:00
Mary Kate Fain b2ad06ae0a Fix Kinds popover not opening inside profile tab dialog
Portal the popover into the DialogContent element using
PortalContainerProvider so Radix pointer-event blocking
doesn't prevent the dropdown from opening.

Closes #68
2026-03-07 12:25:07 -06:00
Mary Kate Fain 77cd2de47a Improve profile custom tab builder form labels and field order
Rename 'Search query' to 'Filter by Word' and 'Kinds' to 'Content Kinds'
for clarity. Reorder fields to: Tab name, Content Kinds, Filter by Word,
Authors — placing the higher-order Kind filter before the word filter.

Closes #68
2026-03-07 12:18:43 -06:00
Mary Kate eccbc1d7c7 Merge branch 'fix/country-feed-sort-order' into 'main'
Fix country feeds showing posts oldest-first instead of newest-first

Closes #64

See merge request soapbox-pub/ditto!50
2026-03-07 18:18:16 +00:00
Mary Kate Fain f25f2925ba Fix country feeds showing posts oldest-first instead of newest-first
Country feeds (iso3166) are social feeds and should display in
reverse-chronological order. URL and ISBN comment threads keep
the existing oldest-first conversation order.

Closes #64
2026-03-07 12:13:50 -06:00
Mary Kate a63a1fb165 Merge branch 'fix/books-feed-back-arrow' into 'main'
Add back arrow to Books feed header on mobile

Closes #79

See merge request soapbox-pub/ditto!49
2026-03-07 18:13:25 +00:00
Mary Kate Fain 2b6fddeab9 Add back arrow to Books feed header
Closes #79
2026-03-07 12:06:57 -06:00
Alex Gleason 2e6d328335 Remove mobile bottom navigation bar
Delete MobileBottomNav component and all related code including the
noBottomSpacer layout option, bottom nav height spacer, and CSS
calculations that accounted for the bottom nav height.
2026-03-07 11:57:17 -06:00
Alex Gleason 60e3ead6ed Merge branch 'main' of gitlab.com:soapbox-pub/ditto 2026-03-07 11:52:48 -06:00
Alex Gleason bed84c6285 Fix iOS Safari auto-zoom on input focus by ensuring 16px minimum font size on mobile 2026-03-07 11:42:54 -06:00
Alex Gleason c3bc7aea61 Merge branch 'fix/gif-picker-scrolling' into 'main'
Fix GIF picker scroll inside dialogs by portaling into modal container

See merge request soapbox-pub/ditto!45
2026-03-07 16:59:12 +00:00
Chad Curtis 53eb0f37e9 Add kind 1111 to Android native notification service
- Add kind 1111 to the Nostr REQ filter in NotificationRelayService
- Add case 1111 to kindToAction() in NostrPoller with the same context-aware
  label logic: 'replied to your comment' when k=1111, 'commented on your post' otherwise
2026-03-07 02:01:59 -06:00
Chad Curtis 01114f25c3 Fix CommentContext to show 'Replying to @user' for nested comment replies
When a kind 1111 comment's parent is another comment (k tag = '1111'), show
'Replying to @user' with a link to the parent comment instead of the generic
'Commenting on [root]' label that always pointed to the thread root.
2026-03-07 02:00:06 -06:00
Chad Curtis e43a8ce72a Add kind 1111 (NIP-22 comment) notifications
- Include kind 1111 in all three notification query filters (useNotifications, useHasUnreadNotifications, useNativeNotifications)
- Add CommentNotification component with context-aware action label: 'replied to your comment' when parent kind is 1111, otherwise 'commented on your post'
- Add 'New comment' title for native/browser push notifications
- Include kind 1111 in the Mentions tab filter alongside kind 1
2026-03-07 01:56:57 -06:00
Lemon 5a0bc346b7 fix: make emoji/GIF picker dialog dismiss on iOS tap-outside
- Raised dialog z-index from z-[150] to z-[250] so the overlay sits above
  CommentsSheet's backdrop (z-[200]) and receives touch events
- Removed stopPropagation from DialogOverlay/DialogContent onClick handlers
  which was preventing Radix DismissableLayer's deferred click listener from
  reaching document on iOS Safari

On iOS touch, Radix registers a one-time click listener on document after
pointerdown. The stopPropagation was intercepting that click before it could
reach document, so the dismiss callback never fired. Z-index stacking now
handles isolation between the dialog and the CommentsSheet backdrop.
2026-03-06 23:16:30 -08:00
Lemon f0e04e2569 Convert emoji/GIF/stickers picker from popover to centered dialog
The picker was positioned relative to the trigger button via a Popover,
which felt awkward especially on smaller screens or inside other modals.
Now renders as a centered Dialog with a backdrop for a more traditional
modal experience.
2026-03-06 23:16:30 -08:00
Lemon 54c4d7e47c Fix GIF picker scroll inside dialogs by portaling into modal container
Radix Dialog's RemoveScroll blocks wheel events on elements outside the
Dialog's DOM tree. The GIF picker Popover was portaling to document.body,
placing it outside the RemoveScroll boundary. Trackpad scrolling was
blocked while scrollbar dragging still worked.

Added PortalContainerContext so PopoverContent can portal into the modal
element instead of document.body when rendered inside a dialog/modal.
2026-03-06 23:16:30 -08:00
Alex Gleason 08e02190b4 URL-encode relay links in NoteContent to preserve slashes 2026-03-06 21:37:33 -06:00
Alex Gleason ae2f2d24ca Merge branch 'main' of gitlab.com:soapbox-pub/ditto
# Conflicts:
#	src/AppRouter.tsx
2026-03-06 21:36:05 -06:00
Alex Gleason ab5759a256 Simplify relay feed query: limit to 15, remove redundant sort 2026-03-06 21:35:10 -06:00
Alex Gleason fa484dc03d Use /r/* wildcard route for relay pages, supporting bare URLs with slashes 2026-03-06 21:32:35 -06:00
Alex Gleason 24e940ae63 Linkify wss:// URLs in post content to internal relay pages 2026-03-06 21:27:09 -06:00
Alex Gleason 4bc9a49819 Filter relay feed by supported kinds instead of empty filter 2026-03-06 21:24:11 -06:00
Alex Gleason b535ac37e3 Add /relay/* route with NIP-11 info and relay-specific feed 2026-03-06 21:16:05 -06:00
Chad Curtis 52bdb2366b Merge branch 'lists' into 'main'
Add user lists, follow packs, home feed tabs, and list-based feed filtering

See merge request soapbox-pub/ditto!44
2026-03-06 23:49:13 +00:00
Chad Curtis c2651dd36e Add lists intro image and remove rename input focus ring 2026-03-06 17:47:45 -06:00
Chad Curtis bbea03f517 Move Lists page into Settings as a sub-page
- /lists now redirects to /settings/lists
- UserListsPage redesigned to match the settings sub-page pattern (back arrow to /settings, collapsible section, IntroImage)
- Lists added as an entry in the SettingsPage menu
- Removed Lists from sidebar nav (it was requiresAuth and felt out of place)
2026-03-06 17:33:06 -06:00
Chad Curtis c7f3211b7d Add user lists, follow packs, home feed tabs, and list-based feed filtering
- Add NIP-51 Follow Sets management (useUserLists, UserListsPage at /lists)
- Add Follow Packs support (useFollowPacks) for curated people lists
- Add FeedEditModal for creating/editing home feed tabs with author scope,
  kind picker, and list/pack author population
- Add AddToListDialog accessible from the note more-menu
- Unify home feed tab resolution with profile tabs via useResolveTabFilter,
  supporting $follows variable expansion
- Wire People filter in Search and FeedEditModal with list/pack picker
- Extract shared ScopeToggle, ListPackPicker, parseSelectedKinds primitives
  into SavedFeedFiltersEditor to eliminate duplication across three call sites
- Cache savedFeeds in AppConfig for instant tab render on load
- Strip orphaned profile-destination entries from encrypted settings on read
2026-03-06 17:23:47 -06:00
Alex Gleason f26542dc12 Remove unused imports (Users, Info) from SavedFeedFiltersEditor 2026-03-06 12:05:32 -06:00
Alex Gleason d2bfb3566f Merge branch 'main' of gitlab.com:soapbox-pub/ditto 2026-03-06 12:00:46 -06:00
Alex Gleason f73f5da752 Append file extension to Blossom URLs when missing
Blossom servers return content-addressed URLs (/<sha256>) that may omit
the file extension. After upload, extract the extension from the source
filename and append it to the URL if not already present. This helps
clients infer the media type from the URL alone.
2026-03-06 11:57:27 -06:00
Mary Kate 5fe9b1f236 Merge branch 'update-themes' into 'main'
feat: add new theme presets (Silent Torii, Quiet Horizon, Where Paths Meet, Once)

See merge request soapbox-pub/ditto!43
2026-03-06 17:10:58 +00:00
Alex Gleason cb64a7fb6b Emit canonical NIP-01 filters for core profile tabs in kind 16769 events
Core tabs (Posts, Media, Likes, Wall, etc.) were published with empty
filter stubs, making the event uninterpretable by other clients. Now
each core tab carries a proper NIP-01 filter with the actual pubkey
interpolated (e.g. Wall: {kinds:[1111], #A:["0:<pubkey>:"]}).
2026-03-06 01:41:26 -06:00
Alex Gleason 9ea8788b92 Replace kind 16769 SavedFeedFilters with standard NIP-01 filters and variable tags
The proprietary SavedFeedFilters JSON schema in kind 16769 tab events was
non-interoperable. Replace it with standard NIP-01 filter objects that any
Nostr client can execute, plus a variable system (var tags) for dynamic
values like follow lists.

- Tab filters are now standard NIP-01 filters with optional NIP-50 search
- Variables ($name) in filters are resolved via var tags that extract tag
  values from referenced events (e.g. follow list pubkeys from kind 3)
- $me is the only runtime variable (profile owner's pubkey)
- Variables in arrays are expanded in-place (spliced)
- Add useResolveTabFilter hook for variable resolution with caching
- Update all consumers: ProfilePage, Feed, SearchPage, ContentSettings
- Remove SavedFeedFilters type entirely in favor of TabFilter
2026-03-06 01:28:09 -06:00
Alex Gleason d95e5ef380 Fix profile to default-select the leftmost custom tab on load 2026-03-06 00:52:40 -06:00
Alex Gleason 7222ae663f Add sync theme toggle to /themes page 2026-03-06 00:30:16 -06:00
Alex Gleason ded544a521 Update search query placeholder text 2026-03-06 00:22:34 -06:00
Alex Gleason 2850405664 Redesign profile tab editor: multi-kind selection, author scope toggle, remove unused filters
Simplify the ProfileTabEditModal to only show Search Query, Author Scope
(Me/Contacts/Global), and a multi-select Kind picker with checkboxes and
chips. Remove Media, Platform, and Language fields that were not useful
for profile tabs.

Extract parseKindFilter utility to handle comma-separated kind values
across all consumers (Feed, ProfilePage, SearchPage).
2026-03-06 00:18:16 -06:00
Alex Gleason 86eae15118 Merge branch 'main' of gitlab.com:soapbox-pub/ditto 2026-03-05 23:29:45 -06:00
Alex Gleason 8901bdfde3 Show subdivision name in 'Commenting on' context 2026-03-05 23:29:25 -06:00
Alex Gleason 41eb5a4ef0 Add subdivision support with Wikipedia data, proper names, and thumbnail flags 2026-03-05 23:27:47 -06:00
Alex Gleason 112d1fa1d4 Remove thumbnail banner from country pages 2026-03-05 23:21:29 -06:00
Alex Gleason 4245249524 Add Read more/Show less truncation to Wikipedia extract on country pages 2026-03-05 23:20:25 -06:00
Chad Curtis 3fb9751dc1 useMemo quote selection in NoTabsEmptyState 2026-03-05 23:13:28 -06:00
Chad Curtis 0d2cd42059 add fancy book-style empty state with Harlan Ellison quotes when profile has no tabs 2026-03-05 23:12:50 -06:00