Commit Graph

1441 Commits

Author SHA1 Message Date
Alex Gleason 729a844606 Fix ESLint error: remove unused isTreasure variable in NoteCard 2026-03-04 14:46:49 -06:00
Alex Gleason e94f9c1739 Extract relay/author hints from reply event to enrich NIP-22 comment tags 2026-03-04 14:24:44 -06:00
Alex Gleason 350f26bc6e Display kind 1111 (NIP-22) replies on kind 1 posts 2026-03-04 14:24:24 -06:00
Chad Curtis 463a621488 Fix emoji picker blur, tab alignment, and consistent picker sizing 2026-03-04 04:03:09 -06:00
Chad Curtis a914efacfd Add Stickers tab to emoji/GIF picker using custom emoji packs 2026-03-04 03:45:01 -06:00
Chad Curtis ededafa8de Merge emoji and GIF into single tabbed picker in ComposeBox 2026-03-04 03:37:52 -06:00
Chad Curtis f3ce89bc94 Consolidate action headers into generic EventActionHeader with KIND_HEADER_MAP lookup 2026-03-04 03:15:15 -06:00
Chad Curtis b3297280ce Filter empty image tag values from gallery display 2026-03-04 03:08:55 -06:00
Chad Curtis dd6508583d fix: correctly sync sidebar order across devices and sessions
- useInitialSync was not applying sidebarOrder when decrypting settings on
  first login, so the remote sidebar layout was silently discarded
- NostrSync's seededTimestamp guard was returning early on the first sync
  cycle, meaning sidebarOrder only applied on the second page refresh
- account switches to accounts with no encrypted settings did not reset
  sidebarOrder, causing the previous user's sidebar layout to persist
2026-03-04 03:02:50 -06:00
Alex Gleason 7afcc6c737 Show full navigation in mobile drawer when logged out
The mobile drawer was showing only a login prompt when logged out,
while the desktop sidebar showed the full nav list. Now the logged-out
mobile drawer matches desktop: login area at top, full nav items
(filtered for auth requirements), and theme selector at bottom.
2026-03-03 21:20:57 -06:00
Alex Gleason 1f0a649491 Fix: show menu icon in mobile top bar when logged out
When logged out, the avatar slot in the mobile top bar was empty,
making it impossible to open the sidebar drawer. Now shows a
hamburger menu icon so logged-out users can access the drawer
(which contains the login prompt).
2026-03-03 21:02:27 -06:00
Alex Gleason c4caefb2d2 Merge branch 'opencode/1772580097' 2026-03-03 18:08:50 -06:00
Alex Gleason f1191299e8 Add Sentry integration with lazy loading and user-configurable DSN
Sentry SDK is loaded via dynamic import() only when a DSN is configured
and error reporting is enabled, keeping it out of the initial bundle.
Users can control error reporting via a toggle and DSN field in
Advanced Settings, with the DSN synced across devices via encrypted
NIP-78 settings. The ErrorBoundary now reports fatal crashes to Sentry
with component stack context, and a beforeSend hook censors nsec
private keys before any data leaves the browser.
2026-03-03 17:25:14 -06:00
Alex Gleason f27ca27d5f Fix crash when p tags have undefined pubkey values
Filter out undefined/empty pubkeys when extracting reply-to authors
from event p tags. Some events have malformed p tags without a pubkey
value, causing nip19.npubEncode to throw 'hex string expected, got
undefined'. Added filtering in both NoteCard (source) and ReplyContext
(defensive guard).
2026-03-03 17:24:17 -06:00
Alex Gleason 71e7d6e211 Fix reaction shown on wrong post: use NIP-25 last e-tag for kind 7 in getParentEventId 2026-03-03 16:24:31 -06:00
Alex Gleason f6a3d6c618 Fix kind 7 reaction e-tag extraction to use last e-tag per NIP-25 2026-03-03 16:03:37 -06:00
Derek Ross b8dc5f53f1 Merge branch 'fix/note-more-menu-actions' into 'main'
Fix note overflow menu: copy naddr/nevent IDs, report modal, mention action

Closes #41, #42, and #43

See merge request soapbox-pub/ditto!39
2026-03-03 16:44:55 -05:00
Derek Ross 003cc21ade Fix NoteMoreMenu: copy naddr/nevent IDs, add report modal (NIP-56), implement mention action
- Copy Event ID now copies naddr1 for addressable events or nevent1 for
  others, instead of raw hex
- Add ReportDialog component with NIP-56 kind 1984 reporting (7 report
  types, optional details textarea, scrollable on small screens)
- Wire report dialog into both NoteMoreMenu (post reports) and
  ProfileMoreMenu (profile reports)
- Mention action opens compose modal with nostr:npub pre-filled
- Fix dialog lifecycle: report/mention state lives in outer component to
  survive menu unmount
2026-03-03 16:31:41 -05:00
Alex Gleason 11070c3d55 Revert FAB scroll-hide behavior — always show FAB
Reverts 6abe9fa and the fabHidden parts of 7f26beb. The FAB is now
always visible when showFAB is true, restoring sticky positioning
inside the center column. Removes IntersectionObserver logic from
Feed.tsx, fabHidden state from LayoutStore, and the useSetFabHidden
hook.
2026-03-03 15:22:57 -06:00
Alex Gleason 32e73eb568 Merge branch 'main' of gitlab.com:soapbox-pub/ditto 2026-03-03 11:50:16 -06:00
Chad Curtis fecaa346c7 Scroll 'More...' menu to middle of list on open 2026-03-03 11:46:54 -06:00
Alex Gleason b067b2da3e fix: render webxdc in compose preview by extracting shared NoteMedia component
The composer preview tab was missing webxdc embeds because it manually
rendered only videos and audio, while webxdc rendering lived exclusively
inside NoteCard. Extract NoteMedia into a shared component and
ImetaEntry/parseImetaMap into a shared utility, then wire them into the
ComposeBox preview with proper imeta tag generation on the mock event.
2026-03-03 11:28:19 -06:00
Derek Ross 16d0bbf650 fix: define click zones for audio cards — artwork plays, info navigates
Artwork area (cover image + play button) plays/pauses audio on click.
Info area (title, description, duration) bubbles up to NoteCard for
navigation to the detail page. Removed blanket stopPropagation that
was preventing all clicks from working.
2026-03-03 12:21:16 -05:00
Chad Curtis 5e5ef57a00 Stop auto-scroll at list limits, clean up interval on unmount 2026-03-03 11:13:36 -06:00
Chad Curtis b3cad7c796 Add scroll carets to SidebarMoreMenu dropdown lists 2026-03-03 11:04:47 -06:00
Mary Kate Fain 974b0fd927 perf: optimize book feed by batch-prefetching and reducing OpenLibrary API calls
- Add useBookSummary hook that fetches only edition data (1 request vs 3)
- Batch-prefetch ISBNs at the feed level with concurrency control (4 at a time)
- Switch InlineBookCard from useBookDetails to useBookSummary
- Increase cache duration from 30min/1hr to 24hr/48hr for book metadata
2026-03-03 10:35:36 -06:00
Mary Kate Fain be276d5083 fix: show back arrow to /books on all viewports and rename header to 'Books'
Remove sidebar:hidden from the back arrow on ISBN pages so it is
always visible, and change the header label from 'Book' to 'Books'.
2026-03-03 10:25:57 -06:00
Mary Kate Fain 94be4b72e3 fix: back arrow on book pages navigates to /books instead of home 2026-03-03 10:25:57 -06:00
Mary Kate Fain 74ba2ba070 feat: add book search bar to Books feed page
Add a search-by-title/author input between the header and feed tabs
that queries OpenLibrary's search API with 300ms debounce. Results
appear in a dropdown with cover thumbnails, titles, authors, and
publish years. Selecting a result navigates to /i/isbn:{isbn} where
users can comment or leave a review.

- New useBookSearch hook with 8-result limit and 5min cache
- Dropdown with skeleton loading, empty state, and outside-click-to-close
- Keyboard support: Enter selects first result, Escape closes
- Clear button to reset the search input
2026-03-03 10:25:57 -06:00
Mary Kate Fain f41c6a4126 feat: enhance Books feed with tabs, truncation, reviews, and comments
- Add Following/Global feed tabs to Books page with sticky tab bar
- Add KindInfoButton linking to Bookstr (bookstr.xyz) for content creation
- Add text truncation with 'Read more' fade (300px max-height, matching NoteCard)
- Include kind 1111 book comments in the feed with 'commented' badge
- Comments on books navigate to the book page instead of event detail
- Add Reviews tab on book detail pages (/i/isbn:*) alongside Comments
- Add review submission form with 5-star rating, spoiler warnings, and edit support
- Add 'Write Review' button in book page action bar and Reviews tab
- Support useFollowList for follows-tab scoped book queries
2026-03-03 10:25:57 -06:00
Mary Kate Fain 4691412444 feat: replace Books page with Nostr book feed using Bookstr NIP protocol
Replace the static OpenLibrary trending books list with a live social
feed of book-related Nostr events. The feed queries kind 31985 (book
reviews/ratings) and kind 1 posts tagged #bookstr or referencing ISBNs,
following the Bookstr NIP-XX protocol.

New files:
- src/lib/bookstr.ts: protocol constants, event parsing, ISBN extraction
- src/hooks/useBookFeed.ts: infinite scroll feed of book events
- src/hooks/useBookDetails.ts: OpenLibrary book metadata by ISBN
- src/components/BookFeedItem.tsx: feed item with inline book card,
  star ratings, spoiler guards, and full social actions
2026-03-03 10:25:57 -06:00
Derek Ross 3eaee4d560 fix: emoji/gif picker hidden behind modal dialogs
Bump z-index from z-50 to z-[200] on PopoverContent, TooltipContent,
and DropdownMenuContent so they render above dialog overlays (z-[150]).
2026-03-03 11:20:09 -05:00
Derek Ross f0ffdda17f fix: eliminate 'Post Details' flash on specialized detail pages and standardize headers
- PostDetailShell accepts optional title prop for kind-aware loading states
- AddrPostDetailPage derives correct title from addr.kind before event loads
- PostDetailPage shows neutral 'Loading...' during fetch instead of 'Post Details'
- Standardize all detail headers to 'X Details' pattern (Track Details, Playlist Details, Episode Details, Trailer Details)
- Fix music detail headers from text-lg to text-xl for consistency
2026-03-03 10:01:19 -05:00
Derek Ross 0c881b9196 Merge branch 'fix/audio-cards-styling' into 'main'
feat: redesign audio feed cards and add podcast detail pages

See merge request soapbox-pub/ditto!34
2026-03-03 09:53:03 -05:00
Derek Ross b1dcb0af7f feat: redesign audio feed cards and add podcast detail pages
- Redesign music/podcast feed cards with vertical layout, full-width artwork, play button overlays, and spacious info sections
- Add PodcastDetailContent with play/pause hero matching MusicDetailContent (artwork, reactions, comments, zap stats)
- Route podcast episodes (kind 30054) and trailers (kind 30055) to dedicated detail view
2026-03-03 09:47:53 -05:00
Derek Ross a15a56b717 Merge branch 'fix/events-feed-sizing' into 'main'
fix: redesign events feed cards and detail page

See merge request soapbox-pub/ditto!33
2026-03-03 09:37:39 -05:00
Derek Ross d8923e9e85 fix: redesign events feed cards and detail page for consistent sizing and themed styling
- Compact feed cards use vertical layout with capped 180px cover image, participant avatars, truncated description, and location pill
- Event detail page uses standard top bar matching other pages
- Date/location/links use sidebar-style rounded pills (bg-background/85)
- RSVP section uses matching rounded container with pill buttons
- Zap and share icons moved inline with organizer row
2026-03-03 09:35:00 -05:00
Derek Ross 5c159477be fix: close minimized player immediately on X without stop/cancel confirmation 2026-03-03 09:05:05 -05:00
Chad Curtis 24d1291031 fix: remove unused imports and stale eslint-disable directive 2026-03-03 07:34:34 -06:00
Chad Curtis 5168fd8553 Show nip05 checkmark only on profile page 2026-03-03 07:33:05 -06:00
Chad Curtis 7aaa3e2587 Add interactive profile editor with live card, image crop, and onboarding integration 2026-03-03 07:31:06 -06:00
Chad Curtis 96fe271a65 fix: remove events from onboarding content picker, use Calendar icon 2026-03-03 06:39:43 -06:00
Chad Curtis c8ba21c412 fix: first tap on mobile reveals controls without toggling play/pause 2026-03-03 06:32:10 -06:00
Chad Curtis efd7c84756 fix: keep volume slider open while focused/dragging 2026-03-03 06:31:29 -06:00
Chad Curtis dc7f3fa568 Reapply "fix: use usePlayerControls in LiveStreamPlayer, mirror VideoPlayer click/controls logic"
This reverts commit 340fdfda04.
2026-03-03 06:30:09 -06:00
Chad Curtis 340fdfda04 Revert "fix: use usePlayerControls in LiveStreamPlayer, mirror VideoPlayer click/controls logic"
This reverts commit 532dccc599.
2026-03-03 06:29:27 -06:00
Chad Curtis 532dccc599 fix: use usePlayerControls in LiveStreamPlayer, mirror VideoPlayer click/controls logic 2026-03-03 06:27:49 -06:00
Chad Curtis f102f5374a fix: align LiveStreamPlayer volume controls with VideoPlayer 2026-03-03 06:23:09 -06:00
Chad Curtis 600841705f fix: populate OS media controls with event image, title, and artist at all player call sites 2026-03-03 06:13:47 -06:00
Chad Curtis be89f36326 feat: sync native status bar icons and background color with active theme on Android/iOS 2026-03-03 06:03:37 -06:00